Разработка отчетов на базе Системы компоновки данных (СКД) — это стандарт индустрии 1С, однако этот механизм обладает сложной многослойной логикой. Часто разработчики сталкиваются с ситуацией: в консоли запросов данные по полю есть, в настройках СКД поле выбрано, но в результирующем табличном документе колонка отсутствует. Проанализируем основные причины этой проблемы и разберем по шагам методы их решения.
Одной из самых неочевидных причин является влияние Функциональных опций (ФО). В платформе 1С реализован механизм, который позволяет скрывать данные, метаданные и элементы интерфейса, если в константах или регистрах сведений не включена соответствующая опция. Рассмотрим подробнее, как это работает в контексте СКД:
Выбранные поля.Функциональные опции. Если там указана опция, проверьте её значение в режиме «1С:Предприятие».Перейдем к техническим настройкам самой схемы. Откроем конструктор СКД и внимательно проанализируем закладку Наборы данных. Для каждого поля в таблице существует ряд флажков, которые управляют его поведением:
Путь к данным может сбиться или дублироваться.Разберем пример: если мы хотим, чтобы поле СуммаОстаток было доступно только для расчета ресурсов, но не для вывода в детальные записи, мы можем ошибочно выставить ограничения. Убедимся, что для нужного нам поля все флаги «Ограничение» сняты.
Проанализируем ситуацию с точки зрения безопасности. В 1С существует механизм RLS (Record Level Security). В консоли запросов разработчик часто работает под полными правами, и запрос отрабатывает корректно. Однако при запуске отчета под обычным пользователем СКД учитывает права доступа на уровне записей и полей.
Если у пользователя нет прав на чтение конкретного реквизита, СКД не выдаст ошибку, а просто исключит это поле из выборки. Чтобы проверить это, попробуем запустить отчет под учетной записью с административными правами. Если поле появилось — причину следует искать в ролях и ограничениях доступа.
Выясним еще одну частую причину: использование старых пользовательских настроек. Когда пользователь открывает отчет, система загружает его индивидуальный вариант, сохраненный в системном хранилище. Если вы добавили поле в конфигураторе позже, чем пользователь в последний раз открывал отчет, в его сохраненных настройках этого поля просто нет в списке выбранных.
Выполним следующие действия для исправления:
Еще — Установить стандартные настройки.Посмотрим на настройку Автозаполнение на закладке набора данных. Если эта галочка снята, то каждое поле, которое мы хотим видеть в отчете, должно быть описано в списке полей набора данных вручную. Если вы добавили поле в ТЕКСТ ЗАПРОСА, но не добавили его в список выше (при выключенном автозаполнении), оно не будет доступно для вывода.
Также важно проверить структуру самого отчета на закладке Настройки. Проанализируем, в какой группировке мы ожидаем увидеть поле. Если это Детальные записи, убедимся, что поле добавлено в Выбранные поля именно этой группировки или всего отчета. Попробуем выполнить простой тест: создадим новый вариант отчета с единственной группировкой «Детальные записи» и добавим туда только проблемное поле.
Рассмотрим специфическую ситуацию, упомянутую участниками сообщества. При работе с виртуальными таблицами (например, СрезПоследних регистра сведений), СКД иногда требует явного наличия измерений регистра в выбранных полях.
Посмотрим на пример запроса:
ВЫБРАТЬ
ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
ЦеныНоменклатурыСрезПоследних.Валюта КАК Валюта
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ) КАК ЦеныНоменклатурыСрезПоследних
В некоторых случаях, если в Выбранные поля компоновки не добавлено измерение (например, Номенклатура), данные по ресурсам могут не выводиться корректно из-за особенностей построения макета СКД. Попробуем добавить ключевые измерения в набор данных и настройки отчета.
Иногда поле присутствует в отчете, но его не видно. Проанализируем настройки Условного оформления. Проверьте, не задано ли для этого поля оформление Видимость = Ложь или Текст = "".
Кроме того, если поле содержит NULL (например, при левом соединении), СКД может скрывать его в зависимости от настроек. В дополнительных настройках отчета найдем параметр «Выводить пустое значение». Если там стоит Нет, и во всех строках отчета по данной колонке нет данных, колонка будет скрыта целиком для экономии места.
В завершение рассмотрим технические нюансы типов данных. Если поле имеет тип УникальныйИдентификатор, оно может не отображаться стандартными средствами. В таком случае в запросе лучше преобразовать его к строке:
ВЫБРАТЬ
ПРЕДСТАВЛЕНИЕ(СправочникСсылка.УникальныйИдентификатор) КАК ИдентификаторСтрокой
ИЗ
Справочник.ВашСправочник КАК СправочникСсылка
Также убедимся, что псевдоним поля в запросе не совпадает с зарезервированными словами или именами других полей в других наборах данных. СКД чувствительна к уникальности имен полей в рамках всей схемы. Попробуйте дать полю «экзотическое» имя, например, МоеПоле_СуперУникальное, чтобы исключить конфликт имен.