Разработка и Конфигурация · 9 мин
Как обратиться к декорации в 1С
Как обратиться к декорации в 1С из кода: поиск элемента формы, изменение заголовка, картинки и видимости, обработка нажатия, типичные ошибки и примеры.
Декорация в 1С — это элемент управляемой формы, который используется для вывода надписей, картинок и оформительских элементов. Часто возникает задача изменить её программно: поменять текст, картинку, цвет, видимость или обработать нажатие. Сделать это можно только через коллекцию Элементы формы, потому что у декорации нет связанного реквизита данных — она не хранит значение, а лишь отображает оформление.
Ключевая особенность: обращение к декорации выполняется по её имени, заданному в конфигураторе. Если элемент создан программно, имя назначается при создании. Попытка обратиться к декорации как к реквизиту формы через ЭтаФорма.ИмяДекорации приведёт к ошибке, потому что такого реквизита не существует.
Как найти декорацию на форме
Основной способ обращения — через свойство Элементы объекта управляемой формы. Имя указывается в точности так, как оно задано в дереве элементов формы в конфигураторе, с учётом регистра не требуется, но опечатка в имени вызовет ошибку «Поле объекта не обнаружено».
&НаКлиенте
Процедура ИзменитьТекст(Команда)
Элементы.ДекорацияПодсказка.Заголовок = "Данные обновлены";
КонецПроцедуры
Если код выполняется в модуле формы, но вы не уверены, существует ли элемент (например, форма переиспользуется в разных конфигурациях), безопаснее использовать метод Найти коллекции элементов:
Декорация = Элементы.Найти("ДекорацияПодсказка");
Если Декорация <> Неопределено Тогда
Декорация.Заголовок = "Текст найден";
КонецЕсли;
Такой подход защищает от падения кода при изменении структуры формы и рекомендуется в универсальных обработчиках и расширениях.
Что можно изменить у декорации программно
Набор доступных свойств зависит от вида декорации: надпись, картинка, рамка, прямоугольник, флажок и другие. Наиболее востребованные свойства у надписи и картинки:
Заголовок— текст надписи; можно менять динамически, например для вывода статуса операции;Картинка— для декорации-картинки; присваивается объект типаКартинка, в том числе из библиотеки картинок;Видимость— показ или скрытие элемента;Доступность— блокировка интерактивности (актуально, если на декорацию назначено действие);ЦветТекста,ЦветФона,Шрифт— оформление;Гиперссылка— превращает надпись в кликабельную ссылку.
&НаСервере
Процедура НастроитьДекорацию()
Элементы.ДекорацияСтатус.Заголовок = "Проверка пройдена";
Элементы.ДекорацияСтатус.ЦветТекста = WebЦвета.Зеленый;
Элементы.ДекорацияКартинка.Картинка = БиблиотекаКартинок.Информация;
КонецПроцедуры
Цвета можно задавать через WebЦвета, ЦветаСтиля или конструктор Новый Цвет(Красный, Зеленый, Синий). Использование цветов стиля предпочтительнее: интерфейс останется согласованным при смене темы оформления.
Обработка нажатия на декорацию
Декорация-надпись или картинка может реагировать на нажатие, если в конфигураторе для события «Нажатие» назначен обработчик. В модуле формы создаётся процедура с директивой &НаКлиенте, имя которой указано в свойствах элемента.
&НаКлиенте
Процедура ДекорацияСсылкаНажатие(Элемент)
ОткрытьФорму("Справочник.Номенклатура.ФормаСписка");
КонецПроцедуры
Чтобы декорация визуально выглядела ссылкой, установите свойство Гиперссылка = Истина и подходящий цвет текста. Это стандартный приём для кнопок-подсказок, ссылок на справку и переходов к связанным объектам.
Декорация в обычных формах и в толстом клиенте
В обычных (неуправляемых) формах, которые встречаются в старых конфигурациях на платформе 8.2–8.3, обращение аналогично — через ЭлементыФормы.ИмяДекорации, но состав свойств отличается. Например, у надписи обычной формы нет свойства «Гиперссылка» в том же виде, а нажатие обрабатывается через событие «Нажатие» в модуле формы без директив компиляции.
Если конфигурация работает в режиме совместимости с обычным приложением, проверяйте, в каком типе формы вы пишете код: синтаксис Элементы и ЭлементыФормы невзаимозаменяемы. Смешение приводит к ошибкам компиляции модуля.
Декорация на форме списка, документа и в динамическом списке
В формах документов и справочников декорация живёт в общем дереве элементов, и обращение к ней стандартное. Нюансы возникают в двух случаях. Первый — декорация внутри табличной части или таблицы формы: там элементы создаются как колонки, и программно менять их нужно через Элементы.ИмяТаблицы.ПодчиненныеЭлементы либо через условное оформление.
Второй случай — оформление строк динамического списка. Декорация не может быть частью строки динамического списка напрямую; для раскраски и иконок в строках используется условное оформление списка, а не отдельные элементы формы. Попытка «добавить декорацию в каждую строку» — признак неверно выбранного механизма.
Программное создание декорации
Если декорацию нужно добавить динамически (например, из расширения или по условию), используется метод Элементы.Добавить с типом Тип("ДекорацияФормы"):
&НаСервере
Процедура СоздатьДекорацию()
НовыйЭлемент = Элементы.Добавить("ДекорацияПредупреждение", Тип("ДекорацияФормы"));
НовыйЭлемент.Вид = ВидДекорацииФормы.Надпись;
НовыйЭлемент.Заголовок = "Проверьте заполнение обязательных полей";
НовыйЭлемент.ЦветТекста = WebЦвета.Красный;
КонецПроцедуры
Программное создание элементов выполняется только на сервере, обычно в обработчике ПриСозданииНаСервере. Позже добавить элемент на клиенте нельзя — можно лишь менять свойства существующих. Родителя (группу формы) элементу задают свойством Родитель либо параметром метода Добавить в актуальных версиях платформы.
- 1Откройте форму в конфигураторе и найдите декорацию в дереве элементов, запомните её имя.
- 2В модуле формы создайте процедуру с нужной директивой: &НаКлиенте для реакции на действия пользователя, &НаСервере для инициализации.
- 3Обратитесь к элементу: Элементы.ИмяДекорации.Свойство = Значение.
- 4При необходимости кликабельности назначьте обработчик события «Нажатие» и включите свойство «Гиперссылка».
- 5Протестируйте форму в режиме предприятия: проверьте отображение, нажатие и отсутствие ошибок.
Проверка результата и отладка
Признак корректного обращения — декорация меняет текст, картинку или видимость сразу после выполнения кода, а в журнале регистрации и окне сообщений нет ошибок «Поле объекта не обнаружено». Если изменения не видны, проверьте, не перезаписывается ли свойство позже другим обработчиком, например ПриОткрытии или обновлением формы.
Для отладки удобно поставить точку останова в обработчике и посмотреть в табло значение Элементы.ИмяДекорации: если там Неопределено, элемент с таким именем в форме отсутствует — ищите опечатку или проверяйте, не удалён ли элемент условием функциональных опций.
Как проверить результат
Элементы.ИмяДекорации возвращает объект, свойства меняются
Ошибка «Поле объекта не обнаружено» или значение Неопределено
Срабатывает обработчик на клиенте, форма не «зависает»
Клик ничего не делает или вызывает долгий серверный вызов
Текст, цвет и картинка соответствуют заданным в коде
Свойства сбрасываются после открытия или обновления формы
FAQ
Можно ли обратиться к декорации из внешней обработки или другого модуля?
Напрямую — нет: коллекция Элементы доступна только в модуле самой формы. Извне можно получить форму через ПолучитьФорму и затем работать с её элементами, но такой подход хрупок; правильнее передавать данные в форму через параметры и реквизиты.
Почему код Элементы.Декорация1 выдаёт ошибку, хотя элемент есть на форме?
Чаще всего причина в опечатке в имени, в том что элемент удалён функциональной опцией, или код выполняется не в модуле той формы. Проверьте имя в дереве элементов конфигуратора и используйте Элементы.Найти("Декорация1") для безопасного поиска.
Как сделать декорацию многострочной или с переносом текста?
Для декорации-надписи включите свойство «АвтоМаксимальнаяШирина»/настройте ширину и высоту и используйте символ переноса строки Символы.ПС в заголовке. Также доступен форматированный текст через вид «Надпись» с форматированной строкой.
Можно ли хранить значение в декорации и считывать его позже?
Технически заголовок можно прочитать, но это плохая практика: декорация предназначена для оформления. Для хранения данных создайте реквизит формы и при необходимости отображайте его через декорацию или поле надписи.
Как изменить декорацию в форме, добавленной через расширение?
Так же, через Элементы.ИмяДекорации, но обязательно с проверкой через Найти: если расширение отключат или изменят, код без проверки упадёт с ошибкой. В расширениях это стандартный защитный приём.
Чем декорация отличается от поля надписи?
Поле надписи связано с реквизитом данных и отображает его значение, обновляясь автоматически. Декорация не связана с данными и управляется только программно. Для вывода значений из данных используйте поле надписи, для статичного оформления и подсказок — декорацию.
Что важно запомнить
Декорация в 1С доступна только через Элементы.ИмяДекорации и не хранит данных. Меняйте заголовок, картинку, цвет и видимость в модуле формы, нажатие обрабатывайте на клиенте, а при неуверенности в существовании элемента используйте Элементы.Найти().