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