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