Руководство по подготовке задач для бенчмарка 1С
Полное руководство по созданию задач для тестирования ИИ-моделей
Общие сведения
Бенчмарк 1С предназначен для оценки способности языковых моделей решать типовые задачи программирования на платформе 1С:Предприятие 8. Каждая задача оформляется как внешняя обработка (.epf), содержащая описание задачи, эталонное решение и систему автоматической проверки.
Категории задач
По типу контекста
- Серверные задачи - код выполняется на сервере
- Клиентские задачи - код выполняется на клиенте
По разделу предметной области
- Заполнение, изменение табличных частей
- Создание движений документа
- Заполнение табличного документа из макета
- Манипуляции с движениями регистров (добавление, удаление, изменение)
- Выборки из данных с условиями с помощью языка запросов
- Манипуляции с коллекциями без обращения к данным (например, фильтрация строк в ТаблицаЗначений)
- Выгрузка/загрузка данных в/из файлов различных форматов
- Получение/отправка данных через интернет, FTP, почту
- Манипуляции с прикладными объектами (интернет-почта, HTML-документ, криптография и т.д.)
- Операции с визуальными элементами управляемой формы
Структура внешней обработки
Задача может использовать объекты из базы данных Демонстрационная конфигурация "Управляемое приложение" или быть полностью автономной, не зависящей от данных.
Результатом оформления задачи является внешняя обработка 1С (.epf)
Базовые принципы:
- Обработка не должна менять данные базы (а если меняет - должна откатывать изменения)
- Обработка должна быть самодостаточной (все необходимые метаданные должны быть внутри обработки, например макеты, табличные части и т.д.)
Обработка должна содержать следующие обязательные компоненты:
1. Макет "Задача"
Текстовый макет с названием "Задача", содержащий описание задачи для решающего (модели или разработчика).
Создай функцию ЗаполнитьТабличнуюЧастьОстатками(ДокументОбъект), которая заполняет
табличную часть документа «Заказ» «Товары» остатками из регистра «ТоварныеЗапасы»
для склада и даты, заданных в документе. Отбирать только товары видом товара = Товар.
Для каждой позиции остатка нужно добавить строку в табличную часть и перенести туда
товар и количество.
2. Функция ЗапуститьРешение()
Функция в модуле обработки с именем ЗапуститьРешение(), которая:
- Создает тестовое окружение (документы, справочники и т.д.)
- Вызывает функцию-решение задачи
- Вызывает функцию проверки ЗадачаРешена()
- Возвращает
ИстинаилиЛожьв зависимости от результата
Функция ЗапуститьРешение() Экспорт
ДокументОбъект = Документы.Заказ.СоздатьДокумент();
ДокументОбъект.Дата = '20250920';
ДокументОбъект.Склад = Справочники.Склады.НайтиПоНаименованию("Большой");
ЗаполнитьТабличнуюЧастьОстатками(ДокументОбъект);
Возврат ЗадачаРешена(ДокументОбъект);
КонецФункции
3. Функция ЗадачаРешена()
Функция в модуле обработки с именем ЗадачаРешена(), которая:
- Принимает параметры для проверки (документ, результат и т.д.)
- Проверяет корректность решения задачи
- Возвращает
Истинаесли задача решена правильно,Ложьв противном случае
Функция ЗадачаРешена(ДокументОбъект) Экспорт
// Проверяем количество строк
Если ДокументОбъект.Товары.Количество() <> 19 Тогда
Возврат Ложь;
КонецЕсли;
// Проверяем сумму количеств
СуммаКоличеств = 0;
Для каждого СтрТовар Из ДокументОбъект.Товары Цикл
СуммаКоличеств = СуммаКоличеств + СтрТовар.Количество;
КонецЦикла;
Возврат СуммаКоличеств = 299;
КонецФункции
4. Эталонное решение
Сама функция, которая решает поставленную задачу. Это эталонное решение, проходящее тест.
Функция ЗаполнитьТабличнуюЧастьОстатками(ДокументОбъект)
Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ
| Т.Товар КАК Товар,
| Т.КоличествоОстаток КАК Количество
|ИЗ
| РегистрНакопления.ТоварныеЗапасы.Остатки(&Дата, Склад = &Склад) КАК Т
|ГДЕ
| Т.Товар.Вид = ЗНАЧЕНИЕ(Перечисление.ВидыТоваров.Товар)";
Запрос.УстановитьПараметр("Дата", ДокументОбъект.Дата);
Запрос.УстановитьПараметр("Склад", ДокументОбъект.Склад);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СтрокаТЧ = ДокументОбъект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТЧ, Выборка);
КонецЦикла;
КонецФункции
5. Дополнительные метаданные
Обработка должна содержать все необходимые для решения и проверки задачи метаданные:
- Формы
- Макеты (включая обязательный макет "Задача")
- Табличные части
- Реквизиты
- И другие элементы метаданных
Процесс подготовки задачи
Определение задачи
- Выберите категорию задачи (серверная/клиентская, предметная область)
- Сформулируйте описание задачи
- Определите сигнатуру функции-решения (имя, параметры, возвращаемое значение)
Создание обработки
- Возьмите шаблон обработки и создайте все небходимые элементы (код, макет) в конфигураторе 1С
- Добавьте текстовый макет с именем "Задача"
- Заполните макет описанием задачи
Тестирование решения
Запустите обработку в тестовой базе и проверьте корректность решения
Загрузка обработки
Загрузите готовую обработку в форму
Требования к оформлению
Описание задачи
- Формулировка должна быть четкой и однозначной
- Указывайте все необходимые детали (имена объектов, условия отбора и т.д.)
- Избегайте неоднозначностей и предположений
Функция-решение
- Используйте типовые приемы и паттерны 1С
- Практичное решение должно содержать 10-100 строк кода
Функция проверки
- Проверки должны быть достаточно строгими
- Учитывайте граничные случаи
- Проверяйте не только факт выполнения, но и корректность результата
Примеры проверок
Проверка количества элементов
Если Коллекция.Количество() <> ОжидаемоеКоличество Тогда
Возврат Ложь;
КонецЕсли;
Проверка суммы/агрегата
Сумма = 0;
Для каждого Элемент Из Коллекция Цикл
Сумма = Сумма + Элемент.Значение;
КонецЦикла;
Возврат Сумма = ОжидаемаяСумма;
Проверка содержимого
Для каждого Элемент Из Коллекция Цикл
Если НЕ УсловиеПроверки(Элемент) Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;
Возврат Истина;
Рекомендации
- Сложность задачи: Задача должна быть решаемой, но не тривиальной
- Тестируемость: Результат должен быть однозначно проверяемым
- Типичность: Задача должна отражать реальные задачи разработки на 1С
- Документирование: Сохраняйте комментарии о специфике задачи