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

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

Часто при разработке отчетов в современных конфигурациях 1С (таких как ERP, Управление Торговлей 11, Комплексная Автоматизация 2) разработчики сталкиваются с загадочной ситуацией. Запрос написан верно, в Консоли запросов все колонки заполнены данными, но стоит перенести этот запрос в Схему Компоновки Данных (СКД) — и часть полей исчезает из доступных для выбора или просто не выводится в отчет. Особенно часто это проявляется в сложных системах вроде ЗУП, где бизнес-логика и программные интерфейсы могут значительно усложнять получение данных простым запросом. Разберем эту ситуацию подробно, выясним причины и найдем решение. Для разбора таких технических проблем с отчетами и правами есть универсальный набор инструментов разработчика 1С.

Симптомы проблемы

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

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


ВЫБРАТЬ
    РеализацияТоваровУслугТовары.Ссылка.Контрагент КАК Контрагент,
    РеализацияТоваровУслугТовары.Ссылка.Контрагент.ИНН КАК КонтрагентИНН,
    ...
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары

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

Причина 1: Механизм Функциональных опций

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

Давайте разберемся, как это работает:

  1. Консоль запросов выполняет "сырой" запрос к базе данных. Ей все равно, включена ли какая-то настройка в пользовательском режиме или нет. Она просто читает данные из таблиц СУБД.
  2. СКД (Система Компоновки Данных) работает иначе. По умолчанию в наборе данных "Запрос" установлен флаг Автозаполнение. Когда этот флаг включен, СКД анализирует метаданные конфигурации.

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

Причина 2: Архитектура "Партнеры" и "Контрагенты"

В современных конфигурациях (УТ 11, КА 2, ERP) существует разделение сущностей на управленческие и регламентированные:

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

Решения проблемы

Проанализируем несколько способов исправить ситуацию, в зависимости от ваших задач.

Решение №1: Использование правильной сущности (Рекомендуемое)

В большинстве случаев, если поле скрыто, значит, методологически верно использовать другое поле. В контексте управленческих отчетов в УТ/ERP правильнее выбирать поле Партнер.

Попробуйте изменить запрос следующим образом:


ВЫБРАТЬ
    РеализацияТоваровУслугТовары.Ссылка.Партнер КАК Партнер,
    ...

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

Решение №2: Проверка настроек программы

Если вам критически важно видеть именно Контрагента, убедитесь, что в базе включена соответствующая настройка. Обычно это находится в разделе НСИ и Администрирование -> CRM и Маркетинг (или Продажи). Проверьте галочку, связанную с "Независимым ведением партнеров и контрагентов".

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

Решение №3: Отключение Автозаполнения в СКД (Для продвинутых)

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

  1. Откройте схему компоновки данных.
  2. Перейдите на вкладку Наборы данных.
  3. В наборе данных "Запрос" снимите галочку Автозаполнение.
  4. Теперь вам придется вручную перечислить все поля на вкладке Поля, которые вы хотите видеть в отчете.

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

Дополнительный совет: Проверка прав доступа (RLS)

Хотя в данном случае причиной были функциональные опции, похожая ситуация (в консоли есть, в отчете нет) возникает из-за прав доступа (RLS). Чтобы понять, какие именно ограничения наложены на пользователя, можно выполнить анализ прав доступа к объекту — для этого подойдет обработка анализа прав и ограничений RLS на базе БСП. Если же ограничение прав вызывает значительные задержки, стоит рассмотреть возможность настройки выполнения отчетов в привилегированном режиме.

Чтобы избежать ошибок доступа в запросе, используйте конструкцию РАЗРЕШЕННЫЕ:


ВЫБРАТЬ РАЗРЕШЕННЫЕ
    РеализацияТоваровУслугТовары.Ссылка.Контрагент КАК Контрагент,
    ...

Итог

Если СКД "съедает" поля, которые точно есть в базе:

  1. В первую очередь вспомните про Функциональные опции.
  2. Если это типовая конфигурация (УТ, ERP), проверьте, не путаете ли вы Партнера и Контрагента.
  3. Попробуйте вывести альтернативное поле (например, Партнера).
  4. Для расширения аналитических возможностей отчета, когда поля уже выведены, можно реализовать расчет нарастающего итога, дельты и других показателей непосредственно в СКД.
← На главную