Разработка отчетов на Системе компоновки данных (СКД) в 1С — процесс обычно предсказуемый, однако иногда программисты сталкиваются с труднообъяснимым поведением платформы. Типичная ситуация: вы создаете запрос в схеме компоновки, видите все необходимые поля в Конструкторе запроса и на закладке «Наборы данных», но как только запускаете отчет в режиме 1С:Предприятие, нужные поля бесследно исчезают из списка доступных. При этом в Конфигураторе, при просмотре настроек варианта, эти поля могут отображаться корректно.
В этой статье мы подробно разберем, почему возникает такая ситуация, и рассмотрим пошаговый алгоритм диагностики и решения проблемы, основываясь на практическом опыте разработчиков.
Проанализируем наиболее частую и неочевидную причину — работу механизма Функциональных опций. В современных конфигурациях (особенно на управляемых формах) многие подсистемы и объекты метаданных могут быть программно отключены через константы или регистры сведений.
Если объект метаданных (например, документ определенного типа или справочник), к которому вы обращаетесь в запросе СКД, включен в состав какой-либо функциональной опции, платформа автоматически управляет его видимостью. Рассмотрим, как это работает:
Что нужно сделать: Проверьте свойства объекта метаданных в дереве конфигурации. Перейдите на закладку «Функциональные опции» у конкретного документа или реквизита. Если он там числится, выясните, какое значение принимает эта опция в вашей базе данных. Если опция отключена, поле не появится в отчете, пока вы ее не включите.
Давайте заглянем внутрь самой схемы компоновки данных. Часто разработчики случайно устанавливают флаги ограничений, которые не позволяют пользователю выбирать поле в отчет, хотя оно и присутствует в выборке. Разберем закладку «Наборы данных».
В таблице полей набора данных есть несколько важных колонок с флажками:
Проанализируем ситуацию: если у вас стоит галочка в колонке «Ограничение поля», то в Конструкторе настроек вы его увидите (в дереве), но перетащить в правую часть («Выбранные поля») в режиме пользователя не сможете — оно просто не отобразится в списке выбора. Убедитесь, что для вашего целевого поля все эти флаги сняты.
Даже если вы работаете под учетной записью с «Полными правами», платформа может накладывать определенные ограничения в контексте выполнения отчета. Выясним, как права влияют на видимость полей:
Существуют типы данных, которые СКД принципиально не выводит в список доступных полей для выбора пользователем. Рассмотрим пример с типом ХранилищеЗначения. В таких полях часто хранятся картинки, файлы или двоичные данные. Поскольку СКД предназначена для построения текстовых и графических (диаграммы) отчетов, она автоматически скрывает поля с типом ХранилищеЗначения, так как их невозможно просто «вывести в ячейку».
Если вам нужно вывести информацию из такого поля, его необходимо предварительно обработать в запросе или в коде (например, получить строковое представление или ссылку), но напрямую оно в доступных полях не появится.
Иногда решение кроется не в настройках метаданных, а в модуле самого отчета. Посмотрим на процедуру ПриКомпоновкеРезультата. Часто программисты используют ее для динамической настройки отчета перед выводом. Проверьте, нет ли в модуле объекта кода, подобного этому:
Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, СтандартнаяОбработка)
// Пример программного удаления поля
ПолеСкрыть = СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Поля.Найти("СекретноеПоле");
Если ПолеСкрыть <> Неопределено Тогда
ПолеСкрыть.ОграничениеПоля = Истина;
КонецЕсли;
КонецПроцедуры
Если такой код присутствует, поле будет программно скрываться при каждом формировании или открытии настроек отчета, что объясняет его отсутствие в пользовательском режиме при наличии в Конфигураторе.
При использовании внешних отчетов или различных «Консолей СКД» часто возникает проблема кэширования метаданных. Если вы изменили состав полей в Конфигураторе и просто переоткрыли отчет в режиме Предприятия, платформа может использовать старую версию схемы из кэша.
Рекомендация:
Если поле «потерялось» по дороге из Конфигуратора в 1С:Предприятие, действуйте по следующему чек-листу:
Как показывает практика, в 90% случаев проблема решается именно проверкой функциональных опций или прав доступа к конкретным объектам метаданных.