Имя: Пароль:
1C
 
Настройки компоновщика слетают при переходе с сервера на клиент
0 skormgm
 
15.01.24
15:05
Привет всем! Прошу помочь по возможности. Программно определяю настройки компоновщика (обычные и пользовательские) в обработчике формы "ПриСозданииНаСервере()". Ставлю точку останова в конце обработчика, проверяю - все хорошо. Но в обработчике "ПриОткрытии()" (на клиенте) настройки становятся пустыми (и обычные и пользовательские). Что я не так делаю?
1 mikecool
 
15.01.24
15:22
типовая?
2 stopa85
 
15.01.24
15:22
(0) нужно сериализовать настройки в xml, передать xml на клиента и там загрузить.

Такой нужно танец выполнять при передачи настроек с клиента на сервер и обратно

Причин не знаю)
3 stopa85
 
15.01.24
15:24
Хотя в случае с "ПриОткрытии" проще в этой процедуре и задать их (подтянув необходимое с сервера)
4 skormgm
 
15.01.24
15:29
(1) Нет. Свой внешний отчет.
5 skormgm
 
15.01.24
15:31
(3) Хотел сделать "по красоте", но видимо действительно придется в обработчике "ПриОткрытии()" определять.
6 skormgm
 
15.01.24
15:34
(2) Если действительно при переходе с сервера на клиент (и обратно) настройки слетают - это хорошая новость. Смирюсь и буду определять на клиенте (3).
7 Fedor-1971
 
15.01.24
15:54
(6) Бе таким быть нелюбопытным, сделай реквизит формы Фильтр с типом КомпоновщикНастроекКомпоновкиДанных
Дальше инициализируй его вот так:
    СхемаКомпоновки = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет"); // это для внешней обработки, если она интегрирована в конфигурацию, то просто получи макет по имени
    АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(СхемаКомпоновки , УникальныйИдентификатор);
    
    ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресВоВременномХранилище);
    
    Фильтры.Инициализировать(ИсточникНастроек);
    
    Фильтры.ЗагрузитьНастройки(СхемаКомпоновки.НастройкиПоУмолчанию);
8 Fedor-1971
 
15.01.24
15:56
7+ будет тебе счастье, ничего не слетит при беготне на клиент и обратно
Если очень хочется, то можешь выдать пользователю поле на форму, пусть поиграется с выборками
9 Fedor-1971
 
15.01.24
15:59
(2) Вовсе не нужно, просто инициализируем через Временное хранилище т.к. оно живёт пока открыта форма
Типа, получается, что мы создали уникальные настройки на время жизни формы
10 stopa85
 
15.01.24
16:07
(9) а во временное хранилище ляжет xml. Просто не явно.
11 Fedor-1971
 
15.01.24
16:10
(10) таки, поместим объект 1С СхемаКомпоновки, бо не смысл его конвертировать в XML
12 stopa85
 
15.01.24
16:15
(11) если я не ошибаюсь, во временное хранилище можно поместить то, что сериализуется. И платформа сериализует этот Объект. Т.е. Превратит в xml.
13 Fedor-1971
 
15.01.24
16:20
(12) Не совсем: положить можно, что хочешь, только получить это "что хочешь" на клиенте не всегда возможно, например, ДокументОбъект будет лежать в хранилище, но на клиенте его не достать
14 stopa85
 
15.01.24
16:22
(13) ЧтениеXML тоже можно?
15 Fedor-1971
 
15.01.24
16:25
(14) Не проверял, но, смысл хранилища - чего-то сохранить для использования.
По идее и оный можно сохранить между вызовами сервера, типа обрабатывали, выяснили, что есть проблема, прячем в хранилище, бежим на клиент узнать "что делать?" у пользователя и возвращаемся для дообработки
16 stopa85
 
15.01.24
16:29
(15) ЧтениеXML - нельзя, потому что оно не сериализуется. ДокументОбъект сериализуется, имеет свое представление в xml, - поэтому можно.
17 Fedor-1971
 
15.01.24
17:14
(16) Чёй-то мне думается, что ДокументОбъект существует только на сервере, на клиент ни как приехать не может, а вот ЧтениеXML можно использовать на клиенте (в СП так написано)
18 skormgm
 
16.01.24
07:38
Проблему решил следующим способом. Создал реквизит формы "КомпоновщикНастроекКомпоновкиДанных1" с типом "КомпоновщикНастроекКомпоновкиДанных" (как рекомендовано в (7)). Но далее удалось сделать проще.
В обработчике "ПриСозданииНаСервере()" к уже имеющемуся коду (где были программно инициализированы настройки) добавил:

НастройкиКомпоновки = Отчет.КомпоновщикНастроек.ПолучитьНастройки();    
    Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиКомпоновки);    
    КомпоновщикНастроекКомпоновкиДанных1.ЗагрузитьНастройки(НастройкиКомпоновки);

А в обработчик "ПриОткрытии()" добавил строку:

Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(КомпоновщикНастроекКомпоновкиДанных1.Настройки);
19 Fedor-1971
 
16.01.24
09:05
(18) Ну, на вкус и цвет все фломастеры разные, сделал так, значит так

По факту ты инициализировал настройки отчёта, а не свой реквизит формы и упустил факт создания хранилища значения (наши упорные обсуждения со stopa85)

Сделал и молодец.