Имя: Пароль:
1C
1С v8
Запрос
,
0 Arutynov
 
18.06.13
13:59
Здравствуйте!Имеется запрос, не могу организовать отбор по папке, по элементу справочника элементарно отрабатывает, а если это папка то нет. При это множественный выбор должен работать.

КонтрагентСп= Новый СписокЗначений;
   Массив = Контрагент.ВыгрузитьКолонку("Контрагент");
   КонтрагентСп.ЗагрузитьЗначения(Массив);
   Номен= Новый СписокЗначений;
   Массив1 = Номенклатура.ВыгрузитьКолонку("Номенклатура");
   Номен.ЗагрузитьЗначения(Массив1);
   //Номен.ВыбратьЭлемент();    
   Запрос = Новый Запрос;
   Запрос.Текст =
       "ВЫБРАТЬ
       |    ВложенныйЗапрос.Документ,
       |    ВложенныйЗапрос.Контрагент,
       |    ВложенныйЗапрос.Дата,
       |    ВложенныйЗапрос.Товар,
       |    ВложенныйЗапрос.тонаж,
       |    ВложенныйЗапрос.ЕдИз,
       |    ВложенныйЗапрос.БазЕдИз,
       |    ВложенныйЗапрос.КоэффициентКор,
       |    ВложенныйЗапрос.КоэффициентШт,
       |    ВложенныйЗапрос.сумма
       |ИЗ
       |    (ВЫБРАТЬ
       |        ВозвратТоваровОтПокупателя.Ссылка КАК Документ,
       |        ВозвратТоваровОтПокупателя.Контрагент КАК Контрагент,
       |        ВозвратТоваровОтПокупателя.Дата КАК Дата,
       |        ВозвратТоваровОтПокупателяТовары.Номенклатура КАК Товар,
       |        ВозвратТоваровОтПокупателяТовары.Количество КАК тонаж,
       |        ВозвратТоваровОтПокупателяТовары.ЕдиницаИзмерения.Наименование КАК ЕдИз,
       |        ВозвратТоваровОтПокупателяТовары.Номенклатура.БазоваяЕдиницаИзмерения.Наименование КАК БазЕдИз,
       |        ВозвратТоваровОтПокупателяТовары.ЕдиницаИзмерения.Коэффициент КАК КоэффициентКор,
       |        ВозвратТоваровОтПокупателяТовары.Номенклатура.ЕдиницаДляОтчетов.Коэффициент КАК КоэффициентШт,
       |        ВозвратТоваровОтПокупателяТовары.Сумма КАК сумма
       |    ИЗ
       |        Документ.ВозвратТоваровОтПокупателя.Товары КАК ВозвратТоваровОтПокупателяТовары
       |            ЛЕВОЕ СОЕДИНЕНИЕ Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя
       |            ПО ВозвратТоваровОтПокупателяТовары.Ссылка = ВозвратТоваровОтПокупателя.Ссылка
       |    ГДЕ
       |        ВозвратТоваровОтПокупателя.Проведен = ИСТИНА
       |    
       |    ОБЪЕДИНИТЬ
       |    
       |    ВЫБРАТЬ
       |        РеализацияТоваровУслуг.Ссылка,
       |        РеализацияТоваровУслуг.Контрагент,
       |        РеализацияТоваровУслуг.Дата,
       |        РеализацияТоваровУслугТовары.Номенклатура,
       |        РеализацияТоваровУслугТовары.Количество,
       |        РеализацияТоваровУслугТовары.ЕдиницаИзмерения.Наименование,
       |        РеализацияТоваровУслугТовары.Номенклатура.БазоваяЕдиницаИзмерения.Наименование,
       |        РеализацияТоваровУслугТовары.ЕдиницаИзмерения.Коэффициент,
       |        РеализацияТоваровУслугТовары.Номенклатура.ЕдиницаДляОтчетов.Коэффициент,
       |        РеализацияТоваровУслугТовары.Сумма
       |    ИЗ
       |        Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
       |            ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
       |            ПО РеализацияТоваровУслугТовары.Ссылка = РеализацияТоваровУслуг.Ссылка
       |    ГДЕ
       |        РеализацияТоваровУслуг.Проведен = ИСТИНА) КАК ВложенныйЗапрос
       |ГДЕ
       |    ВложенныйЗапрос.Дата МЕЖДУ &Дат И &Дат1
       | и ВложенныйЗапрос.Контрагент в(&Контрагент)
       | и ВложенныйЗапрос.Товар в(&Номенклатура)
       |УПОРЯДОЧИТЬ ПО
       |   ВложенныйЗапрос.Дата";

   Запрос.УстановитьПараметр("Дат",НачалоПериода);
   Запрос.УстановитьПараметр("Дат1",КонецДня(КонецПериода));
   Запрос.УстановитьПараметр("Контрагент",КонтрагентСп);
   Запрос.УстановитьПараметр("Номенклатура",Номен);
1 PR
 
18.06.13
14:00
В ИЕРАРХИИ
2 zak555
 
18.06.13
14:02
ВозвратТоваровОтПокупателяТовары.Ссылка.Контрагент
ВозвратТоваровОтПокупателяТовары.Ссылка.Дата
3 zak555
 
18.06.13
14:03
РеализацияТоваровУслугТовары.Ссылка.Контрагент
РеализацияТоваровУслугТовары.Ссылка.Дата
4 palpetrovich
 
18.06.13
14:03
(2) +1   зачем тут ЛЕВОЕ СОЕДИНЕНИЕ?
5 Arutynov
 
18.06.13
14:03
(1) Спасибо. Не знал. Помоголо
6 Arutynov
 
18.06.13
14:04
(4) а чем тебе оно не нравится?
7 GROOVY
 
18.06.13
14:05
Писец, а не запросю
8 Arutynov
 
18.06.13
14:07
(7) а как правильнее?
9 palpetrovich
 
18.06.13
14:07
(8) так симпотичней
ВЫБРАТЬ
   ВозвратТоваровОтПокупателяТовары.Ссылка КАК Документ,
   ВозвратТоваровОтПокупателяТовары.Сумма КАК сумма
ИЗ
   Документ.ВозвратТоваровОтПокупателя.Товары КАК ВозвратТоваровОтПокупателяТовары
ОБЪЕДИНИТЬ
ВЫБРАТЬ
   РеализацияТоваровУслугТовары.Ссылка,
   РеализацияТоваровУслугТовары.Сумма
ИЗ
   Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
10 GROOVY
 
18.06.13
14:09
(8) Хотя бы условие на интервал выборки во вложенные запросы перенести. Хотя я еще не очень понял зачем там соединения...
11 Arutynov
 
18.06.13
14:11
(10)чем это ускорит запрос?
12 palpetrovich
 
18.06.13
14:14
(10) а зачем там вложенный вообще?
13 GROOVY
 
18.06.13
14:14
(11) Я думаю тем, что не будет выбирать ВСЕ документы, а потом фильтровать по интервалу. Думаю при большой истории в базе это на пару порядков увеличит скорость выполнения запроса.
14 GROOVY
 
18.06.13
14:15
(12) Это мне тоже не понятно.
15 GROOVY
 
18.06.13
14:16
+13 Да и с другими условиями та же фигня.
16 Arutynov
 
18.06.13
14:17
(10) попробую! А как без вложенного?
17 palpetrovich
 
18.06.13
14:19
(16) без вложенного - в (9), но там будет не сильно упорядоченная куча, а как надо - зависит от задачи, от того что надо получить в итоге
18 magicSan
 
18.06.13
14:19
| и ВложенныйЗапрос.Товар в(&Номенклатура)
заменить на

   | и ВложенныйЗапрос.Товар в иерархии(&Номенклатура)
19 palpetrovich
 
18.06.13
14:22
(18) на оленях ехал? :)
20 Arutynov
 
18.06.13
14:24
(15) гораздо быстрее, благодарю!
21 magicSan
 
18.06.13
14:25
(19) чо такое? )
22 palpetrovich
 
18.06.13
14:26
(21) см (1) :)
23 Arutynov
 
18.06.13
14:26
(18) Спасибо, мне это уже подсказали))
24 magicSan
 
18.06.13
14:27
(22) )))))) точно на оленях )))
25 palpetrovich
 
18.06.13
14:28
(0) а вообще, эти 2 документа, наверняка двигают какой-то регистр в разных направлениях - вот к нему-то и надо делать запрос!
26 magicSan
 
18.06.13
14:28
(25) ага например продажи ))
27 magicSan
 
18.06.13
14:29
(23) а что на рте таблицы что в объединениях религия не позволяет накладывать условия?
28 Arutynov
 
18.06.13
14:30
уже наложил.....
29 palpetrovich
 
18.06.13
14:32
+(25) к примеру так:
ВЫБРАТЬ
   ПродажиОбороты.Регистратор,
   ПродажиОбороты.Номенклатура,
   ПродажиОбороты.КоличествоОборот,
   ПродажиОбороты.СтоимостьОборот,
   ПродажиОбороты.Период КАК Период
ИЗ
   РегистрНакопления.Продажи.Обороты(
           &ДатаНач,
           &ДатаНач,
           Регистратор,
           Контрагент В ИЕРАРХИИ (&Контрагент)
               И Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ПродажиОбороты

УПОРЯДОЧИТЬ ПО
   Период
30 magicSan
 
18.06.13
14:32
(28) а теперь оп совету (25) всё это стереть и через "ссылка"(по двум докам) сделать запрос к виртуальной таблице регистра продажи )))
31 Arutynov
 
18.06.13
14:35
Что-то я про регистр не подумал...Попробую.
32 Arutynov
 
18.06.13
14:35
Спасибо за подсказку
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.