Заголовок формы в 1С: как задать и изменить программно

· 10 мин

Содержание

Заголовок формы в 1С 8.3 — это текст в самой верхней строке окна. Чтобы настроить шапку, у формы есть ровно два свойства: Заголовок (сам текст) и АвтоЗаголовок (кто его составляет — платформа или вы).

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

Ниже — как это свойство устроено, как прописать его в каждом из мест и почему чаще всего текст «не хочет» меняться.

Из чего складывается заголовок формы

У любой управляемой формы есть свойство Заголовок типа «Строка» и логическое свойство АвтоЗаголовок. Их связка и определяет, что увидит пользователь.

  • АвтоЗаголовок = Истина (значение по умолчанию) — заголовок формирует платформа. Для формы объекта она собирает его из синонима объекта и представления ключевого реквизита: например, Приходная накладная 0000-0001 от 15.03. Если при этом свойство Заголовок заполнено, ваш текст платформа добавляет к автоматическому.
  • АвтоЗаголовок = Ложь — показывается только то, что лежит в свойстве Заголовок. Ничего своего платформа не дописывает.

Отсюда главное практическое правило: если нужен полностью свой заголовок — ставьте АвтоЗаголовок = Ложь, иначе платформа подклеит к нему автоматическую часть.

Разберём на примере. Пусть у формы документа Заказ покупателя вы вписали в свойство Заголовок слово Оформление. Что увидит пользователь:

АвтоЗаголовокСвойство ЗаголовокТекст в окне
ИстинапустоЗаказ покупателя 0000-0001 от 15.03
ИстинаОформлениеОформление (Заказ покупателя 0000-0001 от 15.03)
ЛожьОформлениеОформление

Третья строка — именно то, что обычно и нужно, когда пишут «свой заголовок»: только ваш текст, без приписок.

Есть и третье свойство — ОтображатьЗаголовок. Оно логическое и отвечает за то, видна ли строка заголовка вообще. Поставьте Ложь — и верхняя строка с текстом исчезнет. Это пригодится, когда вы рисуете свою шапку элементами формы (об этом в разделе про оформление).

У форм списка, отчётов и обработок логика та же. Разница лишь в том, что для формы объекта автозаголовок несёт данные (номер, дату), а для формы списка — обычно синоним объекта во множественном числе.

Не стоит отключать автозаголовок без причины. Для формы документа автоматический текст уже несёт номер и дату — это помогает пользователю различать несколько открытых окон. Свой заголовок оправдан, когда штатного текста не хватает (нужно имя контрагента, статус, сумма) или когда он, наоборот, мешает. Если менять нечего — оставьте АвтоЗаголовок = Истина и не трогайте.

Статичный заголовок через палитру свойств

Когда текст шапки фиксирован и не зависит от данных, его проще один раз прописать в Конфигураторе.

  1. Откройте нужную форму в редакторе форм (двойной клик по форме в дереве объекта).
  2. В дереве элементов формы (левая верхняя панель) выделите самый верхний, корневой элемент — он так и называется Форма.
  3. В палитре свойств справа найдите группу Оформление и свойство Заголовок. Впишите текст.
  4. Там же снимите флажок АвтоЗаголовок, если хотите, чтобы отображался только ваш текст.

Если палитра свойств не открыта, вызовите её через меню Правка → Свойства или клавишей F4.

Заголовок можно сделать многоязычным: нажмите кнопку с лупой или откройте диалог ввода строки у свойства Заголовок — там задаются варианты для каждого языка конфигурации. Тогда пользователь с русским интерфейсом увидит одну строку, с английским — другую.

Статичный заголовок в палитре подходит только для неизменного текста. Как только в шапку нужно подставить номер документа, имя контрагента или дату — переходите к программной установке.

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

Самое надёжное место для сборки заголовка из данных — обработчик ПриСозданииНаСервере в модуле формы. Он срабатывает один раз при открытии, когда реквизиты объекта уже доступны.

В модуле управляемой формы свойство Заголовок доступно напрямую, без префикса: форма сама и есть контекст модуля.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	АвтоЗаголовок = Ложь;
	Заголовок = "Карточка клиента: " + Объект.Наименование;
КонецПроцедуры

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

Если нужно вывести дату или число, приведите их к строке через Формат, иначе получите ошибку преобразования типа:

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

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

Если форма открывается для нового, ещё не записанного объекта, его номер пуст. Проверяйте это через Объект.Ссылка.Пустая() и для новых объектов пишите в заголовок что-то вроде Новый заказ.

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Если ЗначениеЗаполнено(Параметры.ЗаголовокОкна) Тогда
		АвтоЗаголовок = Ложь;
		Заголовок = Параметры.ЗаголовокОкна;
	КонецЕсли;
КонецПроцедуры

При открытии формы вызывающий код кладёт нужный текст в структуру параметров и передаёт её в ОткрытьФорму. Так шапка задаётся там, где форму открывают, а сама форма остаётся универсальной.

Меняем заголовок на лету в клиентском коде

Заголовок — свойство формы, поэтому его видно и на клиенте. Это позволяет менять шапку прямо во время работы пользователя, не обращаясь к серверу.

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

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

Пользователь вписал новое наименование — и текст в шапке тут же обновился, перезаписи данных ещё не произошло.

Второй клиентский обработчик, где уместно трогать заголовок, — ПриОткрытии. Он срабатывает уже после ПриСозданииНаСервере, то есть на клиенте. Если задать заголовок и там, и там, победит клиентский — он выполняется последним.

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	Если ПометкаУдаления Тогда
		Заголовок = Заголовок + " (помечен на удаление)";
	КонецЕсли;
КонецПроцедуры

Запомните порядок событий при открытии формы объекта: сначала сервер (ПриСозданииНаСервере, ПриЧтенииНаСервере), затем клиент (ПриОткрытии). Если результат не тот, что ждёте, причина почти всегда в том, что более поздний обработчик затирает заголовок из более раннего.

Оформление шапки: своя группа, надпись и картинка

Шрифт и цвет самой строки заголовка платформа не отдаёт на откуп разработчику — она подчиняется интерфейсу «Такси» и теме оформления. Поэтому «раскрасить» штатный заголовок нельзя.

Если нужна по-настоящему оформленная шапка — с логотипом, крупным текстом, своим цветом, — её собирают из элементов формы, а штатный заголовок прячут.

Порядок такой:

  1. У корневого элемента Форма поставьте ОтображатьЗаголовок = Ложь — штатная строка исчезнет.
  2. В самый верх формы добавьте обычную группу (Добавить → Группа, вид Обычная группа) с горизонтальным или вертикальным размещением.
  3. Внутрь группы положите декорацию-картинку (Добавить → Декорация, вид Картинка) для логотипа и декорацию-надпись (вид Надпись) для текста.

У декорации типа Надпись в палитре свойств доступны Шрифт и ЦветТекста — здесь вы задаёте и размер, и цвет, и начертание. У картинки — свойство Картинка, куда подставляется элемент из общих картинок конфигурации.

Текст такой надписи тоже можно менять программно. У декорации есть свойство Заголовок, обращение идёт через коллекцию элементов:

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

Здесь НадписьШапка — имя декорации, которое вы задали в редакторе форм. Так вы получаете гибкую «шапку документа»: крупный заголовок, подзаголовок с реквизитами и логотип, полностью под вашим контролем.

Пара практических мелочей. Картинку для логотипа добавляйте в общие картинки конфигурации и подбирайте её размер заранее — декорация растянет её по заданным ширине и высоте, и мелкий исходник будет выглядеть размытым. Для текста надписи у свойства Заголовок тоже доступен многоязычный ввод, так что оформленная шапка остаётся локализуемой, как и штатная.

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

Заголовок у форм списка, отчёта и обработки

Всё описанное — свойства Заголовок, АвтоЗаголовок, ОтображатьЗаголовок — есть у любой управляемой формы, не только у формы объекта. Разница только в том, что платформа подставляет в автозаголовок.

  • Форма списка. Автозаголовок берётся из синонима объекта (или из его представления списка, если оно задано в свойствах объекта). Чтобы показать свой текст — тот же приём: АвтоЗаголовок = Ложь и своя строка.
  • Форма отчёта. Автозаголовок обычно совпадает с названием отчёта. Если пользователь работает с разными вариантами, удобно дописывать имя варианта в шапку программно, чтобы на нескольких открытых окнах было видно, где какой вариант.
  • Форма обработки. Автозаголовок — синоним обработки. Здесь особенно часто передают заголовок параметром, когда одну обработку переиспользуют под разные задачи.

Код для всех трёх случаев одинаковый: присваиваете Заголовок в ПриСозданииНаСервере и выключаете АвтоЗаголовок. Меняется только источник текста, а не механизм.

У формы списка не путайте заголовок окна со значком и подписью самой таблицы. Текст над таблицей — это заголовок элемента Список (поля формы), а не заголовок всей формы. Их настраивают в разных местах палитры свойств.

Почему заголовок не меняется: разбор частых ошибок

Чаще всего жалоба звучит так: «прописал Заголовок, а в окне всё равно старый текст». Разберём, что именно идёт не так.

Диагностика: выберите симптом

Отдельно про отладку. Если не понимаете, какое значение в итоге попадает в Заголовок, поставьте точку останова в обработчике и посмотрите значение свойства в окне отладки, либо временно выведите его через Сообщить(Заголовок). Так сразу видно, присваивается ли ваш текст и не затирает ли его более поздний обработчик.

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

Заголовок не меняется — что проверить
Выполнено: 0 / 5

Частые вопросы

Чем «шапка формы» отличается от «шапки документа»?
Шапка формы — это строка заголовка окна, о ней вся статья. «Шапкой документа» часто называют верхнюю часть самой формы с реквизитами: номер, дата, контрагент, организация. Это обычные поля, связанные с реквизитами объекта, а не свойство Заголовок.
Как убрать заголовок у формы совсем?
Поставьте у корневого элемента Форма свойство ОтображатьЗаголовок = Ложь. Строка заголовка пропадёт, место под неё освободится.
Почему к моему тексту добавляется номер и дата?
Это работает АвтоЗаголовок = Истина: платформа клеит к вашему тексту автоматическую часть. Снимите флажок АвтоЗаголовок в палитре свойств или присвойте АвтоЗаголовок = Ложь в коде.
Можно ли сделать заголовок в несколько строк или с переносом?
Штатный заголовок — одна строка, перенос в нём не поддерживается. Если нужен многострочный текст или особое оформление — спрячьте штатный заголовок и соберите шапку из декораций-надписей внутри группы.
Как изменить заголовок основного окна приложения, а не формы?
Это другое свойство. Заголовок главного окна берётся из свойства Заголовок корневого узла конфигурации (самый верхний элемент дерева в Конфигураторе). Свойство формы на него не влияет.
В какой версии платформы это работает?
Описанное относится к управляемым формам 1С 8.3 с интерфейсом «Такси». Свойства Заголовок, АвтоЗаголовок и ОтображатьЗаголовок есть у любой управляемой формы независимо от конфигурации.