Вход | Регистрация
 

Сохранение настроек отборов пользователя скд

Сохранение настроек отборов пользователя скд
Я
   lamme
 
06.11.20 - 12:53
УТ11,4

справочник - описывающий правила формирования остатков
у формы справочника есть реквизит с типом - КомпоновщикНастроек
на форме - лежат пользовательсткие настройки отборов.
Есть так же макет - в котором запрос.
--

При открытии считывается макет - отборы активны
СКД=Справочники.НастройкиАвтоВыгрузкиПрайса.ПолучитьМакет("СКД");
    АдресВоВременномХранилище=ПоместитьВоВременноеХранилище(СКД,УникальныйИдентификатор);
    ИсточникНастроек=Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресВоВременномХранилище);
    КомпоновщикНастроек.Инициализировать(ИсточникНастроек);
    КомпоновщикНастроек.ЗагрузитьНастройки(СКД.НастройкиПоУмолчанию);


Вопрос.
Пользовтаель создал какие -то отборы.
1 Как и куда эти отборы - сохранить - чтобы при повторном открытии этого же эелемента справочника - все отборы восстановились ?
2 как их потом прочиатть-восстановить -после того как сохранятся ?
   kumena
 
1 - 06.11.20 - 13:39
1. РеквизитСправочникаДляХранинияНастроек = Новый ХранилищеЗначения(Настройки);

2. КомпоновщикНастроек.ЗагрузитьНастройки(РеквизитСправочникаДляХранинияНастроек.Получить());

как-то так, возможно в синтаксисе может быть ошибка.
   kumena
 
2 - 06.11.20 - 13:40
РеквизитСправочникаДляХранинияНастроек - тип хранилище значения
   Timon1405
 
3 - 06.11.20 - 14:36
изучить подсистему "ВариантыОтчетов" не предалгать?
   lamme
 
4 - 06.11.20 - 15:32
(1)
не хочет.
РеквизитФормыВЗначение("Объект").НастройкиХранилище = Новый ХранилищеЗначения(КомпоновщикНастроек.Настройки)

буквально сразу же - после этой строки - смотрю отладчико -  РеквизитФормыВЗначение("Объект").НастройкиХранилище.получить()
а там как было - неопределено - так и осталось

что не так  делаю?


Реквизит справочника - НастройкиХранилище -имеет тип = ХранилищеЗначения
   kumena
 
5 - 06.11.20 - 16:18
Объект.НастройкиХранилище = Новый ХранилищеЗначения(КомпоновщикНастроек.Настройки)
   lamme
 
6 - 06.11.20 - 16:19
это при записи элемента справочника идет
объет там имеет вид 
Объект    ДанныеФормыСтруктура
   lamme
 
7 - 06.11.20 - 16:21
Объект.НастройкиХранилище - на сервере нет этого реквизита
вот хз почему
   lamme
 
8 - 06.11.20 - 16:22
но есть
Объект.Наименование
   kumena
 
9 - 06.11.20 - 16:22
у меня таким образом работает, код из формы отчета.

    ДокументОбъект = Документы.УтверждениеБюджета.СоздатьДокумент();
    ДокументОбъект.НастройкиОтчета = Новый ХранилищеЗначения(Настройки);
    ДокументОбъект.Записать();
   kumena
 
10 - 06.11.20 - 16:23
+9, серверный контекст естественно. почему у тебя не работает - думай сам!
   lamme
 
11 - 06.11.20 - 16:24
это программное оьбращение
это понятно.
   lamme
 
12 - 06.11.20 - 16:33
короче
сам в себя при записи объекта - записать не получается
а если записывать во внешний регистр хранения - то получается все.

а вот почему сам в себя записать не получается - не знаю...
   Kassern
 
13 - 06.11.20 - 16:50
(0) Все же уже придумано и есть в типовых конфигурациях...Зайдите к примеру в сегменты партнеров, или номенклатуры. Посмотрите как там сохраняются отборы для СКД.
   Михаил Козлов
 
14 - 07.11.20 - 11:51
Если на форму положить не настройки компоновщика, а отбор пользовательских настроек компоновщика, то у этого реквизита можно установить флаг сохранения.
А так можно глянуть в типовых, например, в обработке ОбеспечениеПотребностей.
   lamme
 
15 - 08.11.20 - 20:59
---

Предыдущий вопрос решен
ВОпрос следующий.

То что выше описано - это пользовательский интерфейс настроек для формирования прайсов по тем или иным настройкам.
На сервере - регл задание- которое берет эти настроки и формирует остатки.

КомпоновщикНастроек = новый КомпоновщикНастроекКомпоновкиДанных();
    СКД=Справочники.НастройкиАвтоВыгрузкиПрайса.ПолучитьМакет("СКД");
    АдресВоВременномХранилище=ПоместитьВоВременноеХранилище(СКД, Новый УникальныйИдентификатор());
    ИсточникНастроек=Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресВоВременномХранилище);
    КомпоновщикНастроек.Инициализировать(ИсточникНастроек);
    
    запрос = новый запрос();
            запрос.УстановитьПараметр("Владелец",схеманастройки.Ссылка);
            запрос.Текст = 
               "ВЫБРАТЬ
             |    БезопасноеХранилищеДанных.Владелец КАК Владелец,
             |    БезопасноеХранилищеДанных.Данные КАК Данные
             |ИЗ
             |    РегистрСведений.БезопасноеХранилищеДанных КАК БезопасноеХранилищеДанных
             |ГДЕ
             |    БезопасноеХранилищеДанных.Владелец = &Владелец";
          РРР = запрос.Выполнить().Выгрузить();
    Если  РРР.Количество() >0 тогда
        КомпоновщикНастроек.ЗагрузитьНастройки(РРР[0].Данные.получить());
    конецесли;
    
    
    НастройкиКомпоновщика = КомпоновщикНастроек.Настройки; 
    ПараметрыНастройки = НастройкиКомпоновщика.ПараметрыДанных; 

    //// устанавливаем параметры отчета

    //ЗначениеПараметра = ПараметрыНастройки.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("НачалоПериода")); 

    //ЗначениеПараметра.Значение = НачалоПериода; 


    //ЗначениеПараметра = ПараметрыНастройки.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("КонецПериода")); 

    //ЗначениеПараметра.Значение = КонецДня(КонецПериода); 


    //Получим макет компоновки    

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

    //Через процессор компоновки получим результат

    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; 
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных); 

    ТаблицаРезультат = Новый ТаблицаЗначений; 
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; 

    ПроцессорВывода.УстановитьОбъект(ТаблицаРезультат); 
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); 


Вот в ТаблицаРезультат - я для себя делаю промежуточную таблицу - чтобы посмотреть - правильо ли все работает по отборам пользователей
Отборы работают.

Косяк всплыл в другом месте.
В СКД  идут поля выбора Номенклатура.Артикул / Номенклатура.Код / Номенклатура.Комментарий

в настройках схемы так же указываю эти поля.
а в отладчике в момент  ПроцессорВывода.УстановитьОбъект(ТаблицаРезультат); 
вижу только 2 колонки - Номенклатура и Остаток

как и где указать - чтобы выводились и еобходимые параметры типа Артикул-Код-Коммент
   lamme
 
16 - 08.11.20 - 22:07
изврат
но сделал так
и работает

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

       ВыбранноеПолеКомментарий = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
    ВыбранноеПолеКомментарий.Использование = Истина;
    ВыбранноеПолеКомментарий.Заголовок = "Код";
    ВыбранноеПолеКомментарий.Поле = Новый ПолеКомпоновкиДанных("Код");
    
    
     КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(
        СКД,Настройки,,,
        Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,,Истина);
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    ТаблицаЗначений = Новый ТаблицаЗначений;
    ПроцессорВывода.УстановитьОбъект(ТаблицаЗначений);
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.