Что такое поле «Представление» в конструкторе запросов и как оно работает

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

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

Природа поля Представление: почему это виртуальное поле

Прежде всего, проанализируем, почему поле Представление называют виртуальным. В физических таблицах базы данных (SQL) колонки с названием "Представление" не существует. Платформа 1С генерирует это поле "на лету" в момент выполнения запроса. Это сервисный механизм, созданный для того, чтобы разработчику не приходилось каждый раз вручную соединять таблицы или писать сложные условия ВЫБОР, чтобы получить понятное человеку текстовое описание объекта.

Рассмотрим стандартную ситуацию: нам нужно вывести список контрагентов в отчет. Если мы выберем только поле Ссылка, в результате запроса мы получим уникальный идентификатор (GUID). Чтобы пользователь увидел название компании, нам нужно поле Наименование. Поле Представление в данном случае автоматически подставит значение наименования, избавляя нас от привязки к конкретному имени реквизита.

Как платформа формирует значение представления

Разберем по шагам, каким именно образом 1С решает, что именно написать в поле Представление. Алгоритм работы платформы следующий:

  1. Настройки метаданных: В конфигураторе у каждого справочника есть свойство "Основное представление". Оно может принимать два значения: "В виде наименования" или "В виде кода". Платформа в первую очередь смотрит на эту настройку.
  2. Тип объекта: Для документов представление формируется иначе. По умолчанию это комбинация названия документа, его номера и даты (например, "Реализация товаров и услуг №001 от 01.01.2023").
  3. Программное переопределение: Если стандартная логика (Код или Наименование) не подходит, разработчик может вмешаться в процесс с помощью специального обработчика в модуле менеджера.

Программное управление через ОбработкаПолученияПредставления

Бывают задачи, когда в качестве представления нужно выводить не просто наименование, а, например, комбинацию из артикула и названия товара, или добавлять статус контрагента ("Заблокирован"). Для этого проанализируем возможности модуля менеджера объекта.

В модуле менеджера существует событие ОбработкаПолученияПредставления. Рассмотрим пример кода, который меняет представление справочника Контрагенты, добавляя к нему ИНН:


Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
    
    // Отключаем стандартное формирование (по наименованию или коду)
    СтандартнаяОбработка = Ложь;
    
    // Формируем свое представление на основе данных объекта
    Если ЗначениеЗаполнено(Данные.ИНН) Тогда
        Представление = Данные.Наименование + " (ИНН: " + Данные.ИНН + ")";
    Иначе
        Представление = Данные.Наименование;
    КонецЕсли;
    
КонецПроцедуры

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

Различие между полем Представление и функцией ПРЕДСТАВЛЕНИЕ()

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

Ограничения использования в запросах

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

  1. Группировка данных: Вы не можете написать СГРУППИРОВАТЬ ПО Субконто.Представление. Платформа выдаст ошибку. Группировка возможна только по реальным полям или по самой ссылке.
  2. Условия отбора: Нельзя использовать это поле в секции ГДЕ. Например, условие ГДЕ Контрагент.Представление ПОДОБНО "%Сервис%" будет нелегитимным. Для фильтрации нужно обращаться напрямую к Наименованию.
  3. Условия соединения: Поле нельзя использовать в секции ПО при соединении таблиц.

Важный совет: Если вы разрабатываете отчет на СКД (Система компоновки данных), старайтесь не выбирать поле Представление в самом тексте запроса. СКД гораздо эффективнее обрабатывает получение представлений самостоятельно, основываясь на выбранных ссылочных полях. Это позволяет системе кэшировать данные и избегать лишних соединений в SQL-запросе.

Влияние на производительность на уровне SQL

Выясним, что происходит "под капотом" системы, когда мы запрашиваем Представление. Если для объекта не определена ОбработкаПолученияПредставления, то 1С просто подставляет в SQL-запрос выборку колонки наименования (_Description) или кода (_Code). Это происходит быстро.

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

В случае с документами, где представление состоит из трех полей (заголовок, номер, дата), SQL-запрос дополняется операциями конкатенации строк. Поэтому, если вам нужно отсортировать тысячи документов только по дате, лучше использовать поле Дата, а не Представление, чтобы не заставлять сервер выполнять лишнюю работу по сборке строк.

Итоги

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

← На главную