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