Имя: Пароль:
1C
 
Запрос в консоли и в динамическом списке
0 lamme
 
26.04.20
17:43
1С8
Есть запрос. Выборка остатков из РН.
условие


остаткиНаСкладах.Склад в (&СпискСкладов)

Выполняется в динамическом списке.
СпискСкладов = параметр заполняется при открытии обработки

СпискСкладов = новый СПисокЗначений()
для каждого СтрСкл из параметрысеанса.текущийпользовтаель.списокяСкладов цикл

СпискСкладов.добавить (СтрСкл .Склад)
конеццикла;

В списке складов у пользователя стоит Склад1 и Склад2.

А теперь прикол.
В консоли указываю 2 этих склада - все красиво показывает.

А в обработке показывается остаток только по тому складу-которыйидет первым в настройках пользователя в этом списке.
При этом меняешь местами склады - показывает все равно только по тому,какойсклад первый
1 lamme
 
26.04.20
17:43
отладчик показывает 2 заполненных склада
2 lamme
 
26.04.20
17:45
повторю
в консоли - этот запрос показывает все правильно.
3 lamme
 
26.04.20
17:46
тут или наложение имен переменных ..наверное ..
или я хз
4 lamme
 
26.04.20
17:50
имена переменнызуникальны
5 vde69
 
26.04.20
17:56
для динамического списка лучше юзать отбор чем параметр "в"
6 lamme
 
26.04.20
17:58
те сам запрос - без отбора
а потом в условном оформлении отбор поставить?
7 vde69
 
26.04.20
17:59
(6) да
8 lamme
 
26.04.20
17:59
стенсяюсь спросить
а какого фига?
9 lamme
 
26.04.20
18:00
запрос выберет 100500 записей
а потом отбор покажет только 500 из них.
как-то - не рационально
10 Ненавижу 1С
 
гуру
26.04.20
18:01
есть мнение, что создание списка в цикле перетирается:
  СпискСкладов = новый СПисокЗначений();

а вообще проще было

СпискСкладов = параметрысеанса.текущийпользовтаель.списокяСкладов.ВыгрузитьКолонку("Склад");
11 Ненавижу 1С
 
гуру
26.04.20
18:02
(9) отборы встраиваются в тело запроса

кстати у тебя неоптимально выгружать всю виртуальную таблицу, а потом накладывать условие
12 vde69
 
26.04.20
18:02
(8) просто поверь, писать долго
13 lamme
 
26.04.20
18:03
10

проверяю
14 vde69
 
26.04.20
18:04
(9) динамический список никогда не обрабатывает весь список сразу, он работает по другому...
15 lamme
 
26.04.20
18:05
10

сработало!
16 lamme
 
26.04.20
18:05
я в шоке
17 Вафель
 
26.04.20
18:09
Параметр В должен отрабатывать нормально
18 lamme
 
26.04.20
18:15
10

по факту - отладчик показывает список из 2х складов пользователя
19 lamme
 
26.04.20
18:15
а так .. и не работает (
20 lamme
 
26.04.20
18:16
а так - СпискСкладов = параметрысеанса.текущийпользовтаель.списокяСкладов.ВыгрузитьКолонку("Склад");
работает

в чем разница - не вижу
21 lamme
 
26.04.20
18:16
10
спасибо
22 Ненавижу 1С
 
гуру
26.04.20
18:18
отсюда код не видно весь
23 hhhh
 
26.04.20
18:36
(20) вообще-то разница огромная. Там список значений, а тут массив.
24 Ненавижу 1С
 
гуру
26.04.20
18:38
(23) в данном случае это не принципиально