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