При разработке и подключении внешних обработок заполнения к типовым конфигурациям на базе Библиотеки Стандартных Подсистем (БСП), таким как 1С:ERP Управление предприятием, специалисты иногда сталкиваются с ситуацией, когда нужный документ не отображается в списке размещения или при подключении возникает ошибка вызова итератора.
Разберем подробно, с чем связано такое поведение подсистемы дополнительных отчетов и обработок и как правильно настроить конфигурацию и обработку для решения этой задачи.
Проанализируем механику работы механизмов регистраций БСП. Когда в модуле внешней обработки в функции СведенияОВнешнейОбработке() мы указываем назначение обработки для конкретного документа, система проверяет, поддерживает ли данный объект метаданных работу с дополнительными командами.
В Библиотеке Стандартных Подсистем за список метаданных, к которым разрешено подключать внешние обработки и печатные формы, отвечает определяемый тип ОпределяемыйТип.ОбъектСДополнительнымиКомандами (в некоторых версиях БСП также используется ОпределяемыйТип.ОбъектСПодключаемымиКомандами).
Если целевой документ (например, Документ.УпаковочныйЛист) не включен в состав этого определяемого типа, подсистема БСП не позволит выгрузить или назначить обработку данному документу в разделе «Размещение». При попытке выполнить программную регистрацию может возникать исключение вида:
{ОбщийМодуль.ДополнительныеОтчетыИОбработки.Модуль(...)}: Итератор для значения не определен
Рассмотрим, как правильно предоставить документу возможность работы с внешними обработками заполнения. Существует два основных подхода: прямое изменение типовой конфигурации и использование расширения (рекомендуемый способ).
Чтобы сохранить конфигурацию 1С:ERP на полноценной типовой поддержке, выполним доработку через расширение конфигурации (.cfe):
ОбъектСДополнительнымиКомандами.УпаковочныйЛист).ОбъектСДополнительнымиКомандами в составе типов установим флаг напротив добавленного документа.ПриСозданииНаСервере.Код подключения обработчика в модуле формы документа через расширение будет выглядеть следующим образом:
&НаСервере
&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Подключение функционала дополнительных отчетов и обработок
ДополнительныеОтчетыИОбработки.ПриСозданииНаСервере(ЭтотОбъект);
КонецПроцедуры
Если конфигурация уже находится на поддержке с возможностью изменения, проанализируем настройки метаданных напрямую:
ОбъектСДополнительнымиКомандами и откроем его свойства.Выясним, как должна быть сформирована экспортная функция в модуле объекта внешней обработки для корректной регистрации в справочнике «Дополнительные отчеты и обработки»:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Наименование = "Заполнение документа Упаковочный лист";
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта();
ПараметрыРегистрации.Версия = "1.0";
ПараметрыРегистрации.БезопасныйРежим = Истина;
// Указываем назначение обработки
МассивНазначений = Новый Массив;
МассивНазначений.Добавить("Документ.УпаковочныйЛист");
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
// Добавляем команду
ТаблицаКоманд = ПараметрыРегистрации.Команды;
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = "Заполнить из внешнего источника";
НоваяКоманда.Идентификатор = "ЗаполнитьУпаковочныйЛист";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыЗаполнениеФормы();
НоваяКоманда.ПоказыватьОповещение = Истина;
Возврат ПараметрыРегистрации;
КонецФункции
После включения документа в определяемый тип ОбъектСДополнительнымиКомандами и наличия вызова ДополнительныеОтчетыИОбработки.ПриСозданииНаСервере(ЭтотОбъект) в форме документа внешняя обработка успешно зарегистрируется в системе и станет доступна к выбору в меню заполнения документа.