Как программно выгрузить обработку из конфигурации 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе разработки на платформе 1С:Предприятие часто возникают задачи по автоматизации рутинных действий. Одной из таких задач является программное извлечение внутренней обработки из состава конфигурации и сохранение её в виде внешнего файла .epf. Это может потребоваться для создания систем автоматического тестирования, интеграции с Git или организации хранилища внешних обработок. Рассмотрим детально, какими способами можно решить эту задачу, учитывая ограничения встроенного языка.

Ограничения встроенного языка и стандартные возможности

Начнем с того, что встроенный язык 1С не предоставляет прямого метода вроде Конфигурация.Обработки.МояОбработка.ЗаписатьКакФайл(). Платформа разделяет данные (хранящиеся в таблицах базы) и метаданные (описание структуры). Внутренние обработки являются частью дерева метаданных и хранятся в бинарном виде внутри конфигурации. Проанализируем ситуацию: стандартными методами встроенного языка «изнутри» сеанса предприятия выгрузить сам код и формы объекта в .epf невозможно. Однако существуют обходные пути через пакетный режим работы конфигуратора и использование механизмов БСП.

Способ 1: Пакетный режим запуска конфигуратора

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

Для выгрузки используется параметр /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.

Способ 2: Хранение в справочнике (Метод БСП)

Если ваша цель — «Хранилище для неких внешних обработок», как упоминалось в обсуждении, то наиболее профессиональным подходом будет использование подсистемы «Дополнительные отчеты и обработки» из Библиотеки Стандартных Подсистем (БСП). В этом случае обработка не является частью метаданных конфигурации, а хранится как элемент справочника в виде двоичных данных.

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


// Получаем объект из справочника "ДополнительныеОтчетыИОбработки"
СсылкаНаОбработку = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("ПечатьДоговора");
ДанныеФайла = СсылкаНаОбработку.ХранилищеОбработки.Получить();

Если ТипЗнч(ДанныеФайла) = Тип("ДвоичныеДанные") Тогда
    ПутьКФайлу = "C:\Temp\ExternalProcessing.epf";
    ДанныеФайла.Записать(ПутьКФайлу);
    Сообщить("Файл успешно сохранен по пути: " + ПутьКФайлу);
КонецЕсли;

Этот метод позволяет полностью автоматизировать работу с внешними файлами, используя только средства встроенного языка, без обращения к конфигуратору.

Способ 3: Использование OneScript и сторонних утилит

Для разработчиков, стремящихся к продвинутой автоматизации (DevOps в 1С), рекомендуется обратить внимание на экосистему OneScript. Существуют готовые библиотеки, такие как v8runner, которые упрощают работу с командной строкой конфигуратора. Разберем ситуацию: вам нужно выгрузить объект, собрать его в .epf и положить в определенную папку.

С помощью OneScript это превращается в лаконичный скрипт, который можно запускать по расписанию или при определенных событиях в системе. Кроме того, существуют утилиты вроде v8unpack, которые позволяют «распаковывать» файлы конфигурации .cf. Если программно выгрузить всю конфигурацию в файл (что можно сделать встроенным языком через пакетный режим), то затем сторонней утилитой можно «выкусить» из этого файла конкретную обработку.

Программная работа с текстами модулей

Стоит отметить сообщение из обсуждения о том, что программная работа с текстами модулей не реализована. В рамках обычного сеанса 1С:Предприятие это действительно так. Вы не можете через Метаданные.Обработки.Имя.МодульОбъекта получить текст кода. Однако, если выгрузить объект в файлы (как описано в Способе 1), вы получите файлы с расширением .bsl, которые являются обычными текстовыми файлами. Их можно читать, модифицировать и собирать обратно в .epf программно.

Резюме и рекомендации

Подведем итоги нашего анализа. Выбор метода зависит от конечной задачи:

  1. Если нужно организовать хранилище динамически обновляемых обработок — используйте справочник и тип ХранилищеЗначения (как в БСП). Это самый простой и эффективный путь для работы внутри программы.
  2. Если нужно автоматизировать сборку и выгрузку для контроля версий — используйте пакетный режим конфигуратора (/DumpExternalDataProcessorOrReportToFiles) и OneScript.
  3. Если требуется анализ кода — выгружайте объект в файлы XML и анализируйте текстовые файлы модулей.

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

← На главную