Часто при разработке отчетов в современных конфигурациях 1С (таких как ERP, Управление Торговлей 11, Комплексная Автоматизация 2) разработчики сталкиваются с загадочной ситуацией. Запрос написан верно, в Консоли запросов все колонки заполнены данными, но стоит перенести этот запрос в Схему Компоновки Данных (СКД) — и часть полей исчезает из доступных для выбора или просто не выводится в отчет. Особенно часто это проявляется в сложных системах вроде ЗУП, где бизнес-логика и программные интерфейсы могут значительно усложнять получение данных простым запросом. Разберем эту ситуацию подробно, выясним причины и найдем решение. Для разбора таких технических проблем с отчетами и правами есть универсальный набор инструментов разработчика 1С.
Рассмотрим типичный сценарий. Вы пишете запрос к документу, например, РеализацияТоваровУслуг. Вы хотите получить информацию о клиенте, выбирая поле Контрагент и его ИНН.
Пример запроса:
ВЫБРАТЬ
РеализацияТоваровУслугТовары.Ссылка.Контрагент КАК Контрагент,
РеализацияТоваровУслугТовары.Ссылка.Контрагент.ИНН КАК КонтрагентИНН,
...
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
В Консоли запросов вы видите заполненные колонки "Контрагент" и "КонтрагентИНН". Однако при формировании отчета на СКД этих колонок нет, или они пустые, или недоступны в настройках отчета. При этом остальные поля (Номенклатура, Количество) отображаются корректно.
Главная причина такого поведения кроется в глубокой интеграции СКД с механизмом Функциональных опций платформы 1С — в диагностике подобных ситуаций поможет инструмент анализа прав доступа и ограничений RLS.
Давайте разберемся, как это работает:
Если в конфигурации определенное поле (в нашем случае реквизит Контрагент) привязано к Функциональной опции, которая в данный момент выключена в настройках программы (например, "Не вести учет по контрагентам", а только по партнерам), то СКД считает это поле "несуществующим" для пользователя и принудительно исключает его из доступных полей отчета.
В современных конфигурациях (УТ 11, КА 2, ERP) существует разделение сущностей на управленческие и регламентированные:
В настройках этих систем есть опция "Независимо вести партнеров и контрагентов". Если эта опция выключена (упрощенный учет), система может скрывать поле Контрагент из интерфейса, подразумевая, что пользователю достаточно видеть Партнера. Для выявления такой скрытой логики и взаимосвязей полезно использовать инструмент архитектурного анализа конфигурации и зависимостей объектов.
Проанализируем несколько способов исправить ситуацию, в зависимости от ваших задач.
В большинстве случаев, если поле скрыто, значит, методологически верно использовать другое поле. В контексте управленческих отчетов в УТ/ERP правильнее выбирать поле Партнер.
Попробуйте изменить запрос следующим образом:
ВЫБРАТЬ
РеализацияТоваровУслугТовары.Ссылка.Партнер КАК Партнер,
...
Скорее всего, поле Партнер не ограничено функциональной опцией в данном режиме работы базы и будет успешно выведено в отчет.
Если вам критически важно видеть именно Контрагента, убедитесь, что в базе включена соответствующая настройка. Обычно это находится в разделе НСИ и Администрирование -> CRM и Маркетинг (или Продажи). Проверьте галочку, связанную с "Независимым ведением партнеров и контрагентов".
Внимание: изменение этой настройки может повлиять на всю логику работы пользователей и интерфейс документов.
Если вы уверены, что данные там есть и вам нужно их вывести вопреки настройкам системы, вы можете настроить поля в СКД вручную. Для реализации нестандартного представления данных также можно использовать собственные макеты в системе компоновки данных.
При ручном добавлении крайне важно указывать описание полей отчёта, чтобы помочь конечному пользователю лучше ориентироваться в доступных данных. При таком подходе СКД перестает фильтровать их по функциональным опциям. Однако, будьте осторожны: если опция выключена, данные в этом поле могут быть действительно пустыми.
Хотя в данном случае причиной были функциональные опции, похожая ситуация (в консоли есть, в отчете нет) возникает из-за прав доступа (RLS). Чтобы понять, какие именно ограничения наложены на пользователя, можно выполнить анализ прав доступа к объекту — для этого подойдет обработка анализа прав и ограничений RLS на базе БСП. Если же ограничение прав вызывает значительные задержки, стоит рассмотреть возможность настройки выполнения отчетов в привилегированном режиме.
Чтобы избежать ошибок доступа в запросе, используйте конструкцию РАЗРЕШЕННЫЕ:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
РеализацияТоваровУслугТовары.Ссылка.Контрагент КАК Контрагент,
...
Если СКД "съедает" поля, которые точно есть в базе:
Партнера и Контрагента.