При разработке отчетов на базе Системы компоновки данных (СКД) программисты часто сталкиваются с задачей изменения визуального представления ссылочных полей. Классический пример: в отчете по остаткам товаров на складе необходимо вывести поле Номенклатура. При этом в ячейке должно отображаться не стандартное наименование, а полное (НаименованиеПолное), но сама ячейка должна оставаться полноценной ссылкой, чтобы пользователь мог дважды кликнуть по ней и открыть карточку номенклатуры.
Иногда стандартный и, казалось бы, самый очевидный механизм настройки через свойство «Выражение представления» внезапно перестает работать. Разберем по шагам, почему возникает эта проблема, проанализируем причины конфликта механизмов платформы 1С и рассмотрим три эффективных способа ее решения.
Для начала давайте разберем, почему стандартная настройка в схеме компоновки данных может игнорироваться системой. Существует три основные причины:
Выражение представления на вкладке Наборы данных, просто перестают обрабатываться.ПРЕДСТАВЛЕНИЕ(Номенклатура) или обращаясь к текстовому реквизиту напрямую через Номенклатура.НаименованиеПолное КАК Номенклатура), тип поля на выходе из запроса меняется со ссылочного на строковой. В таком случае механизм расшифровки (двойной клик) ломается окончательно, ведь СКД больше не видит за строкой реальный объект базы данных.Ниже мы подробно рассмотрим три метода решения этой задачи, начиная от исправления работы с макетами и заканчивая более простыми «лучшими практиками» разработки в 1С.
Если специфика вашего отчета требует обязательного использования индивидуального макета оформления (например, вам нужно задать особый шрифт, цвет фона или объединить ячейки), то стандартное выражение представления работать не будет. В этом случае мы должны вручную связать текст ячейки с расшифровкой.
Выполним настройку по шагам:
Номенклатура).[ИмяПараметраПредставления].ПараметрРасшифровкиНоменклатуры.ИмяПараметраПредставления в колонке Выражение укажем: Номенклатура.НаименованиеПолное (или просто НаименованиеПолное, если оно выбрано в запросе отдельным полем).ПараметрРасшифровкиНоменклатуры в колонке Выражение укажем ссылку на объект: Номенклатура.Таким образом, мы разделили визуальное отображение (строку полного наименования) и внутренний кликабельный идентификатор (ссылку на элемент справочника).
Если вам не требуется сложная перестройка сетки таблицы макета, а нужно лишь заменить текст ссылки на ее полное наименование, использовать макеты вообще не рекомендуется. Создание макетов усложняет схему компоновки и снижает ее гибкость. Вместо этого гораздо эффективнее использовать механизм Условного оформления.
Этот метод считается «лучшей практикой» (best practice) среди разработчиков 1С, так как его легко настроить, и он отлично работает в любых типах отчетов. Настроим его:
Номенклатура.НаименованиеПолное.Номенклатура.Посмотрим, как это работает под капотом системы: СКД выводит в результат отчета полноценное ссылочное поле Номенклатура, благодаря чему стандартная расшифровка по двойному клику работает идеально. Однако на этапе вывода отчета в табличный документ механизм условного оформления перехватывает отображение и подменяет стандартное краткое наименование на НаименованиеПолное.
Если макеты поля не используются, мы можем применить прямое указание выражения представления. Это самый простой способ, который настраивается непосредственно в описании полей набора данных.
Давайте проанализируем правильный шаблон запроса и настройки для этого случая. Наш запрос должен возвращать именно ссылку, а не строку:
ВЫБРАТЬ
ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
ТоварыНаСкладахОстатки.Номенклатура.Артикул КАК Артикул,
ТоварыНаСкладахОстатки.КоличествоОстаток КАК Остаток
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
После написания запроса выполним следующие действия:
Номенклатура.Номенклатура.НаименованиеПолное.При таком подходе платформа автоматически берет на себя задачу получения полного наименования для каждой выводимой ссылки, при этом свойство расшифровки поля сохраняет тип СправочникСсылка.Номенклатура, обеспечивая корректный переход в карточку товара при двойном клике.
Для того чтобы выбрать наиболее подходящий вариант для вашей текущей задачи, сравним описанные подходы:
Открыть значение).Используя эти рекомендации, мы сможем избежать распространенных ошибок при проектировании отчетов в СКД и создавать интуитивно понятные интерфейсы для конечных пользователей.