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