При стандартной работе платформа 1С формирует строковое представление документа по единому шаблону: синоним метаданных, номер и дата (например, «Бюджет доходов и расходов 0000001 от 01.01.2016»). Однако в реальных задачах управленческого или регламентированного учета пользователям гораздо удобнее видеть прикладную информацию — например, «Бюджет доходов и расходов за январь 2016».
Рассмотрим, как централизованно изменить строковое представление ссылочного типа во всей конфигурации, почему обработчики могут игнорироваться платформой и как избежать критических ошибок производительности.
Для программного формирования пользовательского представления ссылки используются экспортные процедуры в модуле менеджера соответствующего объекта метаданных. Перейдем в дерево метаданных, откроем модуль менеджера нужного документа и определим логику формирования строки.
Ключевую роль играет событие ОбработкаПолученияПредставления. Чтобы платформа вывела сформированный нами текст, необходимо присвоить результирующее значение параметру Представление и обязательно установить флаг СтандартнаяОбработка = Ложь.
Посмотрим на пример базовой реализации:
Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) Экспорт
СтандартнаяОбработка = Ложь;
// Формируем пользовательскую строку представления
Представление = "БДР за " + Формат(Данные.ПериодПланирования, "ДФ='ММММ гггг'");
КонецПроцедуры
Нередко разработчики сталкиваются с ситуацией: код написан правильно, синтаксических ошибок нет, но при открытии форм и отчетов точка останова внутри ОбработкаПолученияПредставления не срабатывает, а документы продолжают отображаться в стандартном виде «Номер от Дата».
Проанализируем причину такого поведения. Механизм перехвата формирования представлений на уровне менеджера объектов был добавлен в платформе 1С:Предприятие 8.3.3. Если в свойствах конфигурации включен режим совместимости с версиями 8.2 (например, Версия 8.2.16) или версиями ниже 8.3.3, платформа просто отключает данный функционал и не вызывает назначенные обработчики.
Разберем по шагам, как это исправить:
Не использовать или версию не ниже Версия 8.3.3.Разберем важнейшую ошибку проектирования, способную парализовать работу базы данных. Если мы обращаемся к реквизитам через свойство Данные.Ссылка.Реквизит, платформа при отображении каждой строки динамического списка или каждой записи отчета отправляет отдельный неявный SQL-запрос к СУБД для чтения этого реквизита. При выводе 1000 строк система выполнит 1000 дополнительных запросов к базе.
Чтобы избежать падения производительности, платформе необходимо заранее сообщить, какие поля нужны для построения представления. Для этого обязательно реализуется парная процедура ОбработкаПолученияПолейПредставления.
Посмотрим на правильный совместный шаблон обеих процедур:
Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка) Экспорт
// Отключаем стандартный состав полей (Номер, Дата)
СтандартнаяОбработка = Ложь;
// Указываем состав реквизитов, необходимых для генерации представления
Поля.Добавить("ПериодПланирования");
КонецПроцедуры
Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) Экспорт
СтандартнаяОбработка = Ложь;
// Считываем значение напрямую из структуры Данные без обращения через Данные.Ссылка
Если Данные.Свойство("ПериодПланирования") И ЗначениеЗаполнено(Данные.ПериодПланирования) Тогда
Представление = "БДР за " + Формат(Данные.ПериодПланирования, "ДФ='ММММ гггг'");
Иначе
Представление = "БДР (период не заполнен)";
КонецЕсли;
КонецПроцедуры
В таком варианте платформа самостоятельно добавит ПериодПланирования в основной запрос выборки данных списка, не порождая паразитной нагрузки на сервер.
Выясним особенности поведения кастомных представлений в интерфейсе «Такси» и на управляемых формах:
ПРЕДСТАВЛЕНИЕ(), в отчетах СКД, при явном приведении типа Строка(Ссылка) и во всех элементах интерфейса. Категорически избегайте выполнения тяжелых вычислений, вызова внешних сервисов и создания COM-объектов внутри этих процедур.ОбработкаПолученияПредставления.При соблюдении требований к режиму совместимости и правильном объявлении полей в модуле менеджера механизм переопределения представлений позволяет гибко настроить отображение документов в любой части конфигурации без ухудшения быстродействия системы.