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