При разработке отчетов на базе Системы компоновки данных (СКД) программисты часто сталкиваются с ситуацией, когда в основном варианте отчета быстрые отборы (например, по дате, организации или подразделению) отображаются и функционируют корректно, но при создании второго (дополнительного) варианта отчета эти отборы бесследно исчезают с формы в пользовательском режиме. При этом в самом Конфигураторе настройки обоих вариантов выглядят абсолютно идентично: заданы те же поля, установлены одинаковые флажки и порядок группировок. Пользователь видит лишь пустое поле отчета без привычной панели быстрых настроек в верхней части экрана.
В этой статье мы подробно разберем, почему возникает эта проблема, как устроена связь между настройками схемы и формой отчета, а также рассмотрим три практических способа решения: через графический интерфейс Конфигуратора, путем редактирования XML-файла схемы и программным методом в коде 1С.
Чтобы понять природу этой проблемы, проанализируем структуру хранения настроек в Системе компоновки данных. В СКД все параметры и фильтры разделены на два уровня:
КомпоновщикНастроек.Настройки.КомпоновщикНастроек.ПользовательскиеНастройки.Связующим звеном между фиксированным отбором схемы и его представлением на форме является уникальный идентификатор пользовательской настройки. В платформе 1С он представлен свойством ИдентификаторПользовательскойНастройки, а в XML-структуре схемы описывается тегом dcsset:userSettingID.
Когда мы создаем новый вариант отчета или копируем существующий, платформа 1С не всегда автоматически генерирует новые уникальные идентификаторы для элементов отбора нового варианта. В результате для платформы и механизмов БСП (Библиотеки стандартных подсистем) такой отбор считается «внутренним» (разработческим). Так как у элемента отбора отсутствует уникальный идентификатор пользовательской настройки, стандартная форма отчета просто не понимает, что этот фильтр необходимо отобразить в области быстрых отборов.
---
Самый простой и безопасный способ исправить проблему — использовать штатный визуальный интерфейс Конфигуратора 1С. Это исключает риск повреждения структуры XML-файла схемы при ручном редактировании.
Рассмотрим этот процесс по шагам:
Организация).userSettingID для элемента.Дата и Подразделение).---
Иногда при массовом переносе настроек или при работе в сложных распределенных базах данных удобнее внести изменения напрямую в XML-код схемы компоновки данных. Рассмотрим, как проанализировать схему и исправить теги вручную.
Рассмотрим этот процесс подробнее:
<dcsset:item xsi:type="dcsset:FilterItemDelimiter">
<!-- Параметры отбора -->
<dcsset:userSettingID>df8a1a2e-15a4-4a25-bc32-15f22378a514</dcsset:userSettingID>
</dcsset:item>
dcsset:userSettingID, либо этот тег пустой.
<dcsset:userSettingID>a1b2c3d4-e5f6-7a8b-9c0d-1e2f3a4b5c6d</dcsset:userSettingID>
После сохранения и запуска отчета в режиме «1С:Предприятие» быстрые отборы станут доступны для обоих вариантов.
---
Если мы создаем варианты отчетов динамически в коде (например, при формировании формы, в рамках работы внешних обработок или при использовании механизмов расширений конфигурации), то при добавлении новых элементов отбора нам обязательно нужно программно инициализировать их пользовательские свойства.
Проанализируем пример кода, который решает эту задачу программным путем:
// Создаем новый элемент отбора в компоновщике настроек
НовыйОтбор = КомпоновщикНастроек.Settings.Filter.Items.Add(Type("DataCompositionFilterItem"));
НовыйОтбор.LeftValue = New DataCompositionField("Организация");
НовыйОтбор.Use = True;
НовыйОтбор.ComparisonType = DataCompositionComparisonType.Equal;
// Критически важный шаг: генерируем уникальный идентификатор пользовательской настройки.
// Без этой строки отбор останется фиксированным и не появится в шапке формы!
НовыйОтбор.UserSettingID = New UniqueIdentifier();
// Задаем режим представления отбора на форме
НовыйОтбор.UserSettingPresentationMode = DataCompositionUserSettingPresentationMode.QuickAccess;
Использование свойства UserSettingID со значением New UniqueIdentifier() автоматически регистрирует созданный программно отбор в составе пользовательских настроек компоновщика, и платформа успешно выводит его на форму управляемого приложения.
Применяя данные подходы, вы сможете гарантировать стабильное отображение быстрых отборов в любых создаваемых вариантах отчетов, обеспечивая пользователям удобный и привычный интерфейс работы с данными в ERP и других современных конфигурациях на платформе 1С.