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