Как программно изменить заголовок формы в 1С 8.3?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Разбираем базовые свойства формы: Заголовок и Автозаголовок

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

  1. Заголовок — это статичная строка текста, которая отображается в шапке, если не включен автоматический режим.
  2. Автозаголовок — булево свойство (флажок). Если оно установлено в значение Истина, платформа самостоятельно формирует строку заголовка на основании синонима объекта и его ключевых реквизитов (например, для документа это будет "Реализация товаров и услуг №... от...").

Важный момент: если вы планируете изменять заголовок программно, первым делом необходимо проанализировать состояние свойства Автозаголовок. Если оно включено, ваши программные изменения могут перекрываться стандартными механизмами платформы при обновлении данных формы. Чтобы полностью контролировать текст в шапке окна, рекомендуется устанавливать Автозаголовок в значение Ложь.

Программное изменение заголовка в обработчике ПриСозданииНаСервере

Наиболее распространенный и правильный с точки зрения архитектуры способ — это установка заголовка в момент инициализации формы на сервере. Проводя комплексное программное изменение форм, посмотрим на пример кода, который позволяет задать произвольный текст:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Отключаем стандартный заголовок, если это не сделано в конфигураторе
    ЭтаФорма.Автозаголовок = Ложь;
    
    // Формируем свой вариант заголовка
    ЭтаФорма.Заголовок = "Специальная форма: " + Объект.Номер + " от " + Формат(Объект.Дата, "ДФ=dd.MM.yyyy");
КонецПроцедуры

В данном примере мы используем свойство формы Заголовок и конкатенацию строк. Обратите внимание, что мы обращаемся к реквизиту Объект, чтобы получить данные документа или элемента справочника. Использование функции Формат позволяет привести дату к удобному для чтения виду.

Динамическое обновление заголовка при чтении данных

Если ваша форма используется для редактирования уже существующих объектов, проанализируем ситуацию, когда заголовок должен меняться при переходе между записями или после перечитывания данных с сервера. В этом случае обработчик ПриСозданииНаСервере может не сработать повторно. Для таких задач лучше использовать событие ПриЧтенииНаСервере.

Разберем по шагам, как реализовать обновление заголовка, чтобы он всегда соответствовал актуальному состоянию объекта в базе данных:


&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
    // Обновляем заголовок на основании данных прочитанного объекта
    Если ЗначениеЗаполнено(ТекущийОбъект.Контрагент) Тогда
        ЭтаФорма.Заголовок = "Работа с клиентом: " + ТекущийОбъект.Контрагент.Наименование;
    Иначе
        ЭтаФорма.Заголовок = "Новая карточка взаимодействия";
    КонецЕсли;
КонецПроцедуры

Здесь параметр ТекущийОбъект предоставляет прямой доступ к данным, которые только что были загружены из информационной базы. Это гарантирует, что в заголовке будет отображаться актуальная информация, даже если объект был изменен другим пользователем или фоновым процессом.

Изменение заголовка на стороне клиента

Иногда требуется изменить заголовок мгновенно, без обращения к серверу. Например, когда пользователь выбирает значение в поле или нажимает на кнопку. Выясним причину, по которой это удобно: экономия серверных вызовов повышает отзывчивость интерфейса. Свойство Заголовок доступно и на клиенте.

Рассмотрим пример изменения текста при изменении реквизита формы:


&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
    // Изменяем заголовок формы сразу после выбора контрагента
    Если ЗначениеЗаполнено(Объект.Контрагент) Тогда
        ЭтаФорма.Заголовок = "Документ для: " + Объект.Контрагент;
    КонецЕсли;
КонецПроцедуры

Однако стоит помнить, что на клиенте доступны не все данные. Если для формирования заголовка нужны сложные расчеты или данные из связанных таблиц, все же придется использовать серверный контекст.

Учет интернационализации с помощью НСтр

Для конфигураций, которые поддерживают несколько языков интерфейса, проанализируем правильный подход к формированию строк. Не рекомендуется писать текст в кавычках напрямую. Разберем использование функции НСтр:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ТекстЗаголовка = НСтр("ru = 'Редактирование объекта: '; en = 'Editing object: '");
    ЭтаФорма.Заголовок = ТекстЗаголовка + Объект.Наименование;
КонецПроцедуры

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

Сценарий: Заголовок формы после записи документа

Часто возникает вопрос: как обновить заголовок сразу после того, как пользователь нажал кнопку "Записать", если в заголовке должен появиться номер документа? Ведь до записи номер может быть не присвоен (если используется автонумерация). Рассмотрим подробнее связку событий ПослеЗаписиНаСервере и клиентского контекста.

На самом деле, если свойство Автозаголовок установлено в Истина, платформа сделает это сама. Но если мы управляем процессом вручную, нам нужно обновить заголовок в процедуре ПослеЗаписи или ПослеЗаписиНаСервере. Посмотрим на пример реализации:


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

Особенности для обычных форм (v8.3 в режиме совместимости)

Хотя мы в основном обсуждаем управляемые формы, выясним, как обстояли дела в обычном приложении. В обычных формах (толстый клиент) заголовок формы также доступен через свойство Заголовок. Однако управление автозаголовком там реализовано иначе — через свойство АвтоЗаголовок (обратите внимание на написание). Код будет выглядеть практически идентично, но вызываться он должен в процедуре ПриОткрытии или ПередОткрытием.

Подведем итог проделанной работы: программное управление заголовком — это мощный инструмент для улучшения юзабилити. Основные правила: отключайте Автозаголовок, используйте ПриСозданииНаСервере для начальной настройки и ПриЧтенииНаСервере для обновления данных в существующих объектах. Проанализировав эти механизмы, вы сможете сделать интерфейс вашей программы более информативным и дружелюбным к пользователю.

← На главную