Рассмотрим часто встречающуюся задачу при разработке в 1С:Предприятие. Допустим, мы программно формируем список значений для поля ввода в колонке табличной части. Мы хотим, чтобы при выборе документа (используя Analyzer 1C для анализа связей) в поле отображалось не стандартное наименование, а наше собственное представление (например, номер + дата документа). Однако возникает проблема: значение визуально обновляется только после того, как мы убираем курсор с текущего элемента управления и переходим к другому. Проанализируем ситуацию и разберем по шагам, как решить эту проблему (включая флажок в динамическом списке) и сделать интерфейс отзывчивым.
В современных версиях платформы 1С для изменения представления ссылки не обязательно прибегать к уловкам со скрытыми колонками на форме. Самый правильный и архитектурно верный подход — переопределить представление самого объекта глобально. Посмотрим на пример того, как это делается в Модуле менеджера нужного документа или справочника.
Для этого мы задействуем два стандартных события модуля менеджера (предварительно изучив анализ структуры метаданных):
ОбработкаПолученияПолейПредставления — в этом обработчике мы указываем платформе, какие именно реквизиты объекта нам понадобятся для формирования текста (например, "Номер" и "Дата").ОбработкаПолученияПредставления — здесь мы непосредственно формируем нужную строку текста.Разберем пример кода (написать который поможет ИИ-помощник в консоли кода — см. универсальная консоль кода и запросов с ИИ-помощником), который необходимо разместить в модуле менеджера документа:
Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Поля.Добавить("Номер");
Поля.Добавить("Дата");
КонецПроцедуры
Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Представление = "Документ № " + Данные.Номер + " от " + Формат(Данные.Дата, "ДЛФ=D");
КонецПроцедуры
При таком подходе ваше кастомное представление будет автоматически отображаться во всех полях ввода сразу после интерактивного выбора. При этом в самом поле будет корректно храниться ссылка на документ, а платформа возьмет на себя все заботы по отрисовке интерфейса. Дополнительно повысить отзывчивость интерфейса при вводе данных поможет улучшение автоподбора и подсказок в полях 1С.
Если по каким-то причинам изменять представление объекта глобально нельзя (например, кастомное представление нужно только в одной конкретной форме), мы используем Условное оформление. На форумах часто возникает заблуждение, что для каждой строки табличной части придется программно создавать свое правило оформления. Выясним причину этого заблуждения и разберем, как сделать все правильно и просто.
На самом деле, условное оформление настраивается всего один раз для всей таблицы. Для реализации нам понадобится:
МояКолонкаПредставление.ОбработкаВыбора записывать сформированный текст в эту скрытую колонку.Рассмотрим подробнее настройки условного оформления формы:
Текст. В качестве источника данных (Поле компоновки данных) выбираем нашу скрытую колонку МояКолонкаПредставление.Платформа 1С автоматически и построчно применит это правило: каждая ячейка видимой колонки сама возьмет нужный текст из скрытой колонки своей же строки. Никаких циклов обхода строк и индивидуальных правил создавать не нужно!
Вернемся к изначальному вопросу: почему значения на форме могут обновляться только после «схода» (потери фокуса) с элемента управления? Если наш алгоритм требует немедленного визуального обновления текущей строки сразу после программного изменения данных (например, в событии ОбработкаВыбора), мы можем принудительно заставить форму перерисоваться.
Для этого используется специальный метод управляемой формы. Посмотрим на пример его вызова:
&НаКлиенте
Процедура ЭлементТаблицыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
// Наша логика обработки выбора
// ...
// Принудительно обновляем отображение
ЭтаФорма.ОбновитьОтображениеДанных();
КонецПроцедуры
Метод ОбновитьОтображениеДанных дает команду платформе актуализировать все элементы управления на экране. Это включает в себя перерасчет условного оформления и обновление текстов в полях ввода, без необходимости ожидать перехода пользователя к другому элементу. Это делает интерфейс плавным и предсказуемым для конечного пользователя.