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