Как изменить заголовок окна табличного документа при выводе печатной формы УПД в 1С?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

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

Базовый метод вывода табличного документа на экран

Для начала посмотрим на базовый синтаксис. Вывод готовой печатной формы на экран осуществляется с помощью метода Показать объекта ТабличныйДокумент. Этот метод имеет необязательный параметр, в который можно передать желаемый заголовок окна.

Пример использования:

ТабДок.Показать("Заявки от покупателей");

Однако на практике разработчикам обычно нужно вывести не статичный текст, а динамический заголовок, содержащий, например, номер и дату документа. И здесь начинаются сложности, связанные с клиент-серверной архитектурой управляемых форм (БП 3.0 и другие современные конфигурации).

Ошибка вызова серверных общих модулей на клиенте

Проанализируем частую ошибку. Разработчик пытается получить номер и дату документа с помощью стандартной функции общего модуля ОбщегоНазначения.ЗначенияРеквизитовОбъекта прямо перед выводом документа на экран в процедуре с директивой &НаКлиенте.


&НаКлиенте
Процедура Печать(Команда)
    ТабличныйДокумент = ПечатьНаСервере();
    ТекЗначения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СсылкаНаДокумент, "Номер, Дата");
    ТабличныйДокумент.Показать("УПД № " + ТекЗначения.Номер + " от " + Формат(ТекЗначения.Дата, "ДЛФ=DD"));
КонецПроцедуры

Такой код приведет к ошибке: "Общий модуль ОбщегоНазначения не доступен на клиенте". Дело в том, что получение реквизитов ссылочного объекта — это обращение к базе данных, которое может выполняться только на сервере. Клиентская часть не имеет прямого доступа к базе данных.

Правильное решение: разделение контекста на Сервер и Клиент

Чтобы решить проблему, разобьем задачу на две части. Нам необходимо создать переменные на клиенте (или реквизиты формы), получить их значения на сервере, а затем использовать на клиенте для формирования заголовка.

Рассмотрим подробнее рабочий вариант кода. Для этого добавим реквизиты формы: Номер (строка) и Дата (строка), и напишем следующий код:


&НаСервере
Процедура ПолучитьЗначенияРеквизитовОбъекта()
    ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СсылкаНаДокумент, "Номер, Дата");
    ЗначенияРеквизитов.Свойство("Номер", Номер);
    Дата = Формат(ЗначенияРеквизитов.Дата, "ДЛФ=DD");
КонецПроцедуры

&НаКлиенте
Процедура Печать(Команда)
    ПолучитьЗначенияРеквизитовОбъекта();
    ТабличныйДокумент = ПечатьНаСервере();
    ТабличныйДокумент.Показать("Универсальный передаточный документ № " + Номер + " от " + Дата);
КонецПроцедуры

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

Современный подход с использованием стандартов БСП

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

Вместо ручного открытия окна печатная форма формируется на сервере и добавляется в специальную коллекцию. Выглядит это примерно так:


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

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

Изменение заголовка без программирования (Штатный функционал БП 3.0)

Если вы не хотите дорабатывать код, рассмотрим пользовательский вариант. В конфигурации 1С:Бухгалтерия 3.0 присутствует встроенный механизм изменения заголовков документов.

  1. Зайдите в документ "Счет покупателю".
  2. Найдите гиперссылку "Реквизиты печати" и кликните по ней.
  3. В поле "Заголовок" выберите нужный вариант ("Счет-оферта", "Счет-договор") или впишите свой текст.
  4. Если на основании этого счета сформировать УПД, то выбранный заголовок автоматически подтянется в печатную форму документа.

Дополнительные нюансы и возможные проблемы

Проанализируем несколько сопутствующих моментов, с которыми вы можете столкнуться:

  1. Кэширование: Бывают ситуации, когда код написан верно, но заголовок окна остается дефолтным (например, слово "Таблица"). Это часто связано с кэшем платформы 1С. В таких случаях для того, чтобы изменения применились, достаточно закрыть и заново открыть клиентское приложение 1С.
  2. Очередь печати Windows: Если вы отправляете табличный документ напрямую на принтер методом Напечатать, в диспетчере печати Windows он может отображаться просто как "Табличный документ". Если вы используете механизмы БСП, наименование задания для принтера формируется корректно из переданного представления макета.
  3. Отображение заголовков строк и колонок: Не путайте заголовок окна с буквенно-цифровой сеткой (как в Excel). Если вам нужно включить сетку для редактирования макета пользователем, перейдите в меню Таблица — Вид — Отображать заголовки. Обратите внимание, что для этого свойство ТолькоПросмотр у табличного документа должно быть установлено в Ложь.
← На главную