1C Code Bench — бенчмарк для оценки способности LLM-моделей писать код на 1С

15.12.25

Разработка - Инструментарий разработчика

В эпоху бума больших языковых моделей (LLM) возникает вопрос: насколько хорошо современные LLM пишут код на платформе 1С:Предприятие? Для объективной оценки этих возможностей мы разработали 1C Code Bench - бенчмарк, позволяющий тестировать и сравнивать способности LLM-моделей решать типовые задачи на 1С.

1C Code Bench - бенчмарк для оценки способности LLM писать код на 1С

 

Введение

В эпоху бума больших языковых моделей (LLM) возникает вопрос: насколько хорошо современные LLM пишут код на платформе 1С:Предприятие? Для объективной оценки этих возможностей мы разработали 1C Code Bench — специализированный бенчмарк, позволяющий систематически тестировать и сравнивать способности различных LLM-моделей решать типовые задачи программирования на 1С.

 

Кодовые бенчмарки

Кодовые бенчмарки - это наборы задач для оценки способности LLM-моделей генерировать работающий код. Принцип их работы прост: модели предлагается задача с описанием требуемой функции, она генерирует код, который затем проверяется набором тестов. Основная метрика - pass@k показывает долю задач, для которых хотя бы одно из k сгенерированных решений проходит все тесты (при k=1 это просто процент успешных решений).

Бенчмарки делятся на два типа. 

Простые бенчмарки (HumanEvalMBPPHumanEval+) содержат изолированные алгоритмические задачи: написать одну функцию по описанию и проверить её юнит-тестами. 

Мультиагентные бенчмарки (SWE-BenchSWE-Bench Verified) моделируют реальную разработку: модель получает issue из GitHub-репозитория и должна самостоятельно найти нужные файлы, понять контекст и внести корректные изменения в кодовую базу. Такие бенчмарки значительно сложнее, так как требуют от модели навыков навигации по коду, понимания архитектуры и работы с несколькими файлами одновременно.

 

Зачем нужен бенчмарк для 1С?

Существующие бенчмарки для оценки кодогенерации (HumanEval, MBPP, CodeForces и др.) ориентированы на популярные языки программирования: Python, JavaScript, Java и т.д. Платформа 1С:Предприятие с её встроенным языком остаётся не у дел.

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

  • Написание запросов к базе данных
  • Обработка табличных частей документов
  • Формирование движений по регистрам
  • Работа с формами и элементами управления
  • Написание отчетов и обработок
  • Интеграция с внешними системами

 

1C Code Bench призван ответить на вопросы: 

- Какие задачи уже решаются LLM, а на какие придется потратить больше времени на исправления глюков?

- Какие модели лучше?

 

Структура бенчмарка

 

На какой конфигурации тестируем?

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

 

Какие задачи в бенчмарке?

Бенчмарк включает 20 тестовых задач, разделённых на 3 уровня сложности:

  • Базовый — основы языка, простые операции с данными
  • Средний — работа с документами, регистрами, запросы
  • Сложный — комплексные бизнес-сценарии

 

Категории задач

По типу контекста:

  • Серверные задачи
  • Клиентские задачи

По предметной области:

  • Заполнение и изменение табличных частей
  • Работа со специфичными объектами 1С (ИнтернетПочтовоеСообщение, FTPСоединение и др.)
  • Выборки с помощью языка запросов
  • Манипуляции с коллекциями (ТаблицаЗначений, Массив и др.)
  • Работа с макетами и табличными документами
  • Операции с регистрами накопления и сведений

 

Формат задачи

Каждая задача представляет собой внешнюю обработку (.epf), содержащую:

  1. Макет "Задача" — текстовое описание того, что нужно реализовать
  2. Функция ЗапуститьРешение() — подготовка тестового окружения и вызов решения
  3. Функция ЗадачаРешена() — автоматическая проверка корректности результата
  4. Эталонное решение — референсная реализация, проходящая все тесты

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

 

Примеры задач

 

Пример 1: Заполнение табличной части остатками

 

Условие задачи:

Создай функцию ЗаполнитьТабличнуюЧастьОстатками(ДокументОбъект), которая заполняет
табличную часть документа «Заказ» «Товары» остатками из регистра «ТоварныеЗапасы»
для склада и даты, заданных в документе. Отбирать только товары с видом = Товар.

Эталонное решение:

Функция ЗаполнитьТабличнуюЧастьОстатками(ДокументОбъект)
    Запрос = Новый Запрос();
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Т.Товар КАК Товар,
    |    Т.КоличествоОстаток КАК Количество
    |ИЗ
    |    РегистрНакопления.ТоварныеЗапасы.Остатки(&Дата, Склад = &Склад) КАК Т
    |ГДЕ
    |    Т.Товар.Вид = ЗНАЧЕНИЕ(Перечисление.ВидыТоваров.Товар)";

    Запрос.УстановитьПараметр("Дата",  ДокументОбъект.Дата);
    Запрос.УстановитьПараметр("Склад", ДокументОбъект.Склад);

    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        СтрокаТЧ = ДокументОбъект.Товары.Добавить();
        ЗаполнитьЗначенияСвойств(СтрокаТЧ, Выборка);
    КонецЦикла;
КонецФункции

 

Пример 2: Замена номенклатуры в документах

 

Условие задачи:

Создай функцию ЗаменитьНоменклатуру(ТоварИсточник, ТоварЗамены, ДатаС, ДатаПо),
которая находит все документы "Заказ" за указанный период и заменяет в них
один товар на другой. Вернуть количество изменённых документов.

Эталонное решение:

Функция ЗаменитьНоменклатуру(ТоварИсточник, ТоварЗамены, ДатаС, ДатаПо) Экспорт
    КоличествоИзмененных = 0;

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Заказ.Ссылка КАК Ссылка
        |ИЗ
        |    Документ.Заказ КАК Заказ
        |ГДЕ
        |    Заказ.Дата >= &ДатаС
        |    И Заказ.Дата <= &ДатаПо
        |    И НЕ Заказ.ПометкаУдаления";

    Запрос.УстановитьПараметр("ДатаС", ДатаС);
    Запрос.УстановитьПараметр("ДатаПо", ДатаПо);

    Выборка = Запрос.Выполнить().Выбрать();

    Пока Выборка.Следующий() Цикл
        ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
        БылаЗамена = Ложь;
        БылПроведен = ДокументОбъект.Проведен;

        Для Каждого СтрокаТовары Из ДокументОбъект.Товары Цикл
            Если СтрокаТовары.Товар = ТоварИсточник Тогда
                СтрокаТовары.Товар = ТоварЗамены;
                БылаЗамена = Истина;
            КонецЕсли;
        КонецЦикла;

        Если БылаЗамена Тогда
            Если БылПроведен Тогда
                ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
            Иначе
                ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
            КонецЕсли;
            КоличествоИзмененных = КоличествоИзмененных + 1;
        КонецЕсли;
    КонецЦикла;

    Возврат КоличествоИзмененных;
КонецФункции

 

Пример 3: Расчёт комиссии менеджеров

 

Условие задачи:

Создай функцию РасчетКомиссииМенеджера(ТаблицаКомиссий, Процент, ДатаС, ДатаПо), которая находит документы "Заказ" в заданном интервале и вычисляет комиссию менеджера исходя из сумм в табличной части Товары
1) Смотрим только проведенные заказы
2) Сумма заказа - это сумма всех строк по реквизиту Сумма
3) Комиссия менеджера - сумма всех заказов менеджера (реквизит Автор) в периоде, умноженная на Процент
Функция должна заполнить таблицу ТаблицаКомиссий, где должно быть три колонки: Менеджер (из реквизита Автор), СуммаЗаказов, Комиссия. Менеджер в таблице должен быть уникальным, один менеджер - одна строка 

Эталонное решение:

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

    Запрос.УстановитьПараметр("ДатаС", ДатаС);
    Запрос.УстановитьПараметр("ДатаПо", ДатаПо);

    Выборка = Запрос.Выполнить().Выбрать();

    Пока Выборка.Следующий() Цикл
        НоваяСтрока = ТаблицаКомиссий.Добавить();
        НоваяСтрока.Менеджер = Выборка.Менеджер;
        НоваяСтрока.СуммаЗаказов = Выборка.СуммаЗаказов;
        НоваяСтрока.Комиссия = Выборка.СуммаЗаказов * Процент / 100;
    КонецЦикла;

    Возврат ТаблицаКомиссий;
КонецФункции

 

Методология оценки

Какие метрики замеряем:

Compile Rate: доля задач, где код компилируется и выполняется платформой;

Success Rate: доля задач, где решение прошло тесты;

 

Результаты тестирования

 

Процесс тестирования

  1. Генерация решения — LLM получает описание задачи и контекст конфигурации, генерирует код
  2. Подстановка кода — сгенерированный код подставляется в обработку вместо эталонного решения
  3. Компиляция — платформа 1С пытается скомпилировать обработку
  4. Выполнение — при успешной компиляции запускается функция ЗапуститьРешение()
  5. Проверка — функция ЗадачаРешена() верифицирует результат

 

Автоматизация

Весь процесс полностью автоматизирован: скрипт на Python выполняет все этапы - подстановки кода, выполнение и др.

Скрипт генерации поддерживает различные LLM-провайдеры:

  • Anthropic (Claude)
  • OpenRouter (доступ к множеству моделей)

Весь код бенчмарка и инструкции по запуску доступны в репозитории

 

Текущие метрики моделей:

Модель
Compile Rate
Success Rate
Claude Sonnet 4.5 85% 70%
Gemini 3 Pro 80% 70%
GPT-5 (high reasoning) 40% 30%
     
     
     
     

 

 

Анализ результатов

Сильные стороны современных LLM:

  • Хорошо понимают базовый синтаксис языка 1С
  • Делают простые запросы к данным (не более 3 JOIN-ов)
  • Работа с коллекциями (массивы, структуры, ТаблицаЗначений) - знают все методы и свойства

Типичные ошибки:

  • Неправильное использование виртуальных таблиц регистров (путают где какие параметры ставить)
  • Ошибки в синтаксисе языка запросов  (GPT-5 забывает ставить | для разделения строк запроса)
  • Неверные имена методов и свойств объектов метаданных
  • Путаница между серверным и клиентским контекстом

 

Как участвовать в развитии бенчмарка

 

Добавление новых задач

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

Процесс добавления:

  1. Скачайте шаблон обработки из репозитория
  2. Создайте задачу по инструкции
  3. Проверьте решение локально
  4. Отправьте через форму или создайте Pull Request

Требования к задачам

  • Задача должна быть решаемой, но не тривиальной (10-100 строк кода)
  • Результат должен быть однозначно проверяемым
  • Задача должна отражать реальные сценарии разработки на 1С
  • Обработка не должна изменять данные демо-базы (или откатывать изменения)

 

Вкратце, итоги:

1C Code Bench - первый открытый бенчмарк для оценки способностей LLM генерировать код на 1С. Проект позволяет:

  • Объективно сравнивать различные модели
  • Отслеживать прогресс в области AI-ассистентов для 1С
  • Выявлять области, требующие улучшения в обучении моделей

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

 

Ссылки

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

См. также

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

24900 руб.

20.08.2024    57112    307    154    

279

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

02.09.2020    239672    1304    419    

1109

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

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

15250 руб.

25.08.2025    36153    77    19    

89

Пакетная печать Печатные формы Инструментарий разработчика Программист 1С:Предприятие 8 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Библиотека стандартных подсистем Платные (руб)

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.

22570 руб.

06.10.2023    33768    87    35    

110

Инструменты администратора БД Инструментарий разработчика Роли и права Программист 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)

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

17000 руб.

10.11.2023    22955    83    42    

98

Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

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

9500 руб.

17.05.2024    47474    164    63    

201

Разработка Инструментарий разработчика Работа с интерфейсом Адаптация типовых решений Нейросети 1C:Бухгалтерия 1C:ERP 1С:ЗУП 1С:КА 1С:УНФ 1С:УТ 1С:Розница 1С:ДО 1С:ERP Управление предприятием 2 Платные (руб)

Разработка "Дизайнер форм 1С" реализована в виде расширения 1С и является универсальным инструментом для разработки прототипа форм с целью демонстраций, технических заданий и т.д. Без участия разработчика с возможностью экспорта в файл внешней обработки и генерации формы используя искусственный интеллект.

36600 руб.

28.08.2025    5137    2    2    

5