В процессе разработки конфигураций на платформе 1С:Предприятие 8.3 часто возникает задача динамического изменения интерфейса. Одной из таких задач является смена заголовка колонки в табличной части. Например, это может потребоваться при изменении валюты документа, смене режима отображения данных или в зависимости от прав доступа текущего пользователя. Разберем подробно, как это сделать правильно, избегая типичных ошибок начинающих разработчиков.
Первое, что нам необходимо уяснить: в управляемом приложении (УФ) больше не существует коллекции ЭлементыФормы. Эта коллекция использовалась в обычных формах (1С 8.1 и 8.2). Если мы попытаемся обратиться к ней в коде управляемой формы, система выдаст ошибку, так как контекст работы с интерфейсом существенно изменился. Вместо этого мы должны использовать коллекцию Элементы. Рассмотрим, как именно происходит обращение к визуальным компонентам.
Для изменения текста в шапке таблицы нам нужно обратиться к конкретному элементу формы, который отображает нужную нам колонку. Важно помнить, что в управляемых формах разделяются понятия «Данные» (реквизиты формы) и «Элементы» (визуальное представление). Заголовок — это свойство именно визуального элемента.
Предположим, у нас есть табличная часть Товары и в ней колонка Цена. На форме элемент этой колонки может называться либо ТоварыЦена (стандартное именование при перетаскивании), либо иметь пользовательское имя. Разберем стандартный синтаксис:
// Пример простого изменения заголовка
Элементы.ТоварыЦена.Заголовок = "Цена с учетом скидки";
Проанализируем этот код: мы обращаемся к коллекции Элементы, находим там нужный нам объект по имени и присваиваем свойству Заголовок новое строковое значение.
Место размещения кода зависит от того, в какой момент заголовок должен измениться. Рассмотрим две типичные ситуации.
1. Изменение при открытии формы. Если заголовок должен зависеть от настроек системы или роли пользователя, лучше всего использовать серверную процедуру ПриСозданииНаСервере. Это обеспечит корректное формирование интерфейса еще до того, как форма будет отрисована на экране пользователя.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Проверим условие, например, роль пользователя
Если РольДоступна("ПолныеПрава") Тогда
Элементы.ТоварыСумма.Заголовок = "Сумма (упр. учет)";
Иначе
Элементы.ТоварыСумма.Заголовок = "Сумма к оплате";
КонецЕсли;
КонецПроцедуры
2. Динамическое изменение на клиенте. Если заголовок должен меняться «на лету» (например, при установке галочки в какой-либо флажок на форме), код следует писать в клиентской процедуре, привязанной к событию изменения реквизита.
&НаКлиенте
Процедура ИспользоватьНДСПриИзменении(Элемент)
Если Объект.ИспользоватьНДС Тогда
Элементы.ТоварыЦена.Заголовок = "Цена с НДС";
Иначе
Элементы.ТоварыЦена.Заголовок = "Цена без НДС";
КонецЕсли;
КонецПроцедуры
Если ваша конфигурация предполагает работу пользователей на разных языках, жесткое прописание строк в коде (как в примерах выше) является плохим тоном. Для этих целей в 1С предусмотрена функция НСтр. Посмотрим, как применить ее для изменения заголовка.
// Правильный способ задания заголовка для многоязычных систем
Элементы.ТоварыЦена.Заголовок = НСтр("ru = 'Цена в валюте'; en = 'Price in currency'");
Использование НСтр позволяет системе автоматически подставлять нужный текст в зависимости от языка интерфейса, установленного в настройках пользователя.
В современных интерфейсах колонки таблиц часто объединяют в группы для улучшения эргономики (например, группа «Цены», внутри которой находятся колонки «Оптовая» и «Розничная»). Мы можем программно управлять и заголовком самой группы. Рассмотрим ситуацию:
Выясним причину, почему нам может это понадобиться: например, при выборе типа прайс-листа нам нужно переименовать общую шапку над несколькими колонками. Код будет идентичен работе с одиночной колонкой:
// Изменяем заголовок группы, объединяющей несколько полей
Элементы.ГруппаКолонокЦены.Заголовок = "Цены актуальны на " + Формат(ТекущаяДата(), "ДЛФ=D");
Если ваша таблица на форме — это не ТабличнаяЧасть объекта, а ДинамическийСписок, принцип работы с заголовками остается прежним. Однако здесь важно не перепутать имя поля в запросе (которое может быть СуммаОстаток) и имя элемента формы, который отображает это поле (например, СписокСуммаОстаток). Всегда обращайтесь к имени, указанному в свойствах элемента формы в колонке «Имя».
Проанализируем ситуацию, когда новый заголовок значительно длиннее старого. В 1С 8.3 элементы формы стараются подстроиться под контент, но если у колонки жестко задана Ширина и свойство РастягиватьПоГоризонтали установлено в значение Ложь, текст может быть обрезан. При программной смене заголовка рекомендуется проверять, как форма выглядит с максимально длинным вариантом текста.
Также стоит отметить, что механизм Условного оформления формы не предназначен для изменения текста заголовков. Он отлично справляется с изменением цвета текста, фона, видимости или доступности ячеек, но текст шапки меняется исключительно через свойство Заголовок в программном коде.
ПриСозданииНаСервере для статичных изменений или клиентское событие для динамики.Элементы для доступа к свойству Заголовок.НСтр для поддержки локализации.Соблюдение этих правил позволит вам создавать гибкие и профессиональные интерфейсы в системе 1С:Предприятие, которые будут корректно работать в управляемом приложении.