Как массово загрузить внешние обработки в конфигурацию 1С и сделать их встроенными?

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

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

В этой статье мы подробно разберем, как автоматизировать данный процесс, используя механизмы пакетной работы платформы 1С:Предприятие, выгрузку конфигурации в XML-файлы и среду разработки 1C:EDT.

Почему нельзя решить задачу простым кодом в режиме Предприятия?

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

Решение 1. Автоматический импорт через выгрузку и модификацию XML-файлов конфигурации

Этот способ идеально подходит для традиционной разработки в конфигураторе. Мы воспользуемся механизмом выгрузки конфигурации в файлы XML, программно внедрим туда наши обработки и загрузим конфигурацию обратно. Весь процесс можно полностью автоматизировать с помощью скриптов (например, на PowerShell, OneScript или Python).

Рассмотрим по шагам данный алгоритм:

  1. Полная выгрузка конфигурации-приемника в файлы XML. Для начала выгрузим структуру метаданных нашей базы в каталог на диске с помощью пакетного режима конфигуратора:
    
    "C:\Program Files\1cv8\8.3.X.X\bin\1cv8.exe" DESIGNER /F "ПутьКБазе" /N "Администратор" /P "Пароль" /DumpConfigToFiles "C:\ConfigXML"
    
  2. Пакетная конвертация внешних обработок (файлов .epf) в XML-формат. Платформа 1С умеет автоматически конвертировать внешние обработки в XML-структуру конфигурации. Для этого используется параметр командной строки /DumpExternalDataProcessorOrReportToFiles. Нам нужно в цикле запустить эту команду для каждого из 300 файлов:
    
    "C:\Program Files\1cv8\8.3.X.X\bin\1cv8.exe" DESIGNER /F "ПутьКБазе" /DumpExternalDataProcessorOrReportToFiles "C:\OutXML\ИмяОбработки" "C:\SourceEPF\ИмяОбработки.epf"
    
    Примечание: Напишите простой bat-файл или скрипт автоматизации, который обойдет файлы в папке "C:\SourceEPF" и выполнит эту команду для каждого файла.
  3. Перенос сконвертированных каталогов обработок в XML-структуру конфигурации. Сгенерированные XML-папки обработок необходимо скопировать в структуру выгруженной конфигурации в подкаталог встроенных обработок: C:\ConfigXML\DataProcessors\ (или C:\ConfigXML\Reports\, если это внешние отчеты).
  4. Модификация файла-манифеста конфигурации (самый важный шаг). Просто скопировать XML-файлы обработок в папки недостаточно. Конфигуратор не "увидит" их, пока они не будут зарегистрированы в главном файле-описателе структуры метаданных. В корне каталога выгрузки найдем файл-манифест Configuration.xml (или Configuration.mdo в зависимости от версии платформы). Нам необходимо программно открыть этот XML-документ и добавить новые узлы в секцию дочерних объектов обработок <ChildObjects> -> <DataProcessor>. Пример добавляемой структуры для каждого импортированного объекта:
    
    <ChildObjects>
        <DataProcessor>ИмяНовойОбработки1</DataProcessor>
        <DataProcessor>ИмяНовойОбработки2</DataProcessor>
    </ChildObjects>
    
  5. Обратная загрузка измененной конфигурации из файлов. После добавления всех обработок в манифест и копирования их XML-описаний выполним импорт обновленной конфигурации обратно в информационную базу:
    
    "C:\Program Files\1cv8\8.3.X.X\bin\1cv8.exe" DESIGNER /F "ПутьКБазе" /LoadConfigFromFiles "C:\ConfigXML"
    
    После успешного импорта не забудьте обновить конфигурацию базы данных командой /UpdateDBCfg.

Решение 2. Использование среды разработки 1C:EDT и Git

Если вы ведете разработку в современной среде 1C:EDT (Enterprise Development Tools), задача массового импорта решается еще проще, поскольку EDT по умолчанию работает с проектом как с набором исходных файлов в иерархической структуре каталогов.

Выясним последовательность действий для массового переноса в EDT:

  1. Перемещение файлов проекта. В структуре вашего проекта EDT внешние обработки хранятся в папке src/ExternalDataProcessors/. Переместите папки всех нужных обработок в каталог встроенных обработок: src/DataProcessors/.
  2. Изменение типа объектов в метаданных. Внутри каталога каждой перенесенной обработки найдите файл описания метаданных с расширением .mdo. Откройте эти файлы и с помощью групповой замены в текстовом редакторе (например, VS Code) измените тип метаданных с ExternalDataProcessor на DataProcessor.
  3. Регистрация обработок в проекте. Откройте главный файл манифеста проекта src/Configuration.mdo. В секции дочерних объектов конфигурации добавьте строки с именами перенесенных обработок.
  4. Импорт изменений в EDT. Откройте среду разработки EDT. Программа автоматически просканирует файловую систему, обнаружит новые добавленные папки в src/DataProcessors/, сопоставит их с записями в Configuration.mdo и корректно отобразит их в дереве проекта. Вам останется лишь применить изменения к информационной базе.

Альтернативный вариант: Загрузка во внешний справочник БСП

Если жесткое добавление обработок в дерево метаданных конфигурации не является обязательным архитектурным требованием, рассмотрите возможность использования типового справочника Библиотеки Стандартных Подсистем (БСП) ДополнительныеОтчетыИОбработки. Это позволит не снимать конфигурацию с поддержки и обновлять файлы обработок "на лету" без отключения пользователей от базы.

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


ВыборкаФайлов = НайтиФайлы("C:\SourceEPF\", "*.epf");
Для Каждого Файл Из ВыборкаФайлов Цикл
    НовыйОбъект = Справочники.ДополнительныеОтчетыИОбработки.СоздатьЭлемент();
    НовыйОбъект.Наименование = Файл.ИмяБезРасширения;
    НовыйОбъект.ХранилищеОбработки = Новый ХранилищеЗначения(Новый ДвоичныеДанные(Файл.ПолноеИмя));
    НовыйОбъект.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется;
    
    // Заполняем остальные обязательные реквизиты БСП в зависимости от версии вашей конфигурации
    // ...
    
    НовыйОбъект.Записать();
КонецЦикла;

Подведем итоги: выбор решения зависит от ваших задач. Если вам необходимо "чистое" дерево метаданных конфигурации для жесткого контроля версий, используйте первый метод с пакетной выгрузкой XML или второй метод с использованием среды EDT. Если же вам критически важно быстро предоставить функционал пользователям без изменения метаданных самой конфигурации — воспользуйтесь программным заполнением справочника БСП.

← На главную