При разработке внешних печатных форм (ВПФ) для современных конфигураций 1С, использующих Библиотеку стандартных подсистем (БСП), разработчики часто сталкиваются с ситуацией, когда форма корректно работает в режиме отладки через форму обработки, но выдает ошибку при вызове из системы после загрузки в справочник дополнительных отчетов и обработок. Сообщение об ошибке В обработчике печати не был сформирован табличный документ указывает на то, что подсистема печати не смогла найти результат формирования макета для конкретной вызванной команды.
Механизм печати в конфигурациях типа КА 2.5 или ERP 2 строго типизирован и опирается на соответствие идентификаторов. Процесс состоит из двух основных этапов:
СведенияОВнешнейОбработке() мы объявляем команду и задаем ей Идентификатор. Именно этот идентификатор будет передан в подсистему печати при выборе пользователем нужного пункта меню.Печать() мы выполняем формирование данных и должны передать их в коллекцию, используя УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(). Ошибка возникает, когда в качестве третьего параметра (имя команды) мы передаем не тот идентификатор, который был зарегистрирован в первом пункте.Если при регистрации команды вы указали УПДВнешний, а при выводе в коллекцию написали имя самого документа, например РеализацияТоваровУслуг, система будет искать «задание» на печать с именем РеализацияТоваровУслуг. Не найдя его в списке активных команд, она вернет исключение.
Давайте проанализируем, как должна выглядеть профессионально оформленная процедура Печать. Мы должны использовать функцию УправлениеПечатью.НужноПечататьМакет, чтобы убедиться, что система ожидает именно наш макет.
Процедура Печать(МассивОбъектовНазначения, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
// Проверяем, вызвал ли пользователь именно нашу команду
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, \"УПДВнешний\") Тогда
// Формируем табличный документ
ТабличныйДокумент = СформироватьПечатнуюФорму(МассивОбъектовНазначения, ОбъектыПечати);
// Выводим его в коллекцию, используя ВЕРНЫЙ идентификатор
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
\"УПДВнешний\",
\"УПД (с сортировкой как в распоряжении)\",
ТабличныйДокумент
);
КонецЕсли;
КонецПроцедуры
СведенияОВнешнейОбработке(). Скопируйте строку, где указан идентификатор в методе ДобавитьКоманду(). В вашем случае это УПДВнешний.Печать(). В вызове метода УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию() замените строку РеализацияТоваровУслуг на УПДВнешний.Дополнительные отчеты и обработки. Иногда полезно удалить старую запись и создать новую, чтобы БСП корректно перечитала параметры регистрации.Работа с печатными формами в БСП требует дисциплины. Рассмотрим несколько советов, которые помогут избежать подобных ошибок в будущем:
1. Использование функции НужноПечататьМакет: Всегда оборачивайте логику формирования в этот метод. Это позволяет объединять несколько печатных форм в одной внешней обработке. Если у вас в одной ВПФ есть и счет, и накладная, этот метод гарантирует, что вы сформируете только то, что запросил пользователь.
2. Идентификатор как константа: Чтобы избежать опечаток, которые являются частой причиной ошибок, рекомендуется вынести идентификатор команды в строковую константу или переменную модуля, например:
// В начале модуля объекта
Перем ИмяКомандыПечати Экспорт;
ИмяКомандыПечати = \"УПДВнешний\";
3. Отладка: Если форма по-прежнему не работает, установите точку останова в процедуре Печать. Проверьте содержимое параметра КоллекцияПечатныхФорм в отладчике. Вы увидите, какие ключи (идентификаторы) ожидает система. Это самый быстрый способ понять, почему БСП «не видит» ваш документ.
Проанализировав эти шаги, вы сможете быстро локализовать проблему и устранить несоответствие. Главное правило: идентификатор, заданный при регистрации (СведенияОВнешнейОбработке), должен в точности совпадать с тем, который вы передаете в ВывестиТабличныйДокументВКоллекцию.