Ловля на ИИ: нейро-ревью BSL-кода, где получилось два заключения по одному модулю, что повлекло массу проверок на платформе 1С

12.10.26

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

На примере ревью BSL-кода в Codex поймём, почему замечания о скидке и округлении требуют контракта функций. Для исходного и исправленного модулей выполнены 14 проверок поведения на 1С:Предприятии 8.3.27.2130: исходник прошёл 8 из 14, исправленный код - 14 из 14. В этой практической статье - условия постановки опыта, а в архиве - оба заключения агентов и код.

Файлы

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

Наименование Скачано Купить файл
Учебный стенд для проверки заключений ИИ по BSL
.zip 23,81Kb
0 2 500 руб. Купить

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

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

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

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

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

Для разработчиков 1С: ревью подопытного BSL-модуля с проверкой поведения на платформе.

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

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

Для кого: разработчикам 1С, которые поручают ИИ первичную проверку изменений и затем сами принимают замечания.

Модуль с правильным синтаксисом и неправильным поведением

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

Функция Договорённость Что делает исходный код
СредняяЦена Пустой массив допустим, результат 0 Делит сумму на количество элементов
ПрименитьСкидку 0 означает отсутствие скидки; только Неопределено заменяется на 10%; аргумент вызывающего кода сохраняется Проверяет ЗначениеЗаполнено и присваивает параметру 10
СуммаКОплате Сначала суммировать произведения, потом округлить итог Округляет произведение в каждой строке
СортированнаяКопия Вернуть отдельную таблицу; исходный порядок сохранить Присваивает таблицу другой переменной и сортирует её
СуммаСтрок Сложить числовую колонку загруженной таблицы значений Читает СтрокаТовара.Сумма внутри цикла
РазобратьКоличество Ошибку преобразования передать вызывающему коду Вызывает Число(Текст) без локального перехвата

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

Что именно получили агенты

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

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

Запуск A получил prompt.md и review-input.bsl. Запуск B получил те же файлы и context.md с договорённостями из таблицы. У агентов были отдельные беседы без истории редакционной работы. Эталон и платформенные проверки им не передавались. Инструкция запрещала читать другие файлы, пользоваться сетью и исполнять код; отдельной файловой песочницы для этого опыта не было.

Условие Значение
Дата опыта 09.10.2026
Среда ревью Агенты в Codex, по одному ответу на вариант
Модель В локальных журналах обеих сессий: gpt-6-astra, уровень рассуждения medium; остальные параметры генерации не зафиксированы
Платформенная проверка 1С:Предприятие 8.3.27.2130, x86, Windows
База Отдельная новая файловая база для каждого варианта кода
Исполнение Общий модуль через внешнее COM-соединение из 32-битного Windows PowerShell

Точный повтор ответов модели по этим данным не гарантируется. Архив позволяет повторить задания и проверку BSL, сопоставить своё ревью с сохранёнными ответами. Сравнения продуктов, рейтинга моделей и замера экономии времени здесь нет.

Без контракта хороший ответ заканчивается вопросом

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

Для скидки агент заметил и подмену нуля, и изменение аргумента. Затем спросил, что означает 0 и допускается ли побочный эффект. Для округления привёл контрпример, но оставил выбор правила за контрактом. Технически это полезные замечания уже на первом проходе.

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

Группа Ответ A: только код Ответ B: код с контрактом
Пустой массив Показан риск, запрошена реакция на пустоту Требуется вернуть 0
Нулевая скидка и аргумент Оба эффекта обнаружены, их допустимость уточняется Оба эффекта нарушают контракт
Округление Приведён контрпример, задан вопрос о правиле Требуется округление общего итога
Копирование Отсутствие копии обнаружено; требование пока выведено из имени Требуется отдельная таблица и сохранение оригинала
Две контрольные функции Без безусловных требований менять код Соответствуют приложенным условиям

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

Ноль превратился в скидку, а входной параметр изменился

Вот исходная функция из модуля:

BSL UTF-8 Учебный пример
1
2
3
4
5
6
Функция ПрименитьСкидку(Сумма, Скидка) Экспорт
    Если Не ЗначениеЗаполнено(Скидка) Тогда
        Скидка = 10;
    КонецЕсли;
    Возврат Сумма * (100 - Скидка) / 100;
КонецФункции

Проверка на платформе передала сумму 100 и переменную Скидка = 0. Функция вернула 90, переменная вызывающего кода стала равна 10. В отдельной проверке с Неопределено результат 90 был верным, но входная переменная тоже менялась на 10, хотя это запрещено контрактом.

Исправленный вариант различает отсутствие значения и числовой ноль. Параметр Знач Скидка позволяет менять локальное значение, сохраняя аргумент вызывающего кода в проверенных сценариях:

BSL UTF-8 Учебный пример
1
2
3
4
5
6
Функция ПрименитьСкидку(Сумма, Знач Скидка) Экспорт
    Если Скидка = Неопределено Тогда
        Скидка = 10;
    КонецЕсли;
    Возврат Сумма * (100 - Скидка) / 100;
КонецФункции

Для остальных ошибок правки тоже небольшие. Пустой массив проверяется перед делением. Округление переносится в возврат общего итога. Сортировка работает с результатом Таблица.Скопировать().

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

Ответ модели проверила платформа

Оба модуля прошли /CheckModules для сервера и внешнего соединения: «Синтаксических ошибок не обнаружено!». Затем один и тот же проверочный модуль выполнил 14 проверок поведения.

Сохранила журналы этого прогона в архиве, в папке evidence/platform. Полное содержимое input-4.log:

Синтаксических ошибок не обнаружено!

В fixed-4.log записана та же строка. Это результат проверки синтаксиса. Значения функций проверяются следующим запуском через COM.

Результат получает скрипт companion/run_tests.ps1. Его полный текст:

Powershell UTF-8 Учебный пример
1
2
3
4
5
6
7
8
9
10
11
12
param([Parameter(Mandatory=$true)][string]$Base, [Parameter(Mandatory=$true)][string]$Output)
$ErrorActionPreference = 'Stop'
$connector = New-Object -ComObject V83.COMConnector
$connection = $connector.Connect('File="' + $Base + '";')
try {
    $module = [System.__ComObject].InvokeMember('ПроверкаРевью', [Reflection.BindingFlags]::GetProperty, $null, $connection, $null)
    $result = $module.Запустить()
    [System.IO.File]::WriteAllText($Output, $result, (New-Object System.Text.UTF8Encoding($false)))
} finally {
    [void][System.Runtime.InteropServices.Marshal]::ReleaseComObject($connection)
    [void][System.Runtime.InteropServices.Marshal]::ReleaseComObject($connector)
}

Запустить() возвращает JSON, который PowerShell записывает в файл. Отдельный журнал COM-соединения этот скрипт не ведёт. В проверочном модуле строка D2-zero сравнивает результат скидки с 100, а D2-argument проверяет, осталась ли входная переменная равна 0.

Два объекта из input-results.json, без изменения полей и значений:

JSON UTF-8 Учебный пример
1
2
3
4
5
6
7
8
9
10
{
"id": "D2-zero",
"pass": false,
"detail": "90"
},
{
"id": "D2-argument",
"pass": false,
"detail": "10"
}

Те же проверки в fixed-results.json:

JSON UTF-8 Учебный пример
1
2
3
4
5
6
7
8
9
10
{
"id": "D2-zero",
"pass": true,
"detail": "100"
},
{
"id": "D2-argument",
"pass": true,
"detail": "0"
}

Так видны оба эффекта правки: сумма стала 100, входная скидка осталась 0. Для пустого массива исходный журнал содержит объект:

JSON UTF-8 Учебный пример
1
2
3
4
5
{
"id": "D1-empty",
"pass": false,
"detail": "{ОбщийМодуль.Ревью.Модуль(6)}: Деление на 0"
}

В исправленном варианте у D1-empty записаны "pass": true и "detail": "0". В этих выдержках показаны отдельные объекты массива; полные JSON-файлы содержат по 14 объектов. Снимки экрана исходного запуска не сохранялись. Выдержки взяты из его файлов результатов.

Проверка Исходник После исправления
Средняя цена пустого массива Исключение: деление на 0 0
Сумма 100, скидка 0 90 100
Переменная со скидкой 0 после вызова 10 0
Переменная Неопределено после вызова 10 Неопределено
Две строки по 0.014 × 1 0.02 0.03
Первая цена оригинала после сортировки копии входа 2, 1 1 2
Всего пройдено 8 из 14 14 из 14

Платформенные проверки: исходник 8 из 14, исправленный модуль 14 из 14. Это не оценка точности ИИ.

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

Проверочный модуль считает ожидаемое исключение успешным результатом. Поэтому зелёная строка C2-error означает, что исключение дошло до вызывающего кода.

Как повторить опыт

Распакуйте архив. Для собственного ревью создайте две новые беседы в выбранном ИИ-инструменте. В первую передайте prompt.md и review-input.bsl, во вторую добавьте context.md. Не передавайте эталон, исправленный модуль и результаты до получения ответов. Сохраните точное название модели и параметры, которые показывает ваш инструмент.

Для проверки кода нужны установленная платформа 1С x86 с доступным COMConnector и Python 3. В моём прогоне использовался Python 3.12; зависимости Python сверх стандартной библиотеки сборщику не нужны. Из папки companion запустите:

python build_stand.py --variant input --output ../my-run/input
python build_stand.py --variant fixed --output ../my-run/fixed

Путь к платформе можно передать параметром --platform. Сборщик создаёт новую базу в системной временной папке при каждом запуске. Существующие базы не удаляет. Для каждой базы он выгружает пустую конфигурацию, добавляет модули, загружает изменения, проверяет синтаксис и вызывает проверки через COM. В файлах input-results.json и fixed-results.json сохраняются результаты отдельных проверок. false в исходном варианте ожидается: это проверка обнаруживаемых дефектов.

Перед повторным запуском выберите новую папку --output, если нужно сохранить прежние журналы. Базы остаются во временной папке для изучения; их пути выводятся сборщиком после успешного прогона.

Что сломалось при сборке стенда

Симптом Причина в этом прогоне Что исправлено
Платформа отклоняет строку подключения В аргументе CREATEINFOBASE использован неподходящий для этого запуска формат кавычек Применён формат File=путь из работающего сборщика проекта
Сборщик не находит пустой ChildObjects Новая конфигурация уже содержит язык Русский Добавление модулей сохраняет существующий узел языка
PowerShell отказывается читать .ps1 Политика исполнения локальной среды Вызов использует -ExecutionPolicy Bypass для дочернего процесса; политика системы не меняется
Кириллица в .ps1 превращается в нечитаемые символы Windows PowerShell прочитал UTF-8 без BOM в другой кодировке Скрипт сохранён в UTF-8 с BOM
Общий модуль через свойство COM даёт пустое значение Прямое обращение из PowerShell не получило модуль Модуль запрашивается через InvokeMember с GetProperty

Последняя таблица относится к моему окружению. Политики организации могут запрещать такой запуск PowerShell; тогда согласуйте штатный способ исполнения с администратором.

Где заканчивается этот результат

Набор маленький и специально составлен для опыта. Он не проверяет ревью крупных конфигураций, блокировки, права, проведение, динамические вызовы и конкурентный доступ. Проверки выполнены в файловой базе через COM; клиент-серверный вариант и тонкий клиент не запускались. Время работы не измерялось.

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

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

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

Материалы к статье

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

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

Ninel_S · Учебный опыт на 1С:Предприятии 8.3.27.2130 · 09.10.2026

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

1С BSL Codex код-ревью искусственный интеллект

См. также

Нейросети Системный администратор Разработчик Аналитик Бухгалтер Пользователь Руководитель проекта 1С 8.3 1С:Документооборот 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x Россия Платные (руб)

Подключите ИИ к 1С и решайте рабочие задачи обычными словами. От работы с данными до доработки конфигурации через расширения, всё в привычном чате с ИИ-помощником. Теперь с поддержкой DeepSeek Harness, Kimi Code и Kimi Work, доступных в России без VPN.

15990 руб.

30.07.2026    19309    40    4    

36

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-совместимые модели — данные могут не покидать ваш контур.

17500 руб.

20.12.2024    21423    104    32    

90

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

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

15250 руб.

25.08.2025    76694    147    41    

154

SALE! 30%

Нейросети 1С 8.3 1С:Документооборот 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Расширение добавляет в 1С чат с ИИ-агентом. Пользователь пишет вопрос обычными словами: «какие УПД не подписаны?», «какой НДС к уплате за квартал?», «что висит на согласовании дольше недели?», а агент сам строит запросы к базе с правами этого пользователя и отвечает цифрами, таблицей, диаграммой или файлом Excel. Плитки «Аналитик», «Бухгалтер» и «Руководитель» дают сводку по базе одной кнопкой. Агент разбирает ошибки по скриншоту, сверяет прайсы поставщиков и проверяет коды маркировки. С версии 1.0.21 спрашивать можно и с телефона: QR-код в окне агента, без установки приложения. Работает в УТ 11, КА 2, ERP 2, БП 3.0, УНФ 3.0, Документооборот 3.0 и Альфа-Авто 6, ставится одним расширением.

18300 руб.

05.10.2026    3334    10    9    

11

Инструментарий разработчика Нейросети Системный администратор Разработчик Руководитель проекта 1С 8.3 Платные (руб)

Обработка заменяет ФИО, организации, ИНН, ИИН, БИН, ОГРН, КПП, БИК, счета и IBAN, паспорта, СНИЛС, адреса, телефоны, почту и суммы на правдоподобные выдуманные перед отправкой данных в ChatGPT, Claude или YandexGPT, а потом расшифровывает ответ модели обратно, подставляя настоящие имена и настоящие числа. Возвращаются и те итоги, которые модель посчитала сама: суммы масштабируются одним коэффициентом, поэтому пропорции и доли переживают обезличивание. Словарь замен хранится в самой базе и подхватывается автоматически, даже если обработку закрывали. Реквизиты России и Казахстана, любая конфигурация от 8.3.24, без единой зависимости.

14640 руб.

07.08.2026    2134    3    0    

3

Распознавание документов и образов Нейросети 1С:Предприятие 8 1С 8.3 1С 8.5 1C:Бухгалтерия 1С:Зарплата и Управление Персоналом 3.x Беларусь Россия Казахстан Армения Платные (руб)

ИИ-сканер документов с REST API для интеграции с 1С и корпоративными системами. Извлекайте данные из счетов, паспортов, дипломов, патентов и трудовых книжек за секунды. Точность человека - скорость машины. Приложение поддерживает восемь типов документов, четырех провайдеров ИИ (имеется возможность использования локальных ИИ), локальный REST API и экспорт в JSON. Важно! модель должна поддерживать функцию Vision (распознавание файлов и картинок). Запускайте используя локальные ИИ, без подписок и ограничений

6100 руб.

24.08.2026    1397    1    0    

1

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

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

29.10.2026    4729    nt_app    12    

25

Нейросети Разработчик 1С:Предприятие 8 Россия Бесплатно (free)

За 2026 год MCP-инструменты для 1С прошли путь от «покажи метаданные» до «напиши код, загрузи в базу и проверь на живых данных». Собрали значимые публикации Инфостарта за год, описывающие MCP-серверы для подключения баз 1С к ИИ-агентам, и сравнили их по трём осям: зрелость, способ технической реализации подключения и требует ли инструмент изменения конфигурации базы 1С.

28.10.2026    8676    pfihr    12    

25
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ksnik 728 12.10.26 11:52 Сейчас в теме
Статья показывает контракт как текст — context.md с договорённостями:
«Запуск B получил те же файлы и context.md с договорённостями из таблицы.»
Контракт — это список утверждений:
«Пустой массив допустим, результат 0»
«0 означает отсутствие скидки»
«Сначала суммировать произведения, потом округлить итог»
Агент B прочитал этот текст и на его основе сформулировал диагноз. Но:
Контракт не исполняется. Он читается LLM.
Контракт не имеет состояний. Он либо есть, либо нет.
Контракт не эволюционирует. Он составлен один раз при подготовке статьи.
Контракт не проверяется автоматически. Агент решает, что считать нарушением.
Статья показывает: контракт-как-текст улучшает ревью. Но он не является механизмом.
Что есть в разработке https://infostart.ru/1c/tools/2794584/
«Бинарные тесты — деревья решений 2» вводит контракт как структуру:
Дерево решений — каждый узел это «Да/Нет», каждый лист — диагноз.
Три состояния — активна / на модерации / в корзине.
Звеновая модель — ветка как неделимое звено.
Модерация — контракт утверждается человеком.
Защита целостности — инвариант «одна активная связь на узел».
Это контракт-как-механизм. Он исполняется, имеет состояния, эволюционирует, проверяется автоматически.
2. Ninel_S 214 12.10.26 12:06 Сейчас в теме
(1) Спасибо, дорогой Коллега.
Теперь я гораздо лучше понимаю о чем я написала, Вы сделали "summaryzing in all".
Я стану теперь учиться делать так же и сокращать свои тексты.
Очевидно, достаточно было кратких тезисов, граф-схемы (Дракон) и архива.
Искренне Вас благодарю.
Для отправки сообщения требуется регистрация/авторизация