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

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

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

Причина 1: Отсутствие данных в запросе формирования печатной формы

Рассмотрим самую распространенную и неочевидную ситуацию, с которой столкнулся автор темы. В алгоритме печати типовых документов выборка данных строится через запрос, где установлены жесткие условия — например, отбор по реквизиту ВидОперации, признаку проведения документа или заполненности определенных табличных частей.

Если для конкретного экземпляра документа условие отбора не выполняется, запрос возвращает пустой результат. Логика печати в этом случае досрочно прерывает заполнение и не передает сформированный документ в итоговую коллекцию. Проанализируем типичный фрагмент кода:


Если Запрос.Выполнить().Пустой() Тогда
    // Табличный документ не формируется и в коллекцию не добавляется
    Возврат;
КонецЕсли;

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

Причина 2: Исключение внутри блока «Попытка — Исключение» при получении областей макета

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

Часто такой код обернут в обработку исключений:


Попытка
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    // Заполнение параметров
Исключение
    // Ошибка глушится или записывается в журнал, а вывод прерывается
    Возврат;
КонецПопытки;

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

Причина 3: Приоритет пользовательских макетов над расширением

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

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

Причина 4: Несовпадение идентификаторов команд печати

Разберем ситуацию, когда макет добавлен как новый или изменена команда вызова печати. Механизм БСП связывает кнопку печати и процедуру генерации через строковые идентификаторы. Идентификатор, зарегистрированный в процедуре ДобавитьКомандыПечати модуля менеджера, должен символ в символ совпадать с идентификатором в процедуре Печать, проверяемым через функцию УправлениеПечатью.НужноПечататьМакет(...). Если допущена опечатка в регистре или раскладке букв, блок создания табличного документа пропускается.

Причина 5: Не вызвано добавление документа в коллекцию БСП

Каждая процедура печати обязана зарегистрировать результат работы. Для этого сформированный табличный документ помещается в коллекцию стандартным вызовом:


УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
    КоллекцияПечатныхФорм,
    ИмяМакета,
    СинонимМакета,
    ТабличныйДокумент
);

Если из-за ветвления алгоритма данная строка не выполняется, БСП считает печатную форму несформированной.

Пошаговый алгоритм диагностики и решения

Разберем по шагам последовательность действий для локализации и устранения проблемы:

  1. Включаем остановку по ошибке в конфигураторе. Откроем меню «Отладка» -> «Остановка по ошибке» и установим флаг «Останавливаться по обрабатываемым ошибкам». Повторим печать из документа. Если в коде макета отсутствует область или параметр, отладчик мгновенно остановится на проблемной строке.
  2. Проверяем отборы и заполнение данных документа. Убедимся, что документ проведен (если алгоритм требует проведения) и значение реквизитов (например, ВидОперации) удовлетворяет условиям запроса в процедуре печати.
  3. Проверяем Журнал регистрации. В режиме предприятия установим фильтр журнала по событиям с важностью «Ошибка» и «Предупреждение» на время формирования печатной формы, чтобы увидеть сообщения подсистемы БСП.
  4. Сбрасываем пользовательские настройки макетов. Перейдем в раздел: Администрирование -> Печатные формы, отчеты и обработки -> Макеты печатных форм. Найдем редактируемый макет. Если строка выделена полужирным шрифтом, нажмем кнопку «Использовать стандартный макет», чтобы отключить переопределение из базы.
  5. Проверяем переопределение модуля менеджера в расширении. Убедимся, что процедуры ДобавитьКомандыПечати и Печать подключены с корректными аннотациями (&Вместо, &После) и в расширении отключен «Безопасный режим», если код использует внешние вызовы.
← На главную