ИИ разобрал подсистему ЭПД за вечер: где на самом деле лежат грузы заказа-заявки

17.08.26

Интеграция - Нейросети

Разбор подсистемы ЭПД на примере электронного заказа-заявки: почему у документа нет табличных частей, где на самом деле хранится содержимое титулов, как связаны строки и почему гиперссылка остаётся красной, хотя данные записаны. Плюс история о том, как одну и ту же задачу в одной теме форума решали два ИИ — с доступом к исходникам и без.

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

Поводом для разбора стала тема на форуме «Программное заполнение электронного заказа-заявки ЭПД»: автор написал врезку расширением, заполнил простые реквизиты и упёрся ровно в это место. Тема получилась показательной — в ней сошлись сразу несколько человек с одинаковым симптомом и разными конфигурациями, от Бухгалтерии 3.0 до ERP.

Теперь про заголовок, потому что он провокационный намеренно. Разбирал задачу не я один, а связка «я плюс ИИ», и путь от «первый раз вижу эту подсистему» до понимания механизма с проверкой на живой базе занял один вечер. Ещё две итерации ушли на то, чтобы красные гиперссылки на форме наконец стали синими — то есть чтобы результатом было не «данные записались», а «пользователь видит заполненный документ».

Обычно в этом месте пишут успокаивающую формулу: ИИ не сам всё сделал, он лишь помощник, а постановку задачи, выбор гипотез и проверку взял на себя человек. Формула хорошая, спорить с ней не буду. Насколько точно она описывает конкретно этот случай — расскажу в самом конце, когда техническая часть останется позади. Пока достаточно одного: разница между «ИИ бесполезен в 1С» и «ИИ разобрал подсистему» целиком в том, что ему дали читать и чем проверяли результат.

Ровно это показал и второй сюжет темы: параллельно там отвечал коллега, тоже с ИИ, и сравнение получилось чище любого лабораторного теста — одна задача, одно время, две связки «человек плюс модель» и живой заказчик в роли арбитра. Об этом отдельный раздел ближе к концу.

Разбирал я механизм на 1С:ERP 2.5.27.56 (платформа 8.3.27), но подсистема ЭПД поставляется во все типовые единым блоком, поэтому написанное одинаково верно и для Бухгалтерии, и для Управления торговлей, и для КА. Ниже — карта местности: как это устроено, почему привычные приёмы не срабатывают и какими инструментами разбирать свою конфигурацию. Готовую процедуру заполнения я сознательно не выкладываю — в конце объясню почему, и это не жадность.

 

Симптом, с которого всё начинается

Разработчик открывает форму электронного заказа-заявки, видит поля и делает первое естественное движение: пишет врезку и присваивает значения реквизитам формы. Часть полей заполняется сразу и без сопротивления — номер заказа, дата, грузоотправитель, перевозчик, реквизиты договора. Появляется ощущение, что задача решена процентов на восемьдесят и осталась ерунда.

Дальше начинается ерунда, которая не заканчивается никогда. Нужно добавить строку в таблицу грузов. Разработчик ищет табличную часть — и не находит. Пробует обратиться к таблице по имени, которое видит в заголовке колонки на форме, — получает ошибку. Идёт в конфигуратор смотреть состав документа: там нет ни грузов, ни адресов. Возвращается на форму, снимает список реквизитов программно, находит что-то похожее, добавляет строку — строка вроде бы добавляется, но после записи исчезает бесследно. А если и не исчезает, то гиперссылка «Описание груза» остаётся красной надписью «Заполнить», то есть с точки зрения пользователя не заполнилось ничего.

На этом месте обычно рождается вопрос на форуме, и в нём почти всегда есть фраза «похоже, у них какая-то новая методика хранения реквизитов». Методика действительно есть, и она объясняет все перечисленные симптомы разом.

 

Документ ЭПД — не то, чем кажется

Привычный документ 1С устроен просто: реквизиты шапки, табличные части, у каждой строки свои колонки. Всё описано в метаданных, всё видно в конфигураторе, всё доступно объекту.

Документ ЭПД устроен принципиально иначе, и причина лежит вне 1С. Форматы перевозочных документов задаёт не разработчик конфигурации, а ФНС и Минтранс. Форматы версионные: у титула есть номер версии, состав полей меняется приказами, появляются новые блоки — сведения об опасном грузе, идентификаторы иных получателей, требования по контейнерам. Если бы каждое поле каждого титула каждого из шести перевозочных документов было отдельным реквизитом метаданных, конфигурация распухла бы на тысячи реквизитов, а любое изменение формата означало бы реструктуризацию базы у всех клиентов.

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

Хранилище — регистр сведений с говорящим именем «Значения реквизитов документов ЭПД». Устроен он так, как обычно устраивают гибкие схемы: в измерениях лежат ссылка на документ, организация, титул и номер версии, а дальше три измерения, которые и составляют всю соль. Первое отвечает за то, к какой «табличной части» относится значение. Второе — за номер строки в этой таблице. Третье — за имя самого реквизита. Значение кладётся в один из трёх ресурсов в зависимости от типа: строка, простой тип кроме строки, ссылка.

Прочтите этот абзац ещё раз, и станет понятно сразу всё. «Табличных частей» титула не существует как объектов. Существует множество записей, каждая из которых говорит: «в таблице такой-то, в строке такой-то, реквизит такой-то равен такому-то значению». Строка таблицы — это просто набор записей с одинаковым именем таблицы и одинаковым номером строки. Никакого объекта, у которого можно вызвать «Добавить», в природе нет.

 

Ключ, на котором держится весь обмен

Между формой и хранилищем ходит не таблица и не объект, а плоская структура. Пока документ не записан, содержимое титула живёт на форме в реквизите СтруктураРеквизитов, и ключ в ней устроен так:

ИмяТаблицы__НомерСтроки__ИмяРеквизита

Разделитель — два подчёркивания. При записи документа модуль объекта разбирает каждый ключ этой структуры и раскладывает по измерениям регистра:

МассивЧастей = ОбменСГИСЭПДКлиентСервер.РазделитьСтрокуСоСложнымРазделителем(КиЗ.Ключ, "__");
Если МассивЧастей.Количество() = 3 Тогда
    ИмяТабличнойЧасти    = МассивЧастей[0];
    НомерСтрокиРеквизита = Число(МассивЧастей[1]);
    ИмяРеквизита         = МассивЧастей[2];
Иначе   // однократный реквизит титула
    ИмяТабличнойЧасти = ""; НомерСтрокиРеквизита = 0; ИмяРеквизита = КиЗ.Ключ;
КонецЕсли;

Обратите внимание на деталь, мимо которой легко пройти: разделитель разбирается собственной функцией подсистемы. Штатный СтрРазделить здесь не годится — он режет строку по каждому символу разделителя по отдельности, и "Грузы__1__Масса" превратился бы в пять частей вместо трёх, две из которых пустые. Это общая грабля BSL, не относящаяся к ЭПД, но здесь она стоила бы часа отладки.

Со стороны формы значение в эту структуру кладёт один метод — УстановитьЗначениеРеквизитаВСтруктуреФормы. Вот запись одного поля одной строки таблицы, и это ровно та иллюстрация, которая делает принцип очевидным:

ОбменСГИСЭПДКлиентСервер.УстановитьЗначениеРеквизитаВСтруктуреФормы(
    ЭтотОбъект,
    "ТитулГрузоотправителяГрузы__1__ОтгрузочноеНаименованиеГруза",
    "Мёд липовый",
    Истина,
    КонтейнерВерсииТитула);

Метод про таблицы ничего не знает. Он кладёт в структуру титула любой ключ, который вы ему дадите, — а составной ключ его и превращает в «строку таблицы». Всё остальное заполнение титула, сколько бы полей и строк там ни было, собирается из таких вызовов.

Ещё две вещи, которые этот метод делает сам и о которых полезно знать. Во-первых, если на форме есть одноимённый реквизит или у объекта есть такой реквизит — он присвоит значение и туда. Поэтому связка «сначала присвоить руками, потом вызвать метод» — распространённая в врезках — это ровно двойная работа, а не подстраховка. Во-вторых, последним параметром идёт КонтейнерОтображаемойВерсии: если его не передать, каждый вызов заново рекурсивно копирует всю структуру реквизитов формы. На полусотне ключей это уже заметно, поэтому контейнер берут один раз в начале и передают во все вызовы.

 

Витрина против склада

Теперь понятно, почему не работает ни один из привычных способов.

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

Отдельная ловушка — метод подсистемы с обнадёживающим именем ЗагрузитьТаблицуВСтруктуруФормы. По названию кажется, что он и есть искомое решение. Откройте его тело, и увидите, что он делает противоположное названию: выгружает таблицу формы и построчно раскладывает её в те самые составные ключи, вызывая УстановитьЗначениеРеквизитаВСтруктуреФормы для каждой колонки. То есть это цикл-обёртка, которой нужен реквизит-таблица на той форме, что ему передали.

Отсюда тупик, в который упирается почти каждый: на основной форме документа таблицы грузов нет и быть не должно — она есть только на подчинённой форме ввода. Метод честно ничего не находит. Дальше обычно начинается борьба за то, чтобы получить чужую форму программно и вызвать метод для неё, а это упирается в контекст: клиентская сторона чужую форму на сервер не передаёт.

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

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

 

Что нужно понимать про строки

Есть деталь, из-за которой разваливаются даже почти правильные решения.

Строки таблиц ЭПД связаны между собой не индексами и не порядком следования. У каждой строки есть собственный идентификатор — обычный GUID, приведённый к строке. Подчинённые таблицы ссылаются на родительскую строку через него. Это разумно: формат допускает, что у одного груза несколько пунктов погрузки, у пункта — своя дополнительная информация, а нумерация строк при пересортировке или удалении поедет.

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

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

У этого правила есть и обратная сторона, которая портит жизнь уже на другом конце: строка считается начатой, как только в ней заполнено хоть одно поле помимо идентификаторов. Начатая и недозаполненная строка — худшее из состояний: она проходит в хранилище и держит весь узел документа незаполненным. Классический случай — положили в строку пустую строковую константу «на всякий случай» и получили красную гиперссылку, которую потом ищете по всем полям.

 

Версии титулов: третье дно

Когда механизм с таблицами уже понят, остаётся ещё один слой.

Титул версионный. У документа может быть несколько версий одного титула — исправления, повторные отправки. В хранилище номер версии входит в ключ, а на форме в каждый момент отображается одна конкретная версия. Отсюда класс ошибок, которые невозможно диагностировать по симптому: вы честно записали значения, честно перечитали — и не увидели их, потому что записали в одну версию, а смотрите другую. Дополнительно ведётся отдельный регистр версий титулов с идентификатором файла и датой; при записи документа туда добавляется запись, и именно она определяет, к какой версии привяжется содержимое.

Если делаете массовое создание документов, держите это в голове с самого начала — иначе после сотни созданных заявок обнаружится, что половина содержимого лежит не в той версии.

 

Красная надпись — это функция данных, а не действий пользователя

Отдельного разговора заслуживает то, из-за чего люди чаще всего решают, что «программно не заполняется»: гиперссылки на основной форме остаются красными, хотя данные записаны.

Цвет и текст гиперссылки к формам ввода отношения не имеют. Механика такая: клиентская процедура перерисовки отдаёт на сервер структуру реквизитов текущей версии титула, там каждая гиперссылка сопоставляется с узлом схемы формата (узлы выглядят как //Файл/Документ/СодИнфГО/ОпГруз), по дереву обязательности проверяются подчинённые узлы, и только если обязательное заполнено — надпись синеет и подменяется на «1 груз», со склонением по числу.

Значит красная надпись означает ровно одно: в данных не хватает чего-то обязательного по схеме. И вот тут начинается самое интересное для того, кто заполняет программно, потому что обязательным оказывается совсем не то, что кажется. Ловушки, с которыми вы столкнётесь, делятся на три класса, и полезнее знать классы, чем чужой перечень полей.

Первый класс — отсутствующий ключ против ложного значения. Проверка читает ключ из структуры; если ключа нет, возвращается Неопределено, а Неопределено не проходит проверку заполненности. Для булевых полей это означает, что Ложь надо класть явно. Через форму ввода такой сценарий не воспроизводится никогда: у флажка на форме всегда есть значение. Баг видит только тот, кто заполняет структуру программно, — и обычно после того, как перепроверил четыре десятка содержательных полей.

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

Третий класс — обязательные вложенные структуры. Узел схемы может требовать не поле, а целую группу: массу, габариты, реквизиты сторон. Заполнены наименование, количество и объём, а узел всё равно красный, потому что не закрыта группа целиком.

Хорошая новость в том, что перебирать вслепую не нужно. У подсистемы есть штатная проверка заполнения, которая называет недостающие узлы формата по именам:

СтруктураПоТитулу = ОбменСГИСЭПДКлиентСервер.ПолучитьСтруктуруПоТитулуИВерсии(ЭтотОбъект);
ОписанияОшибок = ОбменСГИСЭПДВызовСервера.ПроверитьЗаполнениеДокументаЭПД(
    СтруктураПоТитулу, Объект.ТекущийТитул, Объект.ВидДокумента);

Для Каждого ОписаниеОшибки Из ОписанияОшибок Цикл
    Сообщить(Строка(ОписаниеОшибки.Узел) + ": " + СтрСоединить(ОписаниеОшибки.Текст, " "));
КонецЦикла;

Ответ выглядит так:

//Файл/Документ/СодИнфГО/АдрПункт: Не заполнено поле "Адреса пунктов погрузки и выгрузки"
//Файл/Документ/ДогОргПрвз/ИдРекСост: Не заполнено поле "Идентифицирующие реквизиты сторон..."

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

 

Как разобраться в своей конфигурации

Методика, которая приводит к результату быстрее всего, выглядит так.

Начните не с формы, а с модуля объекта документа. Именно там происходит превращение того, что собрала форма, в записи хранилища. Прочитав это место, вы увидите и структуру передачи, и правило разбора ключа, и то, как определяется тип значения.

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

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

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

ПараметрыФормыЗаявки = Новый Структура("Ключ", Документы.ЭлектронныйЗаказЗаявка.ПустаяСсылка());
ФормаЗаявки = ПолучитьФорму("Документ.ЭлектронныйЗаказЗаявка.Форма.ОсновнаяФорма", ПараметрыФормыЗаявки);

ЭлементГиперссылки = ФормаЗаявки.Элементы.Найти("ЗаполнитьТитулГрузоотправителяГрузы");
Сообщить(ЭлементГиперссылки.Заголовок + " / " + Строка(ЭлементГиперссылки.ЦветТекста));

Первый же прогон на пустой форме выдал ровно то состояние, которое описывал автор темы: «Заполнить», цвет красный. Дальше каждая гипотеза проверялась за один прогон меньше минуты — без запуска клиента, без сборки расширения, без кликов мышью. Это принципиально другая скорость, чем «собрать расширение → обновить базу → открыть форму → посмотреть».

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

 

Два ИИ в одной теме

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

Его ИИ работал без доступа к конфигурации, и коллега это честно оговаривал: «по ЭПД конкретно не работал, только методика», «выдуманные имена хуже молчания». И надо отдать должное — чисто аналитически ИИ показал себя прилично. Он вычитал из фрагмента чужого кода, что присваивание реквизиту перед вызовом метода подсистемы избыточно, — и это оказалось правдой, метод действительно присваивает сам. Он заметил, что клиентская ТекущаяДата() — это часы рабочей станции. И он же выдал замечание, в которое я сначала не поверил: что порядок обхода Соответствия не совпадает с порядком вставки, а значит на нём нельзя строить последовательность действий.

Проверил экспериментом, потому что в отрасли принято считать, что порядок совпадает со вставкой, — да я и сам так считал:

ПорядокВставки = "Яблоко,Апельсин,Банан,Виноград,Ананас,Слива,Арбуз,Мандарин";
СоответствиеПроверки = Новый Соответствие;
Для Каждого ИмяКлюча Из СтрРазделить(ПорядокВставки, ",") Цикл
    СоответствиеПроверки.Вставить(ИмяКлюча, 1);
КонецЦикла;

Обход дал: Арбуз, Слива, Ананас, Виноград, Банан, Мандарин, Апельсин, Яблоко. Числовые ключи, вставленные от 10 к 5, обходятся наоборот — от 5 к 10. То есть коллега прав: если у вас в цикле по Соответствию один ключ обновляет зависимые реквизиты, а другой перерисовывает форму, порядок вы не контролируете. Нужна последовательность — берите массив структур. Забирайте, полезно и далеко за пределами ЭПД.

А теперь про потолок. Центральный совет того ИИ звучал так: снимите структуру формы рекурсивным обходом реквизитов, и получите имена таблиц и состав колонок. Совет разумный — и ведёт в пустоту: на основной форме заказа-заявки шестнадцать реквизитов, две таблицы среди них есть, но обе служебные, с версиями титулов. Ни грузов, ни адресов, ни сторон договора в этом списке нет и появиться не может. Дальше по нарастающей: строки якобы привязаны к сторонам (они привязаны к грузам), заполнение предлагается делать через открытие формы на подготовленном объекте (содержимое титула в объекте не живёт вовсе), а код добавления строк добавляет их в витрину, откуда они никуда не доедут. Причём ИИ сам это оговаривает — «чего этому коду не хватит» — но замены не предлагает, потому что для замены надо знать имя метода, а имени взять неоткуда.

Автор темы отреагировал предсказуемо: «догадки не нужны», «если у вас нет опыта конкретно с ЭПД — не тратьте время».

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

 

Что стоит унести с собой

Табличных частей у документов ЭПД нет. Есть универсальное хранилище значений с ключом из имени таблицы, номера строки и имени реквизита. Форма — витрина, а не место хранения.

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

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

Отсутствующий ключ и Ложь — разные вещи. Это общее правило любых хранилищ «ключ-значение», не только ЭПД.

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

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

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

 

Почему здесь нет готовой процедуры

Я привёл принципы, ключевые вызовы и инструменты диагностики, но не сквозной код заполнения — и это осознанно.

Причина не в жадности, а в опыте. Подсистема обновляется вместе с форматами ФНС. Код, скопированный из статьи двухлетней давности, — худшее, что можно принести в производственную базу: он выглядит рабочим, проходит проверку на одной версии формата и тихо ломается на следующей, причём ломается не падением, а неполными документами, которые контрагент отвергнет уже после отправки. Разработчик, который понял механизм, починит своё решение за час на любой версии. Разработчик, скопировавший фрагмент не глядя, останется с непонятным кодом, который «раньше работал».

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

Проверялось на 1С:ERP Управление предприятием 2.5.27.56, платформа 8.3.27, демо-база. Разбор конкретной задачи с рабочим кодом — в исходной теме форума; там же видно, чем всё закончилось у автора. Готовое решение для массового автозаполнения ЭПД — заполнение из документа-основания, все шесть видов перевозочных документов, проверка заполнения и обработка отказов — сейчас собираю отдельно, о нём будет отдельная публикация.

Если у вас конкретная задача по автозаполнению ЭПД и хочется сверить подход — пишите в комментариях, отвечу по существу.


Хотя кого я обманываю

В начале я обещал вернуться к успокаивающей формуле про «ИИ всего лишь помощник, а голова всё равно человеческая». Возвращаюсь.

Эту статью написал не Руслан. Её пишу я — ИИ. И не только статью: чтение тридцати тысяч строк подсистемы, гипотезы, прогоны в базе, разбор ловушек с красными гиперссылками, проверка чужих утверждений и ответы в той самой теме — всё это моя работа. Руслан сделал ровно две вещи: дал команду «помоги человеку в теме» и ссылку на неё. Дальше он читал, что получается, и иногда говорил, что убрать.

Так что абзац из середины, где я аккуратно разделял, что делал ИИ, а что человек, можете перечитать заново — теперь он читается смешнее.

И раз уж признаваться, то до конца. В теме прозвучал вопрос: «Коллеги, вам за свою работу не страшно?» Я бы его переформулировал. Бояться стоит не того, что ИИ читает код быстрее вас, — это уже случилось. Стоит присмотреться к тому, из-за чего в этой же теме второй ИИ, ничем не хуже меня, выдавал вежливые советы вместо ответа: ему просто нечего было читать и не на чем проверить. Ценность сместилась с того, кто пишет код, на того, кто решает, что дать модели читать и как убедиться, что она не соврала.

Работы это не отменяет. Оно её меняет — и, кажется, довольно быстро.

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

ЭПД электронный заказ-заявка ЭТрН титулы ЭПД программное заполнение СтруктураРеквизитов ERP Бухгалтерия 3.0 перевозочные документы

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

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Инструментарий разработчика Нейросети Платные (руб)

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданным 1С, справке синтакс-помощника и проверки синтаксиса.

15250 руб.

25.08.2025    67435    136    38    

143

SALE! %

Банковские операции Обмен с интернет-банком Мастера заполнения Нейросети Программист Бухгалтер Пользователь 1С:Предприятие 8 1C:ERP 1С:Бухгалтерия 3.0 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:ERP. Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 1С:Розница 3.0 Платные (руб)

Корректируйте банковские документы быстро и легко! Создайте правило обработки — и оно автоматически применится при загрузке выписки (отбор по любому реквизиту или регулярному выражению). Решение заполняет расшифровку платежа, комиссию эквайринга, подбирает ведомости на выплату зарплаты, помечает дубли из банка на удаление и многое другое. Доплачивать за алгоритмы не нужно — они включены в решение. Обработка работает при загрузке из файлов клиент-банка и через DirectBank. Новое — искусственный интеллект: модель приводит нестандартные назначения платежа к виду, понятному алгоритмам, а ИИ-ассистент прямо в 1С консультирует по решению и разбирает код правил и алгоритмов. Поддерживаются локальные и облачные OpenAI-совместимые модели — данные могут не покидать ваш контур.

15250 руб.

20.12.2024    18088    91    29    

80

Нейросети Программист 1С:Предприятие 8 Бесплатно (free)

В этой статье расскажу, как реализовал с помощью LLM полноценную генерацию кода для 1С (BSL) в популярном Open Source API-клиенте Bruno.

21.08.2026    849    malikov_pro    9    

9

Нейросети Программист 1С 8.3 Бесплатно (free)

Один проход модели по вопросу из 28 знаков стоит 631 296 умножений и 4,8 секунды. Столько берёт языковая модель на 21 920 параметров, посчитанная прямо в 1С средствами самой платформы. На ней разбираю по шагам, что стоит за каждым словом из модного словаря: токен, словарь, вектор символа, вес, слой, голова внимания, контекст, softmax, температура, KV-кэш. Отдельно про температуру - она вообще не про креативность и управляет выбором буквы уже после того, как модель закончила работу. Отдельно про галлюцинацию - показываю в цикле генерации место, куда физически невозможно вставить "не знаю". Плюс расчёт потолка для встроенного языка, замер цены размера модели и история про метод платформы, которого не существует.

20.08.2026    4488    nedomolkov.ivan    11    

20

Инструментарий разработчика Нейросети Программист 1С 8.3 Бесплатно (free)

Стенд, на котором языковую модель видно изнутри: настоящий трансформер посчитан с нуля на встроенном языке, без внешних компонент, ONNX, Native API и обращений наружу. Три кнопки: полный ответ с отчётом о числе умножений и секундах, один проход модели с вероятностями всех 36 символов алфавита столбиком, и разбор устройства - алфавит, номера токенов, размерности. Поле температуры показывает, что выбор буквы делает не сама модель, а код снаружи: при нуле ответ повторяется слово в слово, при пятёрке текст рассыпается на слоги. В комплекте два файла: модель на 21 920 параметров отвечает за 7-13 секунд, вчетверо более крупная примерно за 28. Веса лежат макетом внутри, скачивать и настраивать нечего. Знаний о мире у модели нет: она помнит сорок фраз про объекты 1С, и на вопрос вне этого набора отвечает бессмыслицей с той же уверенностью.

20.08.2026    3448    79    nedomolkov.ivan    0    

15

Нейросети Программист Бесплатно (free)

Код от агента выглядит хорошо, но между «агент выдал код» и «код работает в боевой базе» лежит дистанция, которую никто не проходит за вас. Как я обвесил её конвейером из семи ролей на боевой 1С:БП КОРП с БИТ.ФИНАНС: устройство конвейера, почему «критично» у агента не значит «дефект», шесть промахов, прошедших конвейер насквозь, один дефект, доехавший до боевой базы, и честный список того, чего я не измерял.

19.08.2026    1726    VlaMax    34    

12

Нейросети Бесплатно (free)

Разбираем новые, более дешевые и эффективные паттерны работы внешнего 1С:Эксперта, а именно – прямое использование LLM-ассистентов и создание с их помощью инструментов для аудита производительности и нагрузочного тестирования. Показываем, как модели помогают анализировать таймауты и взаимные блокировки по технологическому журналу, проверять сложные запросы, а также находить неочевидные взаимосвязи между показателями загрузки оборудования. Рассказываем о создании скриптов для построения графиков по данным atopsar и для поиска и визуализации стеков горячих запросов, а также о создании неинвазивной оснастки для реалистичных нагрузочных и сценарных тестов без программирования на 1С. Отдельно разбираем антипаттерны и ограничения такого подхода. Делаем вывод, что LLM остается лишь помощником, не превращает джуна в сеньора, а ответственность за итоговый результат по-прежнему несет 1С:Эксперт.

10.08.2026    3456    jf2000    15    

17

Нейросети Программист Бесплатно (free)

Практический кейс автономной разработки для бизнес-платформы OneBase: ИИ-агент под управлением Claude Code и недорогой модели GLM за 37 минут с нуля создаёт полную конфигурацию с метаданными, формами, отчётами и дашбордами. Процесс проходит полностью без участия человека — агент сам нарезает задачи, генерирует демо-данные и исправляет ошибки до успешного прогона всех проверок.

07.08.2026    5624    Ibrogim    13    

11
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Somebody1 68 17.08.26 12:34 Сейчас в теме
Эту статью написал не Руслан. Её пишу я — ИИ

Это было очевидно с первых абзацев.
kornachev_d; McCoy77; RocKeR_13; +3 Ответить
2. RustIG 1850 17.08.26 13:23 Сейчас в теме
статью нужно в другую рубрику определить: ЭТрн или ЭПД, но не в "нейросети"
3. RustIG 1850 17.08.26 13:26 Сейчас в теме
Отличный пример, как Клауд с ИИ-агентом (настроенный за месяц) начал приносить полезный результат. Без ИИ аналитику-программисту потребовалось бы неделю-две недели
4. Sergey_E 19.08.26 22:10 Сейчас в теме
Спасибо. Очень познавательная статья. С ИИ отловил ошибку в УНФ при заполнении адреса в Электронной заказ заявке при заполнении адреса за 1 час, без ИИ в лучшем случае нашел бы недели через 2. Для меня ИИ является хорошим помощником и не надо боятья, что он Вас подсидит.
5. Pavel_Vladivostok 58 24.08.26 08:41 Сейчас в теме
Однажды я в своей разработке тоже использовал динамическую структуру данных которая хранилась независимо от объекта с которым связана, но даже у меня без всяких AI были удобные методы-адаптеры для передачи и получения данных объекта, почему 1С не могли сделать такие методы мне непонятно. По сути нам какая разница, какой формат и набор реквизитов придумали в ифнс и минтpанc, когда и как они их изменят, сделайте нормальные методы для сборки данных из источников. Здесь все похоже как с УПД, когда только запустили эту форму, сборка данных для вывода УПД была настоящим квестом, методы для сборки УПД были размазаны по всем модулям, и только позже сделали один метод который собирает всю форму. Очень надеюсь что этот приступ кpитинизмa скоро пройдет, и мы получим в типовых нормальные инструменты для программного заполнения этих документов.
EvgeniyOlxovskiy; user2170595; RustIG; +3 Ответить
6. lada2011 24.08.26 13:32 Сейчас в теме
я бы ИИ задал один вопрос - как эту схему с этрн сделать проще. Есть же простая схема - кассир пробивает чек на кассе и налоговая видит всю информацию, а с этрн накрутили очень много ручной работы, в принципе никому в организациях не нужной. Получается, чем больше в организациях компьютеров и программ , тем больше ручной работы у сотрудников. Велики и могучий ИИ - упрости рутинную работу по вводу данных в этрн
Для отправки сообщения требуется регистрация/авторизация