Заголовок формы в 1С: как задать и изменить программно
Содержание
Заголовок формы в 1С 8.3 — это текст в самой верхней строке окна. Чтобы настроить шапку, у формы есть ровно два свойства: Заголовок (сам текст) и АвтоЗаголовок (кто его составляет — платформа или вы).
Задать их можно двумя путями. Статично — в Конфигураторе через палитру свойств, когда текст всегда один и тот же. Программно — в модуле формы, на сервере или на клиенте, когда заголовок зависит от данных и должен меняться по ходу работы.
Ниже — как это свойство устроено, как прописать его в каждом из мест и почему чаще всего текст «не хочет» меняться.
Из чего складывается заголовок формы
У любой управляемой формы есть свойство Заголовок типа «Строка» и логическое свойство АвтоЗаголовок. Их связка и определяет, что увидит пользователь.
АвтоЗаголовок = Истина(значение по умолчанию) — заголовок формирует платформа. Для формы объекта она собирает его из синонима объекта и представления ключевого реквизита: например,Приходная накладная 0000-0001 от 15.03. Если при этом свойствоЗаголовокзаполнено, ваш текст платформа добавляет к автоматическому.АвтоЗаголовок = Ложь— показывается только то, что лежит в свойствеЗаголовок. Ничего своего платформа не дописывает.
Отсюда главное практическое правило: если нужен полностью свой заголовок — ставьте АвтоЗаголовок = Ложь, иначе платформа подклеит к нему автоматическую часть.
Разберём на примере. Пусть у формы документа Заказ покупателя вы вписали в свойство Заголовок слово Оформление. Что увидит пользователь:
| АвтоЗаголовок | Свойство Заголовок | Текст в окне |
|---|---|---|
| Истина | пусто | Заказ покупателя 0000-0001 от 15.03 |
| Истина | Оформление | Оформление (Заказ покупателя 0000-0001 от 15.03) |
| Ложь | Оформление | Оформление |
Третья строка — именно то, что обычно и нужно, когда пишут «свой заголовок»: только ваш текст, без приписок.
Есть и третье свойство — ОтображатьЗаголовок. Оно логическое и отвечает за то, видна ли строка заголовка вообще. Поставьте Ложь — и верхняя строка с текстом исчезнет. Это пригодится, когда вы рисуете свою шапку элементами формы (об этом в разделе про оформление).
У форм списка, отчётов и обработок логика та же. Разница лишь в том, что для формы объекта автозаголовок несёт данные (номер, дату), а для формы списка — обычно синоним объекта во множественном числе.
Не стоит отключать автозаголовок без причины. Для формы документа автоматический текст уже несёт номер и дату — это помогает пользователю различать несколько открытых окон. Свой заголовок оправдан, когда штатного текста не хватает (нужно имя контрагента, статус, сумма) или когда он, наоборот, мешает. Если менять нечего — оставьте АвтоЗаголовок = Истина и не трогайте.
Статичный заголовок через палитру свойств
Когда текст шапки фиксирован и не зависит от данных, его проще один раз прописать в Конфигураторе.
- Откройте нужную форму в редакторе форм (двойной клик по форме в дереве объекта).
- В дереве элементов формы (левая верхняя панель) выделите самый верхний, корневой элемент — он так и называется
Форма. - В палитре свойств справа найдите группу
Оформлениеи свойствоЗаголовок. Впишите текст. - Там же снимите флажок
АвтоЗаголовок, если хотите, чтобы отображался только ваш текст.
Если палитра свойств не открыта, вызовите её через меню Правка → Свойства или клавишей F4.
Заголовок можно сделать многоязычным: нажмите кнопку с лупой или откройте диалог ввода строки у свойства Заголовок — там задаются варианты для каждого языка конфигурации. Тогда пользователь с русским интерфейсом увидит одну строку, с английским — другую.
Статичный заголовок в палитре подходит только для неизменного текста. Как только в шапку нужно подставить номер документа, имя контрагента или дату — переходите к программной установке.
Устанавливаем заголовок программно на сервере
Самое надёжное место для сборки заголовка из данных — обработчик ПриСозданииНаСервере в модуле формы. Он срабатывает один раз при открытии, когда реквизиты объекта уже доступны.
В модуле управляемой формы свойство Заголовок доступно напрямую, без префикса: форма сама и есть контекст модуля.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
АвтоЗаголовок = Ложь;
Заголовок = "Карточка клиента: " + Объект.Наименование;
КонецПроцедуры
Для формы существующего элемента справочника это даст заголовок вида Карточка клиента: ООО Ромашка. Строку Объект.Наименование замените на тот реквизит, который хотите показать.
Если нужно вывести дату или число, приведите их к строке через Формат, иначе получите ошибку преобразования типа:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
АвтоЗаголовок = Ложь;
Заголовок = "Заказ № " + Объект.Номер
+ " от " + Формат(Объект.Дата, "ДЛ=Д");
КонецПроцедуры
Почему именно сервер. Данные объекта читаются на сервере, и к моменту ПриСозданииНаСервере реквизиты Объект уже заполнены. Поэтому собирать текст из полей документа или элемента справочника правильнее здесь — ещё до того, как форма покажется пользователю.
Если форма открывается для нового, ещё не записанного объекта, его номер пуст. Проверяйте это через Объект.Ссылка.Пустая() и для новых объектов пишите в заголовок что-то вроде Новый заказ.
Иногда заголовок удобнее передавать в форму извне — например, когда одну и ту же обработку открывают из разных мест с разными шапками. Для этого в редакторе форм на закладке Параметры объявляют свой параметр, а в коде читают его из структуры Параметры:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если ЗначениеЗаполнено(Параметры.ЗаголовокОкна) Тогда
АвтоЗаголовок = Ложь;
Заголовок = Параметры.ЗаголовокОкна;
КонецЕсли;
КонецПроцедуры
При открытии формы вызывающий код кладёт нужный текст в структуру параметров и передаёт её в ОткрытьФорму. Так шапка задаётся там, где форму открывают, а сама форма остаётся универсальной.
Меняем заголовок на лету в клиентском коде
Заголовок — свойство формы, поэтому его видно и на клиенте. Это позволяет менять шапку прямо во время работы пользователя, не обращаясь к серверу.
Типичный сценарий — обновлять заголовок, когда пользователь поменял ключевое поле. Для этого подходит обработчик ПриИзменении у элемента формы:
&НаКлиенте
Процедура НаименованиеПриИзменении(Элемент)
Заголовок = "Карточка клиента: " + Объект.Наименование;
КонецПроцедуры
Пользователь вписал новое наименование — и текст в шапке тут же обновился, перезаписи данных ещё не произошло.
Второй клиентский обработчик, где уместно трогать заголовок, — ПриОткрытии. Он срабатывает уже после ПриСозданииНаСервере, то есть на клиенте. Если задать заголовок и там, и там, победит клиентский — он выполняется последним.
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если ПометкаУдаления Тогда
Заголовок = Заголовок + " (помечен на удаление)";
КонецЕсли;
КонецПроцедуры
Запомните порядок событий при открытии формы объекта: сначала сервер (ПриСозданииНаСервере, ПриЧтенииНаСервере), затем клиент (ПриОткрытии). Если результат не тот, что ждёте, причина почти всегда в том, что более поздний обработчик затирает заголовок из более раннего.
Оформление шапки: своя группа, надпись и картинка
Шрифт и цвет самой строки заголовка платформа не отдаёт на откуп разработчику — она подчиняется интерфейсу «Такси» и теме оформления. Поэтому «раскрасить» штатный заголовок нельзя.
Если нужна по-настоящему оформленная шапка — с логотипом, крупным текстом, своим цветом, — её собирают из элементов формы, а штатный заголовок прячут.
Порядок такой:
- У корневого элемента
ФормапоставьтеОтображатьЗаголовок = Ложь— штатная строка исчезнет. - В самый верх формы добавьте обычную группу (
Добавить → Группа, видОбычная группа) с горизонтальным или вертикальным размещением. - Внутрь группы положите декорацию-картинку (
Добавить → Декорация, видКартинка) для логотипа и декорацию-надпись (видНадпись) для текста.
У декорации типа Надпись в палитре свойств доступны Шрифт и ЦветТекста — здесь вы задаёте и размер, и цвет, и начертание. У картинки — свойство Картинка, куда подставляется элемент из общих картинок конфигурации.
Текст такой надписи тоже можно менять программно. У декорации есть свойство Заголовок, обращение идёт через коллекцию элементов:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Элементы.НадписьШапка.Заголовок = "Договор № " + Объект.Номер;
КонецПроцедуры
Здесь НадписьШапка — имя декорации, которое вы задали в редакторе форм. Так вы получаете гибкую «шапку документа»: крупный заголовок, подзаголовок с реквизитами и логотип, полностью под вашим контролем.
Пара практических мелочей. Картинку для логотипа добавляйте в общие картинки конфигурации и подбирайте её размер заранее — декорация растянет её по заданным ширине и высоте, и мелкий исходник будет выглядеть размытым. Для текста надписи у свойства Заголовок тоже доступен многоязычный ввод, так что оформленная шапка остаётся локализуемой, как и штатная.
Не выносите в такую шапку поля ввода только ради красоты. Декорации не хранят данные — для редактируемых реквизитов нужны обычные поля формы, связанные с реквизитами.
Заголовок у форм списка, отчёта и обработки
Всё описанное — свойства Заголовок, АвтоЗаголовок, ОтображатьЗаголовок — есть у любой управляемой формы, не только у формы объекта. Разница только в том, что платформа подставляет в автозаголовок.
- Форма списка. Автозаголовок берётся из синонима объекта (или из его представления списка, если оно задано в свойствах объекта). Чтобы показать свой текст — тот же приём:
АвтоЗаголовок = Ложьи своя строка. - Форма отчёта. Автозаголовок обычно совпадает с названием отчёта. Если пользователь работает с разными вариантами, удобно дописывать имя варианта в шапку программно, чтобы на нескольких открытых окнах было видно, где какой вариант.
- Форма обработки. Автозаголовок — синоним обработки. Здесь особенно часто передают заголовок параметром, когда одну обработку переиспользуют под разные задачи.
Код для всех трёх случаев одинаковый: присваиваете Заголовок в ПриСозданииНаСервере и выключаете АвтоЗаголовок. Меняется только источник текста, а не механизм.
У формы списка не путайте заголовок окна со значком и подписью самой таблицы. Текст над таблицей — это заголовок элемента Список (поля формы), а не заголовок всей формы. Их настраивают в разных местах палитры свойств.
Почему заголовок не меняется: разбор частых ошибок
Чаще всего жалоба звучит так: «прописал Заголовок, а в окне всё равно старый текст». Разберём, что именно идёт не так.
АвтоЗаголовок = Истина — платформа добавляет к вашему тексту автоматическую часть. Поставьте АвтоЗаголовок = Ложь.ПриСозданииНаСервере. Этот обработчик срабатывает один раз при открытии. Чтобы шапка менялась, перенесите присвоение в клиентский обработчик ПриИзменении нужного поля.Формат(...) или Строка(...).Объект.Ссылка.Пустая() и для новых объектов пишите другой текст.ПриЧтенииНаСервере) снова пересобирает заголовок. Задавайте текст в одном месте либо дублируйте логику и на сервере, и на клиенте.Отдельно про отладку. Если не понимаете, какое значение в итоге попадает в Заголовок, поставьте точку останова в обработчике и посмотрите значение свойства в окне отладки, либо временно выведите его через Сообщить(Заголовок). Так сразу видно, присваивается ли ваш текст и не затирает ли его более поздний обработчик.
Перед тем как списывать проблему на платформу, пройдитесь по короткому списку — в 9 случаях из 10 дело в одном из этих пунктов.
Частые вопросы
Чем «шапка формы» отличается от «шапки документа»?
Заголовок.Как убрать заголовок у формы совсем?
Форма свойство ОтображатьЗаголовок = Ложь. Строка заголовка пропадёт, место под неё освободится.Почему к моему тексту добавляется номер и дата?
АвтоЗаголовок = Истина: платформа клеит к вашему тексту автоматическую часть. Снимите флажок АвтоЗаголовок в палитре свойств или присвойте АвтоЗаголовок = Ложь в коде.Можно ли сделать заголовок в несколько строк или с переносом?
Как изменить заголовок основного окна приложения, а не формы?
Заголовок корневого узла конфигурации (самый верхний элемент дерева в Конфигураторе). Свойство формы на него не влияет.В какой версии платформы это работает?
Заголовок, АвтоЗаголовок и ОтображатьЗаголовок есть у любой управляемой формы независимо от конфигурации.