Как управлять тем, что пользователь видит вместо ссылки: представление в 1С 8.3
Содержание
Установить представление в 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» с неразрывным пробелом.
Представление в запросе
В языке запросов есть функции ПРЕДСТАВЛЕНИЕ() и ПРЕДСТАВЛЕНИЕССЫЛКИ(). Они возвращают строку и пригодны для вывода, но не для отбора и сравнения.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Реализация.Ссылка КАК Документ,
| ПРЕДСТАВЛЕНИЕ(Реализация.Контрагент) КАК КонтрагентТекст
|ИЗ
| Документ.РеализацияТоваровУслуг КАК Реализация";
В коде вне запроса представление ссылки дают Строка(Ссылка) или неявное преобразование при склейке строк. Учтите: в клиентском коде это может обернуться вызовом сервера, ведь для построения строки нужны данные из базы.
Представление на форме: поле ввода, заголовки, формат
На управляемой форме поле ввода для реквизита ссылочного типа показывает представление само — ничего настраивать не нужно. Настройка нужна в трёх ситуациях.
- Число или дата выглядят не так. Выделите элемент формы, откройте его свойства и заполните «Формат» (для просмотра) и «Формат редактирования» (для ввода). Конструктор форматной строки открывается кнопкой у свойства.
- Нужно показать дополнительный текст рядом с полем. Добавьте на форму реквизит типа «Строка» и выведите его полем надписи. Заполняйте его в
ПриСозданииНаСервереи в обработчикеПриИзмененииосновного поля. - Список выбора с подписями. У поля есть свойство «Список выбора»: в нём для каждого значения задаётся своё представление. В коде то же самое делают через
Элементы.ИмяПоля.СписокВыбора.Добавить(Значение, Представление).
Заголовок поля — не то же самое, что представление значения. Заголовок («Контрагент:») задаётся свойством «Заголовок» элемента формы, а если оно пустое, берётся синоним реквизита. Где находятся реквизиты формы: вкладка «Реквизиты» в редакторе формы, справа сверху; элементы, которые их выводят, — на вкладке «Элементы».
Если представление ссылки в поле не обновилось после изменения наименования в другой форме, перечитайте значение: в поле уже лежит готовая строка, построенная в момент открытия формы.
Представление при отладке и диагностике
Отладчик показывает значение и его тип. Для ссылки в колонке значения выводится именно представление — поэтому кривое правило представления мешает и при отладке: две разные ссылки с одинаковым наименованием выглядят одинаково.
Приёмы, которые помогают:
- 🔎 В окне «Вычислить выражение» (
Shift+F9) раскройте ссылку: внутри видны все реквизиты, и одинаковые по виду элементы различаются по коду. - 🔎 Чтобы сравнить две ссылки однозначно, вычислите
Строка(Ссылка.УникальныйИдентификатор()). - 🛑 Поставьте точку останова в
ОбработкаПолученияПредставленияи откройте список: увидите, сколько раз и с какими данными вызывается обработчик. - ⏱️ Замер производительности (меню
Отладкав Конфигураторе) покажет, сколько времени съедает обработчик при открытии списка. Если на нём заметная доля — внутри есть обращение к базе.
Для логирования удобнее не полагаться на представление, а писать в журнал регистрации и ссылку, и строку: ЗаписьЖурналаРегистрации("Обмен", УровеньЖурналаРегистрации.Ошибка, , Ссылка, Текст). Параметр «Данные» сохранит ссылку, по которой потом можно открыть объект.
Поля в ОбработкаПолученияПолейПредставления. Добавьте его в массив.СтандартнаяОбработка = Ложь или конфигурация базы данных не обновлена (F7). В расширении проверьте, что оно подключено и активно.ОбработкаПолученияПредставления есть запрос или обращение к реквизиту ссылки через точку. Перенесите нужное поле в Поля или уберите его из представления.Формат(Число, "ЧГ=0") или СтрШаблон.Ошибки при настройке представления и как их избежать
Отдельно о решениях, которые работают, но потом создают проблемы.
Длинное представление. Наименование плюс ИНН плюс КПП плюс город — строка не влезет в поле ввода, обрежется в печатной форме и разъедет отчёты. Держите в представлении один-два признака, остальное выводите отдельными колонками.
Представление как ключ. Код, который ищет элемент по строке представления, сломается при первой же правке правила. Ищите по коду, наименованию или реквизиту, а не по Строка(Ссылка).
Рекурсия. Вызов Строка() от ссылки того же объекта внутри его же обработчика снова запускает обработчик. Строку собирайте только из полей Данные.
Разные правила в базе и в расширении. Если представление переопределено и в основной конфигурации, и в расширении, итог зависит от того, как заимствован обработчик. Держите правило в одном месте.
Смена «Основного представления» в работающей базе. Технически безопасно, но пользователи, привыкшие искать товар по коду, вдруг увидят наименования. Предупредите их до обновления.