Как сохранить и восстановить настройки СКД в элементах справочника и программно управлять выводом полей?

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

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

Сохранение и восстановление настроек СКД через ХранилищеЗначения

Чтобы настройки пользователя не пропадали при закрытии формы, необходимо сохранить объект КомпоновщикНастроек.Настройки в реквизит справочника, имеющий тип ХранилищеЗначения. Рассмотрим, как это сделать правильно.

Для начала создадим реквизит справочника с типом ХранилищеЗначения. При записи элемента справочника в обработчике на сервере мы можем сохранить настройки следующим образом:


// Сохранение настроек при записи объекта
Объект.НастройкиХранилище = Новый ХранилищеЗначения(КомпоновщикНастроек.Настройки);
Объект.Записать();

Если у вас возникла сложность с тем, что настройки не сохраняются в объекте формы, убедитесь, что вы работаете с актуальным экземпляром данных на сервере. При чтении настроек, например, в регламентном задании или при открытии формы, используйте следующий подход:


// Восстановление настроек
Если Объект.НастройкиХранилище <> Неопределено Тогда
    Настройки = Объект.НастройкиХранилище.Получить();
    Если Настройки <> Неопределено Тогда
        КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
    КонецЕсли;
КонецЕсли;

Важно помнить, что КомпоновщикНастроек должен быть корректно инициализирован с использованием ИсточникДоступныхНастроекКомпоновкиДанных, который ссылается на вашу схему компоновки данных.

Программное управление выводом колонок в таблицу значений

Часто после инициализации СКД мы обнаруживаем, что в итоговой таблице значений присутствуют не все нужные нам поля. Если вы используете ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений, система выводит только те поля, которые явно выбраны в настройках СКД. Если нужные поля (например, Код или Артикул) отсутствуют в выборе пользователя, они не попадут в результат.

Чтобы гарантировать наличие нужных колонок, можно принудительно добавить их в Настройки.Выбор перед выполнением макета компоновки:


// Получаем настройки из компоновщика
Настройки = КомпоновщикНастроек.Настройки;

// Программно добавляем необходимое поле
ВыбранноеПоле = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранноеПоле.Использование = Истина;
ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Код"); // Имя поля из запроса СКД

// Далее выполняем компоновку
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, Настройки,,, 
    Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

Полезные советы и рекомендации

  1. Инициализация компоновщика: Всегда инициализируйте КомпоновщикНастроек через ИсточникДоступныхНастроекКомпоновкиДанных. Это гарантирует, что пользовательские настройки будут корректно связаны с полями схемы.
  2. Сериализация: Если возникают проблемы с отладкой содержимого настроек, используйте СериализаторXDTO, чтобы вывести настройки в XML-строку. Это наглядно покажет, какие отборы и выбранные поля реально записаны в хранилище.
  3. Альтернатива: Если задача требует сложной работы с вариантами отчетов, рассмотрите использование типовой подсистемы ВариантыОтчетов. Она позволяет сохранять множество вариантов настроек для одного объекта без ручного программирования сериализации.
  4. Стабильность вывода: Если вы хотите, чтобы структура вывода всегда оставалась неизменной независимо от действий пользователя, очищайте коллекцию Настройки.Выбор.Элементы перед принудительным добавлением полей.

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

← На главную