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

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

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

Разбор типичной ошибки при использовании метода ПолучитьФорму

Часто программисты пытаются использовать метод ПолучитьФорму, чтобы сначала создать объект формы в памяти, изменить его свойства, а затем вызвать метод Открыть. Код обычно выглядит так:


Форма = ПолучитьФорму("Отчет.МойОтчет.Форма"); 
Форма.Заголовок = "Новое название"; 
Форма.Открыть();

Проанализируем ситуацию: если при выполнении этого кода вы получаете ошибку "Значение не является значением объектного типа (Заголовок)", это означает, что переменная Форма имеет значение Неопределено. Разберем причины, почему это происходит:

  1. Неверное имя формы: Проверьте путь к форме. Если вы обращаетесь к стандартной форме отчета, путь должен быть полным, например, "Отчет.МойОтчет.Форма.ФормаОтчета".
  2. Права доступа: Если у текущего пользователя нет прав на просмотр этой формы или самого объекта метаданных, метод ПолучитьФорму вернет Неопределено без генерации исключения.
  3. Контекст исполнения: Хотя свойство Заголовок доступно для чтения и записи как на клиенте, так и на сервере, работа с объектом формы через ПолучитьФорму считается устаревающим подходом в управляемом приложении.

Рекомендуемый способ: Использование параметров формы

Современный стандарт разработки 1С рекомендует использовать метод ОткрытьФорму. Вместо того чтобы пытаться напрямую менять свойства объекта формы снаружи, мы передаем нужные данные (включая будущий заголовок) в структуру параметров. Рассмотрим этот процесс по шагам.

Шаг 1. Вызов формы с передачей параметров. В месте вызова (например, в команде или обработчике кнопки) мы создаем структуру и заполняем ее:


ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Заголовок", "Продажи за текущий месяц");
// Можно добавить и другие параметры, например, отборы или настройки СКД
ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);

ОткрытьФорму("Отчет.МойОтчет.Форма", ПараметрыФормы);

Шаг 2. Обработка параметров в модуле формы. Теперь перейдем в модуль самой формы, которую мы открываем. Нам необходимо перехватить переданный параметр в серверном обработчике ПриСозданииНаСервере.


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

Этот способ является наиболее надежным и «чистым» с точки зрения архитектуры управляемого приложения. Платформа сама оптимизирует передачу данных между клиентом и сервером при инициализации формы.

Важный нюанс: Свойство Автозаголовок

Иногда даже после программной установки ЭтаФорма.Заголовок текст в шапке окна остается прежним или дополняется стандартными фразами системы (например, «(Создание)»). Выясним причину: в свойствах формы в конфигураторе (или программно) включено свойство Автозаголовок.

Чтобы заголовок отображался именно так, как вы его задали, рекомендуется установить Автозаголовок в значение Ложь. Это можно сделать прямо в коде:


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

Особенности для отчетов на базе СКД

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

Пример вызова отчета с конкретным вариантом и своим заголовком:


ПараметрыОтчета = Новый Структура;
ПараметрыОтчета.Вставить("КлючВарианта", "ОсновнойВариант");
ПараметрыОтчета.Вставить("Заголовок", "Специальный отчет для руководства");

ОткрытьФорму("Отчет.ОстаткиТоваров.Форма", ПараметрыОтчета);

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

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

Если задача стоит изменить заголовок не «перед открытием», а уже в открытом окне (например, после того как пользователь нажал кнопку «Сформировать» или выбрал период), это делается простым присваиванием на клиенте:


&НаКлиенте
Процедура КомандаСформировать(Команда)
    // Какая-то логика выполнения...
    ЭтаФорма.Заголовок = "Данные актуальны на " + Формат(ТекущаяДата(), "ДЛФ=DT");
КонецПроцедуры

Обратите внимание, что такое изменение происходит мгновенно и не требует серверного вызова (Round-trip), что положительно сказывается на производительности интерфейса. Для интерактивной проверки и настройки свойств открытых окон без правки кода подойдёт обработка для редактирования свойств форм в режиме предприятия.

Сравнение ПолучитьФорму и ОткрытьФорму

Рассмотрим подробнее, почему стоит отдавать предпочтение ОткрытьФорму:

Резюме: Чтобы программно изменить заголовок формы, используйте метод ОткрытьФорму с передачей структуры параметров. В модуле формы в процедуре ПриСозданииНаСервере извлеките значение из Параметры и присвойте его свойству Заголовок, предварительно отключив Автозаголовок.

← На главную