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

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

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

Проверка функциональных опций

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

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

Ограничения в настройках набора данных СКД

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

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

Влияние прав доступа и RLS

Проанализируем ситуацию с точки зрения безопасности. В 1С существует механизм RLS (Record Level Security). В консоли запросов разработчик часто работает под полными правами, и запрос отрабатывает корректно. Однако при запуске отчета под обычным пользователем СКД учитывает права доступа на уровне записей и полей.

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

Сброс кэша пользовательских настроек

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

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

  1. В режиме «1С:Предприятие» откроем отчет.
  2. Перейдем в меню ЕщеУстановить стандартные настройки.
  3. Это принудительно обновит структуру отчета в соответствии с текущей схемой компоновки, заданной в конфигураторе.

Механизм автозаполнения и детальные записи

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

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

Особенности работы с регистрами сведений

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

Посмотрим на пример запроса:


ВЫБРАТЬ
    ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
    ЦеныНоменклатурыСрезПоследних.Валюта КАК Валюта
ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ) КАК ЦеныНоменклатурыСрезПоследних

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

Условное оформление и пустые значения

Иногда поле присутствует в отчете, но его не видно. Проанализируем настройки Условного оформления. Проверьте, не задано ли для этого поля оформление Видимость = Ложь или Текст = "".

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

Проверка типов данных и псевдонимов

В завершение рассмотрим технические нюансы типов данных. Если поле имеет тип УникальныйИдентификатор, оно может не отображаться стандартными средствами. В таком случае в запросе лучше преобразовать его к строке:


ВЫБРАТЬ
    ПРЕДСТАВЛЕНИЕ(СправочникСсылка.УникальныйИдентификатор) КАК ИдентификаторСтрокой
ИЗ
    Справочник.ВашСправочник КАК СправочникСсылка

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

← На главную