Как править обычные формы 1С через MCP-1C

обычные формыform_editРасширенная редакция

form_edit для Form.bin: переименование, перемещение, копирование и удаление элементов, dry_run и резервная копия. Порядок проверки в Конфигураторе и тестовой базе.

Обычные формы продолжают использоваться в старых и отраслевых решениях 1С. Их описание хранится в бинарном Form.bin, поэтому обычная текстовая правка XML здесь не подходит. С v2.40.1 Расширенная и Профессиональная редакции MCP-1C умеют выполнять ограниченный набор изменений обычной формы через form_edit.

Инструмент работает прямо в каталоге выгрузки, подключённой через --dump, и требует действующей подписки уровня Расширенной. Управляемые формы в Form.xml он не изменяет. Это редактор исходного артефакта; загрузку и проверку в 1С выполняют отдельно. Контракт описан в справочнике form_edit, появление — в релизах.

В статье: подготовка, действия, пробный вызов, проверка правки.

Сначала найдите элемент и сохраните исходное состояние

Работайте с отдельной рабочей выгрузкой под контролем версий. Уточните технические имена объекта, формы и элемента через code_read с action: "form_structure". Для предварительного просмотра расположения можно использовать form_view.

Перед изменением элемента найдите обращения к нему в модуле формы и соседнем коде. Имя элемента и имя реквизита могут выглядеть одинаково, но обозначать разные сущности. Это особенно важно при переименовании и удалении.

Выберите действие по задаче

Действие Что делает и что учесть
rename_element Меняет имя и ссылки ЭлементыФормы.Имя в модуле; голые упоминания не переписывает
move_element Меняет рамку; у вложенного элемента координаты отсчитываются от контейнера
delete_element Удаляет элемент с вложенными; обращения в BSL остаются
duplicate_element Копирует существующий элемент на то же место; обработчики общие, копию нужно переместить
add_element Берёт элемент нужного класса из другой формы той же выгрузки; переносятся надпись и имена обработчиков донора
create_form Создаёт копию существующей формы; первую форму объекта так создать нельзя

Не выбирайте копирование как способ получить полностью независимое поведение без проверки привязок и обработчиков. Копия элемента может редактировать те же данные, а имя обработчика из формы-донора ещё не означает, что нужная процедура есть в целевой форме.

Начните с dry_run

Пример аргументов form_edit для переименования условного элемента:

{
  "action": "rename_element",
  "object_type": "Документ",
  "object_name": "РеализацияТоваровУслуг",
  "form_name": "ФормаДокумента",
  "element_name": "ПолеВвода1",
  "new_name": "ПолеСуммы",
  "dry_run": true
}

Подставьте имена из своей выгрузки. Пробный вызов позволяет посмотреть результат без записи. После проверки аргументов выполните нужное изменение без dry_run: true и сохраните ответ.

При записи исходный файл сохраняется рядом под именем со временем правки; ответ содержит backup_path. Запись выполняется через временный файл. Резервная копия помогает восстановить исходник, но не заменяет понятный diff и контроль версий всей доработки.

Проверьте исходник и работающую форму

Повторно запросите структуру и убедитесь, что элемент имеет нужное имя, положение или состав. Проверьте ссылки, которые инструмент намеренно не менял: после удаления BSL может продолжать обращаться к отсутствующему элементу. При добавлении из другой формы разберите обработчики и привязки.

Затем загрузите изменение в тестовую базу обычным способом. Пакетный /LoadConfigFromFiles сам по себе не подтверждает корректность содержимого формы: откройте её в Конфигураторе, затем в приложении. Проверьте ввод, события, сохранение и повторное открытие, а для копии — независимость или общность поведения согласно задаче.

Если результат не подходит, восстановите исходники из сохранённой версии по принятому процессу и повторите проверку. Не переносите непроверенный Form.bin в рабочую базу только потому, что операция записи завершилась успешно.

Чтение бинарного описания разобрано в статье об обычных формах. Здесь следующий шаг — управляемая правка с явной проверкой поведения.