Настройка представления объекта: от синонима до обработчика

· 9 мин

Содержание

Представление объекта в 1С задаётся на двух уровнях. Имя, которое видит пользователь на формах и в меню, берётся из метаданных — это свойство Синоним. А то, какой строкой объект показывается в списках, полях ввода и ссылках (наименование, код или их комбинация), определяют свойство Основное представление и обработчик ОбработкаПолученияПредставления в модуле менеджера.

Отсюда простое правило: нужно переименовать объект или колонку — правьте синоним; нужно поменять саму строку, которой объект «подписывается» в данных, — работайте с основным представлением или обработчиком. Всё это делается в Конфигураторе, а если конфигурация на поддержке — в расширении, без снятия с поддержки.

Любая правка в Конфигураторе завершается командой Обновить конфигурацию базы данных (F7). Изменения синонима и кода модулей применяются динамическим обновлением и сеансы пользователей не прерывают. Но если вы заодно меняете структуру (реквизиты, индексы), обновление реструктурирует таблицы — делайте его, когда в базе никого нет.

Синоним: меняем видимое имя объекта и его колонок

Синоним — это человекочитаемое имя. Справочник называется Контрагенты, а в коде он Справочник.Контрагенты — имя латиницей-кириллицей без пробелов. Пользователь же видит именно синоним.

Где поменять:

  1. Откройте объект в дереве конфигурации (например, справочник Номенклатура).
  2. В палитре свойств найдите группу Основные → поле Синоним.
  3. Впишите новое имя, например Товары и услуги.

Так же меняется имя любого реквизита, табличной части и колонки. Открываете реквизит Артикул, задаёте синоним Код поставщика — и в шапках таблиц, в отборах и в отчётах колонка переименуется автоматически, потому что они берут заголовок из синонима.

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

Отдельный случай — значения перечислений. У перечисления (например, ВидыКонтактнойИнформации) каждое значение имеет свой синоним: откройте Перечисление → Значения, выделите значение и впишите синоним в его свойствах. Именно он показывается в выпадающих списках.

Основное представление: код или наименование

У справочника два стандартных поля-идентификатора — Код и Наименование. Свойство Основное представление решает, какое из них платформа подставляет, когда нужно показать ссылку строкой.

Значения для справочника:

  • В виде наименования — ссылка показывается наименованием (чаще всего это и нужно);
  • В виде кода — показывается код. Удобно для классификаторов, где важен артикул или номенклатурный номер.

У документа логика та же, но значения другие: В виде номера или В виде даты. По умолчанию документ подписывается номером и датой вместе — свойство позволяет оставить что-то одно.

Где искать: палитра свойств объекта, группа Представление → Основное представление.

ОбъектСвойствоВарианты
СправочникОсновное представлениеВ виде кода · В виде наименования
ДокументОсновное представлениеВ виде номера · В виде даты
ПеречислениеСиноним значениязадаётся на каждом значении

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

Этого достаточно, пока представление — одно из готовых полей. Как только нужно собрать строку из нескольких реквизитов, одного свойства мало, и в дело вступает обработчик.

Собираем представление из нескольких реквизитов

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

Типичная задача: в списках и подборах показывать не просто наименование, а наименование с артикулом или характеристикой — Футболка (арт. 12345). Готового свойства для этого нет, зато есть пара обработчиков в модуле менеджера объекта.

Работают они в связке:

  • ОбработкаПолученияПолейПредставления — перечисляет, какие поля платформе нужно прочитать из базы, чтобы собрать строку. Платформа читает их одним запросом, а не дёргает базу на каждую ссылку;
  • ОбработкаПолученияПредставления — из полученных полей (Данные) собирает итоговую строку Представление.

Откройте модуль менеджера справочника (ПКМ по объекту → Открыть модуль менеджера) и добавьте:

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

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

Разберём, что здесь важно:

  • СтандартнаяОбработка = Ложь — обязательна в обоих процедурах. Оставите Истина — платформа проигнорирует вашу строку и покажет наименование по умолчанию.
  • В Данные приходят ровно те поля, что вы перечислили в первом обработчике. Обратитесь к полю, которого там нет, — получите ошибку.
  • Проверяйте заполненность: если артикул пустой, скобки с пустотой выглядят неряшливо, поэтому в примере стоит ЗначениеЗаполнено.

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

Для документа принцип тот же, только поля другие. Часто просят показывать документ как «номер — контрагент», чтобы не открывать карточку ради того, чтобы понять, чей это заказ:

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

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

Дату приводим к строке через Формат с шаблоном ДЛФ=D — иначе платформа подставит дату со временем. Контрагента оборачиваем в Строка(), потому что в Данные.Контрагент лежит ссылка, а не готовый текст.

Что именно нужно изменить в представлении?

Представление в отчётах на СКД

Отчёты на системе компоновки данных (СКД) показывают ссылки через тот же механизм. Если вы настроили обработчик ОбработкаПолученияПредставления, отчёт подхватит новое представление без дополнительных действий — это ещё один довод в пользу обработчика, а не ручной правки каждого отчёта.

Когда представление нужно поменять только в конкретном отчёте, не трогая конфигурацию, собирайте строку прямо в схеме компоновки:

  1. Откройте схему → вкладка Вычисляемые поля.
  2. Добавьте поле, например НоменклатураСАртикулом.
  3. В колонке Выражение задайте склейку полей:
Номенклатура.Наименование + " / " + Номенклатура.Артикул
  1. Вынесите это поле в настройки отчёта вместо исходной номенклатуры.

Для простого переименования колонки в отчёте вычисляемое поле не нужно — достаточно на вкладке с полями задать заголовок через свойство представления поля. А вот склейка нескольких реквизитов в одну ячейку делается именно вычисляемым полем.

Если один и тот же отчёт выгружается в разных разрезах, не плодите вычисляемые поля под каждый случай — вынесите логику в обработчик модуля менеджера, и все отчёты станут единообразными.

Как поменять представление в расширении, не снимая с поддержки

Типовую конфигурацию (Бухгалтерия предприятия, ЗУП, Управление торговлей) снимать с поддержки нельзя — потеряете автообновление. Представление меняют расширением конфигурации. Механизм доступен с платформы 8.3.6.

Что можно сделать в расширении:

  • переопределить Синоним заимствованного объекта или реквизита;
  • поменять Основное представление;
  • добавить в модуль менеджера свои ОбработкаПолученияПолейПредставления и ОбработкаПолученияПредставления.

Порядок:

  1. Создайте расширение: Конфигурация → Расширения конфигурации → Добавить.
  2. Заимствуйте нужный объект (Добавить в расширение).
  3. Правьте синоним или основное представление; для обработчика откройте модуль менеджера объекта в расширении и допишите процедуры.
  4. Сохраните и проверьте расширение на корректность.

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

После обновления типовой конфигурации поставщиком проверяйте расширение: если переименованный реквизит в новой версии изменился, расширение может перестать применяться. Это нормальная плата за работу «поверх» типовой.

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

Бывает, что основное представление и обработчик настроены, а в конкретной таблице по-прежнему виден код или голое наименование. Причина почти всегда в том, что колонка показывает не ссылку целиком, а отдельное поле.

Разберём по типам таблиц:

  • Колонка динамического списка. В списке можно вывести как ссылку (Ссылка), так и её поля через точку (Ссылка.Код, Ссылка.Наименование). Если в колонку выведено Ссылка.Наименование, никакое основное представление на неё не влияет — она жёстко показывает наименование. Поменяйте выводимое поле колонки на саму ссылку.
  • Поле на управляемой форме. У поля ввода есть свойства, отвечающие за то, что показывать. Для ссылочного реквизита, как правило, выводится представление ссылки, и тогда обработчик работает. Если же на форму вынесен отдельный реквизит (Объект.Наименование), он живёт своей жизнью.
  • Табличная часть. Колонка табличной части, в которой лежит ссылка, использует представление; колонка со строковым реквизитом — нет.

Отсюда практический вывод: решаете, где менять представление. Нужно поменять везде и сразу — работайте с основным представлением и обработчиком на уровне объекта. Нужно поправить одну форму или один список — настраивайте конкретную колонку, не трогая конфигурацию объекта целиком.

Прежде чем лезть в модуль менеджера, проверьте, что проблемная колонка выводит именно ссылку. Нередко всё «лечится» сменой выводимого поля колонки с Ссылка.Код на Ссылка.

Производительность и поиск: о чём помнить

Обработчик ОбработкаПолученияПредставления вызывается для каждой показываемой ссылки — в больших динамических списках это тысячи вызовов. Чтобы списки не «тормозили»:

  • запрашивайте в ОбработкаПолученияПолейПредставления только нужные поля — лишние поля замедляют чтение;
  • не выполняйте запросы к базе внутри обработчика представления — он должен лишь склеивать уже прочитанные поля. Запрос в цикле по строкам убьёт производительность списка;
  • тяжёлые вычисления (например, остаток по регистру) в представление не кладите — для этого есть колонки динамического списка.

Отдельно про поиск. Смена представления не меняет то, по каким полям работает ввод по строке и быстрый отбор. Пользователь по-прежнему ищет по наименованию и коду, даже если видит артикул в скобках. Чтобы искать ещё и по артикулу, добавьте его в свойство объекта Ввод по строке — там перечисляются поля, по которым идёт подбор при наборе в поле ввода. Представление и поиск — независимые настройки, и путать их не стоит.

Чем «представление» отличается от «наименования»?
Наименование — это конкретный реквизит справочника. Представление — строка, которой объект показывается пользователю; по умолчанию она равна наименованию (или коду), но через обработчик может собираться из нескольких полей.
Поменял основное представление, а в части форм всё равно виден код. Почему?
Форма или колонка динамического списка может быть настроена на показ конкретного поля (Код или Наименование) напрямую, а не ссылки целиком. В этом случае помогает не основное представление, а настройка самой колонки на форме.
Обработчик представления работает и на клиенте, и на сервере?
Код модуля менеджера исполняется на сервере. Платформа сама вызывает обработчик, когда формирует представление для клиента, поэтому отдельного клиентского кода писать не нужно.
Можно ли задать представление для перечисления?
У перечисления нет наименования и обработчика — показывается синоним конкретного значения. Откройте Перечисление → Значения и задайте синоним нужному значению.
Изменится ли поиск по строке, если поменять представление?
Нет. Ввод по строке и отбор работают по полям из свойства Ввод по строке, а не по тому, что собрал обработчик. Хотите искать по новому полю — добавьте его в это свойство отдельно.