Имя: Пароль:
1C
1С v8
Оптимизировать запрос
0 John83
 
01.08.11
10:02
Взял кусок из анализа заказов покупателей.
Только по одной группе складов отрабатывает порядка 50 сек., дальше нужно будет объединить с другой группой складов и с остатками товаров.
Можно ли тут еще что-то сделать?

ВЫБРАТЬ
   ВложенныйЗапрос.Номенклатура КАК Номенклатура,
   СУММА(ВложенныйЗапрос.ОсталосьОтгрузить) КАК ОсталосьОтгрузить
ИЗ
   (ВЫБРАТЬ
       ЗаказыПокупателейОстаткиИОбороты.Номенклатура КАК Номенклатура,
       СУММА(ЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток) КАК ОсталосьОтгрузить
   ИЗ
       РегистрНакопления.ЗаказыПокупателей.ОстаткиИОбороты(
               &ДатаНач,
               &ДатаКон,
               ,
               ,
               ЗаказПокупателя ССЫЛКА Документ.ЗаказПокупателя
                   И ЗаказПокупателя.СкладГруппа В ИЕРАРХИИ (&ЗаказМСК)) КАК ЗаказыПокупателейОстаткиИОбороты
           ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыПокупателей.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , , ЗаказПокупателя ССЫЛКА Документ.ЗаказПокупателя) КАК СводЗаказыПокупателейОстаткиИОбороты
           ПО ЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя = СводЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя
           ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
           ПО ЗаказыПокупателейОстаткиИОбороты.Номенклатура = ЗначенияСвойствОбъектов.Объект
               И (ЗначенияСвойствОбъектов.Свойство = &Свойство)
               И (ЗначенияСвойствОбъектов.Значение В (&ЗначенияСвойств))
   ГДЕ
       ЕСТЬNULL(СводЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток, 0) > 0
   
   СГРУППИРОВАТЬ ПО
       ЗаказыПокупателейОстаткиИОбороты.Номенклатура) КАК ВложенныйЗапрос

СГРУППИРОВАТЬ ПО
   ВложенныйЗапрос.Номенклатура

УПОРЯДОЧИТЬ ПО
   Номенклатура
АВТОУПОРЯДОЧИВАНИЕ
1 MikleV
 
01.08.11
10:05
попробуй убрать соединение
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
           ПО ЗаказыПокупателейОстаткиИОбороты.Номенклатура = ЗначенияСвойствОбъектов.Объект
               И (ЗначенияСвойствОбъектов.Свойство = &Свойство)
               И (ЗначенияСвойствОбъектов.Значение В (&ЗначенияСвойств))
2 MikleV
 
01.08.11
10:06
если проблема - в нем, вместо свойств завести реквизиты у номенклатуры
сам запрос не смотрел, опиши по логике что должно быть в итоге и напиши, какая конфигурация
3 rs_trade
 
01.08.11
10:06
(0) план запроса смотрел?
4 MadHead
 
01.08.11
10:09
Не увидел где используются обороты регистра СводЗаказыПокупателейОстаткиИОбороты
5 Axel2009
 
01.08.11
10:09
ВЫБРАТЬ
       ЗаказыПокупателейОстаткиИОбороты.Номенклатура КАК Номенклатура,
       СУММА(ЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток) КАК ОсталосьОтгрузить
   ИЗ
       РегистрНакопления.ЗаказыПокупателей.ОстаткиИОбороты(
               &ДатаНач,
               &ДатаКон,
               ,
               ,

              ЗаказПокупателя ССЫЛКА Документ.ЗаказПокупателя) КАК ЗаказыПокупателейОстаткиИОбороты
6 Axel2009
 
01.08.11
10:09
скока выполняется?
7 Axel2009
 
01.08.11
10:09
(4) в ГДЕ
8 Axel2009
 
01.08.11
10:10
в любом случае это
ЗаказПокупателя.СкладГруппа В ИЕРАРХИИ (&ЗаказМСК)
заменить на
ВЫРАЗИТЬ(ЗаказПокупателя КАК Документ.ЗаказПокупателя ).СкладГруппа В ИЕРАРХИИ (&ЗаказМСК)
9 MadHead
 
01.08.11
10:12
(7) Там остатки
10 Axel2009
 
01.08.11
10:14
(9) да вообще везде остатки конечные
11 MikleV
 
01.08.11
10:14
это вот это что ли?
ЕСТЬNULL(СводЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток, 0) > 0
так оно эквивалентно  внутреннему джойну
12 Axel2009
 
01.08.11
10:15
(11) а если меньше 0?
13 MikleV
 
01.08.11
10:22
(12) а, ну да
ошибся я
14 Широкий
 
01.08.11
10:22
ВЫБРАТЬ
   ЗаказыПокупателейОстаткиИОбороты.Номенклатура КАК Номенклатура,
   ЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток КАК ОсталосьОтгрузить
ИЗ
   РегистрНакопления.ЗаказыПокупателей.ОстаткиИОбороты(
           &ДатаНач,
           &ДатаКон,
           ,
           ,
           ЗаказПокупателя.СкладГруппа В ИЕРАРХИИ (&ЗаказМСК)
               И Номенклатура В
                   (ВЫБРАТЬ
                       ЗначенияСвойствОбъектов.Объект
                   ИЗ
                       РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
                   ГДЕ
                       ЗначенияСвойствОбъектов.Свойство = &Свойство
                       И ЗначенияСвойствОбъектов.Значение В (&ЗначенияСвойств))
               И ЗаказПокупателя В
                   (ВЫБРАТЬ
                       СводЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя
                   ИЗ
                       РегистрНакопления.ЗаказыПокупателей.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , , ЗаказПокупателя ССЫЛКА Документ.ЗаказПокупателя) КАК СводЗаказыПокупателейОстаткиИОбороты
                   ГДЕ
                       СводЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток > 0)) КАК ЗаказыПокупателейОстаткиИОбороты
15 John83
 
01.08.11
10:25
(12) звиняюсь за глупый вопрос, а что будет если < 0?
16 Широкий
 
01.08.11
10:26
(8) Бред
"ЗаказПокупателя" не составного типа
17 Широкий
 
01.08.11
10:28
+16 Хотя "ЗаказПокупателя ССЫЛКА Документ.ЗаказПокупателя"

Автор. Реквизит "ЗаказПокупателя" тип составной?
18 Axel2009
 
01.08.11
10:28
(15) не парься, это к теме не относится
почему нельзя использовать Остатки?
19 rs_trade
 
01.08.11
10:29
мне вот интересно, как можно пытаться оптимизировать запрос, даже не зная как он выполняется. все играют в угадайку.
20 John83
 
01.08.11
10:30
(17) да
ДокументСсылка.ЗаказПоставщику, ДокументСсылка.ЗаказПокупателя
21 Широкий
 
01.08.11
10:30
(20) Ну значит в (8) верно
22 Широкий
 
01.08.11
10:30
РегистрНакопления.ЗаказыПокупателей.ОстаткиИОбороты
На самом деле .. почему не остатки на ДатаКон?
23 Axel2009
 
01.08.11
10:31
(19) кто он выполняется? если запрос вернет теже данные что и исходный, тогда без разницы что он должен делать
24 John83
 
01.08.11
10:32
(22) в принципе да, надо остатки попробовать запихнуть, только вот дождусь, пока (8) выполнится :)
25 Axel2009
 
01.08.11
10:35
(24) да руби ты это неблагодарное дело...
26 Широкий
 
01.08.11
10:36
ВЫБРАТЬ
   ЗаказыПокупателейОстатки.Номенклатура КАК Номенклатура,
   ЗаказыПокупателейОстатки.КоличествоОстаток КАК ОсталосьОтгрузить
ИЗ
   РегистрНакопления.ЗаказыПокупателей.Остатки(
           &ДатаКон,
           ВЫРАЗИТЬ(ЗаказПокупателя КАК Документ.ЗаказПокупателя).СкладГруппа В ИЕРАРХИИ (&ЗаказМСК)
               И ЗаказПокупателя ССЫЛКА Документ.ЗаказПокупателя
               И Номенклатура В
                   (ВЫБРАТЬ
                       ЗначенияСвойствОбъектов.Объект
                   ИЗ
                       РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
                   ГДЕ
                       ЗначенияСвойствОбъектов.Свойство = &Свойство
                       И ЗначенияСвойствОбъектов.Значение В (&ЗначенияСвойств))) КАК ЗаказыПокупателейОстатки
ГДЕ
   ЗаказыПокупателейОстатки.КоличествоОстаток > 0
27 Широкий
 
01.08.11
10:36
Походу вот так будет :)
28 Широкий
 
01.08.11
10:37
Свод заказов забыл :)

ВЫБРАТЬ
   ЗаказыПокупателейОстатки.Номенклатура КАК Номенклатура,
   ЗаказыПокупателейОстатки.КоличествоОстаток КАК ОсталосьОтгрузить
ИЗ
   РегистрНакопления.ЗаказыПокупателей.Остатки(
           &ДатаКон,
           ВЫРАЗИТЬ(ЗаказПокупателя КАК Документ.ЗаказПокупателя).СкладГруппа В ИЕРАРХИИ (&ЗаказМСК)
           И  ЗаказПокупателя ССЫЛКА Документ.ЗаказПокупателя
               И Номенклатура В
                   (ВЫБРАТЬ
                       ЗначенияСвойствОбъектов.Объект
                   ИЗ
                       РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
                   ГДЕ
                       ЗначенияСвойствОбъектов.Свойство = &Свойство
                       И ЗначенияСвойствОбъектов.Значение В (&ЗначенияСвойств))
               И ЗаказПокупателя В
                   (ВЫБРАТЬ
                       СводЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя
                   ИЗ
                       РегистрНакопления.ЗаказыПокупателей.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , , ЗаказПокупателя ССЫЛКА Документ.ЗаказПокупателя) КАК СводЗаказыПокупателейОстаткиИОбороты
                   ГДЕ
                       СводЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток > 0)) КАК ЗаказыПокупателейОстатки
29 Axel2009
 
01.08.11
10:37
(28) свод заказов забыл в остатки
30 Широкий
 
01.08.11
10:38
Да блин

ВЫБРАТЬ
   ЗаказыПокупателейОстатки.Номенклатура КАК Номенклатура,
   ЗаказыПокупателейОстатки.КоличествоОстаток КАК ОсталосьОтгрузить
ИЗ
   РегистрНакопления.ЗаказыПокупателей.Остатки(
           &ДатаКон,
           ВЫРАЗИТЬ(ЗаказПокупателя КАК Документ.ЗаказПокупателя).СкладГруппа В ИЕРАРХИИ (&ЗаказМСК)
               И ЗаказПокупателя ССЫЛКА Документ.ЗаказПокупателя
               И Номенклатура В
                   (ВЫБРАТЬ
                       ЗначенияСвойствОбъектов.Объект
                   ИЗ
                       РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
                   ГДЕ
                       ЗначенияСвойствОбъектов.Свойство = &Свойство
                       И ЗначенияСвойствОбъектов.Значение В (&ЗначенияСвойств))
               И ЗаказПокупателя В
                   (ВЫБРАТЬ
                       СводЗаказыПокупателейОстатки.ЗаказПокупателя
                   ИЗ
                       РегистрНакопления.ЗаказыПокупателей.Остатки(&ДатаКон, ЗаказПокупателя ССЫЛКА Документ.ЗаказПокупателя) КАК СводЗаказыПокупателейОстатки
                   ГДЕ
                       СводЗаказыПокупателейОстатки.КоличествоОстаток > 0)) КАК ЗаказыПокупателейОстатки
31 MikleV
 
01.08.11
10:39
это тоже убрать:
И Номенклатура В
                   (ВЫБРАТЬ
                       ЗначенияСвойствОбъектов.Объект
                   ИЗ
                       РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
                   ГДЕ
                       ЗначенияСвойствОбъектов.Свойство = &Свойство
                       И ЗначенияСвойствОбъектов.Значение В (&ЗначенияСвойств)
32 Axel2009
 
01.08.11
10:40
ну и ДатаКон использовать Граница.Включая. либо ДатаКон+1 устанавливать запрос
33 MikleV
 
01.08.11
10:40
переделать на ВТ с номенклатурой, определенную заранее
34 Axel2009
 
01.08.11
10:41
(33) это без разницы. даже сказал бы что затраты на создание временных таблиц съест все и будет медленнее =)
35 Широкий
 
01.08.11
10:44
(31) Почему?
36 John83
 
01.08.11
10:44
с общей помощью снизил время до 6 сек.
Вот только так и не понял, почему нельзя использовать просто

ГДЕ
ЕСТЬNULL(ЗаказыПокупателейОстатки.КоличествоОстаток, 0) > 0

, т.е. без свода
??
37 Широкий
 
01.08.11
10:45
(36) см 30
38 MikleV
 
01.08.11
10:50
(35) потому что не рекомендуется так делать
почему не рекомендуется - может быть выбран неоптимальный план запроса.
39 MikleV
 
01.08.11
10:51
(34)это тебе так кажется, замеры на выборках по 100-200 т. записей говорят обратное
40 Широкий
 
01.08.11
10:53
(39) Будет неоптимальный план запроса - по скорости будет как с ВТ.
Я лично не юзаю т.к. не встречал ситуации где с ВТ быстрее
41 John83
 
01.08.11
10:55
(37) тоже висяк
42 MikleV
 
01.08.11
10:55
(40) это неверное мнение
43 MikleV
 
01.08.11
10:56
дело не в быстроте, а в устранении возможной ошибки исполнения неоптимального запроса
44 Широкий
 
01.08.11
10:57
(43) Вот смотрю я УПП .. там повсеместно юзается это идеология..
А все же хочется как побыстрее
45 MikleV
 
01.08.11
10:58
+ сами по себе условия В& при построении ВТ с количеством записей подзапроса В(Подзапрос) более 200-300 - плохой прием.
46 MikleV
 
01.08.11
10:59
ВТ = виртуальная таблица, да
47 Широкий
 
01.08.11
11:00
(45) Обоснуй
48 Широкий
 
01.08.11
11:02
(41) Наскока висяк?
49 John83
 
01.08.11
11:05
(48) полный - так и висит
наверное вот тут затык

И ЗаказПокупателя В

                   (ВЫБРАТЬ
                       СводЗаказыПокупателейОстатки.ЗаказПокупателя
                   ИЗ
                       РегистрНакопления.ЗаказыПокупателей.Остатки(&ДатаКон, ЗаказПокупателя ССЫЛКА Документ.ЗаказПокупателя) КАК СводЗаказыПокупателейОстатки
                   ГДЕ
                       СводЗаказыПокупателейОстатки.КоличествоОстаток > 0)) КАК ЗаказыПокупателейОстатки
50 MikleV
 
01.08.11
11:08
(47) почему так, а не иначе?
следствие медленной работы В& в общем случае.
тут возможны варианты.
например, фильтр по индексированной колонке будет быстрее отрабатывать и падение скорости выполнения запроса будет не так заметно.
51 Широкий
 
01.08.11
11:11
(50) Или падения скорости не будет и будет наоборот медленнее? :)
(49) Ну попробуй , как советует MikleV, вынести это в ВТ
52 Axel2009
 
01.08.11
11:12
(39) мои выборы данных показывают обратное как правило. в любом случае каждый запрос необходимо рассматривать индивидуально. в данном случае я сделал свой вывод просто: у РС ЗначенияСвойствОбъектов есть кластерный индекс по полям Объект/Свойство. при сравнивании номенклатуры мы как раз и выбираем 1 поле Объект, что равносильно выборке по кластерному ключу, поэтому помещение в ВТ этой выборки и навес индекса может снизить общую выборку как раз на создание этого индекса.
53 Широкий
 
01.08.11
11:14
ВЫБРАТЬ РАЗЛИЧНЫЕ
   СводЗаказыПокупателейОстатки.ЗаказПокупателя
ПОМЕСТИТЬ СводЗаказыПокупателейОстатки
ИЗ
   РегистрНакопления.ЗаказыПокупателей.Остатки(&ДатаКон, ЗаказПокупателя ССЫЛКА Документ.ЗаказПокупателя) КАК СводЗаказыПокупателейОстатки
ГДЕ
   СводЗаказыПокупателейОстатки.КоличествоОстаток > 0
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ЗаказыПокупателейОстатки.Номенклатура КАК Номенклатура,
   ЗаказыПокупателейОстатки.КоличествоОстаток КАК ОсталосьОтгрузить
ИЗ
   РегистрНакопления.ЗаказыПокупателей.Остатки(
           &ДатаКон,
           ВЫРАЗИТЬ(ЗаказПокупателя КАК Документ.ЗаказПокупателя).СкладГруппа В ИЕРАРХИИ (&ЗаказМСК)
               И ЗаказПокупателя ССЫЛКА Документ.ЗаказПокупателя
               И Номенклатура В
                   (ВЫБРАТЬ
                       ЗначенияСвойствОбъектов.Объект
                   ИЗ
                       РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
                   ГДЕ
                       ЗначенияСвойствОбъектов.Свойство = &Свойство
                       И ЗначенияСвойствОбъектов.Значение В (&ЗначенияСвойств))
               И ЗаказПокупателя В
                   (ВЫБРАТЬ
                       СводЗаказыПокупателейОстатки.ЗаказПокупателя
                   ИЗ
                       СводЗаказыПокупателейОстатки КАК СводЗаказыПокупателейОстатки)) КАК ЗаказыПокупателейОстатки
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ СводЗаказыПокупателейОстатки
54 Axel2009
 
01.08.11
11:15
(50) более того могу сказать по своему опыту работы со скулем, условие
            Номенклатура В

                   (ВЫБРАТЬ
                       ЗначенияСвойствОбъектов.Объект
                   ИЗ
                       РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
                   ГДЕ
                       ЗначенияСвойствОбъектов.Свойство = &Свойство

                      И ЗначенияСвойствОбъектов.Значение В (&ЗначенияСвойств))
может свалиться в условие не джоина таблиц, а условия ИЛИ, и тогда ваш запрос умрет прежде чем выполнится.
55 Axel2009
 
01.08.11
11:17
(54) естественно я имел ввиду общий случай этого условия, конкретно использование "В"
56 dmpl
 
01.08.11
11:17
(0) И что - правильно работает, если в заказах более 1 позиции номенклатуры?
57 Широкий
 
01.08.11
11:21
И вот так еще попробуй

ВЫБРАТЬ
   ЗаказыПокупателейОстатки.Номенклатура КАК Номенклатура,
   ЗаказыПокупателейОстатки.КоличествоОстаток КАК ОсталосьОтгрузить
ИЗ
   РегистрНакопления.ЗаказыПокупателей.Остатки(
           &ДатаКон,
           ВЫРАЗИТЬ(ЗаказПокупателя КАК Документ.ЗаказПокупателя).СкладГруппа В ИЕРАРХИИ (&ЗаказМСК)
               И ЗаказПокупателя ССЫЛКА Документ.ЗаказПокупателя
               И Номенклатура В
                   (ВЫБРАТЬ
                       ЗначенияСвойствОбъектов.Объект
                   ИЗ
                       РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
                   ГДЕ
                       ЗначенияСвойствОбъектов.Свойство = &Свойство
                       И ЗначенияСвойствОбъектов.Значение В (&ЗначенияСвойств))
               И ЗаказПокупателя В
                   (ВЫБРАТЬ
                       ВЫРАЗИТЬ(СводЗаказыПокупателейОстатки.ЗаказПокупателя КАК Документ.ЗаказПокупателя) КАК ЗаказПокупателя
                   ИЗ
                       РегистрНакопления.ЗаказыПокупателей.Остатки(&ДатаКон, ЗаказПокупателя ССЫЛКА Документ.ЗаказПокупателя) КАК СводЗаказыПокупателейОстатки
                   ГДЕ
                       СводЗаказыПокупателейОстатки.КоличествоОстаток > 0)) КАК ЗаказыПокупателейОстатки
58 MikleV
 
01.08.11
11:22
(52) может быть.
т.е. да, может быть свалится
(54) это не мой запрос-)
я не очень понимаю, зачем в подзапросе условие на ненулевые остатки, их можно потом отсечь, ну т.е.

ВЫБРАТЬ
 ЗначенияСвойствОбъектов.Объект
ПОМЕСТИТЬ Т
 ИЗ
    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
 ГДЕ
    ЗначенияСвойствОбъектов.Свойство = &Свойство
    И ЗначенияСвойствОбъектов.Значение В (&ЗначенияСвойств))

;
              И ЗаказПокупателя ССЫЛКА Документ.ЗаказПокупателя

ВЫБРАТЬ
   ЗаказыПокупателейОстатки.Номенклатура КАК Номенклатура,
   ЗаказыПокупателейОстатки.КоличествоОстаток КАК ОсталосьОтгрузить
ИЗ
   РегистрНакопления.ЗаказыПокупателей.Остатки(
           &ДатаКон,
           ВЫРАЗИТЬ(ЗаказПокупателя КАК Документ.ЗаказПокупателя).СкладГруппа В ИЕРАРХИИ (&ЗаказМСК)
              И ЗаказПокупателя ССЫЛКА Документ.ЗаказПокупателя
              И Номенклатура В
                   (ВЫБРАТЬ
                       Т.Объект
                   ИЗ
                       Т КАК Т)
) КАК ЗаказыПокупателейОстатки  
ГДЕ
       ЗаказыПокупателейОстатки.КоличествоОстаток   > 0
59 Axel2009
 
01.08.11
11:24
(58) по логике: чтобы те заказы по которым отрицательное количество не минусовали количество, которое осталось отгрузить..
60 Широкий
 
01.08.11
11:24
(58) Остаток у свода заказов проверяется
61 John83
 
01.08.11
11:33
(57) первый рабочий вариант - 2.5 сек :)
62 Axel2009
 
01.08.11
11:35
(61) я только не могу найти случаев, где могут быть пересечения в заказах покупателей по определенному складу..
63 John83
 
01.08.11
11:36
(62) ну хз... я ж говорю, что взял кусок запроса из типового отчета (УПП)
64 John83
 
01.08.11
11:37
(57) что-то не пойму - все дело было в ВЫРАЗИТЬ?
65 Широкий
 
01.08.11
11:37
(61) Ну значит пропустили приведение составного типа.. а знчет и без индекса остались
66 Fragster
 
гуру
01.08.11
11:39
было про развернуть "В Иерархии" в плоскую таблицу?
67 Axel2009
 
01.08.11
11:40
ВЫБРАТЬ
   ЗаказыПокупателейОстатки.Номенклатура КАК Номенклатура,
   ЗаказыПокупателейОстатки.КоличествоОстаток КАК ОсталосьОтгрузить
ИЗ
   РегистрНакопления.ЗаказыПокупателей.Остатки(
           &ДатаКон,
           ВЫРАЗИТЬ(ЗаказПокупателя КАК Документ.ЗаказПокупателя).СкладГруппа В ИЕРАРХИИ (&ЗаказМСК)

              И ЗаказПокупателя ССЫЛКА Документ.ЗаказПокупателя
              И Номенклатура В

                   (ВЫБРАТЬ
                       ЗначенияСвойствОбъектов.Объект
                   ИЗ
                       РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
                   ГДЕ
                       ЗначенияСвойствОбъектов.Свойство = &Свойство

                      И ЗначенияСвойствОбъектов.Значение В (&ЗначенияСвойств))
              И ЗаказПокупателя В

                   (ВЫБРАТЬ
                       ВЫРАЗИТЬ(СводЗаказыПокупателейОстатки.ЗаказПокупателя КАК Документ.ЗаказПокупателя) КАК ЗаказПокупателя
                   ИЗ
                       РегистрНакопления.ЗаказыПокупателей.Остатки(&ДатаКон, ЗаказПокупателя ССЫЛКА Документ.ЗаказПокупателя И ВЫРАЗИТЬ(ЗаказПокупателя КАК Документ.ЗаказПокупателя).СкладГруппа В ИЕРАРХИИ (&ЗаказМСК)) КАК СводЗаказыПокупателейОстатки
                   ГДЕ
                       СводЗаказыПокупателейОстатки.КоличествоОстаток > 0)) КАК ЗаказыПокупателейОстатки
68 Fragster
 
гуру
01.08.11
11:41
ну и опять же соединение виртуально таблицы регистра самой с собой непонятно зачем
69 Широкий
 
01.08.11
11:42
(67) Не думаю что быстрее будет.. ты добавил еще одно соединение.. и к тому же В ИЕРАРХИИ
(68) Регистры разные . внимательно посмотри
70 Широкий
 
01.08.11
11:43
(68) Блин.. а он прав
71 Широкий
 
01.08.11
11:46
или в типовой регистр по хитрому строеен?
72 John83
 
01.08.11
11:49
(68)(70) но тем не менее, если убрать второй регистр, то данные несколько неправильно выводятся - почему уж не знаю
73 Axel2009
 
01.08.11
11:51
(72) вообще если следовать логике смотрим что у нас получается
есть ЗП1
Н1 +50
Н2 -49

ЗП2
Н2 +100

первый запрос вернет данные
Н1 +50
Н2 +51
насколько это корректно, что нам осталось отгрузить именно 51 штуку, а не 100?
74 Широкий
 
01.08.11
11:51
(72) Допер. Нулевые позиции чтобы отображались
75 John83
 
01.08.11
12:10
(74) в том-то и дело, что позиции те же выводятся, но в некоторых неправильный остаток
76 Axel2009
 
01.08.11
13:56
(75) можно так попробовать
ВЫБРАТЬ
   ЗаказыПокупателейОстатки.ЗаказПокупателя КАК ЗаказПокупателя,
   ЗаказыПокупателейОстатки.Номенклатура КАК Номенклатура,
   ЗаказыПокупателейОстатки.КоличествоОстаток КАК ОсталосьОтгрузить
ПОМЕСТИТЬ ОстаткиЗаказов
ИЗ
   РегистрНакопления.ЗаказыПокупателей.Остатки(
           &ДатаКон,
           ВЫРАЗИТЬ(ЗаказПокупателя КАК Документ.ЗаказПокупателя).СкладГруппа В ИЕРАРХИИ (&ЗаказМСК)
               И ЗаказПокупателя ССЫЛКА Документ.ЗаказПокупателя) КАК ЗаказыПокупателейОстатки

ИНДЕКСИРОВАТЬ ПО
   Номенклатура,
   ЗаказПокупателя,
   ОсталосьОтгрузить
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ОстаткиЗаказов.Номенклатура КАК Номенклатура,
   СУММА(ОстаткиЗаказов.ОсталосьОтгрузить) КАК ОсталосьОтгрузить
ИЗ
   ОстаткиЗаказов КАК ОстаткиЗаказов
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           ОстаткиЗаказов.ЗаказПокупателя КАК ЗаказПокупателя,
           СУММА(ОстаткиЗаказов.ОсталосьОтгрузить) КАК ОсталосьОтгрузить
       ИЗ
           ОстаткиЗаказов КАК ОстаткиЗаказов
       
       СГРУППИРОВАТЬ ПО
           ОстаткиЗаказов.ЗаказПокупателя
       
       ИМЕЮЩИЕ
           СУММА(ОстаткиЗаказов.ОсталосьОтгрузить) > 0) КАК ОтборЗаказов
       ПО ОстаткиЗаказов.ЗаказПокупателя = ОтборЗаказов.ЗаказПокупателя

СГРУППИРОВАТЬ ПО
   ОстаткиЗаказов.Номенклатура

ИМЕЮЩИЕ
   СУММА(ОстаткиЗаказов.ОсталосьОтгрузить) <> 0

УПОРЯДОЧИТЬ ПО
   Номенклатура
77 John83
 
01.08.11
16:18
(76) спасибо, но уже все сделал на основе варианта (57) - переделывать неохота
78 John83
 
01.08.11
16:18
всем большое спасибо за помощь и участие!!!
79 MikleV
 
01.08.11
17:07
так чего не работало - из-за составного типа измерения тормоза были или что?
80 John83
 
01.08.11
17:22
(79) по-моему все же из-за неоптимальности запроса, получилось, параметры ВТ отрабатывают шустрее соединений
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.