Как программно задать раздел размещения для внешней обработки в 1С?

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

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

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

Почему в СведенияОВнешнейОбработке нет параметров размещения?

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

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

Как БСП хранит информацию о разделах размещения?

Выясним, где именно в базе данных сохраняются сведения о том, в каких разделах должна отображаться наша обработка. Когда администратор настраивает размещение интерактивно в пользовательском режиме, БСП записывает эти настройки в справочник ДополнительныеОтчетыИОбработки. У этого справочника есть табличная часть Разделы:

Таким образом, чтобы программно привязать обработку к разделу, нам нужно не настраивать функцию СведенияОВнешнейОбработке, а напрямую модифицировать данные в справочнике ДополнительныеОтчетыИОбработки после того, как обработка была зарегистрирована в системе.

Решение: Программное назначение раздела через код

Рассмотрим по шагам, как написать универсальный скрипт, который найдет зарегистрированную внешнюю обработку и программно добавит для нее привязку к разделу «Операции».

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


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

Если ПодсистемаМетаданных = Неопределено Тогда
    ВызыватьИсключение "Подсистема '" + ИмяПодсистемы + "' не найдена в текущей конфигурации!";
КонецЕсли;

// Шаг 2. Получаем ссылку на идентификатор объекта метаданных
ИдентификаторРаздела = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ПодсистемаМетаданных);

// Шаг 3. Находим нашу зарегистрированную обработку в справочнике БСП
НаименованиеОбработки = "Установка ставки НДС"; // Укажите наименование вашей обработки
СсылкаНаОбработку = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию(НаименованиеОбработки);

Если ЗначениеЗаполнено(СсылкаНаОбработку) Тогда
    
    // Создаем объект для изменения данных
    ОбъектОбработки = СсылкаНаОбработку.ПолучитьОбъект();
    
    // Блокируем объект для предотвращения коллизий при параллельной работе
    ОбъектОбработки.Заблокировать();
    
    // Проверяем, не добавлен ли этот раздел ранее, чтобы избежать дублирования строк
    СтрокаРаздела = ОбъектОбработки.Разделы.Найти(ИдентификаторРаздела, "Раздел");
    
    Если СтрокаРаздела = Неопределено Тогда
        
        // Добавляем новую запись в табличную часть разделов размещения
        НоваяСтрока = ОбъектОбработки.Разделы.Добавить();
        НоваяСтрока.Раздел = ИдентификаторРаздела;
        
        // Записываем измененный объект в базу данных
        ОбъектОбработки.Записать();
        
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Раздел '" + ИмяПодсистемы + "' успешно назначен для обработки!");
    Иначе
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Обработка уже размещена в разделе '" + ИмяПодсистемы + "'.");
    КонецЕсли;
    
Иначе
    ВызыватьИсключение "Внешняя обработка с наименованием '" + НаименованиеОбработки + "' не зарегистрирована в справочнике!";
КонецЕсли;

Проанализируем этот код подробнее. Сначала мы динамически получаем идентификатор подсистемы с помощью общего модуля БСП ОбщегоНазначения. Это гарантирует, что мы получим корректную ссылку на элемент метаданных. Затем мы выполняем поиск нашей обработки по наименованию, считываем её объект, проверяем табличную часть на дубли и добавляем новую запись. Такой подход полностью безопасен и корректно отрабатывает в любой типовой конфигурации 1С.

Альтернативный вариант: Интерактивная настройка размещения

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

Выполним следующие шаги для ручной настройки:

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

После выполнения этих простых действий пользователи увидят команду вызова вашей внешней обработки в выбранном разделе интерфейса в группе дополнительных обработок.

← На главную