Формы 1С от нейросети: 19 из 28 с ошибками, три формы платформа загрузила молча с потерями
Разработка - Инструментарий разработчика
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Платформа при загрузке Form.xml проверяет меньше, чем кажется. Пути к данным, имена команд и разбор XML она отклоняет, а повторы имён и id, неизвестные виды элементов и дважды назначенные события принимает молча или отбрасывает. Инструмент, который читает файл до загрузки, назвал все заложенные дефекты и все ошибки моделей, которые видны в файле формы. Вызовы с неверными параметрами внутри BSL ловит /CheckModules.
- Короткий запрос без образца дал чужой формат во всех семи формах; полный запрос с образцом и реквизитами - ошибки в 12 формах из 21.
- Код возврата загрузки ничего не доказывает: три формы прошли загрузку и обе проверки без сообщений, потеряв по 4 элемента, а обратная выгрузка показала потери.
- form_check нашёл ошибки в 19 формах из 28, платформа сообщила о проблеме в 17: три формы остались без единого сообщения платформы, а в одной форме платформа нашла неверный вызов внутри BSL, которого у form_check нет.
- Находки можно возвращать модели: 7 форм из 12 для запроса B исправились за одну-три попытки, ответ модели занимал примерно от 9 до 94 секунд.
Форму от нейросети принимает только последовательность из form_check, платформы с проверкой модулей и обработчиков и сравнения с обратной выгрузкой; загрузка с кодом 0 приёмкой не считается. «Чисто» в этой статье значит одно: форма прошла перечисленные технические проверки. Работа в клиенте, нажатие кнопок и выполнение заданий T1–T7 этим опытом не подтверждены.
Для кого: разработчикам и ведущим разработчикам 1С, которые получают формы от нейросети, скрипта или подрядчика и решают, как их принимать.
Статьи про генерацию форм 1С нейросетью обещают рабочий интерфейс за минуты и советуют вставить ответ модели в конфигурацию. Я попросила три модели написать 28 управляемых форм для «Нано-УТ 2.0» по текстовому описанию, загрузила каждую форму в платформу 8.3.27 и сверила результат с инструментом form_check.py, который читает Form.xml до загрузки. Для сравнения заложила в рабочую форму 28 вариантов с заложенными дефектами и тоже загрузила их в платформу: 27 вариантов с одним дефектом и один составной, в котором четыре процедуры занимают имена методов формы.
Что проверяла и на чём
Конфигурация «Нано-УТ 2.0» - учебная торговая конфигурация с 68 формами (42 у документов, 15 у справочников, 10 у отчётов) и одной общей формой. Я взяла её выгрузку из репозитория (коммит «Исходная выгрузка»), положила в каталог вне OneDrive и каждый раз работала с копией.
Задания покрывают то, что обычно просят у модели: форма элемента справочника с динамическим списком регистра (T1), документ с таблицей и пересчётом сумм (T2, T3, T7), справочник с проверкой реквизита (T4), форма списка (T5), общая форма с таблицей значений и запросом (T6). Тексты заданий лежат в архиве-компаньоне, prompts/tasks.md.
Для каждой формы я делала одно и то же. Ответ модели ставился в копию выгрузки как новая форма: файл метаданных формы, Ext/Form.xml, Ext/Form/Module.bsl, строка <Form> в ChildObjects владельца (для общей формы - в Configuration.xml). Дальше form_check.py по этой форме, затем новая файловая база, /LoadConfigFromFiles, /CheckModules -ThinClient -Server -ExternalConnection, /CheckConfig -IncorrectReferences -HandlersExistence -EmptyHandlers -ThinClient -Server -ExternalConnection и /DumpConfigToFiles в отдельный каталог. Выгруженный обратно Form.xml сравнивался с исходным: что платформа оставила, а что отбросила.
Последний шаг появился после прошлой моей попытки собирать Form.xml скриптом из JSON: тогда часть элементов терялась при загрузке без сообщения. Поэтому результат загрузки здесь проверяется обратной выгрузкой, код возврата в расчёт не идёт.
Два запроса к моделям
Запрос A повторяет совет из статей про генерацию форм: описать форму словами и попросить макет и модуль.
Запрос B - то же описание плюс то, что есть у разработчика под рукой: перечень реквизитов владельца формы и связанных объектов с типами (его собирает gen_forms.py из выгрузки), образец рабочей формы той же конфигурации (Form.xml и Module.bsl формы «Заказ клиента») и требования: имена и типы брать только из метаданных, у каждого элемента свои name и id, каждому обработчику и команде соответствует процедура. Запрос B занимает 4-6 тысяч токенов, запрос A около 200.
Модели: deepseek/deepseek-chat (запросы A и B), openai/gpt-4.1-mini и anthropic/claude-haiku-4.5 (запрос B). Получилось четыре набора по семь форм. Все 73 ответа опыта, с исправлениями, обошлись в 0,39 доллара.
Что вернули модели
На запрос A пришло семь ответов, и все в чужом формате. Корневой элемент Form стоит в пространстве имён http://v8.1c.ru/8.2/managed-application/form, внутри FormAttribute, FormItems, FormGroup, у колонок dataPath="@Номенклатура". Это не формат выгрузки 8.3, и до платформы такие файлы доходить не должны.
На запрос B пришло 21 ответ в нужном формате. В 9 из них нет находок. В остальных 12 форм_check нашёл ошибки такого рода (форма может попасть в несколько строк):
| Ошибка модели | Код | Форм из 21 | Пример |
|---|---|---|---|
| Путь к данным указывает не на реквизит формы или объекта | F01, F02 | 6 | Объект.Т товары.Номенклатура; Продажи.Контрагент у таблицы значений без колонок; Период вместо Цены.Период |
| Выдуманный вид элемента | F18 | 3 | DynamicList, ListField, SearchStringField |
| Неизвестный тип реквизита | F17 | 3 | xs:table, ent:InformationRegisterRecordList.ЦеныНоменклатуры |
| Событие, которого нет у формы или элемента | F19 | 2 | OnCreateAtClient и OnChange у формы |
| Событие назначено элементу дважды | F21 | 1 | два OnChange на таблице и на колонках |
| Повтор id | F08 | 1 | у кнопки командной панели и у строки поиска id=1 |
| Файл не читается как XML | F16 | 1 | закрывающий тег ValueSet вместо TypeSet |
| Процедура занимает имя метода формы | F22 | 1 | Функция ПроверитьЗаполнение() |
В двух формах платформа нашла ошибки в самом BSL, которых инструмент не ищет: вызов ПроверитьИНН() без параметра и вызов несуществующей процедуры ЗакрытьФорму().
Что ответила платформа
Платформа отвечает на форму по-разному. Загрузка отклонена. Загрузка прошла, а /CheckModules или /CheckConfig нашли ошибку. Загрузка прошла с предупреждением. Загрузка прошла молча, но часть формы потеряна. Всё чисто. Сводка по первым ответам:
| Модель и запрос | Форм | form_check: есть находки | Загрузка отклонена | Загружена, проверка нашла ошибки | Загружена без ошибок, элементы потеряны или предупреждение | Чисто |
|---|---|---|---|---|---|---|
| deepseek-chat, A | 7 | 7 | 1 | 6 | 0 | 0 |
| deepseek-chat, B | 7 | 5 | 2 | 1 | 2 | 2 |
| gpt-4.1-mini, B | 7 | 5 | 3 | 2 | 1 | 1 |
| claude-haiku-4.5, B | 7 | 2 | 1 | 0 | 1 | 5 |
| Всего | 28 | 19 | 7 | 9 | 4 | 8 |
Из шести форм A, которые платформа загрузила, обратная выгрузка вернула в каждом случае один и тот же файл в 1021 байт: пустая форма, командная панель без имени, нет ни одного реквизита. Платформа приняла чужой формат без сообщения, а ошибки появились только в проверке модулей, например Переменная не определена (Объект): у пустой формы реквизита Объект нет. Седьмая форма A отклонена: у неё версия формата 2.1, а у уже загруженных файлов 2.20.
Из 21 формы B отклонено 6. Сообщения короткие: Неверный путь к данным: "Объект.Т товары.Номенклатура" называет путь, а Исключение XDTO произошло при чтении файла для xs:table и ent:... называет только файл. Выдуманные типы платформа вообще не поясняет.
Модели расходятся. Claude Haiku 4.5 при полном запросе дал 5 чистых форм из 7, GPT-4.1 mini одну, DeepSeek две. Семи форм на модель мало для рейтинга моделей, зато видно главное: чистая форма с первого ответа не гарантирована даже при полном запросе.
Форма загружена, элементов нет
Форма T5 от Claude Haiku 4.5 - список складов со строкой поиска и командой «Остатки». Ответ содержит пять элементов: кнопку, SearchStringField, DynamicList и две колонки ListField. Платформа загрузила файл с кодом 0, а обе проверки ответили, что ошибок нет.

Обратная выгрузка (/DumpConfigToFiles) показала, что осталось. Режим --compare сравнивает исходный Form.xml и выгруженный платформой:

Из пяти элементов в форме осталась командная панель с кнопкой. Список складов и строка поиска - то, ради чего просили форму - исчезли без одного сообщения. Такие же потери в формах DeepSeek T1 и T5: по четыре элемента, ноль сообщений. Код возврата, /CheckModules и /CheckConfig у этих трёх форм выглядели как у хорошей формы.
Что проверяет form_check.py
Инструмент читает выгрузку конфигурации, не запуская платформу, и проверяет каждую форму Ext/Form.xml вместе с Ext/Form/Module.bsl:
| Группа | Коды | Что проверяется |
|---|---|---|
| Данные | F01, F02, F15 | DataPath начинается с реквизита формы; дальше реквизит объекта, табличная часть и колонка, поле динамического списка, колонка таблицы значений; колонки таблицы привязаны к данным этой таблицы |
| Обработчики | F03-F06 | для каждого Event формы и элемента и для Action команды есть процедура в Module.bsl; сам модуль существует |
| Повторы | F07-F12, F20, F21 | имена и id элементов, реквизитов, колонок, команд; процедуры в модуле; событие, назначенное дважды |
| Ссылки | F13, F14 | кнопка ссылается на существующую команду формы и элемент |
| Формат | F16-F19, F22, F23 | файл читается и находится в пространстве имён logform; виды элементов, типы реквизитов, события; имя процедуры не занимает метод формы; у реквизита есть тип |
Режим --compare сверяет форму до загрузки с выгруженной обратно. Ничего из этого не требует платформы, прогон одной формы занимает 0,2 секунды.

Чего инструмент не делает: BSL он не компилирует. Он ищет заголовки процедур и функций, поэтому вызов процедуры с неверным числом параметров и вызов несуществующей процедуры остаются задачей /CheckModules. Права, функциональные опции и формы расширений в проверку не входят.
Ноль находок на типовой УТ 11.5
Инструмент, который на типовой конфигурации выдаёт сотни ложных находок, никому не нужен, поэтому первым делом я прогнала его по 4849 формам УТ 11.5.22.77. Первая версия правил выдала 3445 находок в 1340 формах. Итоговая версия правил на этой выгрузке выдаёт 0 находок, это подтверждено повторным прогоном. Первоначальные находки я разобрала по тексту Form.xml: загрузка платформой ложный ноль не доказывает, потому что сама пропускает дефекты (см. раздел о заложенных дефектах). Полного файла первых 3445 находок не сохранено, поэтому классификация подтверждена по классам ниже, построчно её здесь не воспроизвести. Перечни видов элементов и событий (F18, F19) снимались с этой же конфигурации, так что на другой конфигурации допустимое редкое событие может оказаться находкой. Каждая группа находок разобрана по тексту Form.xml:
| Что считала ошибкой первая версия | Что это в УТ |
|---|---|
Items.Список.CurrentData.Ссылка в DataPath |
путь к данным текущей строки таблицы, у кнопок - параметр команды |
Объект.Товары.КоличествоУпаковокОстатокСАТУРН |
колонка, которую форма сама добавляет к табличной части (AdditionalColumns) |
Объект.Товары.TotalСумма, RowsCount |
служебные пути подвала и заголовка таблицы |
~Список.Поле |
поле списка вне таблицы |
Список.Организация у журнала документов |
журнал описывается графами и реквизитов не имеет |
Список.СтоимостьНУ, Список.Group |
вычисляемые и служебные поля динамического списка |
ГрафикТраншей.Отступ |
колонка реквизита типа набора записей, объявленная в форме |
После каждой правки прогон повторялся; итоговая версия прошла все 4849 форм без находок, время прогона 55 секунд.

Перечни событий и видов элементов снимались с этой же конфигурации, поэтому для правил F18 и F19 «ноль» на ней получается по построению. Независимая проверка - 68 форм «Нано-УТ» и те же 68 форм, выгруженные платформой обратно: ни одной находки в обоих прогонах. Журналы: ut-final.txt, ut-triage.md, nano-check.txt, nano-dump-check.txt.
Заложенные дефекты
Ошибки моделей разнообразны, и каждая встречается один-два раза. Чтобы увидеть реакцию платформы на каждый код, я взяла рабочую форму «Заказ клиента» и вносила в неё заложенные дефекты: всего 28 вариантов, из них 27 с одним дефектом и один составной (M28), поэтому число вариантов не равно числу дефектов. Контрольная форма без порчи прошла платформу и form_check без сообщений. Для каждого из 28 вариантов form_check назвал ожидаемый код.
Платформа отклонила загрузку девяти форм:
| Дефект | form_check | Ответ платформы |
|---|---|---|
Опечатка в DataPath (Объект.Контрагентт) |
F02 | Неверный путь к данным |
| Нет колонки табличной части | F02 | Неверный путь к данным |
Первый сегмент пути - не реквизит формы (Документ.Дата) |
F01 | Неверный путь к данным |
| Таблица привязана к несуществующей табличной части | F02, F15 | Неверный путь к данным |
| Кнопка с несуществующей командой формы | F13 | Неверное имя команды элемента формы |
| Кнопка с несуществующим элементом | F14 | Неверное имя команды элемента формы |
| Оборван XML | F16 | Ошибка разбора XML (строка и позиция) |
| Тип основного реквизита - несуществующий документ | F17 | Исключение XDTO, без места |
Выдуманный тип xs:table |
F17 | Исключение XDTO, без места |
Загрузка девяти форм прошла, а проверка нашла ошибку:
| Дефект | form_check | Ответ платформы |
|---|---|---|
| Процедура обработчика элемента отсутствует | F04 | /CheckConfig -HandlersExistence: Отсутствует обработчик; /CheckModules молчит |
| Процедура обработчика формы отсутствует | F03 | то же |
| Процедура действия команды отсутствует | F05 | то же |
| Нет Module.bsl | F06 | то же, по одному сообщению на обработчик (7) |
| Повтор имени реквизита | F09 | /CheckModules и /CheckConfig: Имя реквизита не уникально |
| Процедура определена дважды | F20 | Процедура или функция уже определена |
Процедура ПроверитьЗаполнение |
F22 | Процедура или функция уже определена |
Процедуры Закрыть, Открыть, ОбновитьОтображениеДанных, ИзменитьРеквизиты |
F22 | то же сообщение для каждого имени |
Чужое пространство имён вместо logform |
F16 | Переменная не определена (Объект): о формате ни слова, форма пустая |
Одно предупреждение при загрузке: платформа написала, что событие OnCreateAtClient формы не загружено, потому что у этого элемента такого события нет (F19). Событие потеряно, /CheckModules и /CheckConfig чисты.
Девять дефектов платформа приняла без сообщений:
| Дефект | form_check | Что осталось в форме после загрузки |
|---|---|---|
| Повтор имени элемента | F07 | оба элемента, повтор записан обратно |
| Повтор id элемента | F08 | оба элемента, повтор записан обратно |
| Повтор имени команды | F11 | обе команды, повтор записан обратно |
| Повтор id команды | F12 | обе команды, повтор записан обратно |
| Повтор id реквизита | F10 | оба реквизита, повтор записан обратно; привязка поля «СправкаОбУчете» переписана на «Объект», сообщения нет |
Колонка таблицы привязана к Объект.Комментарий |
F15 | привязка сохранена |
| У реквизита нет типа | F23 | загружен без сообщений |
Выдуманный вид элемента TextField |
F18 | элемент потерян |
Событие OnChange назначено таблице дважды |
F21 | осталось одно, второе потеряно |
Для пяти повторов и привязки колонки я прогнала form_check по форме, которую платформа выгрузила обратно: повторы и привязка колонки в ней на месте. Платформа не убрала их и не предупредила. Одно исключение: при повторе id реквизита платформа переписала привязку поля «СправкаОбУчете» на «Объект». Это видно только сравнением, сообщения об этом нет.
Исправление по находкам
Находки можно вернуть модели. Для каждой формы с находками я отправляла третьим сообщением исходный запрос, ответ модели и вывод form_check без правки, с просьбой исправить, и так до трёх попыток.
| Запрос | Форм с находками | Чисто после 1 попытки | После 2 | После 3 | Не исправлено за 3 попытки |
|---|---|---|---|---|---|
| B | 12 | 5 | 6 | 7 | 5 |
| A | 7 | 0 | 0 | 0 | 7 |
Из 12 форм запроса B за первую попытку выправились пять: Haiku T5 (элементы заменены на Table и InputField), DeepSeek T1, T2 и T5, GPT-4.1 mini T3. Форма DeepSeek T7 потребовала двух попыток: сначала имя ПроверитьЗаполнение, потом ссылки на колонки; Haiku T6 с пустой таблицей значений - трёх, потому что вторая попытка убрала у реквизита тип целиком (F23). Пять форм остались с ошибками: DeepSeek T6, GPT-4.1 mini T1, T5, T6 повторяли одну и ту же ошибку пути или типа, а у GPT-4.1 mini T7 form_check был чист после второй попытки, но /CheckModules по-прежнему находит вызов несуществующей процедуры ЗакрытьФорму().
Для запроса A исправление не сработало: модель получила находку про пространство имён, подставила logform и оставила выдуманные элементы (FormType, FormAttributes, FormItems). Образца формата у неё нет, и находки без образца в нужный формат её не возвращают.
Сколько это заняло
Первые ответы занимали от 9,0 секунды (GPT-4.1 mini) до 81,5 секунды (DeepSeek, запрос B), медиана по 28 формам 16 секунд. Проверка form_check одной формы - 0,2 секунды, всей выгрузки «Нано-УТ» из 68 форм - 0,4 секунды, УТ 11.5 из 4849 форм - 55 секунд. Платформе на форму нужно от 26 до 102 секунд (медиана 37): создать базу, загрузить конфигурацию, пройти /CheckModules и /CheckConfig; обратная выгрузка добавляет ещё 10-20 секунд.
От запроса до вердикта по медианам проходит меньше двух минут: 16 секунд ответ, 37 секунд платформа, около 15 секунд обратная выгрузка. Сравнивать с ручной разработкой формы мне нечем, замера ручной работы у меня нет. Есть результат этих минут: 8 форм из 28 чистые с первого ответа, ещё 7 стали чистыми после исправлений.
Порядок приёмки формы от нейросети
- Запрос с образцом рабочей формы той же конфигурации и списком реквизитов с типами. Без образца все семь ответов пришли в чужом формате.
python form_check.py <выгрузка> --form <путь к Form.xml>: ноль находок - условие, чтобы идти дальше.- Новая файловая база,
DESIGNER /F <база> /LoadConfigFromFiles <выгрузка> /Out load.log: читать журнал; код возврата ничего не говорит. Строка про событие, которое не загружено, означает потерю. /CheckModules -ThinClient -Server -ExternalConnectionи/CheckConfig -IncorrectReferences -HandlersExistence -EmptyHandlers -ThinClient -Server -ExternalConnection: ошибки BSL и обработчики.DESIGNER /F <база> /DumpConfigToFiles <каталог>иpython form_check.py --compare <Form.xml до> <Form.xml после>: нулевые потери.- При находках - вернуть модели ответ вместе с выводом form_check; после трёх попыток дописывать вручную.
Чек-лист с командами и таблицей кодов лежит в архиве-компаньоне вместе с промптами, образцами верных и ошибочных форм из этого опыта и журналами.
Итог
Из 28 форм «Нано-УТ», написанных тремя моделями, 8 пришли чистыми. В 19 form_check нашёл ошибки, в 17 платформа сообщила о проблеме, в трёх платформа молчала и потеряла по 4 элемента. Тест на заложенных дефектах показал ту же картину: form_check назвал все 28, платформа сообщила о 19, а повторы имён и id, привязку колонки к чужим данным, реквизит без типа, неизвестный вид элемента и дважды назначенное событие приняла молча. На 4849 формах УТ 11.5 инструмент не дал ни одной находки.
Практический смысл в порядке приёмки: проверка файла до загрузки, журнал загрузки вместо кода возврата, проверка модулей и обработчиков, сравнение с обратной выгрузкой. Каждый шаг ловит то, чего не видят остальные. Платформа пропускает повторы и выдуманные элементы, form_check пропускает неверные вызовы внутри BSL, а потерю элемента без сообщения показывает обратная выгрузка.
Выводы относятся к одной учебной конфигурации, трём моделям, платформе 8.3.27.2130 в файловом режиме и семи заданиям. Форма считалась принятой, когда form_check не нашёл ошибок, платформа загрузила её и обе проверки были чисты, а обратная выгрузка не показала потерь.
Вступайте в нашу телеграмм-группу Инфостарт