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

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

Рассмотрим частую задачу: при выборе элемента справочника в документе требуется отображать не только стандартное наименование, но и значение дополнительного реквизита. Разберем по шагам на конкретном примере, как сделать так, чтобы в поле ввода документа выводилось наименование и государственный номер из справочника ТранспортноеСредство, а не только одно наименование.

Где размещать код?

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

Реализация обработчиков представлений

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

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

Посмотрим на пример кода, который решает нашу задачу:


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

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

Важные ограничения и правила производительности

Рассмотрим подробнее критические ограничения, о которых необходимо помнить при работе с представлениями. Событие получения представления вызывается платформой чрезвычайно часто (при отрисовке динамических списков, выводе отчетов, полей на формах), поэтому к коду предъявляются строгие требования производительности.

Внутри этих процедур категорически запрещено:

  1. Выполнять любые запросы к базе данных.
  2. Обращаться к данным через точку от ссылки. Например, использовать конструкцию Данные.Ссылка.ГосНомер нельзя! Платформа передает в параметр Данные структуру, содержащую только те реквизиты, которые вы предварительно заказали через Поля.Добавить. Попытка получить недостающие данные «на лету» приведет к неявному чтению всего объекта из базы данных и катастрофическому падению производительности системы.

Обработка пустых значений и форматирование

Проанализируем ситуацию, когда у транспортного средства может быть не заполнен госномер. Если использовать простой код из примера выше, представление будет выглядеть неаккуратно (например, «КАМАЗ, »). Правильнее проверять значения на пустоту: если номер есть, формировать полную строку, а если нет — возвращать только наименование. Для формирования красивых строк мы настоятельно рекомендуем применять встроенную функцию СтрШаблон.

Глобальное влияние и режим совместимости

Обратите внимание, что переопределение представления в модуле менеджера меняет отображение элемента глобально во всей конфигурации. Новый формат (Наименование + Госномер) будет выводиться не только в поле конкретного документа, но и во всех других справочниках, а также в отчетах. Встроенная функция ПРЕДСТАВЛЕНИЕ() в запросах также будет возвращать эту новую склеенную строку.

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

Альтернативные варианты реализации

Разберем ситуации, когда внесение изменений в модуль менеджера невозможно или нежелательно:

  1. Использование расширений: Если ваша конфигурация типовая и закрыта от изменений, нужные обработчики модуля менеджера добавляются через механизм расширений конфигурации (например, с использованием аннотации &После).
  2. Локальное изменение: Если комбинированное наименование нужно выводить только в одном конкретном документе, а в остальных местах оставить стандартное, трогать справочник не стоит. В таком случае на форме документа рядом с полем ссылки можно разместить простое текстовое поле (строку). В обработчике ПриИзменении поля выбора транспорта программно формируется нужный текст (наименование + номер) и записывается в это текстовое поле, а стандартное поле ввода визуально скрывается, сжимается или используется только как кнопка выбора.
← На главную