Почему при загрузке внешней печатной формы в конфигурацию 1С возникает ошибка формирования табличного документа?

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

При разработке внешних печатных форм (ВПФ) для современных конфигураций 1С, использующих Библиотеку стандартных подсистем (БСП), разработчики часто сталкиваются с ситуацией, когда форма корректно работает в режиме отладки через форму обработки, но выдает ошибку при вызове из системы после загрузки в справочник дополнительных отчетов и обработок. Сообщение об ошибке В обработчике печати не был сформирован табличный документ указывает на то, что подсистема печати не смогла найти результат формирования макета для конкретной вызванной команды.

Разбор причин ошибки

Механизм печати в конфигурациях типа КА 2.5 или ERP 2 строго типизирован и опирается на соответствие идентификаторов. Процесс состоит из двух основных этапов:

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

Если при регистрации команды вы указали УПДВнешний, а при выводе в коллекцию написали имя самого документа, например РеализацияТоваровУслуг, система будет искать «задание» на печать с именем РеализацияТоваровУслуг. Не найдя его в списке активных команд, она вернет исключение.

Правильная структура процедуры Печать

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


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

КонецПроцедуры

Пошаговое решение

  1. Проверка идентификатора: Откройте модуль объекта вашей внешней обработки. Найдите функцию СведенияОВнешнейОбработке(). Скопируйте строку, где указан идентификатор в методе ДобавитьКоманду(). В вашем случае это УПДВнешний.
  2. Корректировка процедуры Печать: Перейдите к процедуре Печать(). В вызове метода УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию() замените строку РеализацияТоваровУслуг на УПДВнешний.
  3. Очистка кэша и перерегистрация: После внесения изменений в код модуля объекта, необходимо перевыбрать файл внешней обработки в справочнике Дополнительные отчеты и обработки. Иногда полезно удалить старую запись и создать новую, чтобы БСП корректно перечитала параметры регистрации.

Важные рекомендации при разработке

Работа с печатными формами в БСП требует дисциплины. Рассмотрим несколько советов, которые помогут избежать подобных ошибок в будущем:

1. Использование функции НужноПечататьМакет: Всегда оборачивайте логику формирования в этот метод. Это позволяет объединять несколько печатных форм в одной внешней обработке. Если у вас в одной ВПФ есть и счет, и накладная, этот метод гарантирует, что вы сформируете только то, что запросил пользователь.

2. Идентификатор как константа: Чтобы избежать опечаток, которые являются частой причиной ошибок, рекомендуется вынести идентификатор команды в строковую константу или переменную модуля, например:


// В начале модуля объекта
Перем ИмяКомандыПечати Экспорт;
ИмяКомандыПечати = \"УПДВнешний\";

3. Отладка: Если форма по-прежнему не работает, установите точку останова в процедуре Печать. Проверьте содержимое параметра КоллекцияПечатныхФорм в отладчике. Вы увидите, какие ключи (идентификаторы) ожидает система. Это самый быстрый способ понять, почему БСП «не видит» ваш документ.

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

← На главную