Как правильно настроить представление поля в СКД с сохранением расшифровки?

Программист 1С v8.3 (Управляемые формы) Управленческий учет IT и автоматизация бизнеса
← На главную

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

Иногда стандартный и, казалось бы, самый очевидный механизм настройки через свойство «Выражение представления» внезапно перестает работать. Разберем по шагам, почему возникает эта проблема, проанализируем причины конфликта механизмов платформы 1С и рассмотрим три эффективных способа ее решения.

Выясняем причину: почему ломается «Выражение представления»?

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

  1. Использование собственного макета поля. Это наиболее частая причина. Как только разработчик создает индивидуальный Макет поля на соответствующей вкладке СКД, платформа 1С полностью передает управление визуализацией этому макету. Все настройки, заданные в колонке Выражение представления на вкладке Наборы данных, просто перестают обрабатываться.
  2. Преобразование ссылки в строку в запросе. Если в тексте запроса разработчик принудительно преобразует ссылку в строку (например, используя конструкцию ПРЕДСТАВЛЕНИЕ(Номенклатура) или обращаясь к текстовому реквизиту напрямую через Номенклатура.НаименованиеПолное КАК Номенклатура), тип поля на выходе из запроса меняется со ссылочного на строковой. В таком случае механизм расшифровки (двойной клик) ломается окончательно, ведь СКД больше не видит за строкой реальный объект базы данных.
  3. Особенности внешних наборов данных. Если данные передаются в СКД из внешней таблицы значений, а колонка таблицы не имеет жестко заданного ссылочного типа, выражение представления также не будет обрабатываться корректно.

Ниже мы подробно рассмотрим три метода решения этой задачи, начиная от исправления работы с макетами и заканчивая более простыми «лучшими практиками» разработки в 1С.

Способ 1. Настройка индивидуального макета поля с двумя параметрами

Если специфика вашего отчета требует обязательного использования индивидуального макета оформления (например, вам нужно задать особый шрифт, цвет фона или объединить ячейки), то стандартное выражение представления работать не будет. В этом случае мы должны вручную связать текст ячейки с расшифровкой.

Выполним настройку по шагам:

  1. Перейдем на вкладку Макеты в схеме компоновки данных.
  2. Добавим новый Макет поля и укажем для него оформляемое поле (в нашем случае это Номенклатура).
  3. В ячейке макета, где должно выводиться поле, напишем имя параметра в квадратных скобках, например: [ИмяПараметраПредставления].
  4. Выделим эту ячейку, откроем ее свойства и найдем свойство Параметр расшифровки. Укажем туда новое имя, например: ПараметрРасшифровкиНоменклатуры.
  5. Теперь спустимся в таблицу параметров под макетом и свяжем наши созданные параметры с реальными полями СКД:
    • Для параметра ИмяПараметраПредставления в колонке Выражение укажем: Номенклатура.НаименованиеПолное (или просто НаименованиеПолное, если оно выбрано в запросе отдельным полем).
    • Для параметра ПараметрРасшифровкиНоменклатуры в колонке Выражение укажем ссылку на объект: Номенклатура.
  6. Важнейший нюанс: чтобы по двойному клику система не предлагала пользователю стандартное меню выбора действия (отфильтровать, упорядочить и т.д.), а сразу открывала карточку номенклатуры, в свойствах параметра расшифровки макета найдем строку Основное действие и установим значение Открыть значение.

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

Способ 2. Условное оформление (Рекомендуемый и самый гибкий метод)

Если вам не требуется сложная перестройка сетки таблицы макета, а нужно лишь заменить текст ссылки на ее полное наименование, использовать макеты вообще не рекомендуется. Создание макетов усложняет схему компоновки и снижает ее гибкость. Вместо этого гораздо эффективнее использовать механизм Условного оформления.

Этот метод считается «лучшей практикой» (best practice) среди разработчиков 1С, так как его легко настроить, и он отлично работает в любых типах отчетов. Настроим его:

  1. В схеме компоновки перейдем на вкладку Настройки, а затем на вкладку Условное оформление (на уровне всего отчета или конкретной группировки).
  2. Добавим новый элемент условного оформления.
  3. В колонке Оформление найдем свойство Текст. Вместо ввода фиксированного текста нажмем на кнопку выбора (три точки), выберем тип значения Поле компоновки данных и укажем путь к полному наименованию: Номенклатура.НаименованиеПолное.
  4. В колонке Условие ничего указывать не нужно — оформление должно применяться ко всем строкам отчета без исключения.
  5. В колонке Оформляемые поля укажем наше основное поле: Номенклатура.

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

Способ 3. Чистая настройка «Выражения представления» на уровне набора данных

Если макеты поля не используются, мы можем применить прямое указание выражения представления. Это самый простой способ, который настраивается непосредственно в описании полей набора данных.

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


ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
    ТоварыНаСкладахОстатки.Номенклатура.Артикул КАК Артикул,
    ТоварыНаСкладахОстатки.КоличествоОстаток КАК Остаток
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки

После написания запроса выполним следующие действия:

  1. Перейдем на вкладку Наборы данных.
  2. В списке полей найдем строку Номенклатура.
  3. Найдем колонку Выражение представления.
  4. Напишем в ней путь к реквизиту, который хотим видеть на экране: Номенклатура.НаименованиеПолное.

При таком подходе платформа автоматически берет на себя задачу получения полного наименования для каждой выводимой ссылки, при этом свойство расшифровки поля сохраняет тип СправочникСсылка.Номенклатура, обеспечивая корректный переход в карточку товара при двойном клике.

Сравнительный анализ методов

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

Используя эти рекомендации, мы сможем избежать распространенных ошибок при проектировании отчетов в СКД и создавать интуитивно понятные интерфейсы для конечных пользователей.

← На главную