Ловушка "ПЕРВЫЕ 100": как нейросеть тихо потеряла 5 товаров на складе 1С
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
ПЕРВЫЕ 100 под предлогом «оптимизации производительности». На синтетическом тесте в 105 товаров это приводит к тихой потере 5 позиций без синтаксических ошибок и исключений./CheckModules не гарантирует корректность работы запроса (в частности, при операциях сравнения полей неограниченной длины) и требует обязательного исполнения на изолированном стенде.Проверка полноты запроса остатков 1С .zip (1 SM, 8.20 КБ): модули BSL ОстаткиПроба и ПроверкаОстатков, тестовый раннер build_stand.py, скрипт COM-соединения PowerShell, спецификация prompt.md и протокол приёмкиV83.COMConnector в 32-битном Windows PowerShell. Сборщик автоматически разворачивает временную файловую базу и загружает модулиpython build_stand.py --output run с автоматической проверкой синтаксиса /CheckModules и COM-вызовом проверочной функцииpassed: 8, total: 8). Стенд зафиксировал воспроизведение дефекта усечения (100 строк вместо 105 на складе A) и подтвердил точность полного запроса и фильтрацииИнженерная методология безопасной приёмки BSL-кода и запросов к остаткам, сгенерированных искусственным интеллектом (вайб-кодинг) для типовых конфигураций 1С:Предприятия (Управление торговлей 11, КА, ERP). Мы исследуем критические дефекты генерации (неявное усечение выборки директивой ПЕРВЫЕ 100, отсечение нулевых и отрицательных остатков, галлюцинации измерений), демонстрируем работу воспроизводимого тестового стенда на платформе 8.3.27.2130 и предоставляем готовый регламент приёмочного контроля до выкатки решения в продуктивную среду.
- Дефект скрытого лимита: добавление искусственным интеллектом конструкции
ПЕРВЫЕ 100без сортировки и постраничной навигации искажает реальную картину остатков на складе. - Иллюзия компиляции: успешная синтаксическая проверка модуля не выявляет рантайм-ошибок запроса, вызванных несовместимостью типов или полями неограниченной длины.
- Контракт метаданных: составление строгого паспорта задачи до отправки запроса в нейросеть исключает подмену реальных регистров вымышленными объектами.
- Разделение контуров тестирования: алгоритмическая полнота запроса проверяется на синтетическом стенде, а поведение экранной формы динамического списка — на копии целевой конфигурации под пользовательской ролью.
Вайб-кодинг в 1С переносит работу инженера с ручного набора BSL-конструкций на строгое проектирование контракта данных и построение автоматизированных тестов граничных условий.
Ловушка «ПЕРВЫЕ 100»: как нейросеть тихо потеряла 5 товаров на складе 1С
Инженерный подход к приёмке сгенерированного кода в 1С:Предприятии: почему нейросети усекают выборки, как выявить дефекты запроса до релиза и настроить автоматическую проверку через COM-соединение.
Для кого: 1С-разработчики, архитекторы и технические лидеры, использующие языковые модели (ChatGPT, Claude, локальные LLM) для генерации прикладных запросов и форм в УТ 11, ERP и КА, и отвечающие за корректность данных в учёте.
- Паспорт метаданных: почему нейросети нельзя давать свободную постановку
- Архитектура воспроизводимого стенда верификации на платформе 8.3.27.2130
- Дефект скрытого усечения: 100 строк вместо 105 на складе A
- Ловушка неограниченных строк: почему синтаксического контроля недостаточно
- Спецификация задачи для нейросети: готовый инженерный шаблон
- Регламент приёмочного тестирования на копии рабочей базы УТ 11
- Содержимое архива-компаньона и инструкция по запуску стенда
- Итоги и правила надёжного применения ИИ в разработке 1С
🔍 Паспорт метаданных: почему нейросети нельзя давать свободную постановку
Когда разработчик ставит задачу искусственному интеллекту в свободной форме вроде «Сделай форму остатков номенклатуры для УТ 11», результат почти всегда оказывается непригодным к промышленной эксплуатации. Языковая модель не знает конкретный релиз конфигурации, режим совместимости и точную схему метаданных. В итоге она начинает домысливать окружение: использует имена регистров из УТ 10.3, обращается к несуществующим ресурсам или путает способ поставки (внешняя обработка вместо расширения).
Чтобы исключить галлюцинации и получить детерминированный результат, формулировка задачи должна начинаться с паспорта метаданных, составленного непосредственно по выгрузке целевой конфигурации. В нём фиксируются релизы платформы и конфигурации, полные имена таблиц, состав измерений и ресурсов регистра, а также правила фильтрации.
| Параметр паспорта | Архитектурное и учётное влияние |
|---|---|
| Формат поставки | Расширение (CFE) или дополнительная обработка (EPF) определяют способ внедрения, заимствование объектов и контекст выполнения кода. |
| Источник остатков и срез итогов | Виртуальная таблица Остатки регистра накопления (например, ТоварыНаСкладах или СвободныеОстатки) требует точного указания точки среза для сверки с типовыми отчётами. |
| Отборы по складу и номенклатуре | Фиксируются типы ссылок, логика при незаполненном параметре (показывать всё или пустой список) и поведение при динамической смене значений на форме. |
| Нулевые и отрицательные остатки | Условие Количество > 0 молча отсекает отрицательные остатки (пересортица) и нулевые позиции с резервами. Требуется явно зафиксировать учётное правило. |
| Полнота выборки | Тестовый набор данных обязан содержать больше строк, чем предполагаемый лимит, для гарантированного выявления скрытого усечения. |
| Ролевой контекст | Проверка под полными правами администратора маскирует ограничения RLS кладовщика или менеджера по продажам. |
Если точная выписка структуры отсутствует, генерируемый запрос остаётся абстрактным эскизом. Агент обязан опираться на проверенный контракт, а любые отсутствующие в спецификации поля оформлять как уточняющие вопросы, а не подменять их догадками.
💻 Архитектура воспроизводимого стенда верификации на платформе 8.3.27.2130
Для объективной проверки запросов был спроектирован полностью автономный тестовый стенд. Исследуемое ограничение вынесено в изолированный запрос к таблице значений (помещаемой во временную таблицу), что позволило протестировать алгоритмическую логику без привязки к тяжеловесной демо-базе УТ 11.
| Компонент стенда | Характеристики и параметры |
|---|---|
| Версия платформы 1С | 1С:Предприятие 8.3.27.2130, архитектура x86 |
| Механизм автоматизации | Python 3.12.10 runner, вызывающий V83.COMConnector через 32-битный экземпляр Windows PowerShell |
| Изоляция базы данных | Автоматическое создание новой файловой информационной базы в изолированном временном каталоге |
| Синтетический тестовый массив | 105 положительных позиций склада A, 1 позиция склада B, нулевая и отрицательная позиции склада A |
| Контрольный критерий | Сравнение результатов выполнения запроса с директивой ПЕРВЫЕ 100 и полного запроса без искусственного лимита |
Сценарий сборщика выполняет следующие шаги в автоматическом режиме:
- Создаёт чистую файловую базу 1С пакетом команд утилиты платформы.
- Выгружает каркас конфигурации в XML, добавляет программные общие модули
ОстаткиПробаиПроверкаОстатков, загружает их обратно и выполняет обновление конфигурации базы данных. - Запускает пакетную синтаксическую проверку:
/CheckModules -Server -ExternalConnection. - Инициализирует COM-соединение, вызывает функцию верификации
ПроверкаОстатков.Запустить()и сериализует детальный отчёт в JSON.
python build_stand.py --output run
Синтаксических ошибок не обнаружено!
{"variant": "stock", "passed": 8, "total": 8}
Выполнение скрипта завершается с нулевым кодом возврата, подтверждая успешное выполнение всех 8 тестов. Детальные метрики и логи платформы фиксируются в run/stock-results.json.
📊 Дефект скрытого усечения: 100 строк вместо 105 на складе A
В исследуемом запросе параметр Данные загружается во временную таблицу. Далее накладываются условия по складу, положительному количеству и номенклатуре. Параметр Лимит динамически подставляет либо пустую строку, либо конструкцию ПЕРВЫЕ 100 .
Результаты прогона тестовой матрицы на синтетическом наборе выявили расхождение в полноте выборки:
| Тестовый сценарий | Ожидаемый результат | Фактический результат | Статус |
|---|---|---|---|
Склад A: запрос с лимитом ПЕРВЫЕ 100 |
100 строк (усечение 5 позиций) | 100 строк | Пройден (дефект воспроизведён) |
| Склад A: полный запрос без лимита | 105 строк (полная выборка) | 105 строк | Пройден |
| Склад B: изолированный отбор | 1 строка, количество 7 | 1 строка, количество 7 | Пройден |
| Склад C: пустой склад | 0 строк | 0 строк | Пройден |
| Точечный поиск: «Товар105» | 1 строка | 1 строка | Пройден |
Отбор нулевого остатка при условии > 0 |
0 строк | 0 строк | Пройден |
Отбор отрицательного остатка при условии > 0 |
0 строк | 0 строк | Пройден |
| Неизвестная номенклатура | 0 строк | 0 строк | Пройден |
Первый тест наглядно демонстрирует архитектурную проблему: ограниченный запрос молча оставляет за рамками выборки 5 реальных позиций из 105. В структуре отчёта stock-results.json факт подтверждается отдельными элементами массива:
Директива ПЕРВЫЕ 100 допустима исключительно тогда, когда бизнес-требование явно формулирует задачу как получение топ-100 записей с обязательной сортировкой УПОРЯДОЧИТЬ ПО. Если же перед пользователем открывается журнал складских остатков, искусственный лимит искажает результаты учёта. Вопрос оптимизации производительности решается построением правильных индексов и виртуальных таблиц среза, а не усечением выборки.
🚨 Ловушка неограниченных строк: почему синтаксического контроля недостаточно
При первичной генерации кода разработчики нередко полагаются на штатный синтаксический контроль платформы (/CheckModules), полагая, что отсутствие синтаксических ошибок гарантирует корректность выполнения. Опыт стендового тестирования доказывает обратное.
В первоначальной конфигурации таблицы значений колонкам был присвоен базовый тип Строка без явного указания длины. Модули успешно прошли статический контроль платформы 8.3.27.2130. Однако при реальном исполнении запроса через внешнее соединение платформа выдала фатальное исключение времени выполнения:
{ОбщийМодуль.ОстаткиПроба.Модуль(26)}:
Ошибка при вызове метода контекста (Выполнить):
{(10, 19)}: Неверные параметры в операции сравнения.
Нельзя сравнивать поля неограниченной длины и поля несовместимых типов.
ГДЕ Остатки.Склад = &Склад
СУБД и встроенный язык запросов 1С не поддерживают операции сравнения и группировки для строковых полей неограниченной длины. Чтобы устранить сбой, в генератор тестовых данных было внесено явное ограничение квалификатора длины:
Инженерный вывод: прохождение синтаксической валидации является необходимым, но совершенно недостаточным условием. Тестирование сгенерированного запроса обязано включать этап фактического выполнения на данных с типизированными полями.
🎯 Спецификация задачи для нейросети: готовый инженерный шаблон
Для гарантированного получения чистого BSL-кода в состав архива-компаньона включён готовый шаблон задания prompt.md. Он структурирован таким образом, чтобы исключить любые двусмысленности при генерации запроса и формы динамического списка.
Ключевые блоки инженерного промпта:
- Контекст метаданных: точное указание регистра (например,
РегистрНакопления.ТоварыНаСкладах.Остатки), измерений (Номенклатура,Склад,Характеристика) и ресурсов (ВНаличии). - Запрет искусственных лимитов: явный запрет на использование несанкционированных конструкций
ПЕРВЫЕ Nв основном запросе. - Обработка параметров и отборов: разделение параметров виртуальной таблицы (для фильтрации на уровне СУБД) и пользовательских отборов динамического списка (рекомендуемый шаблон 1C International).
- Поведение при сбросе фильтров: обязательное описание того, что происходит при очистке поля выбора склада (полная очистка списка либо срез по всем складам предприятия).
- Секция ненайденных определений: инструкция агенту не придумывать имена, а формировать блок открытых вопросов при отсутствии точных типов.
Перед приёмкой кода от нейросети запрашивается перечень затронутых объектов, исходные тексты модулей, команды компиляции и список сделанных допущений. С формулировкой «Всё готово, код работает» без предоставления артефактов приёмка не проводится.
🔒 Регламент приёмочного тестирования на копии рабочей базы УТ 11
Хотя изолированный стенд с временной таблицей подтверждает алгоритмическую полноту запроса, итоговая форма динамического списка должна быть принята на актуальной тестовой копии целевой конфигурации УТ 11 / ERP. Приёмочный регламент включает четыре обязательных этапа:
- Сквозной сценарий фильтрации по складам: последовательное переключение Склад A → Склад B → Очистка поля. Проверяется, что при переключении склада строки предыдущего склада мгновенно удаляются из отображения, а при очистке отбора поведение соответствует согласованному ТЗ.
- Сверка итогов с типовым отчётом: сравнение количества позиций и суммарных остатков с отчётом «Ведомость по товарам на складах» на идентичную дату и время среза.
- Контроль нулевых и отрицательных значений: проверка отображения товаров с отрицательным остатком при наличии разрешённого списания в минус в настройках склада.
- Проверка прав доступа и RLS: запуск формы под учётной записью линейного пользователя (роли
КладовщикилиМенеджерПоПродажам). Проверяется, что форма не падает с ошибкой нарушения прав доступа и не открывается в привилегированном режиме без отдельного согласования с архитектором.
Приёмка завершается фиксацией плана отката (деактивация или удаление расширения) и проверкой отсутствия изменений в метаданных основной конфигурации.
📂 Содержимое архива-компаньона и инструкция по запуску стенда
Для воспроизведения описанных проверок подготовлен компактный архив-компаньон «Проверка полноты запроса остатков 1С .zip» (1 SM, 8.20 КБ). Для запуска требуются:
- Операционная система Windows.
- Установленная 32-битная платформа 1С:Предприятие (в нашем тесте — 8.3.27.2130 x86).
- Зарегистрированная библиотека
comcntr.dll(V83.COMConnector). - Python версии 3.12 или выше.
Запуск автоматизированного прогона выполняется одной командой из терминала:
# Стандартный запуск с автоопределением установленной платформы python build_stand.py --output run # Запуск с явным указанием пути к исполняемому файлу 1С python build_stand.py --platform "C:\Program Files (x86)\1cv8\8.3.27.2130\bin\1cv8.exe" --output run
Файловый состав архива:
build_stand.py— главный оркестратор: создание временной базы, компиляция XML-исходников, запуск синтаксической проверки и сбор результатов.run_com.ps1— скрипт вызова COM-объекта в изолированном 32-битном процессе PowerShell с локальной политикой выполнения.src/ОстаткиПроба.bslиsrc/ПроверкаОстатков.bsl— программные модули логики запроса и тестовых наборов.prompt.md— верифицированный шаблон инженерного задания для нейросети.acceptance.md— пошаговый протокол приёмки на целевой конфигурации УТ 11.run/stock-results.json— эталонный протокол успешного прогона 8 тестов.
🏁 Итоги и правила надёжного применения ИИ в разработке 1С
Проведённое исследование на платформе 8.3.27.2130 наглядно показало, что генерация кода с помощью искусственного интеллекта даёт огромный прирост скорости, но требует зрелой инженерной дисциплины приёмки:
- Контролируйте полноту выборки: директива
ПЕРВЫЕ 100, добавленная без проектной необходимости, приводит к потере данных. Тестируйте запросы на массивах, превышающих лимит. - Фиксируйте метаданные до генерации: паспорт задачи защищает от галлюцинаций и подмены типов.
- Исполняйте, а не только компилируйте: синтаксический анализатор платформы слеп к ошибкам операций сравнения строк неограниченной длины и несовместимости типов в запросах.
- Принимайте в контексте пользователя: форма динамического списка должна быть проверена на копии целевой конфигурации под реальными ролями и профилями доступа.
Вступайте в нашу телеграмм-группу Инфостарт