Как программно изменить заголовок колонки табличной части на управляемой форме?

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

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

Переход от обычных форм к управляемым

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

Основной механизм изменения заголовка

Для изменения текста в шапке таблицы нам нужно обратиться к конкретному элементу формы, который отображает нужную нам колонку. Важно помнить, что в управляемых формах разделяются понятия «Данные» (реквизиты формы) и «Элементы» (визуальное представление). Заголовок — это свойство именно визуального элемента.

Предположим, у нас есть табличная часть Товары и в ней колонка Цена. На форме элемент этой колонки может называться либо ТоварыЦена (стандартное именование при перетаскивании), либо иметь пользовательское имя. Разберем стандартный синтаксис:


// Пример простого изменения заголовка
Элементы.ТоварыЦена.Заголовок = "Цена с учетом скидки";

Проанализируем этот код: мы обращаемся к коллекции Элементы, находим там нужный нам объект по имени и присваиваем свойству Заголовок новое строковое значение.

Где и когда выполнять программное изменение?

Место размещения кода зависит от того, в какой момент заголовок должен измениться. Рассмотрим две типичные ситуации.

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


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

2. Динамическое изменение на клиенте. Если заголовок должен меняться «на лету» (например, при установке галочки в какой-либо флажок на форме), код следует писать в клиентской процедуре, привязанной к событию изменения реквизита.


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

Работа с многоязычными интерфейсами (Локализация)

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


// Правильный способ задания заголовка для многоязычных систем
Элементы.ТоварыЦена.Заголовок = НСтр("ru = 'Цена в валюте'; en = 'Price in currency'");

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

Изменение заголовков групп колонок

В современных интерфейсах колонки таблиц часто объединяют в группы для улучшения эргономики (например, группа «Цены», внутри которой находятся колонки «Оптовая» и «Розничная»). Мы можем программно управлять и заголовком самой группы. Рассмотрим ситуацию:

Выясним причину, почему нам может это понадобиться: например, при выборе типа прайс-листа нам нужно переименовать общую шапку над несколькими колонками. Код будет идентичен работе с одиночной колонкой:


// Изменяем заголовок группы, объединяющей несколько полей
Элементы.ГруппаКолонокЦены.Заголовок = "Цены актуальны на " + Формат(ТекущаяДата(), "ДЛФ=D");

Особенности динамических списков

Если ваша таблица на форме — это не ТабличнаяЧасть объекта, а ДинамическийСписок, принцип работы с заголовками остается прежним. Однако здесь важно не перепутать имя поля в запросе (которое может быть СуммаОстаток) и имя элемента формы, который отображает это поле (например, СписокСуммаОстаток). Всегда обращайтесь к имени, указанному в свойствах элемента формы в колонке «Имя».

Важные замечания по верстке интерфейса

Проанализируем ситуацию, когда новый заголовок значительно длиннее старого. В 1С 8.3 элементы формы стараются подстроиться под контент, но если у колонки жестко задана Ширина и свойство РастягиватьПоГоризонтали установлено в значение Ложь, текст может быть обрезан. При программной смене заголовка рекомендуется проверять, как форма выглядит с максимально длинным вариантом текста.

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

Резюме по шагам

  1. Определите имя элемента формы (не путать с именем реквизита в метаданных).
  2. Выберите подходящее событие: ПриСозданииНаСервере для статичных изменений или клиентское событие для динамики.
  3. Используйте коллекцию Элементы для доступа к свойству Заголовок.
  4. При необходимости используйте функцию НСтр для поддержки локализации.

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

← На главную