Часто при разработке отчетов на базе Системы Компоновки Данных (СКД), например, в Оборотно-сальдовой ведомости, возникает необходимость изменить способ отображения данных. Стандартное поле субконто обычно выводит Наименование объекта. Однако пользователям часто требуется видеть НаименованиеПолное для номенклатуры. Рассмотрим, как это реализовать правильно, чтобы не потерять возможность открытия карточки объекта по двойному клику.
Многие разработчики на начальном этапе пытаются решить задачу через ВЫРАЗИТЬ непосредственно в тексте запроса:
ВЫБРАТЬ
ВЫРАЗИТЬ(ОстаткиИОбороты.Субконто1 КАК Справочник.Номенклатура).НаименованиеПолное КАК Субконто1
ИЗ
РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты КАК ОстаткиИОбороты
Этот подход имеет существенный недостаток: после применения функции ВЫРАЗИТЬ поле превращается из ссылки на объект в строку. В итоге отчет перестает «понимать», что это номенклатура, и у пользователя пропадает возможность расшифровки (открытия карточки) при двойном клике. Мы же хотим изменить только визуальное представление, сохранив исходный тип данных.
Самый эффективный способ — использование настройки Выражение представления в наборах данных СКД. Это позволяет подменять текст, который видит пользователь, не меняя при этом само значение поля.
Для реализации задачи выполним следующие шаги:
Схему компоновки данных нашего отчета.Наборы данных.ОстаткиИОбороты.Субконто1 ССЫЛКА Справочник.Номенклатура КАК Субконто1ЯвляетсяНоменклатурой.Субконто1.Выражение представления пропишем логику выбора отображения.Рассмотрим пример правильного выражения:
ВЫБОР
КОГДА НЕ ЗначениеЗаполнено(Субконто1) ТОГДА "<...>"
КОГДА Субконто1ЯвляетсяНоменклатурой ТОГДА Субконто1.НаименованиеПолное
ИНАЧЕ Субконто1
КОНЕЦ
При использовании Выражения представления система СКД продолжает оперировать оригинальным полем Субконто1 (которое является ссылкой), поэтому механизм расшифровки продолжает работать корректно. Мы лишь указываем платформе, какой именно текст нужно «нарисовать» в ячейке табличного документа.
Если логика определения представления становится слишком сложной, рекомендуем использовать следующие методы:
Выражение представления просто вызовите её: ПолучитьПредставлениеСубконто(Субконто1). Это значительно повышает читаемость кода.ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекцию, можно перехватить вывод в обработчике ПриПолученииПредставлений и подменить значения «на лету» перед выводом в ТабличныйДокумент.Характеристики, настройки представления можно задать в самом описании характеристики, что делает решение универсальным для всей конфигурации.Используя описанный выше метод с Выражением представления, вы обеспечите удобство для пользователя, сохранив при этом чистоту кода и функциональность интерактивной работы с данными.