Имя: Пароль:
1C
1С v8
СКД, программное заполнение и доступные поля отбора
0 Весенняя Мелисса
 
05.12.12
15:23
Создаю СКД программно с набором данных с типом запрос. Все хорошо, но... не получается настроить последующий интерактивный отбор по полям созданной СКД, т.е. при выборе в пользовательском режиме отбора доступные поля пустые. Давно уже обходила данную проблему, когда программное заполнение СКД запускала в теле модуля объекта. Но, теперь задача в изменении текста СКД уже после отработки тела модуля объекта, при интерактивном изменении параметров пользователем... Смотрю компоновщик настроек - ДоступныеПоляОтбора пустые, заполнить программно их нельзя, смотрю основной вариант настроек СКД, нужные поля заполнились, ограничений на отбор нет. Как сделать?
1 Wobland
 
05.12.12
15:26
что такое текст СКД?
2 Wobland
 
05.12.12
15:27
и почему без фото?
3 Весенняя Мелисса
 
05.12.12
15:29
(2) изменение текста запроса СКД, т.е. текст запроса набора данных СКД изменяется динамически после определенных действий пользователя.
4 Весенняя Мелисса
 
05.12.12
15:34
все необходимые действия с компоновщиком - инициализацию, загрузку настроек, восстановление естественно делаю. Проблема такая у меня уже была, делала программное заполнение СКД в теле модуля объекта, но в этот раз так не получится.
5 Весенняя Мелисса
 
05.12.12
15:46
управляемая форма на 8.2
6 samozvanec
 
05.12.12
16:02
включить отбор в пользовательские настройки, не?
7 samozvanec
 
05.12.12
16:04
доступные поля пустые - а в наборе-то эти поля для условий доступны вобще?
8 Defender aka LINN
 
05.12.12
16:06
(4) "все необходимые действия с компоновщиком - инициализацию, загрузку настроек, восстановление естественно делаю" - неправильно делаешь
9 Весенняя Мелисса
 
05.12.12
16:08
(8) почему неправильно?
(7) в наборе доступны, ограничений нет.
10 Defender aka LINN
 
05.12.12
16:10
(9) Потому что если делать правильно, то все работает
11 Весенняя Мелисса
 
05.12.12
16:10
(6) с отключенным признаком использования все возможные поля в отбор? можно конечно, но некрасиво как то.
12 Весенняя Мелисса
 
05.12.12
16:10
(10) ну это понятно. только вот точно работает то?
13 yurec_k
 
05.12.12
16:12
инициализируешь так?  :

АдресСхемы = ПоместитьВоВременноеХранилище(Схема);
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы));
14 Defender aka LINN
 
05.12.12
16:17
(12) Ну, давай сюда руки, буду рвать плоскогубцами ногти и зубы, пока не сознаешься и не выдашь хоть строчку кода, хрустальный шар я дома забыл.
15 Весенняя Мелисса
 
05.12.12
16:20
(13) нет не так.... я вообще это в процедуре на сервере делаю без всяких временных хранилищ
(14)    КНастроек.Инициализировать(Новый источникдоступныхнастроеккомпоновкиданных(СКД));
   КНастроек.ЗагрузитьНастройки(СКД.НастройкиПоУмолчанию);
   КНастроек.Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.Полное);

КнНастроек - реквизит на форме с типом КомпоновщикНастроек
16 Весенняя Мелисса
 
05.12.12
16:21
по СКД - все отлично формируется. а вот с компановщиком - беда, с интерактивным отбором.
17 Defender aka LINN
 
05.12.12
16:24
(15) Ну вот тебе и ответ
18 Весенняя Мелисса
 
05.12.12
16:25
(17) надо с разделением на сервер и клиент и с помещением во временное хранилище? в этом ответ?
19 yurec_k
 
05.12.12
16:28
создавай в коде новый объект компоновщик настроек
инициализируй как в (13) (иначе не взлетит)
загружай настройки как у тебя в коде
и
КнНастроек = КомпоновщикНастроек
------
все что выше на сервере работате
20 Весенняя Мелисса
 
05.12.12
16:29
(19) сейчас попробую
21 yurec_k
 
05.12.12
16:29
недавно эту песню делал
22 Весенняя Мелисса
 
06.12.12
12:51
Не соображаю с этими управляемыми формами, а вернее не понимаю "оптимальное клиент-серверное взаимодействие" управляемых форм. Я СКД создаю в процедуре на сервере, потому что она на сервере только и работает. Есть реквизит на форме с типом КомпоновщикНастроек. Если я инициализирую КомпоновщикНастроек на сервере, то доступные поля отбора заполнены правильно. Вот как мне передать такой же "хороший и правильный" компоновщик в этот реквизит на форме. Поместить во временное хранилище этот компоновщик на сервере, потом получить из временного хранилища на клиенте и присвоить этому реквизиту с типом компоновщик настроек - ДоступныеНастройкиОтбора компоновщика сразу на клиенте исчезают. Ну как это делается? правильно?
23 yurec_k
 
06.12.12
13:06
Вот рабочий код из модуля формы (на которую вытащено таб поле с пользовательскими настройки не основной СКД отчета) отчета:

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

эта процедура вызывается например при установке флажка

последней строчкой в процедуре делается " ... как мне передать такой же "хороший и правильный" компоновщик в этот реквизит на форме..." ,
и после этой строчки смотри в отладчике свои уже любимые  доступные поля отбора у КомпановщикНастроекНаФорме или в твоем сл КнНастроек (если не ОК проверь правильно ли загрузились настройки), и иди дальше отладчиком смотри где эта хрень слетает
24 Весенняя Мелисса
 
06.12.12
13:22
(23) Спасибо огромное. Так все заработало.
25 ПиН
 
06.12.12
13:22
(24) фото не забудьте, а то не порядок...
26 yurec_k
 
06.12.12
13:43
(25) екрны, вчера же была, с цветочками
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой