Как управлять тем, что пользователь видит вместо ссылки: представление в 1С 8.3

· 9 мин

Содержание

Установить представление в 1С 8.3 для справочника или документа — значит переопределить в модуле менеджера два обработчика: ОбработкаПолученияПолейПредставления (какие поля читать из базы) и ОбработкаПолученияПредставления (как склеить из них строку). Для элемента списка значений представление задают вторым параметром метода Добавить() или прямо свойством Представление.

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

Что такое представление значения и где оно встречается

Представление — это строка, которой платформа заменяет значение при выводе человеку. В базе хранится ссылка (по сути, уникальный идентификатор), а в поле формы, в отчёте и в сообщении пользователь видит «ООО Ромашка» или «Реализация 0000-000045 от 12.03.2025».

Где представление работает каждый день:

  • 📋 поля ввода с реквизитами ссылочного типа;
  • 📊 колонки динамических списков и таблиц;
  • 🧾 отчёты на СКД и результаты запросов;
  • 💬 Сообщить(), заголовки форм, тексты ошибок;
  • 🔍 окно «Вычислить выражение» и Табло в отладчике.

Представление не хранится в базе как отдельный реквизит. Если поменять правило, все старые документы и элементы сразу начнут показываться по-новому — без перезаписи данных.

Синоним объекта метаданных (например, «Поступление товаров и услуг») — тоже представление, только не данных, а самого объекта конфигурации. Получить его в коде можно так: Метаданные.Документы.ПоступлениеТоваровУслуг.Представление().

Метода УстановитьПредставление нет: чем пользуются вместо него

Задача «установить представление» в 1С решается разными инструментами в зависимости от того, что именно нужно показать по-другому.

Что меняемИнструментГде
Как выглядит ссылка на элемент справочника или документОбработкаПолученияПредставления + ОбработкаПолученияПолейПредставленияМодуль менеджера
Код или наименование в качестве основыСвойство «Основное представление»Палитра свойств объекта
Название объекта в заголовках форм и командах«Представление объекта», «Представление списка» и расширенные вариантыПалитра свойств объекта
Подпись значения в списке выбораСписокЗначений.Добавить(Значение, Представление)Код
Вывод чисел, дат, булевыхФункция Формат() и свойство поля «Формат»Код и форма
Подпись элемента отбора или настройкиСвойство Представление у элемента компоновкиКод или настройки отчёта

Синтаксис обработчиков в модуле менеджера

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

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

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

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

#КонецЕсли

Параметры:

ПараметрЧто этоЧто с ним делать
ПоляМассив имён реквизитовДобавить все поля, которые понадобятся во втором обработчике
ДанныеСтруктура со значениями этих полейЧитать только то, что перечислено в Поля
ПредставлениеСтрока-результатПрисвоить готовый текст
СтандартнаяОбработкаБулевоПоставить Ложь, иначе платформа построит представление сама

Два обработчика работают в паре. Первый сообщает платформе, какие колонки читать из таблицы объекта, второй получает их уже прочитанными. Так представление сотни строк списка строится за один запрос, а не за сотню.

Не обращайтесь внутри ОбработкаПолученияПредставления к базе: не вызывайте запросы и не берите реквизиты «через точку» от ссылки. Обработчик вызывается при каждом показе значения, и любой лишний запрос умножится на число строк в списке.

Как платформа строит представление без вашего кода

Если обработчики не переопределены или в них оставлено СтандартнаяОбработка = Истина, работает правило по умолчанию. Его полезно знать, чтобы понять, нужен ли код вообще.

Тип значенияПредставление по умолчанию
Элемент справочникаНаименование или код — по свойству «Основное представление»
ДокументСиноним документа + номер + «от» + дата и время
Значение перечисленияСиноним значения перечисления
План счетовКод счёта или наименование — по свойству «Основное представление»
ЧислоЧисло с разделителем групп разрядов по региональным настройкам
ДатаДата и время в формате региональных настроек
Булево«Да» / «Нет»
Неопределено, пустая ссылкаПустая строка

Пример: документ «Реализация товаров и услуг» с номером 0000-000045 от 12 марта 2025 года в 10:15 по умолчанию покажется как «Реализация товаров и услуг 0000-000045 от 12.03.2025 10:15:00».

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

Свойства объекта в Конфигураторе: настройка без программирования

Часть задачи решается в палитре свойств объекта метаданных, без единой строки кода. Откройте объект в дереве конфигурации и нажмите Alt+Enter, чтобы вызвать палитру свойств.

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

У справочника в свойстве «Основное представление» два варианта: «В виде кода» и «В виде наименования». Для номенклатуры почти всегда выбирают наименование. Для классификаторов с говорящими кодами (например, коды видов операций) иногда удобнее код.

Если наименование у справочника отключено (длина 0), основа представления — только код.

Представления объекта и списка

В группе свойств, отвечающих за представление, есть четыре строки:

  • 🏷️ Представление объекта — как называется один элемент («Контрагент»);
  • 🏷️ Расширенное представление объекта — заголовок формы элемента («Карточка контрагента »);
  • 📃 Представление списка — как называется список («Контрагенты»);
  • 📃 Расширенное представление списка — заголовок формы списка («Справочник контрагентов»).

Если строки пустые, платформа берёт синоним объекта. Заполняют их, когда синоним грамматически не подходит для заголовка: синоним «Поступление товаров» хорош для команды, но в списке читатель ждёт «Поступления товаров».

Правку свойств типовой конфигурации, снятой с поддержки, придётся сравнивать при каждом обновлении. Для типовых решений безопаснее переопределять представление в расширении конфигурации: заимствуйте объект и добавьте обработчики модуля менеджера в расширение.

Представление в коде: списки значений, формат, запросы

Список значений

Элемент списка значений хранит значение и подпись к нему отдельно. Подпись задают при добавлении или меняют потом:

Варианты = Новый СписокЗначений;
Варианты.Добавить(1, "Месяц");
Варианты.Добавить(3, "Квартал");
Варианты.Добавить(12, "Год");

// поменять подпись у существующего элемента
Элемент = Варианты.НайтиПоЗначению(3);
Если Элемент <> Неопределено Тогда
	Элемент.Представление = "Квартал (3 мес.)";
КонецЕсли;

Пользователь в списке выбора видит «Месяц», «Квартал (3 мес.)», «Год», а в реквизит попадёт число 1, 3 или 12.

Функция Формат для примитивных типов

Для чисел, дат и булевых значений собственное представление строят функцией Формат():

Сумма = 1234567.8;
Текст1 = Формат(Сумма, "ЧДЦ=2; ЧРГ=' '");        // 1 234 567,80
Текст2 = Формат(ТекущаяДатаСеанса(), "ДФ=dd.MM.yyyy"); // 16.10.2026
Текст3 = Формат(Истина, "БЛ=Нет; БИ=Есть");       // Есть
Текст4 = Формат(12, "ЧГ=0");                     // 12 без разделителей

Последний вариант нужен, когда номер или год склеивают со строкой: без ЧГ=0 число 2025 превратится в «2 025» с неразрывным пробелом.

Представление в запросе

В языке запросов есть функции ПРЕДСТАВЛЕНИЕ() и ПРЕДСТАВЛЕНИЕССЫЛКИ(). Они возвращают строку и пригодны для вывода, но не для отбора и сравнения.

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|	Реализация.Ссылка КАК Документ,
|	ПРЕДСТАВЛЕНИЕ(Реализация.Контрагент) КАК КонтрагентТекст
|ИЗ
|	Документ.РеализацияТоваровУслуг КАК Реализация";

В коде вне запроса представление ссылки дают Строка(Ссылка) или неявное преобразование при склейке строк. Учтите: в клиентском коде это может обернуться вызовом сервера, ведь для построения строки нужны данные из базы.

Представление на форме: поле ввода, заголовки, формат

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

  1. Число или дата выглядят не так. Выделите элемент формы, откройте его свойства и заполните «Формат» (для просмотра) и «Формат редактирования» (для ввода). Конструктор форматной строки открывается кнопкой у свойства.
  2. Нужно показать дополнительный текст рядом с полем. Добавьте на форму реквизит типа «Строка» и выведите его полем надписи. Заполняйте его в ПриСозданииНаСервере и в обработчике ПриИзменении основного поля.
  3. Список выбора с подписями. У поля есть свойство «Список выбора»: в нём для каждого значения задаётся своё представление. В коде то же самое делают через Элементы.ИмяПоля.СписокВыбора.Добавить(Значение, Представление).

Заголовок поля — не то же самое, что представление значения. Заголовок («Контрагент:») задаётся свойством «Заголовок» элемента формы, а если оно пустое, берётся синоним реквизита. Где находятся реквизиты формы: вкладка «Реквизиты» в редакторе формы, справа сверху; элементы, которые их выводят, — на вкладке «Элементы».

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

Представление при отладке и диагностике

Отладчик показывает значение и его тип. Для ссылки в колонке значения выводится именно представление — поэтому кривое правило представления мешает и при отладке: две разные ссылки с одинаковым наименованием выглядят одинаково.

Приёмы, которые помогают:

  • 🔎 В окне «Вычислить выражение» (Shift+F9) раскройте ссылку: внутри видны все реквизиты, и одинаковые по виду элементы различаются по коду.
  • 🔎 Чтобы сравнить две ссылки однозначно, вычислите Строка(Ссылка.УникальныйИдентификатор()).
  • 🛑 Поставьте точку останова в ОбработкаПолученияПредставления и откройте список: увидите, сколько раз и с какими данными вызывается обработчик.
  • ⏱️ Замер производительности (меню Отладка в Конфигураторе) покажет, сколько времени съедает обработчик при открытии списка. Если на нём заметная доля — внутри есть обращение к базе.

Для логирования удобнее не полагаться на представление, а писать в журнал регистрации и ссылку, и строку: ЗаписьЖурналаРегистрации("Обмен", УровеньЖурналаРегистрации.Ошибка, , Ссылка, Текст). Параметр «Данные» сохранит ссылку, по которой потом можно открыть объект.

Диагностика: выберите симптом

Ошибки при настройке представления и как их избежать

Отдельно о решениях, которые работают, но потом создают проблемы.

Длинное представление. Наименование плюс ИНН плюс КПП плюс город — строка не влезет в поле ввода, обрежется в печатной форме и разъедет отчёты. Держите в представлении один-два признака, остальное выводите отдельными колонками.

Представление как ключ. Код, который ищет элемент по строке представления, сломается при первой же правке правила. Ищите по коду, наименованию или реквизиту, а не по Строка(Ссылка).

Рекурсия. Вызов Строка() от ссылки того же объекта внутри его же обработчика снова запускает обработчик. Строку собирайте только из полей Данные.

Разные правила в базе и в расширении. Если представление переопределено и в основной конфигурации, и в расширении, итог зависит от того, как заимствован обработчик. Держите правило в одном месте.

Смена «Основного представления» в работающей базе. Технически безопасно, но пользователи, привыкшие искать товар по коду, вдруг увидят наименования. Предупредите их до обновления.

Частые вопросы

Можно ли задать представление только для одной формы, не трогая весь справочник?
Да. Не меняйте обработчики менеджера, а выведите на форме отдельный строковый реквизит с нужным текстом или настройте колонку динамического списка своим запросом.
Влияет ли ОбработкаПолученияПредставления на поиск при вводе по строке?
Нет, поиск по строке настраивается отдельно — списком полей в свойстве «Ввод по строке» у объекта метаданных. Представление определяет только то, как найденный элемент выглядит.
Почему в отчёте СКД представление отличается от формы?
В схеме компоновки у поля может быть задано своё выражение представления или формат. Проверьте свойства поля на вкладке «Наборы данных» и в настройках вывода.
Есть ли представление у пустой ссылки?
Пустая ссылка выводится пустой строкой. Если нужна подпись вроде «<не выбрано>», задайте её свойством поля формы «Подсказка ввода».
Сохраняется ли представление в выгрузке XML или обмене?
Нет, в обмен уходят ссылка и реквизиты. Получатель построит представление по своим правилам.