Почему в дополнительном варианте отчета СКД не отображаются быстрые отборы и как это исправить

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

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

В этой статье мы подробно разберем, почему возникает эта проблема, как устроена связь между настройками схемы и формой отчета, а также рассмотрим три практических способа решения: через графический интерфейс Конфигуратора, путем редактирования XML-файла схемы и программным методом в коде 1С.

Выясняем причину: как СКД связывает отборы с формой

Чтобы понять природу этой проблемы, проанализируем структуру хранения настроек в Системе компоновки данных. В СКД все параметры и фильтры разделены на два уровня:

  1. Основные настройки варианта (настройки разработчика): это жестко заданная структура отчета («скелет»), которая определяет состав полей, группировки и фиксированные отборы. Эти данные хранятся в объекте КомпоновщикНастроек.Настройки.
  2. Пользовательские настройки: это часть основных настроек, к изменению которых разработчик решил открыть доступ конечным пользователям. Именно они выводятся в шапку отчета для оперативного изменения. Эти данные хранятся в свойстве КомпоновщикНастроек.ПользовательскиеНастройки.

Связующим звеном между фиксированным отбором схемы и его представлением на форме является уникальный идентификатор пользовательской настройки. В платформе 1С он представлен свойством ИдентификаторПользовательскойНастройки, а в XML-структуре схемы описывается тегом dcsset:userSettingID.

Когда мы создаем новый вариант отчета или копируем существующий, платформа 1С не всегда автоматически генерирует новые уникальные идентификаторы для элементов отбора нового варианта. В результате для платформы и механизмов БСП (Библиотеки стандартных подсистем) такой отбор считается «внутренним» (разработческим). Так как у элемента отбора отсутствует уникальный идентификатор пользовательской настройки, стандартная форма отчета просто не понимает, что этот фильтр необходимо отобразить в области быстрых отборов.

---

Способ 1. Решение проблемы в Конфигураторе (рекомендуемый графический метод)

Самый простой и безопасный способ исправить проблему — использовать штатный визуальный интерфейс Конфигуратора 1С. Это исключает риск повреждения структуры XML-файла схемы при ручном редактировании.

Рассмотрим этот процесс по шагам:

  1. Откроем Схему компоновки данных (СКД) нашего отчета в Конфигураторе.
  2. Перейдем на вкладку Настройки.
  3. В левом верхнем окне «Варианты отчетов» выберем кликом мыши наш второй вариант отчета, в котором не отображаются быстрые отборы.
  4. В нижней части экрана перейдем на вкладку Отбор.
  5. Найдем элемент отбора, который должен отображаться на форме (например, Организация).
  6. В правом нижнем углу панели отборов нажмем кнопку Свойства элемента пользовательских настроек (она выглядит как шестеренка с синим кружком). Также это окно можно вызвать через контекстное меню элемента отбора, выбрав соответствующий пункт.
  7. В открывшемся диалоговом окне настроек выполним следующие действия:
    • Установим флаг Включать в пользовательские настройки. Именно это действие заставляет платформу сгенерировать уникальный userSettingID для элемента.
    • В поле Режим редактирования выберем значение Быстрый доступ (чтобы отбор отображался в шапке формы над результатом отчета) или Обычный (чтобы он был доступен по кнопке «Настройки»).
  8. Повторим указанную процедуру для всех остальных отборов второго варианта отчета (например, для полей Дата и Подразделение).
  9. Сохраним отчет и проверим его работу в пользовательском режиме Enterprise.

---

Способ 2. Решение проблемы через редактирование XML-схемы

Иногда при массовом переносе настроек или при работе в сложных распределенных базах данных удобнее внести изменения напрямую в XML-код схемы компоновки данных. Рассмотрим, как проанализировать схему и исправить теги вручную.

Рассмотрим этот процесс подробнее:

  1. Откроем схему компоновки данных отчета в Конфигураторе.
  2. Нажмем кнопку сохранения схемы в файл на диске (выгрузка схемы в XML-файл).
  3. Откроем полученный XML-файл в любом текстовом редакторе (например, Notepad++ или встроенном текстовом редакторе 1С).
  4. Найдем структуру первого (работающего) варианта отчета. В его отборах мы увидим заполненный тег следующего вида:
    
    <dcsset:item xsi:type="dcsset:FilterItemDelimiter">
        <!-- Параметры отбора -->
        <dcsset:userSettingID>df8a1a2e-15a4-4a25-bc32-15f22378a514</dcsset:userSettingID>
    </dcsset:item>
    
  5. Перейдем к описанию настроек второго варианта отчета. Мы обнаружим, что у элементов отбора отсутствует строка с тегом dcsset:userSettingID, либо этот тег пустой.
  6. Пропишем недостающие теги для каждого элемента отбора второго варианта. Важно: идентификаторы (GUID) должны быть уникальными! Нельзя просто скопировать значения из первого варианта отчета, иначе платформа сопоставит их неверно. Сгенерируем новые GUID (например, с помощью онлайн-генератора или встроенных средств 1С) и вставим их в XML-код:
    
    <dcsset:userSettingID>a1b2c3d4-e5f6-7a8b-9c0d-1e2f3a4b5c6d</dcsset:userSettingID>
    
  7. Сохраним изменения в XML-файле.
  8. В Конфигураторе загрузим измененную схему обратно в наш отчет.

После сохранения и запуска отчета в режиме «1С:Предприятие» быстрые отборы станут доступны для обоих вариантов.

---

Способ 3. Программная генерация пользовательских настроек в коде

Если мы создаем варианты отчетов динамически в коде (например, при формировании формы, в рамках работы внешних обработок или при использовании механизмов расширений конфигурации), то при добавлении новых элементов отбора нам обязательно нужно программно инициализировать их пользовательские свойства.

Проанализируем пример кода, который решает эту задачу программным путем:


// Создаем новый элемент отбора в компоновщике настроек
НовыйОтбор = КомпоновщикНастроек.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С.

← На главную