Имя: Пароль:
1C
1С v8
УФ. Динамический список. Изменение текста запроса.
0 Lama12
 
25.06.14
16:16
Есть УФ. На ней расположен динамический список. В зависимости от действий пользователя меняю текст запроса к динамическому списку. почему-то данные в списке не меняются. Это нормально?
1 butterbean
 
25.06.14
16:17
обновить данные надо-бы
2 Lama12
 
25.06.14
16:20
(1) Элементы формы Обновить()?
Не помогает.
3 acsent
 
25.06.14
16:21
Список.Обновить() или ОбновитьСтроки()
4 Lama12
 
25.06.14
16:28
(3) Не помогает.
5 Вызвать Исключение
 
25.06.14
16:33
ОповеститьОбИзменении(); (4)
6 kosts
 
25.06.14
16:52
(0) А что мешает сделать один запрос, но рулить параметрами.
7 Lama12
 
25.06.14
16:53
(6) Запрос тяжелый получается. Много фильтров которые нельзя наложить отборами на конечный результат.
В общем как раз пытаюсь от этого избавиться.
8 toypaul
 
гуру
25.06.14
16:55
может ОбновитьОтображениеДанных()
9 kosts
 
25.06.14
16:55
Как вариант. Сделай несколько закладок с разными списками
10 Lama12
 
25.06.14
16:58
(9) Это крайний вариант. Но идею принял. Спасибо.
11 toypaul
 
гуру
25.06.14
16:59
(9) была информация, что даже если дин. список не показывается, запрос всеравно отправляется на сервер. при открытии формы, например. или при обновлении формы.
12 Lama12
 
26.06.14
12:54
И так...
Внешняя обработка с примером воспроизведения ситуации.
https://yadi.sk/d/TP82RvHdUxUQa

В обработке на управляемую форму выведен динамический список с именем ДС.
Также две кнопки "Номенклатура" и "Контрагенты".
Отладчиком проверял. Текст запроса меняется.

Вопрос - что за фигня и где моя ошибка?
Как сделать что б менялись источники данных для динамического списка?

Код в форме.


&НаКлиенте
Процедура Номенклатура(Команда)
    // Вставить содержимое обработчика.
    СменитьЗапрос(ДС, Истина);
    Элементы.ДС.Обновить();
    
КонецПроцедуры

&НаСервереБезКонтекста
Процедура СменитьЗапрос(ДС, НоменклатураКонтрагент)

    
    
        ДС.ТекстЗапроса = ?(НоменклатураКонтрагент,
        
                            "ВЫБРАТЬ
                              |    Номенклатура.Наименование
                              |ИЗ
                              |    Справочник.Номенклатура КАК Номенклатура",
                          
                            "ВЫБРАТЬ
                              |    Контрагенты.Наименование
                              |ИЗ
                              |    Справочник.Контрагенты КАК Контрагенты");
                            
        ДС.ОсновнаяТаблица = ?(НоменклатураКонтрагент, "Справочник.Номенклатура", "Справочник.Контрагенты");
    
    

КонецПроцедуры

&НаКлиенте
Процедура Контрагенты(Команда)
    // Вставить содержимое обработчика.
    СменитьЗапрос(ДС, Ложь);
    Элементы.ДС.Обновить();
КонецПроцедуры
13 Lama12
 
26.06.14
13:38
ап?
14 jsmith82
 
26.06.14
13:39
динамический список ващет сам обновляется. на то он и динамический
15 jsmith82
 
26.06.14
13:39
если на сервере меняешь, на клиенте форма прыгает
было такое
16 Lama12
 
26.06.14
13:40
(14) Так выходит что не меняется.
(15) Неа. Вот как ее заставить прыгать?
17 jsmith82
 
26.06.14
13:41
(16) такого быть не может в принципе
18 jsmith82
 
26.06.14
13:42
ещё раз. динамический список так и назван, потому что он с интервалом в секунду читает данные из базы
если у тебя не обновляется, значит ты не присваиваешь списку текст запроса
19 Lama12
 
26.06.14
13:44
(18) В отладчике видно что запрос изменен. На клиенте видно.
20 acsent
 
26.06.14
13:45
попробуй менять на сервере С КОНТЕКСТОМ
21 Lama12
 
26.06.14
13:45
Похоже нашел почему не работает. Надо всю форму передавать на сервер. :(
Если передавать форму на сервер, все работает. Но это же криво!? Нет разве?
И в справке не написано что так делать нельзя.
22 Lama12
 
26.06.14
13:46
(20) Ага... с контекстом работает. Только не пойму почему без контекста не работает.
23 jsmith82
 
26.06.14
13:46
(21) потому что блеять данные из базы читаются на сервере. при этом форма перерисовывается
24 acsent
 
26.06.14
13:47
(23) не по этому )))
25 jsmith82
 
26.06.14
13:48
потому что разрабы платформы так присудили, что без контекста формы хрен вытянешь данные из базы
26 Lama12
 
26.06.14
13:48
(24) Могу предположить что форма перестраивается на сервере. Но блин хоть бы написали в справке :)
27 jsmith82
 
26.06.14
13:48
и при этом форма перерисовывается на клиенте
28 jsmith82
 
26.06.14
13:49
(26) на сервере, потом на клиенте
29 Segate
 
26.06.14
13:50
&НаКлиентеНоЕслиЧтоТоИНаСервере(с)
30 vde69
 
модератор
26.06.14
13:53
по тому, что по новому запросу изменяются отборы, а это может менятся только на сервере, так-как требуется запрос к метаданным.
31 vde69
 
модератор
26.06.14
13:56
кстати часть условий можно наложить через RLS, была у меня такая идея, единственный "нюанс" это то что будет действовать на все а не на конкретную форму...
32 Lama12
 
26.06.14
14:00
(31) Да, про RLS тоже думал. Но как-то совсем сыкотно было их использовать :)
33 vde69
 
модератор
26.06.14
14:14
34 vmv
 
26.06.14
14:37
(0) идея менять запрос ДСписка не верна в корне.

я делал так

- упрощал запрос ДСписка максимально для отображения полного набора данных
- оптимизоировал запрос посредством ограниченного числа параметров. Классические "ДатаНачала, ДатаОкончания"
- отключал стандартную установку отборов в форме
- вешал на панель команд три кнопки "Отбор", "Стандарт", "Выбрать вариант..."
- по кнопке "Отбор" вызывал форму: где есть поле отбора компоновки данных и группа модификации параметров "ДатаНачала, ДатаОкончания,...". Пользователь получает возможность в одинт клик открыть формы модификации и параметров и отборов и закрывая форму запрос "работает"
всего раз по прорисовке.

ну там небольшие тонкости с: передачей отбора СКД между формами, сохранении вариантов, "прошитие" предопределенных отборов "Стандарт"...,но они решаються без проблем

Время освоения пользователями этого интерфейса - полчасика и контрольная фраза "да - это оно"

Время затраченное на этот вариант реализации исчезающе мало по сравнению выбранным мной ранее - адский наворот в запросе.

Вывод: работать с динамикой отображения ДСписка без Формы настроек СКД - от лукавого
35 Lama12
 
27.06.14
09:00
(34) Это конечно здорово когда можно так сделать. Но вот что делать если в зависимости от поведения пользователя, данные для ДС должны браться из разных источников (один раз документы, другой раз справочники, третий раз РН, четвертый РС и т.д.)?
Можно конечно написать суперсложный запрос с логическими тригеррами и кучей таблиц, но оно медленнее работает.
Как раз ушел от большого запроса к куче маленьких. Работает минимум раза в 2 быстрее, а в некоторых случаях ускорение и в 6 раз выше.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.