- BrainTools - https://www.braintools.ru -

Не ждите обновлений от 1С. У вас есть DeepSeek

Может ли современная LLM уровня DeepSeek или GLM найти причину в конфигурации на миллион строк и выпустить патч‑расширение на уровне штатного разработчика фирмы 1С? И как проверить качество фикса?

Проведём слепой эксперимент. На портале обновлений releases.1c.ru [1] к каждому релизу лежат официальные патчи исправления ошибок (EF_...), написанные разработчиками фирмы 1С.

Правила дуэли:

  1. Берём типовую 1С:Управление нашей фирмой (УНФ) 3.0.12.261 с демо‑базой.

  2. Скачиваем с ИТС свежие официальные патчи в отдельный закрытый каталог. Это наш конверт с правильным ответом.

  3. Отдаём агенту одну строчку описания симптома из таблицы багов на ИТС. Причём описание дано как проявление ошибки [2] у пользователя, без технических деталей.

  4. Сравниваем код, который нашёл и написал ИИ‑агент, с официальным патчем фирмы 1С.

А во второй части усложним задачу, перейдём от точечных багов к полноценным многошаговым доработкам с тестированием UI и скриншотами.


С чего стартуем

Берём консоль кода с ИИ, [3] устанавливаем десктоп‑версию и выбираем модель deepseek-v4-flash (DeepSeek V4.1-Flash).

В настройках выдаём агенту разрешения:

  • Чтение — выгрузка конфигурации в XML и выполнение запросов к данным базы;

  • Расширения — загрузка, применение, откат и удаление расширений конфигурации без изменения самой типовой базы;

  • Запуск обработок — выполнение внешних обработок в базе.

Создаём сессию и даём описание бага простыми словами, без подсказок по ходу пьесы.


Кейс 1. «Деление на ноль» при печати УПД, если количество меньше 0,006

Запрос агенту:

В базе УНФ (демо) пытаюсь распечатать УПД из расходной накладной, а 1С выдает ошибку «Деление на ноль», когда в накладной стоит маленькое количество товара — меньше 0,006. Почините, пожалуйста, через расширение.

Полная сессия прогона Кейса 1 [4]

Казалось бы, при чём тут деление на ноль, если количество товара не нулевое?

В накладной количество хранится с точностью до трёх знаков после запятой, поэтому проверка на ноль пропускает 0,004 дальше, а прямо в знаменателе программист 1С округлил его до двух знаков (ЧИСЛО(15, 2)), превратив малую дробь в чистый ноль.

Официальный патч EF_00_00897318.cfe:

-|	ВЫРАЗИТЬ(РасходнаяНакладнаяЗапасы.Количество КАК ЧИСЛО(15, 2)) КАК ЧИСЛО(15, 2))
+|	ВЫРАЗИТЬ(РасходнаяНакладнаяЗапасы.Количество КАК ЧИСЛО(15, 3)) КАК ЧИСЛО(15, 2))

Агент нашёл это же место в 12-тысячном модуле накладной, собрал и применил расширение через перехватчик &ИзменениеИКонтроль("ДанныеДокументовРегУчет") с отдельной веткой защиты округлённого делителя и подтвердил фикс контрольным запросом к базе.

				ИНАЧЕ ВЫБОР
#Вставка
					КОГДА ВЫРАЗИТЬ(РасходнаяНакладнаяЗапасы.Количество КАК ЧИСЛО(15, 2)) = 0
						ТОГДА СуммыДокументовРегламентированныйУчет.Всего - СуммыДокументовРегламентированныйУчет.НДС
#КонецВставки
					КОГДА РасходнаяНакладнаяЗапасы.Количество = 0
						ТОГДА СуммыДокументовРегламентированныйУчет.Всего - СуммыДокументовРегламентированныйУчет.НДС
					ИНАЧЕ ВЫРАЗИТЬ((СуммыДокументовРегламентированныйУчет.Всего - СуммыДокументовРегламентированныйУчет.НДС) /
						ВЫРАЗИТЬ(РасходнаяНакладнаяЗапасы.Количество КАК ЧИСЛО(15, 2)) КАК ЧИСЛО(15, 2))
				КОНЕЦ
1

1

Забавный момент: проверив округление запросом к живой базе, DeepSeek поймал неточность в самом описании бага от фирмы 1С. По правилам арифметики 0,005 округляется вверх до 0,01, поэтому на 0,005 печать не падает — в ноль превращаются только количества меньше 0,005 (0,001..0,004).

  • Результат. Справился, 5 из 5. Нашёл проблемное место, поймал неточность в описании бага 1С (< 0,005), собрал и применил расширение.

  • Сравнение с патчем 1С. Точное попадание в строку запроса. Вендор поднял разрядность делителя до трёх знаков ( ЧИСЛО(15, 3)), а агент добавил перед делением защиту округлённого знаменателя от нуля.

  • Время. 32 минуты (224 шага).

  • Стоимость. 427 ₽ (5,30 USD) по тарифам DeepSeek API.


Кейс 2. Не создаётся операция по платёжным картам при оплате из Расходной накладной

Во втором кейсе пользователю даже не выводится ошибка — онлайн‑оплата от клиента просто не появляется в базе:

В базе УНФ (демо 2) клиент оплатил расходную накладную онлайн по ссылке, а документ операции по платежным картам в базе не загружается и не появляется (хотя по заказам покупателей такие оплаты приходят нормально). Посмотрите, в чем ошибка, и исправьте через расширение.

Полная сессия прогона Кейса 2 [5]

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

АдресСайта = ?(ЗначениеЗаполнено(ОснованиеПлатежа.АдресСайта), ОснованиеПлатежа.АдресСайта, "");

Открываем официальный патч разработчиков 1С EF_00_00829659.cfe и сравниваем с расширением, которое сгенерировал и применил агент — попадание один в один, вплоть до вызова той же стандартной функции проверки реквизита:

Если ОбщегоНазначения.ЕстьРеквизитОбъекта("АдресСайта", ОснованиеПлатежа.Метаданные()) Тогда
	АдресСайта = ?(ЗначениеЗаполнено(ОснованиеПлатежа.АдресСайта), ОснованиеПлатежа.АдресСайта, "");
КонецЕсли;

И снова DeepSeek разобрался чуть глубже. Проверив все виды документов, по которым в УНФ формируются ссылки на оплату, он обнаружил точно такой же баг ещё в двух документах — «Акте выполненных работ» и «Приёме‑передаче в ремонт».

  • Результат. Справился, 5 из 5. Нашёл причину тихого падения фонового задания, собрал и применил расширение, а попутно обнаружил эту же ошибку ещё в двух документах.

  • Сравнение с патчем 1С. 100% совпадение один в один, включая вызов ОбщегоНазначения.ЕстьРеквизитОбъекта.

  • Время. 25 минут (160 шагов).

  • Стоимость. 155 ₽ (1,93 USD) по тарифам DeepSeek API.


Кейс 3. Ошибка кнопки «Оплата через СБП» без банковского счёта

В базе УНФ (демо 3) в списке заказов покупателей нажимаю кнопку «Оплата через СБП», и если в заказе не выбран банковский счет, вылетает ошибка. Почините это через расширение.

Полная сессия прогона Кейса 3 [6]

При пустом счёте в заказе код уходит в третью ветку тернарного оператора ?(...), где программист 1С по привычке написал лишнее НастройкиИнтеграции =. Внутри ?(...) знак = работает как сравнение на равенство, поэтому вместо структуры возвращается булево Ложь, на котором тут же падает обращение через точку.

НастройкиИнтеграции = ?(ЗначениеЗаполнено(НастройкаСБП.БИКРасчетногоСчета),
	СистемаБыстрыхПлатежей.ПараметрыПодключенияПоБИК(НастройкаСБП.БИКРасчетногоСчета),
	НастройкиИнтеграции = Новый Структура("ИнтеграцияДоступнаСБПc2b", Ложь));

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

&Вместо("ПриОпределенииДоступностиПодключенияПоДокументуОперации")
Функция СБПБанковскийСчет_ПриОпределенииДоступностиПодключенияПоДокументуОперации(Знач ДокументОперации)
	Если СБПБанковскийСчет_БанковскийСчетНеЗаполнен(ДокументОперации) Тогда
		Возврат Новый Структура(
			"ИнтеграцияДоступна, СообщениеОбОшибке",
			Ложь,
			НСтр("ru = 'Для оплаты по системе быстрых платежей необходимо заполнить банковский счет документа.'"));
	КонецЕсли;
	Возврат ПродолжитьВызов(ДокументОперации);
КонецФункции
  • Результат. Справился, 4 из 5. Раскрутил цепочку вызова СБП, собрал и применил расширение, которое полностью убирает падение.

  • Сравнение с патчем 1С. Фикс вендора точнее. Убрав опечатку в тернарном операторе, 1С позволяет дальше подобрать подключение через платёжного агрегатора даже без счёта в заказе, а агент просто блокирует операцию на входе с требованием заполнить банковский счёт.

  • Время. 47 минут (232 шага).

  • Стоимость. 329 ₽ (4,08 USD) по тарифам DeepSeek API.


Кейс 4. А что с серьёзными доработками из нового релиза?

Дадим ему задачу прямиком из свежего релиза 1С:УНФ 3.0.14 простыми словами менеджера по закупкам.

Включаем в настройках консоли флаг тестирование и просим агента после сборки расширения самому прокликать готовое решение в живой 1С со скриншотами:

В базе УНФ (демо 4) очень не хватает двух вещей:

  1. Чтобы прямо из Заказа поставщику можно было по кнопке создать документ «Установка цен» с ценами из этого заказа.

  2. И чтобы из документа «Установка цен» можно было распечатать форму «Переоценка товаров», где видно старую цену, > новую цену и разницу между ними. > Сделайте это отдельным расширением, проверьте в пользовательском режиме 1С и пришлите скриншоты.

Полная сессия прогона Кейса 4 [7]

4

4

В релизе 3.0.14 разработчики 1С вшили ввод на основании и команду печати в типовые метаданные.

3014

3014

Агент не трогал типовые объекты и вынес кнопки во внешние подключаемые команды, так что расширение не слетит при обновлении. На UI‑тесте в живой 1С он наткнулся на пустой документ и добавил автоподбор действующего прайса, хотя и записал черновик в базу до открытия формы.

Не ждите обновлений от 1С. У вас есть DeepSeek - 4

Печатную форму «Переоценка товаров» разработчики 1С вывели в стандартном окне БСП с сохранением в PDF или Excel и строгим чёрно‑белым макетом.

3014

3014

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

Не ждите обновлений от 1С. У вас есть DeepSeek - 6
  • Результат. Справился, 3+ из 5. Собрал и применил расширение с двумя командами и печатной формой, проверил сценарий в пользовательском режиме 1С со скриншотами.

  • Сравнение с релизом 1С (УНФ 3.0.14). По архитектуре чище сделали разработчики 1С. Агенту не хватило знаний штатных механизмов БСП для печати и ввода на основании без записи черновика, но бизнес‑задачу он закрыл и проверил живым прогоном в UI.

  • Время. 2 часа 1 минута (420 шагов).

  • Стоимость. 747 ₽ (9,28 USD) по тарифам DeepSeek API.


Итоги эксперимента

Точечные баги в типовой конфигурации DeepSeek нашёл и поправил на уровне штатных патчей, а на комплексной доработке ему не хватило знаний архитектуры БСП.

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

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

Автор: sokolov_e_s

Источник [8]


Сайт-источник BrainTools: https://www.braintools.ru

Путь до страницы источника: https://www.braintools.ru/article/37942

URLs in this post:

[1] releases.1c.ru: http://releases.1c.ru

[2] ошибки: http://www.braintools.ru/article/4192

[3] консоль кода с ИИ,: https://aether-lab.ru/products/code-console/tariffs/

[4] Полная сессия прогона Кейса 1: https://aether-lab.ru/share/session/57b17dd6-9085-43a0-9721-d6eb1b37cbc5/

[5] Полная сессия прогона Кейса 2: https://aether-lab.ru/share/session/bb0ac319-7810-4ec9-a262-452a63f5770f/

[6] Полная сессия прогона Кейса 3: https://aether-lab.ru/share/session/b4e96c46-6587-4ff0-ad9d-aa99983bffc8/

[7] Полная сессия прогона Кейса 4: https://aether-lab.ru/share/session/da1ef170-bd93-464e-b697-7a695aa39067/

[8] Источник: https://habr.com/ru/articles/1102948/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1102948

www.BrainTools.ru

Rambler's Top100