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

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

В современных конфигурациях 1С (таких как УТ, БП, ЗУП, ERP), построенных на базе Библиотеки стандартных подсистем (БСП), механизмы интеграции внешних отчетов и обработок полностью стандартизированы. Однако при попытке автоматизировать этот процесс — например, при развертывании обновлений или массовой загрузке обработок — разработчики часто сталкиваются с трудностями. В частности, возникает вопрос: как программно привязать загружаемую внешнюю обработку к определенным разделам (подсистемам) интерфейса?

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

Выясняем причину: почему не работает авторегистрация разделов?

Часто разработчики пытаются передать разделы интерфейса непосредственно в модуле внешней обработки — внутри экспортной функции СведенияОВнешнейОбработке(). В этой функции формируется структура параметров регистрации, куда пытаются добавить таблицу значений с разделами (как показано в Сообщении 8 темы форума):


// Пример НЕРАБОЧЕГО кода в модуле внешней обработки:
РегистрационныеДанные.Вставить("Разделы", тзРазделы); 

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

Поэтому правильный путь решения — это создание элемента справочника ДополнительныеОтчетыИОбработки программным путем и заполнение его табличной части Разделы.

Разберем по шагам алгоритм программной регистрации

Для того чтобы полностью программно загрузить файл внешней обработки (.epf или .erf) и привязать его к конкретным подсистемам, нам необходимо выполнить следующие действия:

  1. Прочитать двоичные данные файла: Считать файл внешней обработки с диска и поместить его во временное хранилище.
  2. Создать элемент справочника: Создать новый объект справочника ДополнительныеОтчетыИОбработки.
  3. Инициализировать параметры регистрации: Использовать стандартные механизмы БСП для автозаполнения команд и реквизитов из модуля обработки.
  4. Программно привязать к разделам: Найти нужные подразделы в справочнике ИдентификаторыОбъектовМетаданных и добавить их в табличную часть Разделы нашего объекта.
  5. Записать объект: Сохранить элемент справочника в базе данных.

Рассмотрим подробнее реализацию каждого шага на примере готового программного кода.

Пример реализации программной регистрации

Ниже приведен готовый листинг кода, который вы можете использовать в своей обработке или регламентном задании для автоматической регистрации внешних обработок в интерфейсе.


Процедура ЗарегистрироватьВнешнююОбработкуВРазделах(ПутьКФайлу, ПолноеИмяПодсистемы) Экспорт

    ФайлНаДиске = Новый Файл(ПутьКФайлу);
    Если Не ФайлНаДиске.Существует() Тогда
        ВызватьИсключение "Указанный файл внешней обработки не найден!";
    КонецЕсли;

    // Шаг 1. Помещаем двоичные данные файла во временное хранилище
    ДвоичныеДанныеФайла = Новый ДвоичныеДанные(ПутьКФайлу);
    АдресХранилища = ПоместитьВоВременноеХранилище(ДвоичныеДанныеФайла);

    // Шаг 2. Создаем элемент справочника БСП
    НоваяОбработка = Справочники.ДополнительныеОтчетыИОбработки.СоздатьЭлемент();
    НоваяОбработка.Наименование = ФайлНаДиске.ИмяБезРасширения;
    НоваяОбработка.ИмяФайла = ФайлНаДиске.Имя;
    НоваяОбработка.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется;
    
    // Указываем тип: дополнительная обработка (глобальная)
    НоваяОбработка.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка;

    // Шаг 3. Регистрация параметров через БСП (заполнение команд из СведенияОВнешнейОбработке)
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.ПараметрыРегистрацииВнешнейОбработки();
    ПараметрыРегистрации.АдресВременногоХранилища = АдресХранилища;
    ПараметрыРегистрации.ИмяФайла = ФайлНаДиске.Имя;

    // Вызываем системный метод БСП для автозаполнения реквизитов и табличной части команд
    ДополнительныеОтчетыИОбработки.ЗарегистрироватьОбработку(НоваяОбработка, ПараметрыРегистрации);

    // Шаг 4. Программное заполнение разделов интерфейса
    // Важно: Искать подсистему нужно по ее полному имени в метаданных, а не по наименованию!
    СсылкаНаРаздел = Справочники.ИдентификаторыОбъектовМетаданных.НайтиПоРеквизиту("ПолноеИмя", ПолноеИмяПодсистемы);

    Если ЗначениеЗаполнено(СсылкаНаРаздел) Тогда
        НоваяСтрокаРаздела = НоваяОбработка.Разделы.Добавить();
        НоваяСтрокаРаздела.Раздел = СсылкаНаРаздел;
    Иначе
        ЗаписьЖурналаРегистрации("РегистрацияОбработки", 
            УровеньЖурналаРегистрации.Предупреждение, , , 
            "Не найдена подсистема с полным именем: " + ПолноеИмяПодсистемы);
    EndЕсли;

    // Шаг 5. Записываем подготовленный элемент справочника
    Попытка
        НоваяОбработка.Записать();
        Сообщить("Внешняя обработка '" + НоваяОбработка.Наименование + "' успешно зарегистрирована в разделе: " + ПолноеИмяПодсистемы);
    Исключение
        ИнформацияОбОшибке = ИнформацияОбОшибке();
        ВызватьИсключение "Ошибка при записи внешней обработки: " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
    КонецПопытки;

КонецПроцедуры

Для вызова этого метода в качестве параметра подсистемы передавайте ее реальное имя из конфигуратора, например, "Подсистема.Продажи", "Подсистема.БанкИКасса" или "Подсистема.Администрирование":


ЗарегистрироватьВнешнююОбработкуВРазделах("C:\Distr\MyProcessing.epf", "Подсистема.Продажи");

Важные нюансы работы с метаданными и БСП

Проанализируем ключевые моменты, на которые следует обратить внимание при программной работе со справочником разделов:

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

← На главную