В процессе разработки на платформе 1С:Предприятие часто возникают задачи по автоматизации рутинных действий. Одной из таких задач является программное извлечение внутренней обработки из состава конфигурации и сохранение её в виде внешнего файла .epf. Это может потребоваться для создания систем автоматического тестирования, интеграции с Git или организации хранилища внешних обработок. Рассмотрим детально, какими способами можно решить эту задачу, учитывая ограничения встроенного языка.
Начнем с того, что встроенный язык 1С не предоставляет прямого метода вроде Конфигурация.Обработки.МояОбработка.ЗаписатьКакФайл(). Платформа разделяет данные (хранящиеся в таблицах базы) и метаданные (описание структуры). Внутренние обработки являются частью дерева метаданных и хранятся в бинарном виде внутри конфигурации. Проанализируем ситуацию: стандартными методами встроенного языка «изнутри» сеанса предприятия выгрузить сам код и формы объекта в .epf невозможно. Однако существуют обходные пути через пакетный режим работы конфигуратора и использование механизмов БСП.
Самый надежный и официально поддерживаемый способ — это использование параметров командной строки. Для выгрузки конкретных объектов (отчетов или обработок) в платформе предусмотрен специальный ключ. Разберем по шагам, как это работает.
Для выгрузки используется параметр /DumpExternalDataProcessorOrReportToFiles. Важно понимать, что эта команда выгружает объект не в один файл .epf, а в виде набора исходных файлов (XML-описания, модули, формы). Если вашей целью является именно получение исходников для Code Review или Git, это идеальный вариант.
Пример команды для запуска из скрипта или через КомандаСистемы:
"C:\Program Files\1cv8\common\1cestart.exe" DESIGNER /F "D:\Base1C" /N "Admin" /P "Pass" /DumpExternalDataProcessorOrReportToFiles "C:\Export\MyProcessing.xml" Обработка.ИмяОбработки
В данном примере мы указываем путь к информационной базе, учетные данные и путь к файлу настроек выгрузки. Проанализируем параметры: DESIGNER запускает конфигуратор, а последующие ключи определяют действие. Чтобы собрать эти файлы обратно в .epf, потребуется встречная команда /LoadExternalDataProcessorOrReportFromFiles.
Если ваша цель — «Хранилище для неких внешних обработок», как упоминалось в обсуждении, то наиболее профессиональным подходом будет использование подсистемы «Дополнительные отчеты и обработки» из Библиотеки Стандартных Подсистем (БСП). В этом случае обработка не является частью метаданных конфигурации, а хранится как элемент справочника в виде двоичных данных.
Выясним причину популярности этого метода: он позволяет обновлять обработки без изменения самой конфигурации и динамически выгружать их на диск. Рассмотрим пример кода, который программно извлекает такую обработку из хранилища и записывает её в файл:
// Получаем объект из справочника "ДополнительныеОтчетыИОбработки"
СсылкаНаОбработку = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("ПечатьДоговора");
ДанныеФайла = СсылкаНаОбработку.ХранилищеОбработки.Получить();
Если ТипЗнч(ДанныеФайла) = Тип("ДвоичныеДанные") Тогда
ПутьКФайлу = "C:\Temp\ExternalProcessing.epf";
ДанныеФайла.Записать(ПутьКФайлу);
Сообщить("Файл успешно сохранен по пути: " + ПутьКФайлу);
КонецЕсли;
Этот метод позволяет полностью автоматизировать работу с внешними файлами, используя только средства встроенного языка, без обращения к конфигуратору.
Для разработчиков, стремящихся к продвинутой автоматизации (DevOps в 1С), рекомендуется обратить внимание на экосистему OneScript. Существуют готовые библиотеки, такие как v8runner, которые упрощают работу с командной строкой конфигуратора. Разберем ситуацию: вам нужно выгрузить объект, собрать его в .epf и положить в определенную папку.
С помощью OneScript это превращается в лаконичный скрипт, который можно запускать по расписанию или при определенных событиях в системе. Кроме того, существуют утилиты вроде v8unpack, которые позволяют «распаковывать» файлы конфигурации .cf. Если программно выгрузить всю конфигурацию в файл (что можно сделать встроенным языком через пакетный режим), то затем сторонней утилитой можно «выкусить» из этого файла конкретную обработку.
Стоит отметить сообщение из обсуждения о том, что программная работа с текстами модулей не реализована. В рамках обычного сеанса 1С:Предприятие это действительно так. Вы не можете через Метаданные.Обработки.Имя.МодульОбъекта получить текст кода. Однако, если выгрузить объект в файлы (как описано в Способе 1), вы получите файлы с расширением .bsl, которые являются обычными текстовыми файлами. Их можно читать, модифицировать и собирать обратно в .epf программно.
Подведем итоги нашего анализа. Выбор метода зависит от конечной задачи:
ХранилищеЗначения (как в БСП). Это самый простой и эффективный путь для работы внутри программы./DumpExternalDataProcessorOrReportToFiles) и OneScript.Помните, что запуск конфигуратора в пакетном режиме требует наличия свободной лицензии. Если вы запускаете такую команду из кода 1С, убедитесь, что в системе достаточно лицензий для параллельного сеанса, иначе процесс завершится с ошибкой.