Настройка представления объекта: от синонима до обработчика
Содержание
Представление объекта в 1С задаётся на двух уровнях. Имя, которое видит пользователь на формах и в меню, берётся из метаданных — это свойство Синоним. А то, какой строкой объект показывается в списках, полях ввода и ссылках (наименование, код или их комбинация), определяют свойство Основное представление и обработчик ОбработкаПолученияПредставления в модуле менеджера.
Отсюда простое правило: нужно переименовать объект или колонку — правьте синоним; нужно поменять саму строку, которой объект «подписывается» в данных, — работайте с основным представлением или обработчиком. Всё это делается в Конфигураторе, а если конфигурация на поддержке — в расширении, без снятия с поддержки.
Любая правка в Конфигураторе завершается командой Обновить конфигурацию базы данных (F7). Изменения синонима и кода модулей применяются динамическим обновлением и сеансы пользователей не прерывают. Но если вы заодно меняете структуру (реквизиты, индексы), обновление реструктурирует таблицы — делайте его, когда в базе никого нет.
Синоним: меняем видимое имя объекта и его колонок
Синоним — это человекочитаемое имя. Справочник называется Контрагенты, а в коде он Справочник.Контрагенты — имя латиницей-кириллицей без пробелов. Пользователь же видит именно синоним.
Где поменять:
- Откройте объект в дереве конфигурации (например, справочник
Номенклатура). - В палитре свойств найдите группу
Основные→ полеСиноним. - Впишите новое имя, например
Товары и услуги.
Так же меняется имя любого реквизита, табличной части и колонки. Открываете реквизит Артикул, задаёте синоним Код поставщика — и в шапках таблиц, в отборах и в отчётах колонка переименуется автоматически, потому что они берут заголовок из синонима.
Синоним поддерживает несколько языков интерфейса. Если в конфигурации включено два языка и больше, задайте перевод для каждого — иначе на втором языке покажется техническое имя.
Отдельный случай — значения перечислений. У перечисления (например, ВидыКонтактнойИнформации) каждое значение имеет свой синоним: откройте Перечисление → Значения, выделите значение и впишите синоним в его свойствах. Именно он показывается в выпадающих списках.
Основное представление: код или наименование
У справочника два стандартных поля-идентификатора — Код и Наименование. Свойство Основное представление решает, какое из них платформа подставляет, когда нужно показать ссылку строкой.
Значения для справочника:
В виде наименования— ссылка показывается наименованием (чаще всего это и нужно);В виде кода— показывается код. Удобно для классификаторов, где важен артикул или номенклатурный номер.
У документа логика та же, но значения другие: В виде номера или В виде даты. По умолчанию документ подписывается номером и датой вместе — свойство позволяет оставить что-то одно.
Где искать: палитра свойств объекта, группа Представление → Основное представление.
| Объект | Свойство | Варианты |
|---|---|---|
| Справочник | Основное представление | В виде кода · В виде наименования |
| Документ | Основное представление | В виде номера · В виде даты |
| Перечисление | Синоним значения | задаётся на каждом значении |
Отдельно стоит журнал документов . В журнал попадает несколько видов документов, и у каждого своё основное представление — в графе журнала они и показываются так, как настроено у каждого вида. Если нужно, чтобы в журнале документы подписывались единообразно, настраивайте представление не у журнала, а у каждого входящего в него документа.
Этого достаточно, пока представление — одно из готовых полей. Как только нужно собрать строку из нескольких реквизитов, одного свойства мало, и в дело вступает обработчик.
Собираем представление из нескольких реквизитов
Представление ссылки всплывает во многих местах: в полях ввода, в динамических списках, в подборах, в печатных формах через Строка(), в отчётах на СКД, в сообщениях пользователю. Настроив его один раз на уровне объекта, вы меняете вид сразу везде — в этом сила обработчика по сравнению с ручной правкой каждой формы.
Типичная задача: в списках и подборах показывать не просто наименование, а наименование с артикулом или характеристикой — Футболка (арт. 12345). Готового свойства для этого нет, зато есть пара обработчиков в модуле менеджера объекта.
Работают они в связке:
ОбработкаПолученияПолейПредставления— перечисляет, какие поля платформе нужно прочитать из базы, чтобы собрать строку. Платформа читает их одним запросом, а не дёргает базу на каждую ссылку;ОбработкаПолученияПредставления— из полученных полей (Данные) собирает итоговую строкуПредставление.
Откройте модуль менеджера справочника (ПКМ по объекту → Открыть модуль менеджера) и добавьте:
Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
Поля.Добавить("Наименование");
Поля.Добавить("Артикул");
СтандартнаяОбработка = Ложь;
КонецПроцедуры
Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
Если ЗначениеЗаполнено(Данные.Артикул) Тогда
Представление = Данные.Наименование + " (арт. " + Данные.Артикул + ")";
Иначе
Представление = Данные.Наименование;
КонецЕсли;
СтандартнаяОбработка = Ложь;
КонецПроцедуры
Разберём, что здесь важно:
СтандартнаяОбработка = Ложь— обязательна в обоих процедурах. ОставитеИстина— платформа проигнорирует вашу строку и покажет наименование по умолчанию.- В
Данныеприходят ровно те поля, что вы перечислили в первом обработчике. Обратитесь к полю, которого там нет, — получите ошибку. - Проверяйте заполненность: если артикул пустой, скобки с пустотой выглядят неряшливо, поэтому в примере стоит
ЗначениеЗаполнено.
После этого ссылка на номенклатуру во всех списках, полях ввода и отчётах будет показываться новой строкой. В коде её тоже можно получить — Строка(Ссылка) вернёт представление, уже собранное вашим обработчиком.
Для документа принцип тот же, только поля другие. Часто просят показывать документ как «номер — контрагент», чтобы не открывать карточку ради того, чтобы понять, чей это заказ:
Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
Поля.Добавить("Номер");
Поля.Добавить("Дата");
Поля.Добавить("Контрагент");
СтандартнаяОбработка = Ложь;
КонецПроцедуры
Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
Представление = "№ " + Данные.Номер + " от " + Формат(Данные.Дата, "ДЛФ=D")
+ " (" + Строка(Данные.Контрагент) + ")";
СтандартнаяОбработка = Ложь;
КонецПроцедуры
Дату приводим к строке через Формат с шаблоном ДЛФ=D — иначе платформа подставит дату со временем. Контрагента оборачиваем в Строка(), потому что в Данные.Контрагент лежит ссылка, а не готовый текст.
Представление в отчётах на СКД
Отчёты на системе компоновки данных (СКД) показывают ссылки через тот же механизм. Если вы настроили обработчик ОбработкаПолученияПредставления, отчёт подхватит новое представление без дополнительных действий — это ещё один довод в пользу обработчика, а не ручной правки каждого отчёта.
Когда представление нужно поменять только в конкретном отчёте, не трогая конфигурацию, собирайте строку прямо в схеме компоновки:
- Откройте схему → вкладка
Вычисляемые поля. - Добавьте поле, например
НоменклатураСАртикулом. - В колонке
Выражениезадайте склейку полей:
Номенклатура.Наименование + " / " + Номенклатура.Артикул
- Вынесите это поле в настройки отчёта вместо исходной номенклатуры.
Для простого переименования колонки в отчёте вычисляемое поле не нужно — достаточно на вкладке с полями задать заголовок через свойство представления поля. А вот склейка нескольких реквизитов в одну ячейку делается именно вычисляемым полем.
Если один и тот же отчёт выгружается в разных разрезах, не плодите вычисляемые поля под каждый случай — вынесите логику в обработчик модуля менеджера, и все отчёты станут единообразными.
Как поменять представление в расширении, не снимая с поддержки
Типовую конфигурацию
(Бухгалтерия предприятия, ЗУП, Управление торговлей) снимать с поддержки нельзя — потеряете автообновление. Представление меняют расширением конфигурации. Механизм доступен с платформы 8.3.6.
Что можно сделать в расширении:
- переопределить
Синонимзаимствованного объекта или реквизита; - поменять
Основное представление; - добавить в модуль менеджера свои
ОбработкаПолученияПолейПредставленияиОбработкаПолученияПредставления.
Порядок:
- Создайте расширение:
Конфигурация → Расширения конфигурации → Добавить. - Заимствуйте нужный объект (
Добавить в расширение). - Правьте синоним или основное представление; для обработчика откройте модуль менеджера объекта в расширении и допишите процедуры.
- Сохраните и проверьте расширение на корректность.
Загрузка файла .cfe и команда Обновить конфигурацию базы данных — это два разных шага: сначала расширение подключается, затем применяется к базе. В клиент-серверной базе расширение можно загрузить и через конфигуратор, и программно.
После обновления типовой конфигурации поставщиком проверяйте расширение: если переименованный реквизит в новой версии изменился, расширение может перестать применяться. Это нормальная плата за работу «поверх» типовой.
Когда в колонке упрямо виден не тот текст
Бывает, что основное представление и обработчик настроены, а в конкретной таблице по-прежнему виден код или голое наименование. Причина почти всегда в том, что колонка показывает не ссылку целиком, а отдельное поле.
Разберём по типам таблиц:
- Колонка динамического списка. В списке можно вывести как ссылку (
Ссылка), так и её поля через точку (Ссылка.Код,Ссылка.Наименование). Если в колонку выведеноСсылка.Наименование, никакое основное представление на неё не влияет — она жёстко показывает наименование. Поменяйте выводимое поле колонки на саму ссылку. - Поле на управляемой форме. У поля ввода есть свойства, отвечающие за то, что показывать. Для ссылочного реквизита, как правило, выводится представление ссылки, и тогда обработчик работает. Если же на форму вынесен отдельный реквизит (
Объект.Наименование), он живёт своей жизнью. - Табличная часть. Колонка табличной части, в которой лежит ссылка, использует представление; колонка со строковым реквизитом — нет.
Отсюда практический вывод: решаете, где менять представление. Нужно поменять везде и сразу — работайте с основным представлением и обработчиком на уровне объекта. Нужно поправить одну форму или один список — настраивайте конкретную колонку, не трогая конфигурацию объекта целиком.
Прежде чем лезть в модуль менеджера, проверьте, что проблемная колонка выводит именно ссылку. Нередко всё «лечится» сменой выводимого поля колонки с Ссылка.Код на Ссылка.
Производительность и поиск: о чём помнить
Обработчик ОбработкаПолученияПредставления вызывается для каждой показываемой ссылки — в больших динамических списках это тысячи вызовов. Чтобы списки не «тормозили»:
- запрашивайте в
ОбработкаПолученияПолейПредставлениятолько нужные поля — лишние поля замедляют чтение; - не выполняйте запросы к базе внутри обработчика представления — он должен лишь склеивать уже прочитанные поля. Запрос в цикле по строкам убьёт производительность списка;
- тяжёлые вычисления (например, остаток по регистру) в представление не кладите — для этого есть колонки динамического списка.
Отдельно про поиск. Смена представления не меняет то, по каким полям работает ввод по строке и быстрый отбор. Пользователь по-прежнему ищет по наименованию и коду, даже если видит артикул в скобках. Чтобы искать ещё и по артикулу, добавьте его в свойство объекта Ввод по строке — там перечисляются поля, по которым идёт подбор при наборе в поле ввода. Представление и поиск — независимые настройки, и путать их не стоит.
Чем «представление» отличается от «наименования»?
Поменял основное представление, а в части форм всё равно виден код. Почему?
Код или Наименование) напрямую, а не ссылки целиком. В этом случае помогает не основное представление, а настройка самой колонки на форме.Обработчик представления работает и на клиенте, и на сервере?
Можно ли задать представление для перечисления?
Перечисление → Значения и задайте синоним нужному значению.Изменится ли поиск по строке, если поменять представление?
Ввод по строке, а не по тому, что собрал обработчик. Хотите искать по новому полю — добавьте его в это свойство отдельно.