В практике любого разработчика 1С регулярно возникают задачи по импорту, обработке и анализу данных из внешних источников. Очень часто нас просят что-нибудь загрузить из Excel в 1С, но бывает и так, что нам нужно сравнить средствами 1С два файла и вывести различия. Например, сверить остатки или цены. Вот об этом и пойдет речь. И чтобы не было скучно, решать задачу мы будем по-модному, с помощью нейронок.
А что если структура файлов заранее не известна?
Увы, такое бывает частенько. Например, разные поставщики присылают файлы в разных форматах, да плюс еще эти форматы иногда меняются. Названия колонок могут отличаться (например, «Артикул» в одном файле и «ArticIe» в другом), их количество и порядок динамически меняются, а бизнес требует красивый, интерактивный отчет с возможностью настройки условного оформления, расчетом дельты (отклонений) и отборов.
Традиционное решение «в лоб» — полностью программное построение схемы компоновки данных (СКД), динамическое создание полей и элементов выбора на управляемой форме. Это выливается в десятки и сотни строк кода, который не очень удобно поддерживать и модифицировать.
Однако есть альтернативное решение, довольно элегантное, которое я подглядел в веб-разработке — паттерн «Слоты» (Slots), адаптированный под экосистему 1С.
Проблема динамических отчетов и классический подход
Когда структура файлов Excel «плавает», разработчики обычно приходят к концепции маппинга (сопоставления) через промежуточную таблицу значений. В ней пользователь вручную или полуавтоматически связывает колонку Файла №1 с аналогичной колонкой Файла №2. В паттерне «Слоты» нам от маппинга тоже никуда не уйти. А вот дальше идут отличия.
Чтобы вывести результат в СКД, классический алгоритм заставляет программиста писать громоздкий код для динамического создания полей компоновки:
// Традиционный ручной подход к динамической СКД ПолеСКД = СхемаКомпоновкиДанных.НаборыДанных[0].Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); ПолеСКД.ПутьКДанным = "ДинамическоеПоле_1"; ПолеСКД.Заголовок = ИмяКолонкиИзФайла; // И так для каждого поля, связи, отбора и элемента интерфейса...
Это долго, неудобно и практически исключает возможность использования стандартного визуального конструктора СКД платформы «1С:Предприятие».
Паттерн «Слоты» в СКД: Новый взгляд на архитектуру
Суть паттерна «Слоты» заключается в том, что мы заранее закладываем в схему фиксированное максимальное количество универсальных полей (слотов), настраиваем для них типы данных, ресурсы, вычисляемые поля для расчета отклонений (дельты) и условное оформление в визуальном редакторе. А уже программно мы лишь «включаем» нужные слоты, переименовываем их заголовки согласно файлу и отключаем лишние.
Как распределяются данные по слотам:
В рассматриваемом примере мы предполагаем, что нам нужно вывести разницу между какими-то числовыми колонками. Эти числовые колонки будем считать ресурсами. А группировочные колонки, по которым будем проводить сопоставление — будем считать ключами (можно назвать измерениями, разрезами, аналитиками — как угодно, суть будет примерно та же)
За счет такой архитектуры вся «тяжелая» часть настроек (расчет разницы, оформление ячеек цветом при наличии расхождений) настраивается в СКД один раз руками разработчика. Программная логика занимается исключительно переименованием полей и управлением видимостью. В рассматриваемом примере заложено 5 слотов (предполагая, что колонок для сверки будет не больше 5), но в реальном решении их количество может быть неограниченным.
Вайбкодинг: Поручаем рутину нейросетям
Писать однотипный код для управления слотами (скрытие неиспользуемых колонок, очистка, переименование, заполнение списков выбора на форме) — скучная рутинная работа. В концепции вайбкодинга (программирования в удовольствие под контролем разработчика) эту работу можно полностью переложить на современные языковые модели (ИИ).
В рассматриваемом примере нейронка расстаралась, и сгенерировала (не без косяков, конечно)
Около 200 строк кода для модуля управляемой формы (интерфейсная логика, чтение файлов, заполнение маппинга);
Около 350 строк кода для модуля объекта (настройка компоновщика, активация слотов, вывод отчета).
Важное правило Code Review: Нейросети отлично создают общую архитектуру и структуру кода, экономя вам до 80% времени. Однако они все еще совершают контекстные ошибки платформы 1С. Задача программиста — провести точечные исправления.
Ниже пример промта. Чем он подробнее, тем конечный результат будет лучше. Это как ТЗ, без которого, как известно, результат ХЗ. Поэтому не жалейте времени на составление грамотного задания.
Хотя можно, конечно и написать «Сделай мне код для обработки сравнения двух файлов эксель. Пиши код без ошибок». Но результат вас может разочаровать 😉
Примеры типичных ошибок ИИ, которые нужно исправить вручную:
Ошибки типов данных: ИИ может перепутать объектную модель настроек СКД. Например, посчитать, что Настройки — это обычная структура, в то время как в платформе 1С это Соответствие или специфический объект компоновки данных.
Синтаксис платформы: Использование несуществующих свойств объектов или некорректное имя Web-цветов в коде условного оформления (например, опечатка в наименовании цвета).
// Лесной зеленый (ForestGreen) выглядит в отчетах лучше, чем ядовитый базовый Зеленый //<< исправлено человеком //ЭлементУО_Плюс.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.ЛесноЗеленый); ЭлементУО_Плюс.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.ЗеленыйЛес); //>> исправлено человеком
Да, на нахождение и исправление таких багов может уйти от 5 минут и до пары часов, но все равно это несопоставимо быстрее написания 550 строк кода с нуля.
Результат для конечного пользователя
В пользовательском режиме работа с готовой обработкой выглядит максимально просто и бесшовно:
Пользователь выбирает Файл 1 и Файл 2 на форме.
Система в фоновом режиме считывает файлы, извлекает заголовки колонок и заполняет списки выбора.
В таблице сопоставления пользователь указывает, какие колонки будут выступать Ключом (измерением для связи), а какие — Ресурсом (показателем для сравнения).
По нажатию кнопки «Сформировать» мгновенно выводится отчет СКД. В нем отображаются состыкованные данные, выводится разница (дельта) и применяется понятное цветовое условное оформление для отклонений.
Заключение
Паттерн «Слоты» демонстрирует, что динамические отчеты в 1С могут быть гибкими без необходимости писать сложный программный код формирования схем компоновки с нуля. Использование нейросетей в связке с глубокими знаниями платформы 1С (концепция Вайбкодинга) позволяет разработчику полностью избавиться от рутины и сфокусироваться на проектировании высокоуровневой архитектуры приложений.
Хотите получить готовый инструмент? Подробный разбор этого кейса, готовый файл внешней обработки для 1С, а также пример промта для нейросети доступны для резидентов закрытого ИТ-клуба Alexcode.PRO. Развивайте свои навыки разработки и внедряйте ИИ в ежедневную практику уже сегодня!