Почему возникает ошибка «В обработчике печати не был сформирован табличный документ» при использовании внешней печатной формы?

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

Разработка внешних печатных форм для конфигураций на базе Библиотеки стандартных подсистем (БСП), таких как «Камин: Зарплата» или «1С:Зарплата и Управление Персоналом», часто сопровождается ошибкой: «В обработчике печати не был сформирован табличный документ». Разберем, почему это происходит и как устранить данную проблему, чтобы ваша форма заработала корректно.

Понимаем причину возникновения ошибки

Данная ошибка означает, что подсистема УправлениеПечатью успешно инициировала вызов вашей внешней обработки, однако на финальном этапе формирования печатной формы в коллекции не оказалось документа с ожидаемым идентификатором. Основные причины, которые мы с вами выявили:

  1. Несоответствие идентификаторов: Система ожидает, что идентификатор, зарегистрированный в таблице команд, будет в точности совпадать с тем именем макета, который вы передаете в процедуру вывода.
  2. Ошибка фильтрации: Использование функции НужноПечататьМакет с неверным строковым параметром блокирует выполнение кода формирования формы.
  3. Конфликт имен макетов: При использовании слишком общих имен макетов конфигурация может путаться в источниках данных.

Шаг 1: Проверяем идентификатор в сведениях об обработке

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

Рассмотрим правильный пример настройки команды:


// Внутри функции СведенияОВнешнейОбработке
ДобавитьКоманды(ТаблицаКоманд, 
    "Наименование для пользователя", 
    "МойУникальныйИдентификатор", 
    "ВызовСерверногоМетода", 
    Истина, 
    "ПечатьMXL");

Запомните: МойУникальныйИдентификатор — это ключевое значение. Оно должно использоваться в дальнейшем при обращении к коллекции печатных форм.

Шаг 2: Настраиваем процедуру Печать

Теперь перейдем к процедуре Печать. Часто разработчики совершают ошибку, указывая в функции НужноПечататьМакет имя макета, которое не совпадает с идентификатором команды. Исправим это:


Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    // Используем тот же самый идентификатор, что и в Сведениях
    ИмяМакета = "МойУникальныйИдентификатор";
    
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, ИмяМакета) Тогда
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
            КоллекцияПечатныхФорм, 
            ИмяМакета, 
            "Наименование для пользователя", 
            СформироватьМойТабличныйДокумент(МассивОбъектов),
            ,
            ИмяМакета);
    КонецЕсли;
    
КонецПроцедуры

Обратите внимание: во всех параметрах процедуры ВывестиТабличныйДокументВКоллекцию мы должны выдерживать единообразие. Если вы используете строку "МойУникальныйИдентификатор" в одном месте, используйте её везде, где требуется имя макета.

Шаг 3: Как избежать «шаманства» с кодом

Чтобы больше не сталкиваться с подобными ситуациями, следуйте этим рекомендациям при отладке:

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

← На главную