Имя: Пароль:
1C
 
Сохранение настроек отборов пользователя скд
,
0 lamme
 
06.11.20
12:53
УТ11,4

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

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


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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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


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

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

в настройках схемы так же указываю эти поля.

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

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

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