Почему поле СКД не отображается в пользовательском режиме и как это исправить?

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

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

Разберемся в причинах проблемы

Основная причина скрывается в механизме автоматического анализа полей. СКД — это достаточно «умная» подсистема, которая пытается оптимизировать выполнение запроса. Если запрос содержит сложные соединения, объединения или использование составных типов данных (например, когда поле может содержать ссылки на разные справочники), СКД может принять решение скрыть поле из настроек.

Это происходит по двум ключевым причинам:

  1. Безопасность и RLS: Если на один из типов данных, входящих в составной тип, наложены ограничения доступа (RLS), система может исключить все поле из списка доступных, чтобы избежать утечки данных.
  2. Неопределенность типов: Если СКД не может однозначно вычислить тип данных из-за использования временных таблиц или сложных выражений, она предпочитает «спрятать» поле, чем допустить ошибку при выполнении отчета.

Метод решения №1: Приведение типов

Если в вашем запросе используются поля составного типа, например, из регистра или справочника КлючиАналитикиУчетаПоПартнерам, СКД может не понимать, с каким типом она работает. Для решения этой задачи используйте оператор ВЫРАЗИТЬ().

Рассмотрим, как правильно типизировать поле, чтобы оно стало доступно пользователю:


ВЫБРАТЬ
    ВЫРАЗИТЬ(Ключи.Контрагент КАК Справочник.Контрагенты) КАК Контрагент,
    Ключи.Ссылка КАК Ссылка
ИЗ
    Справочник.КлючиАналитикиУчетаПоПартнерам КАК Ключи

Применение ВЫРАЗИТЬ помогает платформе однозначно определить тип поля Контрагент. Это снимает неопределенность, и поле корректно отображается в настройках отчета.

Метод решения №2: Работа с временными таблицами

Второй эффективный способ — вынести сложные соединения во временные таблицы. Когда вы явно типизируете данные внутри ПОМЕСТИТЬ ВТ_..., СКД воспринимает результат как «чистый» набор данных с фиксированными типами столбцов.

Сравним два подхода:

Нерабочий вариант: СКД пытается проследить связь через все соединения и теряет тип данных из-за сложности конструкции.


ВЫБРАТЬ РАЗЛИЧНЫЕ
    Контр.Ссылка КАК Контрагент
ПОМЕСТИТЬ ВТ_КОНТРАГЕНТЫ_B2B
ИЗ Справочник.Контрагенты КАК Контр
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Партнеры.ДополнительныеРеквизиты КАК ДопРеквизитыПартнеров
ПО Контр.Партнер = ДопРеквизитыПартнеров.Ссылка;

ВЫБРАТЬ
    Ключи.Контрагент КАК Контрагент
ИЗ Справочник.КлючиАналитикиУчетаПоПартнерам КАК Ключи
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_КОНТРАГЕНТЫ_B2B КАК ВТ_КОНТРАГЕНТЫ_B2B
ПО Ключи.Контрагент = ВТ_КОНТРАГЕНТЫ_B2B.Контрагент

Рабочий вариант: Мы приводим поле к конкретному типу уже при чтении из временной таблицы.


ВЫБРАТЬ РАЗЛИЧНЫЕ
    ВЫРАЗИТЬ(ВТ_КОНТРАГЕНТЫ_B2B.Контрагент КАК Справочник.Контрагенты) КАК Контрагент,
    Ключи.Ссылка КАК Ссылка
ИЗ Справочник.КлючиАналитикиУчетаПоПартнерам КАК Ключи
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_КОНТРАГЕНТЫ_B2B КАК ВТ_КОНТРАГЕНТЫ_B2B
ПО Ключи.Контрагент = ВТ_КОНТРАГЕНТЫ_B2B.Контрагент

Полезные советы по отладке

  1. Проверяйте запрос в консоли: Если в консоли запросов данные отображаются, а в СКД — нет, значит проблема именно в «автоматической оптимизации» СКД.
  2. Отключите автозаполнение: Если вы хотите полного контроля, снимите галочку Автозаполнение в настройках набора данных. Но помните, что после этого все поля и параметры придется добавлять вручную.
  3. Используйте фигурные скобки: Чтобы защитить поля от «выпиливания» системой, заключайте их в фигурные скобки {ГДЕ ...} в тексте запроса. Это прямое указание СКД: «это поле должно быть доступно для пользовательских настроек».
  4. Проверка прав: Убедитесь, что пользователь имеет права на все объекты, участвующие в соединении. Даже если поле технически присутствует, RLS может молча исключить его из выборки.

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

← На главную