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