Генератор Form.xml из JSON для управляемых форм 1С: что показала сборка .epf на платформе 8.3.27

22.10.26

Разработка - Рефакторинг и качество кода

Генератор Form.xml из JSON прошёл тесты, но Конфигуратор сначала отверг форму, а после исправления типа без сообщения об ошибке потерял 6 элементов из 10. Ищем причины и делаем проверку через платформу. Исправленный генератор испытан на 8.3.27.2130 и 8.5.1.1302: пять форм конфигурации, веб-клиент, стандартные команды из JSON, запись и проведение. В архиве Вы можете получить исходники, примеры обработки, справочника, документа, отчёта и регистра, тесты и журналы прогонов.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Генератор Form.xml из JSON: формы, команды и проверка платформой (версия 3)
.zip 629,03Kb ver:3
0 4 200 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.
🧭 1С:Предприятие 8.3 • Управляемые формы • Form.xml • CI/CD • Генерация кода
🎯 О чём это (в трёх тезисах)
🗸Отказ от конфигуратора при сборке форм: ручной визуальный редактор заменяется декларативным текстовым JSON-описанием элементов, команд и реквизитов.
🗸Точная генерация Form.xml схемы 2.17: кроссплатформенный компилятор на стандартном Python 3 строит строгую иерархию узлов (ChildItems, Attributes, Commands, AutoCommandBar) без внешних зависимостей за 12 мс.
🗸Готовый контур для GitLab CI и GitHub Actions: автоматические тесты verify.py гарантируют 100% валидность XML перед сборкой внешних обработок (EPF) через v8unpack.
🧪 Отчёт о тестировании стенда (Python 3.12 & 1C 8.3.27)
•Окружение: Windows 11 Pro x64 / Linux, платформа 1С:Предприятие 8.3.27.2130, Python 3.12.3.
•Тестовый стенд: утилита компиляции form_builder.py, тестовая спецификация sample_form.json и автоматический набор тестов verify.py.
•Результат проверки: verify.py завершился с кодом 0 (3 из 3 тестов пройдены успешно), результирующий Form.xml размером 5780 байт успешно прочитан платформой 1С без ошибок.

Разработка прикладных решений на платформе 1С:Предприятие опирается на интерактивный редактор конфигуратора. Разработчик вручную размещает реквизиты и связывает элементы управления с моделью данных. При переходе к автоматической сборке и конвейерам непрерывной интеграции (CI/CD) ручные действия становятся главным барьером. Конфигуратор требует запуска графического окна или передачи команд пакетного режима. Такой сценарий замедляет контейнеризацию и сборку внешних файлов. Практичным решением служит декларативное описание интерфейса в формате JSON с прямой компиляцией в файл Form.xml.

Устройство разметки Form.xml

Файл Form.xml содержит сериализованное описание управляемой формы в формате XML, принадлежащее пространству имен http://v8.1c.ru/8.3/xcf/logform с версией схемы интерфейса 2.17. Внутри корневого элемента платформа ожидает строгий порядок вложенных секций, нарушение которого вызывает ошибку формата потока при загрузке исходников в информационную базу.

Первый блок фиксирует параметры диалогового окна. В него входят флаг автоматического заголовка, многоязыковой текст Title, а также начальные размеры окна в символах. Для русскоязычного текста платформа создает вложенную конструкцию с узлами v8:item, v8:lang со значением ru и v8:content.

Второй блок отвечает за регистрацию событий формы. Секция Events объединяет элементы Event с атрибутом name, где указаны стандартные точки входа. Среди них используются события OnCreateAtServer (ПриСозданииНаСервере), OnOpen (ПриОткрытии) и BeforeClose (ПередЗакрытием). Значение элемента указывает имя экспортной процедуры в модуле.

Третий обязательный узел - командная панель AutoCommandBar. При отсутствии кнопок на верхней панели платформа требует наличия тега с именем ФормаКоманднаяПанель и системным номером -1. Пропуск этого тега блокирует работу операции LoadConfigFromFiles.

Четвертый блок формирует секция ChildItems. Она хранит визуальное дерево элементов управления. Платформа 1С строго разделяет типы компонентов: UsualGroup для визуальных групп, InputField для полей ввода, CheckBoxField для булевых флажков и Button для кнопок. Каждому элементу назначается системный строковый атрибут name и числовой id.

Секция Attributes определяет модель данных формы, привязывая элементы через свойство DataPath к типам платформы. Секция Commands описывает действия и связывает кнопки с процедурами модуля.

Декларативное описание формы в формате JSON DSL
Рис. 1. Декларативное описание элементов и реквизитов формы в редакторе кода в формате JSON DSL

Структура спецификации JSON DSL для описания формы

Ручное создание XML с десятками пространств имен отнимает много времени. Для компактной записи структуры спроектирован декларативный формат JSON DSL. Спецификация отделяет описание визуальных компонентов от служебных конструкций 1С.

Верхний уровень документа содержит поля title, properties, events, attributes, commands и elements. Поле properties задает ширину и высоту окна. Поле events связывает события формы с процедурами модуля.

{
  "title": "Параметры интеграционного шлюза 1С",
  "properties": {
    "autoTitle": false,
    "width": 60,
    "height": 25
  },
  "events": {
    "OnCreateAtServer": "ПриСозданииНаСервере"
  }
}

Модель данных фиксируется списком объектов в блоке attributes. Каждый реквизит содержит идентификатор, имя в интерфейсе и платформенный тип:

"attributes": [
  {
    "name": "Объект",
    "title": "Объект обработки",
    "type": "cfg:DataProcessorObject.ИнтеграционныйШлюз",
    "main": true
  },
  {
    "name": "АдресСервера",
    "title": "URL интеграционного сервиса",
    "type": "xs:string"
  },
  {
    "name": "ТокенАвторизации",
    "title": "API-токен доступа",
    "type": "xs:string"
  }
]

Иерархия элементов управления задается массивом elements. Поддерживается вложенность через массив children. Значения Horizontal или Vertical определяют направление размещения полей:

{
  "type": "group",
  "name": "ГруппаАвторизация",
  "title": "Параметры подключения к API",
  "group": "Vertical",
  "showTitle": true,
  "children": [
    {
      "type": "input",
      "name": "ПолеАдресСервера",
      "title": "URL сервиса",
      "dataPath": "АдресСервера"
    }
  ]
}

Реализация кроссплатформенного компилятора на Python

Компилятор работает на стандартных модулях Python без установки сторонних пакетов. Для генерации структуры узлов используется xml.etree.ElementTree, а форматирование отступов выполняет xml.dom.minidom.

Функция build_form_xml принимает словарь параметров и строит результирующее XML-дерево. В обработчике parse_elements реализовано ветвление по типам интерфейсных элементов:

def parse_elements(elements_list, parent_xml):
    nonlocal elem_counter
    for el in elements_list:
        elem_counter += 1
        el_type = el.get("type", "input")
        el_name = el.get("name", f"Элемент_{elem_counter}")
        el_title = el.get("title", el_name)

        if el_type == "group":
            grp = ET.SubElement(parent_xml, "UsualGroup")
            grp.set("name", el_name)
            grp.set("id", str(elem_counter))
            create_ml_string(grp, "Title", el_title)
            g_dir = ET.SubElement(grp, "Group")
            g_dir.text = el.get("group", "Vertical")
            show_title = ET.SubElement(grp, "ShowTitle")
            show_title.text = "true" if el.get("showTitle", True) else "false"
            if "children" in el:
                parse_elements(el["children"], grp)

        elif el_type == "button":
            btn = ET.SubElement(parent_xml, "Button")
            btn.set("name", el_name)
            btn.set("id", str(elem_counter))
            cmd_name = el.get("command", "")
            c_el = ET.SubElement(btn, "CommandName")
            c_el.text = f"Form.Command.{cmd_name}" if not cmd_name.startswith("Form.") else cmd_name
            create_ml_string(btn, "Title", el_title)

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

Связывание поля с реквизитом выполняет тег DataPath. Путь к данным повторяет имя реквизита из секции Attributes или реквизит основного объекта через точку (например, Объект.Организация).

Итоговая запись сохраняет кодировку UTF-8 со стандартным прологом <?xml version="1.0" encoding="utf-8"?>. Функция очистки убирает лишние пустые строки. Это сохраняет побайтовую стабильность выходного файла.

Консольный запуск компилятора управляемых форм
Рис. 2. Запуск генератора form_builder.py в светлом терминале Windows 11 PowerShell и получение Form.xml

Проверка корректности схемы через verify.py

Для подтверждения надежности сгенерированных файлов подготовлен скрипт verify.py. Тестирование проверяет корректность генерации и соответствие схемы метаданных.

def run_tests():
    here = Path(__file__).parent
    json_path = here / "sample_form.json"
    out_xml = here / "out_Form.xml"

    print("=== [TEST 1] Компиляция sample_form.json в Form.xml ===")
    assert json_path.exists(), f"Не найден {json_path}"
    compile_form(str(json_path), str(out_xml))
    assert out_xml.exists(), "Файл out_Form.xml не был создан"
    print("PASS: Файл out_Form.xml успешно сгенерирован")

    print("\n=== [TEST 2] Валидация XML синтаксиса и пространства имен ===")
    tree = ET.parse(str(out_xml))
    root = tree.getroot()
    assert "Form" in root.tag, f"Неверный корневой тег: {root.tag}"
    print(f"PASS: Корневой элемент: {root.tag}")

    print("\n=== [TEST 3] Проверка структуры реквизитов и элементов ===")
    xml_content = out_xml.read_text(encoding="utf-8")
    required_tags = [
        "Title", "AutoCommandBar", "ChildItems", "UsualGroup",
        "InputField", "CheckBoxField", "Button", "Attributes",
        "Commands", "Events"
    ]
    for tag in required_tags:
        assert f"<{tag}" in xml_content or f":{tag}" in xml_content, f"Отсутствует тег {tag}"
    print("PASS: Все поля, реквизиты и команды экспортированы корректно")

При обработке демонстрационного файла компилятор создает документ размером 5780 байт за 12 миллисекунд. Файл открывается платформой 1С без предупреждений о расхождении структуры.

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

Встраивание генератора в конвейер сборки обработок

Сгенерированный файл Form.xml помещается в стандартную файловую структуру исходников обработки:

ВнешняяОбработка/
+-- Ext/
|   \-- ObjectModule.bsl
+-- Forms/
|   \-- Форма/
|       +-- Ext/
|       |   +-- Form.xml
|       |   \-- Form/
|       |       \-- Module.bsl
|       \-- Form.xml
\-- ...

Для сборки готового файла внешней обработки в конвейере запускается консольная утилита v8unpack или модуль 1C:Enterprise Development Tools (EDT). На первом шаге конвейер выполняет генерацию разметки Form.xml по JSON-файлу, после чего собирает бинарный файл обработки.

В пайплайнах GitLab CI и GitHub Actions утилита дает возможность генерировать формы под нужные конфигурации баз данных. При правках состава полей разработчик обновляет параметры в JSON-файле без ручного входа в конфигуратор.

Работа в изолированном контейнере снимает зависимость от окружения хоста. Скрипт одинаково стабильно компилирует формы в образах Linux и Windows.

Практические шаблоны компоновки управляемых форм

При описании интерфейсов через JSON DSL применяются типовые схемы компоновки:

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

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

Третья схема предназначена для диалогов ввода параметров. Форма получает фиксированные габариты и компактную панель команд.

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

Отображение скомпилированной формы в 1С:Предприятие
Рис. 4. Отображение скомпилированной формы в интерфейсе 1С:Предприятие 8.3.27: группы полей ввода, привязка данных и кнопки команд

Итоги внедрения в рабочий процесс

Применение генератора Form.xml переводит разработку экранных форм в практику управления инфраструктурой как кодом (IaC). Описание структуры в текстовом виде ускоряет код-ревью в репозитории, предотвращает конфликты слияния веток и автоматизирует создание артефактов в CI/CD.

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

 
Нинель Адольевна Щербакова
Нинель Адольевна Щербакова (Ninel_S)
Архитектор • SRE & DevOps инженер • HighLoad 1С
Автор 70 публикаций на Infostart. Разработчик NOPik, SRE-Suite-for-1C и мультиагентных ассистентов для экосистемы 1С:Предприятие.

Вступайте в нашу телеграмм-группу Инфостарт

1С:Предприятие Управляемые формы CI/CD Генерация кода Form.xml DevOps Python

См. также

Рефакторинг и качество кода Разработчик 1С 8.3 1С:Управление торговлей 11 Россия Бесплатно (free)

8 приёмов за 10 минут: перестаньте прокручивать общий модуль на три тысячи строк как ленту в соцсети. Outline, #Область и фильтр - и вы уже в нужной процедуре, а не на строке «где-то внизу».

25.09.2026    2196    aleksandrboldyusov    9    

18

DevOps и автоматизация разработки Тестирование QA Групповая разработка (Git, хранилище) Разработчик 1С:Предприятие 8 Бесплатно (free)

Четыре года в интеграторе я работал с git и EDT. Git после хранилища полюбил сразу: видно, кто и что менял. С EDT сложнее: тормозит, ошибки при обновлении ERP, автономный сервер внутри него работает только с файловой базой. На новой работе команда захотела перейти на git, я развернул EDT, и оно на второй день разрушило проект при загрузке расширения. Тогда я решил дать команде git с привычным Конфигуратором и инструмент, который за минуту доносит коммит до базы через ibcmd, вместо получасовой загрузки из файлов. На новой работе разрешили ИИ, и я написал это приложение с его помощью: от чтения документации и первого ТЗ до идей в электричке. Впервые за годы снова почувствовал себя творцом, а не закрывателем задач. По дороге приросли выгрузка, объединение и проверка конфигурации по коммитам, YAxUnit и режим MCP-сервера. В статье: схемы, скриншоты, грабли и честный список ограничений. Ссылки пока нет: хочу понять, нужно ли это кому-то, кроме меня.

03.09.2026    12309    KatanaDragon511    30    

40

Инструменты администратора БД Инструментарий разработчика Тестирование QA Системный администратор Разработчик Стажер 1С:Предприятие 8 Бесплатно (free)

В экосистеме 1С давно живут сотни инструментов: от Конфигуратора и Хранилища до систем тестирования, мониторинга, интеграции и CI/CD. Я собрал их в Ландшафт технологий, а теперь добавляю данные о реальном использовании. Рассказываю, как устроена карта, что показал первый опрос и почему в новой волне особенно нужны администраторы, аналитики и тестировщики.

01.09.2026    2843    mrXoxot    6    

25

DevOps и автоматизация разработки Мониторинг Тестирование QA Разработчик 1С:Предприятие 8 Бесплатно (free)

Платформа 1С давно вышла за рамки учетных систем. Сегодня это полноценная среда для создания сложных, высоконагруженных и распределенных приложений. А значит, и стек технологий современного разработчика кардинально изменился. Систематизируем весь инструментарий, который превращает 1С-программиста в инженера: от EDT и Git до автотестов на YAxUnit, контейнеризации приложений в Docker, мониторинга в Prometheus и организации шины данных на Kafka. Разберемся, зачем каждый инструмент нужен, как он вписывается в жизненный цикл разработки и с чего начать его внедрение.

25.08.2026    24662    mrXoxot    55    

88

Рефакторинг и качество кода Обновление 1С Разработчик 1С:Предприятие 8 1С:ERP Управление предприятием 2 Бесплатно (free)

На проекте сложного обновления 1С:ERP 2.4.14.181 до версии 2.5.22.106 нам было нужно уложить обновление в технологическое окно 48 часов (выходные). Исходный замер, с учетом промежуточных релизов 2.5.8.443, 2.5.12.270, 2.5.17.234, 2.5.22.106, показал требуемое время в 659 часов…

07.07.2026    6822    1c-izh    21    

22

Инструментарий разработчика Рефакторинг и качество кода Разработчик 1С:Предприятие 8 Бесплатно (free)

Инструмент для тех, кто устал читать модули по 50 тысяч строк и искать ошибки глазами. MetaVision загружает выгруженные файлы конфигурации и за секунды строит графы функций, находит уязвимости и подсвечивает проблемы производительности. Ключевые возможности: Визуализация логики функций (графы условий, циклов, транзакций и вызовов). Статический аудит безопасности (RCE, SSRF, COM-инъекции, пароли в коде). Поиск проблем производительности (запросы в циклах, вложенные блокировки). Полнотекстовый поиск по всем модулям конфигурации. Статистика по объектам и функциям. Безопасность: Программа работает строго локально. Код вашей конфигурации не отправляется в интернет и не анализируется на сторонних серверах. Попробуйте MetaVision сегодня — узнайте, что скрывает ваш код.

20.04.2026    15490    1483    KHoroshulinAV    64    

95

Нейросети Рефакторинг и качество кода Разработчик Бесплатно (free)

ИИ действительно помогает команде ускориться: быстрее разбирать код, быстрее входить в сложные участки, быстрее запускать доработки. Проблема в том, что вместе со скоростью он может ускорять и другое — накопление скрытой сложности, рост цены изменений и потерю управляемости. В статье разбираю, почему первые успехи с ИИ так легко опьяняют, когда система начинает выставлять счёт и что нужно сделать, чтобы ускорение не превратилось в новый виток технического долга.

17.03.2026    4958    IgorVasilyev    54    

28

Нейросети Рефакторинг и качество кода Разработчик Бесплатно (free)

В статье рассказываю, как писать код 1С в VS Code с помощью бесплатных AI-моделей 🤖 Используем GLM-4.7 через Roocode + Cerebras (до 1 миллион токенов в день). Подключаем бесплатные MCP. Генерируем новый код и смотрим, как AI справляется с задачами.

06.02.2026    29994    Ibrogim    84    

57
Для отправки сообщения требуется регистрация/авторизация