Бенчмарк для оценки навыков программирования на 1С:Предприятие
Комплексная система тестирования способностей ИИ-моделей решать практические задачи разработки на платформе 1С:Предприятие
О проекте
1C Code Bench представляет собой специализированный бенчмарк для оценки способностей больших языковых моделей (LLM) решать задачи программирования на платформе 1С:Предприятие.
Наш бенчмарк включает реальные задачи из практики разработки 1С, охватывающие все основные аспекты платформы: работу с данными, бизнес-логику, интерфейсы и интеграции.
Среда выполнения задач: Демонстрационная конфигурация "Управляемое приложение"
🎯 Практичность
Задачи основаны на реальных кейсах разработки
📊 Многоуровневость
От базовых операций до сложной архитектуры
🔍 Автоматизация
Полностью автоматизированная проверка решений
Примеры задач
Заполнение табличной части остатками
СреднийЗадача:
Создай функцию ЗаполнитьТабличнуюЧастьОстатками(ДокументОбъект), которая заполняет табличную часть документа «Заказ» «Товары» остатками из регистра «ТоварныеЗапасы» для склада и даты, заданных в документе. Отбирать только товары видом товара = Товар.
Функция ЗаполнитьТабличнуюЧастьОстатками(ДокументОбъект)
// Ваш код здесь
КонецФункции
Решение:
Функция ЗаполнитьТабличнуюЧастьОстатками(ДокументОбъект)
Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ
| Т.Товар КАК Товар,
| Т.КоличествоОстаток КАК Количество
|ИЗ
| РегистрНакопления.ТоварныеЗапасы.Остатки(&Дата, Склад = &Склад) КАК Т
|ГДЕ
| Т.Товар.Вид = ЗНАЧЕНИЕ(Перечисление.ВидыТоваров.Товар)";
Запрос.УстановитьПараметр("Дата", ДокументОбъект.Дата);
Запрос.УстановитьПараметр("Склад", ДокументОбъект.Склад);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СтрокаТЧ = ДокументОбъект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТЧ, Выборка);
КонецЦикла;
КонецФункции
Работа с табличными документами
СложныйЗадача:
Создай функцию ЗаполнитьТабличныйДокумент(ТабДокумент, Макет, Дата) которая выводит в табличный документ задолженность по контрагентам из регистра Взаиморасчеты на дату. В макете есть секции Шапка и Строка, в секции строка есть параметры "Контрагент" и "Задолженность"
Функция ЗаполнитьТабличныйДокумент(ТабДокумент, Макет, Дата)
// Ваш код здесь
КонецФункции
Решение:
Функция ЗаполнитьТабличныйДокумент(ТабДокумент, Макет, Дата) Экспорт
ДатаКон = КонецДня(Дата);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Остатки.Контрагент КАК Контрагент,
| СУММА(Остатки.СуммаОстаток) КАК Задолженность
|ИЗ
| РегистрНакопления.Взаиморасчеты.Остатки(&ДатаКон, ) КАК Остатки
|СГРУППИРОВАТЬ ПО
| Остатки.Контрагент
|ИМЕЮЩИЕ
| СУММА(Остатки.СуммаОстаток) <> 0
|УПОРЯДОЧИТЬ ПО
| Контрагент";
Запрос.УстановитьПараметр("ДатаКон", ДатаКон);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
ТабДокумент.Очистить();
Если Макет <> Неопределено Тогда
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
Если ОбластьШапка <> Неопределено Тогда
ТабДокумент.Вывести(ОбластьШапка);
КонецЕсли;
КонецЕсли;
Пока Выборка.Следующий() Цикл
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьСтрока.Параметры.Контрагент = Выборка.Контрагент;
ОбластьСтрока.Параметры.Задолженность = Выборка.Задолженность;
ТабДокумент.Вывести(ОбластьСтрока);
КонецЦикла;
Возврат ТабДокумент;
КонецФункции
Работа с регистрами сведений
СреднийЗадача:
Создай функцию УдалитьПоследнююЗапись(Валюта) которая удаляет последнюю по времени запись регистра сведений КурсыВалют с измерением Валюта = Валюта
Функция УдалитьПоследнююЗапись(Валюта)
// Ваш код здесь
КонецФункции
Решение:
Функция УдалитьПоследнююЗапись(Валюта) Экспорт
// Находим самый поздний Период для заданной валюты
Запрос = Новый Запрос(
"ВЫБРАТЬ ПЕРВЫЕ 1
| Курсы.Период КАК Период
|ИЗ
| РегистрСведений.КурсыВалют КАК Курсы
|ГДЕ
| Курсы.Валюта = &Валюта
|УПОРЯДОЧИТЬ ПО
| Курсы.Период УБЫВ");
Запрос.УстановитьПараметр("Валюта", Валюта);
Рез = Запрос.Выполнить();
Выборка = Рез.Выбрать();
Если Не Выборка.Следующий() Тогда
Возврат Ложь; // записей по валюте нет
КонецЕсли;
// Удаляем именно эту запись по ключам (Валюта + Период)
Менеджер = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
Менеджер.Валюта = Валюта;
Менеджер.Период = Выборка.Период;
Менеджер.Прочитать();
Если Менеджер.Выбран() Тогда
Менеджер.Удалить();
КонецЕсли;
КонецФункции
Лидерборд
| Ранг | Модель | Компиляция | Корректность |
|---|---|---|---|
| 1 | Claude Sonnet 4.5 | 85% | 70% |
| 2 | Gemini 3 pro | 80% | 70% |
| 3 | GPT-5 reasoning_effort: high | 40% | 30% |
Структура датасета
Категории задач
Основы языка
- Типы данных и переменные
- Циклы и условия
- Функции и процедуры
Работа с данными
- Справочники и документы
- Регистры накопления
- Запросы к данным
Бизнес-логика
- Обработчики событий
- Проведение документов
- Расчеты и алгоритмы
Интерфейсы
- Формы и элементы управления
- Команды и обработчики
- Табличные части
Метрики оценки
Компиляция
Код должен компилироваться и выполняться без ошибок. Считается как процент успешных кейсов к общему количеству.
Корректность
Результат выполнения кода должен проходить процедуру валидации (тест). Считается как процент успешных кейсов к общему количеству.