Как изменить представление ссылки в табличной части и сразу обновить поле ввода в 1С?

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

Рассмотрим часто встречающуюся задачу при разработке в 1С:Предприятие. Допустим, мы программно формируем список значений для поля ввода в колонке табличной части. Мы хотим, чтобы при выборе документа (используя Analyzer 1C для анализа связей) в поле отображалось не стандартное наименование, а наше собственное представление (например, номер + дата документа). Однако возникает проблема: значение визуально обновляется только после того, как мы убираем курсор с текущего элемента управления и переходим к другому. Проанализируем ситуацию и разберем по шагам, как решить эту проблему (включая флажок в динамическом списке) и сделать интерфейс отзывчивым.

Способ 1. Использование обработчиков в Модуле Менеджера (Оптимальный подход)

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

Для этого мы задействуем два стандартных события модуля менеджера (предварительно изучив анализ структуры метаданных):

  1. ОбработкаПолученияПолейПредставления — в этом обработчике мы указываем платформе, какие именно реквизиты объекта нам понадобятся для формирования текста (например, "Номер" и "Дата").
  2. ОбработкаПолученияПредставления — здесь мы непосредственно формируем нужную строку текста.

Разберем пример кода (написать который поможет ИИ-помощник в консоли кода — см. универсальная консоль кода и запросов с ИИ-помощником), который необходимо разместить в модуле менеджера документа:


Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    Поля.Добавить("Номер");
    Поля.Добавить("Дата");
    
КонецПроцедуры

Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    Представление = "Документ № " + Данные.Номер + " от " + Формат(Данные.Дата, "ДЛФ=D");
    
КонецПроцедуры

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

Способ 2. Правильная настройка Условного оформления

Если по каким-то причинам изменять представление объекта глобально нельзя (например, кастомное представление нужно только в одной конкретной форме), мы используем Условное оформление. На форумах часто возникает заблуждение, что для каждой строки табличной части придется программно создавать свое правило оформления. Выясним причину этого заблуждения и разберем, как сделать все правильно и просто.

На самом деле, условное оформление настраивается всего один раз для всей таблицы. Для реализации нам понадобится:

  1. Добавить в табличную часть формы дополнительную скрытую (невидимую) колонку строкового типа, например, МояКолонкаПредставление.
  2. При выборе значения в событии ОбработкаВыбора записывать сформированный текст в эту скрытую колонку.
  3. Настроить условное оформление для видимой колонки со ссылкой.

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

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

Способ 3. Принудительное обновление интерфейса

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

Для этого используется специальный метод управляемой формы. Посмотрим на пример его вызова:


&НаКлиенте
Процедура ЭлементТаблицыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    
    // Наша логика обработки выбора
    // ...
    
    // Принудительно обновляем отображение
    ЭтаФорма.ОбновитьОтображениеДанных();
    
КонецПроцедуры

Метод ОбновитьОтображениеДанных дает команду платформе актуализировать все элементы управления на экране. Это включает в себя перерасчет условного оформления и обновление текстов в полях ввода, без необходимости ожидать перехода пользователя к другому элементу. Это делает интерфейс плавным и предсказуемым для конечного пользователя.

← На главную