1С-код от нейросети: как тестировать то, что сгенерировал ИИ | infolimp.ru

1С-код от нейросети: как тестировать то, что сгенерировал ИИ

26 июля 2026 · infolimp.ru

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

Почему «красивый» код ИИ — это ловушка

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

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

Технический разбор: что именно упускает ИИ

Рассмотрим типовую задачу: получить остатки по регистру на дату. Нейросеть часто генерирует такой код:

// НЕПРАВИЛЬНО: нейросеть забывает про периодичность
Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|   Остатки.Количество Остаток
|ИЗ
|   РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, &Склад) КАК Остатки";
Запрос.УстановитьПараметр("Дата", ТекущаяДата());
Запрос.УстановитьПараметр("Склад", СсылкаНаСклад);
Результат = Запрос.Выполнить();

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

// ПРАВИЛЬНО: с проверкой через Метаданные
МетаРегистра = Метаданные.РегистрыНакопления.ТоварыНаСкладах;
Если МетаРегистра.Периодичность = ПериодичностьРегистраНакопления.Остатки Тогда
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |   Остатки.Количество Остаток
    |ИЗ
    |   РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата) КАК Остатки
    |ГДЕ
    |   Остатки.Склад = &Склад";
    Запрос.УстановитьПараметр("Дата", ТекущаяДата());
    Запрос.УстановитьПараметр("Склад", СсылкаНаСклад);
    Результат = Запрос.Выполнить();
Иначе
    Сообщить("Регистр не поддерживает остатки, используйте обороты");
КонецЕсли;

Методика тестирования: три уровня проверки

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

Уровень 1: Статический анализ через встроенные средства

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

Предупреждение: Никогда не запускайте сгенерированный ИИ код в рабочей базе без предварительного прогона в отладчике с точками останова на каждом Записать() и Выполнить(). Один неверный реквизит — и вы получите блокировку таблиц на 15 минут.

Уровень 2: Модульное тестирование через обработку «Тестирование»

В 1С есть штатная обработка «Тестирование и исправление ИБ», но для кода ИИ лучше написать свою обёртку. Пример минимального теста для проверки сгенерированной функции:

// Обработка.ТестГенерации.Форма.Форма
Процедура ТестПроверкиОстатков(Команда)
    // Подготовка тестовых данных
    ТестовыйСклад = Справочники.Склады.НайтиПоНаименованию("Основной");
    Если ТестовыйСклад = Справочники.Склады.Пустая() Тогда
        ТестовыйСклад = Справочники.Склады.СоздатьЭлемент();
        ТестовыйСклад.Наименование = "ТестовыйСклад_ДляИИ";
        ТестовыйСклад.Записать();
    КонецЕсли;
    
    // Вызов тестируемого кода (сгенерирован нейросетью)
    Попытка
        Результат = ВычислитьОстаткиПоСкладу(ТестовыйСклад, ТекущаяДата());
        Если Результат.Количество() = 0 Тогда
            ЗаписьЖурналаРегистрации("ТестИИ", УровеньЖурналаРегистрации.Информация,,,
                "Тест пройден: остатки пусты, как и ожидалось");
        Иначе
            // Дополнительная проверка: тип результата
            Для Каждого Строка Из Результат Цикл
                Если Не ЗначениеЗаполнено(Строка.Номенклатура) Тогда
                    Сообщить("Ошибка: пустая номенклатура в остатках");
                    Возврат;
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
    Исключение
        ЗаписьЖурналаРегистрации("ТестИИ", УровеньЖурналаРегистрации.Ошибка,,,
            "Ошибка: " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
    КонецПопытки;
КонецПроцедуры

Практическое руководство: чек-лист для внедрения кода ИИ

На основе опыта внедрения нейросетевых генераций в нескольких проектах мы составили список обязательных проверок. Не пропускайте ни один пункт.

  1. Проверка метаданных: откройте «Метаданные» в конфигураторе и убедитесь, что все объекты (документы, справочники, регистры), которые использует код, существуют в вашей конфигурации. ИИ часто выдумывает имена.
  2. Проверка прав доступа: сгенерированный код может использовать ПолучитьСсылку или НайтиПоКоду для объектов, к которым у пользователя нет прав. Прогоните код под учётной записью с минимальными правами.
  3. Проверка на рекурсию: нейросети любят генерировать рекурсивные вызовы обработчиков. Вставьте счётчик вызовов в начало процедуры и ограничьте глубину.
  4. Проверка на «забытые» транзакции: если код содержит НачатьТранзакцию(), убедитесь, что есть ЗафиксироватьТранзакцию() или ОтменитьТранзакцию() в блоке Исключение.
  5. Проверка на работу с внешними ресурсами: если код использует HTTPСоединение или ЧтениеJSON, проверьте таймауты и обработку ошибок соединения.

Типичные ошибки при тестировании кода ИИ

Ошибка Как проявляется Решение
Использование несуществующего реквизита Ошибка «Поле не найдено» при выполнении запроса Проверять через Метаданные.Реквизиты перед использованием
Некорректный тип параметра Ошибка «Несоответствие типов» при передаче в запрос Явно преобразовывать типы через Строка(Значение) или Число(Значение)
Отсутствие обработки исключений Аварийное завершение при ошибке Обернуть весь сгенерированный код в Попытка...Исключение
Генерация «вечного» цикла Зависание платформы Установить лимит итераций через СчетчикЦикла > 1000

Что делать прямо сейчас

Не ждите, пока код ИИ «упадёт» в рабочей базе. Выполните три шага:

  1. Создайте отдельную тестовую базу — копию конфигурации, где можно безопасно запускать сгенерированный код. Настройте её так, чтобы она была изолирована от обмена с другими системами.
  2. Напишите универсальную обработку-тестировщик, которая принимает текст модуля и выполняет его в контексте текущей конфигурации, логируя все ошибки и время выполнения. Примерный каркас мы привели выше.
  3. Внедрите правило code-review: любой код, сгенерированный ИИ, должен быть проверен как минимум двумя разработчиками. Один проверяет логику, второй — производительность.

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

Расширение «НОПик» для 1С — встраиваемый коннектор к внешнему AI с интеллектуальным поиском по базе. Задавайте вопросы обычными словами - AI сам найдёт нужное. 45 дней бесплатно.

Попробовать НОПик →