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

17.09.20

Разработка - Работа с интерфейсом

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

Приветствую, коллеги! Хочу сразу оговориться данная статья не претендует на оригинальность и написана в первую очередь для новичков (либо кто подзабыл), в которой я хотел бы наиболее подробно описать все способы решения такой задачи, как переопределение представления ссылочного значения. Естественно речь идет об управляемых формах (не знаю насколько об этом уместно говорить в 2020), я такой статьи на ИС не нашел (может плохо искал) и решил восполнить данный пробел.

Итак, постараюсь разбить способы реализации в формате кейсов:

Кейс 1 "Переопределение представления в рамках всей БД"

Заказчик: - Сделайте, чтобы валюта выводилась вместе с кодом

Программист: - Везде? Во всех списках, формах и т.д.?

Заказчик: - Да!

До:

Решение:

Данный способ изменяет представление ссылки абсолютно везде, где отображается наша ссылка т.е. действует в рамках всей БД.

Представление объекта по умолчанию настраивается на вкладке "Данные", раздел "Основное представление".

По умолчанию как мы видим, мы можем выбрать только Код или Наименование.

Открываем МодульМенеджера и создаем в нем процедуры ОбработкаПолученияПредставления

Если открыть отладку то мы увидим примерно следующую картину:

Переменная Данные представляет собой структуру, в которой находится Ссылка на объект и Поле основного представления.

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

В итоге весь модуль будет выглядеть примерно так:

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

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

Результат:

И еще раз повторюсь, теперь ссылка на валюту будет отображаться так везде, и в списках, и в формах, и даже в запросе, при условии, что мы выбираем именно Представление:

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

 

Кейс 2 "Переопределение представления в отчетах на СКД"

Заказчик: - Напишите вместо "Расход товара" - "Накладная" и время уберите у документа, оно мне не нужно

Программист: - Только в этом отчете?

Заказчик: - Да!

До:

Решение:

В случае СКД разработчику предоставляются огромные возможности по оформлению полей и в данном случае все решается буквально одной настройкой. В схеме для необходимого поля используем настройку "Выражение представления":

Указываем выражение: "Накладная " + Регистратор.Номер + " от " + Формат(Регистратор.Дата, "ДФ=dd.MM.yyyy")

Результат:

 

Кейс 3 "Переопределение представления в динамическом списке"

Заказчик: - Сделайте, чтобы в списке документов в наименовании склада в скобках отображался Регион

Программист: - Может Вам лучше сделать отдельную колонку?

Заказчик: - Нет, хочу в наименовании!

До:

 

Решение:

Установим произвольный запрос динамического списка и дополним полем "Регион":

Всем известно, что 1С оптимизирует получение данных и исключает из запроса поля по отсутствующим колонкам, поэтому у поле Регион установим флаг "Использовать всегда":

Создадим процедуру СписокПриПолученииДанныхНаСервере

Из справки: Обработчик события вызывается на сервере после получения данных динамическим списком, доступен, начиная с версии 8.3.10.

И пропишем туда примерное такой код:

&НаСервереБезКонтекста
Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)
	
    Для Каждого Стр Из Строки Цикл
       ОформлениеЯчейки = Стр.Значение.Оформление["Склад"];
       ОформлениеЯчейки.УстановитьЗначениеПараметра("Текст", СтрШаблон("%1 (%2)", Стр.Значение.Данные.Склад, Стр.Значение.Данные.Регион));
    КонецЦикла;	
	
КонецПроцедуры

Результат:

Дополнение от tjurikov_ivan:

Если не принципиально выводить в (скобках) то можно сделать следующим образом. (в моём примере номенклатура и ее код)
Через "Изменить форму" добавляем реквизит код, отключаем у колонки свойство отображать заголовок , добавляем группу колонок, у группы ставим группировка = в ячейке.
Теперь у нас в одной колонке отображается Номенклатура и код через запятую, быстро и без правок в конфигураторе.

Кейс 4 "Переопределение представления в таблице с источником данных табличная часть, таблица значений, дерево значений"

Заказчик: - Уберите из колонки "Счет" наименование документа и так же понятно, что это счет, оставьте только номер и дату

Программист: - Не вопрос

До:

Решение:

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

Напишем код, который будет заполнять данную колонку, нужным нам представлением, необходимо отработать открытие существующего документа, а также событие изменения ссылки, в итоге имеем примерно следующий код:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	ОбновитьПредставлениеСчетов();
		
КонецПроцедуры

&НаСервере
Процедура ОбновитьПредставлениеСчетов()

	Массив = Объект.Товары.Выгрузить(,"Счет").ВыгрузитьКолонку("Счет");
	Соответствие = ПолучитьСоответствиеПредставлений(Массив);
	
	Для Каждого Стр Из Объект.Товары Цикл
		Стр.СчетПредставление = Соответствие[Стр.Счет];
	КонецЦикла;	

КонецПроцедуры // ОбновитьПредставлениеСчетов()

&НаСервереБезКонтекста
Функция ПолучитьСоответствиеПредставлений(Ссылка)

	Соответствие = Новый Соответствие;
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Счет.Номер КАК Номер,
		|	Счет.Дата КАК Дата,
		|	Счет.Ссылка КАК Ссылка
		|ИЗ
		|	Документ.Счет КАК Счет
		|ГДЕ
		|	Счет.Ссылка В(&Ссылка)";
	
	Запрос.УстановитьПараметр("Ссылка", Ссылка);
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		Соответствие.Вставить(ВыборкаДетальныеЗаписи.Ссылка, СтрШаблон("%1 от %2", ВыборкаДетальныеЗаписи.Номер, ВыборкаДетальныеЗаписи.Дата));
	КонецЦикла;
	
	Возврат Соответствие;

КонецФункции // ПолучитьСоответствиеПредставлений()

&НаКлиенте
Процедура ТоварыСчетПриИзменении(Элемент)
	
	ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
	Если ТекущиеДанные <> Неопределено Тогда
		Соответствие = ПолучитьСоответствиеПредставлений(ТекущиеДанные.Счет);
		ТекущиеДанные.СчетПредставление = Соответствие[ТекущиеДанные.Счет];
	КонецЕсли;	
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
	
	ОбновитьПредставлениеСчетов();
	
КонецПроцедуры

Наконец, настраиваем УсловноеОформление формы, примерно так:

Результат:

Надеюсь, что статья окажется хоть кому-нибудь полезной, всем спасибо за внимание!

См. также

Работа с интерфейсом Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    55303    17    23    

43

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Богатый редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    63695    44    59    

82

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

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

2400 руб.

29.06.2020    19548    27    6    

42

Работа с интерфейсом Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

1500 руб.

06.10.2020    10766    7    7    

11

Работа с интерфейсом Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    20813    mrXoxot    44    

128

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

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

27.05.2024    10299    smielka    37    

105

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    17738    1223    elcoan    53    

125
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Maddream 17.09.20 12:06 Сейчас в теме
Надеюсь, что статья окажется хоть кому-нибудь полезной

Оказалась, спасибо :)
ILEO_911; Ali_q; dim9; serge-ce1; Рамзес; portwein; Jeka44; sam441; DimaKors; +9 Ответить
2. Evg-Lylyk 4894 17.09.20 12:34 Сейчас в теме
(0) Хорошая статья
Разработка близкая по теме
DimaKors; +1 Ответить
6. sam441 226 17.09.20 16:16 Сейчас в теме
3. ComboBoy 15 17.09.20 13:53 Сейчас в теме
4. Yashazz 4801 17.09.20 15:55 Сейчас в теме
Хороший обзор для новичков.
Потому как, кроме ссылочного значения, есть ещё множество занимательного. Начиная от UID'ов и перечислений, системных переменных, и заканчивая сложными ключами или битыми/кривыми ссылками. И кроме юзерского интерфейса, есть ещё всякое, вроде ЖР или ТЖ. Вот там в смысле представления - множество интересных нюансов. Там и языковые настройки, и платформенные cfg-файлы, и релиз влияет, и вообще. Было б время и силы - написал бы. Но новичкам и того, что в статье, за глаза достаточно)
5. sam441 226 17.09.20 16:16 Сейчас в теме
(4)Благодарю за развёрнутый комментарий! По поводу того, о чем Вы говорите, то если найдёте время, то обязательно пишите, я думаю данный материал будет многим интересен)
7. u_n_k_n_o_w_n 35 17.09.20 16:34 Сейчас в теме
Статья для тех, кто хочет знать обо всем по немногу.
9. Cmapnep 19 18.09.20 10:49 Сейчас в теме
Спасибо за систематизацию - будет куда заглянуть когда начнутся проблемы с памятью)

По последнему кейсу - я правильно понимаю, что у вас там два запроса в цикле по каждой строке ТЧ (для Номер и Дата) да еще и через точку?
Как-то это совсем не оптимально. Может перепишите на один запрос без цикла, чтобы не учить новичков плохому?
10. sam441 226 18.09.20 12:47 Сейчас в теме
(9)Да вы правы, там будет запрос в цикле, но т.к. писалось в первую очередь для новичков, то решил не усложнять, все-таки статья не про оптимизацию, но возможно и перепишу, как найду время.
11. sam441 226 18.09.20 14:13 Сейчас в теме
12. Cmapnep 19 18.09.20 14:46 Сейчас в теме
13. tjurikov_ivan 215 18.09.20 15:30 Сейчас в теме
Я бы дополнил кейс №3.
Заказчик может быть и хочет в наименовании, но мы же можем не говорить ему о том как это реализовано.
Если не принципиально выводить в (скобках) то можно сделать следующим образом. (в моём примере номенклатура и ее код)
Через "Изменить форму" добавляем реквизит код, отключаем у колонки свойство отображать заголовок , добавляем группу колонок, у группы ставим группировка = в ячейке.
Теперь у нас в одной колонке отображается Номенклатура и код через запятую, быстро и без правок в конфигураторе.
Прикрепленные файлы:
dammit666; u_n_k_n_o_w_n; sam441; triviumfan; Рамзес; +5 Ответить
14. sam441 226 22.09.20 12:11 Сейчас в теме
(13)Благодарю, дополнил статью.
15. пользователь 23.09.20 10:39
Сообщение было скрыто модератором.
...
16. chuff 24.09.20 05:20 Сейчас в теме
17. IKS_T 27.03.23 08:42 Сейчас в теме
18. Rabin 52 19.09.23 13:37 Сейчас в теме
Помогла ваша статья, спасибо! (Кейс 4)
19. user1336416 23.11.23 20:36 Сейчас в теме
это просто вау. спасибо!
Оставьте свое сообщение