Почему не удается подключить внешнюю обработку заполнения к документу в 1С:ERP?

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

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

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

Причина проблемы: ограничение в определяемых типах БСП

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

В Библиотеке Стандартных Подсистем за список метаданных, к которым разрешено подключать внешние обработки и печатные формы, отвечает определяемый тип ОпределяемыйТип.ОбъектСДополнительнымиКомандами (в некоторых версиях БСП также используется ОпределяемыйТип.ОбъектСПодключаемымиКомандами).

Если целевой документ (например, Документ.УпаковочныйЛист) не включен в состав этого определяемого типа, подсистема БСП не позволит выгрузить или назначить обработку данному документу в разделе «Размещение». При попытке выполнить программную регистрацию может возникать исключение вида:

{ОбщийМодуль.ДополнительныеОтчетыИОбработки.Модуль(...)}: Итератор для значения не определен

Решение проблемы через доработку конфигурации или расширение

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

Способ 1. Использование расширения конфигурации (без снятия с поддержки)

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

  1. Добавим в расширение конфигурации определяемый тип ОбъектСДополнительнымиКомандами.
  2. Добавим в расширение целевой документ (например, УпаковочныйЛист).
  3. В свойствах заимствованного определяемого типа ОбъектСДополнительнымиКомандами в составе типов установим флаг напротив добавленного документа.
  4. Заимствуем форму документа, в которой должна появляться кнопка заполнения, и добавляем вызов обработчика БСП в событие формы ПриСозданииНаСервере.

Код подключения обработчика в модуле формы документа через расширение будет выглядеть следующим образом:


&НаСервере
&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Подключение функционала дополнительных отчетов и обработок
    ДополнительныеОтчетыИОбработки.ПриСозданииНаСервере(ЭтотОбъект);
    
КонецПроцедуры

Способ 2. Редактирование состава определяемого типа в режиме конфигуратора

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

  1. Откроем конфигуратор и найдем ветку Определяемые типы.
  2. Найдем ОбъектСДополнительнымиКомандами и откроем его свойства.
  3. В поле Тип открываем список типов и находим нужный документ.
  4. Устанавливаем флажок напротив нужного документа и сохраняем изменения в конфигурации.

Проверка структуры функции СведенияОВнешнейОбработке()

Выясним, как должна быть сформирована экспортная функция в модуле объекта внешней обработки для корректной регистрации в справочнике «Дополнительные отчеты и обработки»:


Функция СведенияОВнешнейОбработке() Экспорт

    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    
    ПараметрыРегистрации.Наименование = "Заполнение документа Упаковочный лист";
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта();
    ПараметрыРегистрации.Версия = "1.0";
    ПараметрыРегистрации.БезопасныйРежим = Истина;
    
    // Указываем назначение обработки
    МассивНазначений = Новый Массив;
    МассивНазначений.Добавить("Документ.УпаковочныйЛист");
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    
    // Добавляем команду
    ТаблицаКоманд = ПараметрыРегистрации.Команды;
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = "Заполнить из внешнего источника";
    НоваяКоманда.Идентификатор = "ЗаполнитьУпаковочныйЛист";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыЗаполнениеФормы();
    НоваяКоманда.ПоказыватьОповещение = Истина;
    
    Возврат ПараметрыРегистрации;

КонецФункции

После включения документа в определяемый тип ОбъектСДополнительнымиКомандами и наличия вызова ДополнительныеОтчетыИОбработки.ПриСозданииНаСервере(ЭтотОбъект) в форме документа внешняя обработка успешно зарегистрируется в системе и станет доступна к выбору в меню заполнения документа.

← На главную