Почему поле набора данных СКД не отображается в доступных полях в режиме 1С:Предприятие?

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

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

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

Причина №1: Влияние функциональных опций

Проанализируем наиболее частую и неочевидную причину — работу механизма Функциональных опций. В современных конфигурациях (особенно на управляемых формах) многие подсистемы и объекты метаданных могут быть программно отключены через константы или регистры сведений.

Если объект метаданных (например, документ определенного типа или справочник), к которому вы обращаетесь в запросе СКД, включен в состав какой-либо функциональной опции, платформа автоматически управляет его видимостью. Рассмотрим, как это работает:

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

Что нужно сделать: Проверьте свойства объекта метаданных в дереве конфигурации. Перейдите на закладку «Функциональные опции» у конкретного документа или реквизита. Если он там числится, выясните, какое значение принимает эта опция в вашей базе данных. Если опция отключена, поле не появится в отчете, пока вы ее не включите.

Причина №2: Ограничения на уровне настройки полей СКД

Давайте заглянем внутрь самой схемы компоновки данных. Часто разработчики случайно устанавливают флаги ограничений, которые не позволяют пользователю выбирать поле в отчет, хотя оно и присутствует в выборке. Разберем закладку «Наборы данных».

В таблице полей набора данных есть несколько важных колонок с флажками:

Проанализируем ситуацию: если у вас стоит галочка в колонке «Ограничение поля», то в Конструкторе настроек вы его увидите (в дереве), но перетащить в правую часть («Выбранные поля») в режиме пользователя не сможете — оно просто не отобразится в списке выбора. Убедитесь, что для вашего целевого поля все эти флаги сняты.

Причина №3: Права доступа и механизм RLS

Даже если вы работаете под учетной записью с «Полными правами», платформа может накладывать определенные ограничения в контексте выполнения отчета. Выясним, как права влияют на видимость полей:

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

Причина №4: Типы данных, не поддерживаемые СКД

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

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

Причина №5: Программная модификация схемы

Иногда решение кроется не в настройках метаданных, а в модуле самого отчета. Посмотрим на процедуру ПриКомпоновкеРезультата. Часто программисты используют ее для динамической настройки отчета перед выводом. Проверьте, нет ли в модуле объекта кода, подобного этому:


Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, СтандартнаяОбработка)
    // Пример программного удаления поля
    ПолеСкрыть = СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Поля.Найти("СекретноеПоле");
    Если ПолеСкрыть <> Неопределено Тогда
        ПолеСкрыть.ОграничениеПоля = Истина;
    КонецЕсли;
КонецПроцедуры

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

Причина №6: Особенности кэширования и «Консоли отчетов»

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

Рекомендация:

  1. Очистите кэш метаданных (перезапустите сеанс или используйте параметры запуска).
  2. Если используете консоль отчетов, попробуйте создать в ней новый отчет и заново загрузить схему, а не обновлять существующий.
  3. Проверьте свойство «Автозаполнение» в наборе данных-запросе. Если оно выключено, то все новые поля, добавленные в текст запроса, должны быть прописаны в списке полей набора данных вручную.

Резюме

Если поле «потерялось» по дороге из Конфигуратора в 1С:Предприятие, действуйте по следующему чек-листу:

  1. Проверьте Функциональные опции — это самая частая причина для современных конфигураций (ТОиР, ERP, УТ 11).
  2. Проверьте флаги «Ограничение поля» на закладке «Наборы данных» в СКД.
  3. Убедитесь, что у поля допустимый тип данных (не ХранилищеЗначения).
  4. Проверьте наличие программного кода в модуле отчета, который может менять свойства схемы «на лету».

Как показывает практика, в 90% случаев проблема решается именно проверкой функциональных опций или прав доступа к конкретным объектам метаданных.

← На главную