Чтобы сообщить об ошибке, нажмите Ctrl + Enter

		

		

Генератор форм: автоматическое создание кода элементов управляемой формы 1С

Цель разработки

Создать внешнюю обработку для платформы «1С:Предприятие 8.3», которая сравнивает исходную и визуально доработанную формы, а затем автоматически формирует программный код создания новых элементов и их обработчиков событий.

Механизм сокращает время на написание однотипного кода, уменьшает количество ошибок и снижает зависимость расширения от изменений формы основной конфигурации при обновлении на новые версии.

Идея решения

Разработчик проектирует интерфейс привычным способом — в визуальном редакторе форм конфигуратора. Обработка сравнивает XML-представления исходной и измененной форм, находит добавленные элементы и преобразует их структуру и свойства в код на встроенном языке 1С.

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

Макет формы
Сравнение XML
Код 1С

Интерфейс обработки

Перед запуском генерации пользователь указывает:

  • каталог XML-выгрузки эталонного расширения;
  • каталог XML-выгрузки макетного расширения;
  • форму, которую необходимо сравнить;
  • способ выдачи результата.

Результат можно получить в виде текста для ручной вставки в модуль либо как дополненное исходное расширение — XML-выгрузку с измененным модулем формы.

До начала сравнения обработка проверяет существование каталогов и файлов выгрузки, наличие выбранной формы в обеих версиях, соответствие форм друг другу и отсутствие критических ошибок чтения XML.

Чтение и сравнение XML

Обработка находит XML-файлы выбранной формы, учитывает пространства имен, читает структуру элементов и их свойства, а также сохраняет порядок элементов внутри родительских групп.

При сравнении двух вариантов формы выделяется дельта:

  • новые элементы и их родители;
  • дочерние элементы и вложенность;
  • зависимости между новыми элементами;
  • ссылки на существующие элементы формы;
  • изменения свойств существующих элементов.

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

Поддерживаемые элементы

Первая версия генератора преобразует в код наиболее востребованные элементы управляемой формы:

  • обычные группы и группы страниц;
  • страницы;
  • поля ввода, флажка, переключателя и надписи;
  • таблицы формы и их поля;
  • декорации;
  • кнопки формы и команды.

Свойства элементов

Для каждого поддерживаемого элемента обработка считывает и переносит значимые настройки:

  • имя, тип и родителя;
  • заголовок и вид;
  • путь к данным;
  • видимость и доступность;
  • режим «Только просмотр»;
  • положение заголовка;
  • ширину, высоту и растягивание;
  • связь с командой;
  • имя обработчика события.

Генерация кода

На основе найденных отличий обработка формирует синтаксически корректный код встроенного языка 1С. Код разделяется на логические процедуры, получает читаемое форматирование и понятные имена временных переменных.

// Код сформирован автоматически обработкой «Генератор форм»
//
// 1. Создание команд формы.
// 2. Создание родительских групп.
// 3. Создание вложенных элементов.
// 4. Настройка свойств.
// 5. Назначение обработчиков событий.

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

Результат

«Генератор форм» — внешняя обработка, которая формирует программный код создания новых элементов управляемой формы.

Как устроена и выглядит: Работает на 2х расширениях. Эталонном: в которое будет вноситься код и которое будет считаться бланком. Макетном, созданным на основе эталона и отредактированном в визуальном редакторе форм 1С.

Интерфейс обработки «Генератор форм» в 1С
Интерфейс обработки «Генератор форм» в 1С.

Для использования генератора выполните следующие действия:

  1. Выгрузите в файлы расширение, которое планируется дорабатывать. Структура объекта, реквизиты и табличные части для привязки элементов формы уже должны быть подготовлены. Это эталонное расширение.
  2. Создайте копию эталонного расширения, внесите нужные изменения в визуальном редакторе форм и выгрузите макетное расширение в файлы.
  3. Запустите обработку в любой подходящей конфигурации.
  4. Укажите каталоги эталонной и макетной XML-выгрузок.
  5. Дождитесь чтения структуры и формирования списка общих форм.
  6. Выберите форму и нажмите «Сгенерировать код».
  7. Проверьте результат и вставьте код в разрабатываемое расширение.

Файлы результата и собранная обработка доступны в блоке «Материалы».

Критерии успешности

  • обе XML-выгрузки открываются без ошибок;
  • пользователь может выбрать общую форму;
  • все добавленные элементы поддерживаемых типов найдены;
  • правильно определены родители и вложенность;
  • элементы создаются в корректном порядке;
  • код проходит синтаксический контроль 1С;
  • тестовая форма открывается без ошибок;
  • программно созданная форма визуально соответствует макету.

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

Условия и ограничения

Перед началом работы пользователь самостоятельно подготавливает эталонное и макетное расширения в конфигураторе и вручную выгружает их в XML.

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

Заключение

«Генератор форм» объединяет удобство визуального проектирования с надежностью программного создания элементов. Разработчик собирает интерфейс стандартными средствами конфигуратора, а обработка берет на себя анализ XML, восстановление связей и подготовку повторяемого кода.

Такой подход ускоряет разработку расширений, уменьшает объем рутинной работы и помогает сохранить доработки при изменениях типовой формы после обновления основной конфигурации.

Материалы

Скачать материалы и обработку «Генератор форм»

Иванов Кирилл

Автор статьи

Иванов Кирилл

Инженер-программист