Имя: Пароль:
1C
1С v8
Помогите с группировкой в запросе
,
0 ad205
 
02.03.12
17:48
В продолжении темы : v8: При выводе отчета задваиваются строки
т.к. так и не получилось решить проблему.

В итоге получаю таблицу типа:

Номенклатура | Серия | Документ Оприходования | Количество | В резерве

Товар1         00001        NULL                   0             10
Товар1         00001 ПоступлениеТоваровУслуг       50            0

Как в запросе свернуть что бы получилось:
Номенклатура | Серия | Документ Оприходования | Количество | В резерве
Товар1         00001 ПоступлениеТоваровУслуг       50            10

Заранее спасибо.
1 rbcvg
 
02.03.12
17:49
Соединение не помогло?
2 Beduin
 
02.03.12
17:50
(0) Все правильно оно тебе дало. Документ оприходывание = NULL, а это тоже данные.
3 ad205
 
02.03.12
17:51
И так и так пробывал, ни в какую. Что то делаю не так, а что понять не могу(((
4 ad205
 
02.03.12
17:51
ВЫБРАТЬ РАЗЛИЧНЫЕ
   ВложенныйЗапрос.Склад КАК Склад,
   ВложенныйЗапрос.Номенклатура КАК Номенклатура,
   ВложенныйЗапрос.СерияНоменклатуры КАК СерияНоменклатуры,
   ВложенныйЗапрос.ДокументОприходования КАК ДокументОприходования,
   МАКСИМУМ(ВложенныйЗапрос.КоличествоОстаток) КАК КоличествоОстаток,
   МАКСИМУМ(ВложенныйЗапрос.КоличествоРезерв) КАК КоличествоРезерв
ИЗ
   (ВЫБРАТЬ РАЗЛИЧНЫЕ
       ПартииТоваровНаСкладахОстатки.Склад КАК Склад,
       ПартииТоваровНаСкладахОстатки.Номенклатура КАК Номенклатура,
       ПартииТоваровНаСкладахОстатки.СерияНоменклатуры КАК СерияНоменклатуры,
       ПартииТоваровНаСкладахОстатки.ДокументОприходования КАК ДокументОприходования,
       ПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
       0 КАК КоличествоРезерв
   ИЗ
       РегистрНакопления.ПартииТоваровНаСкладах.Остатки КАК ПартииТоваровНаСкладахОстатки
   
   ОБЪЕДИНИТЬ
   
   ВЫБРАТЬ РАЗЛИЧНЫЕ
       ТоварыВРезервеНаСкладахОстатки.Склад,
       ТоварыВРезервеНаСкладахОстатки.Номенклатура,
       ТоварыВРезервеНаСкладахОстатки.СерияНоменклатуры,
       NULL,
       0,
       ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток
   ИЗ
       РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки КАК ТоварыВРезервеНаСкладахОстатки) КАК ВложенныйЗапрос

СГРУППИРОВАТЬ ПО
   ВложенныйЗапрос.СерияНоменклатуры,
   ВложенныйЗапрос.Склад,
   ВложенныйЗапрос.Номенклатура,
   ВложенныйЗапрос.ДокументОприходования
ИТОГИ
   СУММА(КоличествоОстаток),
   СУММА(КоличествоРезерв)
ПО
   Склад,
   Номенклатура
5 ad205
 
02.03.12
17:52
Какие идеи тогда?
6 Beduin
 
02.03.12
17:53
(5) Документ оприходывания убрать в запросе.
7 adron
 
02.03.12
17:54
(6) Гениально
8 adron
 
02.03.12
17:54
Либо используй левое соединение
9 ad205
 
02.03.12
17:55
Дело в том, что беру остатки из РН Партии товаров на складах, в отчете нужен и документ оприходования и поставщик, а в РН Товары в резерве этих данных нет, делал через объединить. Данные все точные, но для пользователя вариант с двойными строками не подойдет. Левое соединение тоже пришлось отмести именно из за партий. Если у серии два документа оприходования то резерв будет задваиваться.
10 ad205
 
02.03.12
17:56
есть мысли?
11 Beduin
 
02.03.12
17:58
(9) Я понимаю когда проблема в программировании, но тут то здравый смысл.
Если два документа оприходывания, то на какой будет тогда резерв и по сколько?
12 ad205
 
02.03.12
18:00
В том то и дело, по этому и делаю через Объединить.
13 Beduin
 
02.03.12
18:02
(12) Ты не вкурил.
У тебя товар лежит на складе по двум документам оприходывания.
Я пришел заказал некоторое количество.
На какой документ оприходывания будешь ставить резерв?
14 ad205
 
02.03.12
18:05
Это я "вкурил"))), но мне пофигу где он будет стоять для пользователя, главное сейчас убрать пустую строку))))
15 ad205
 
02.03.12
18:05
Как сюда вставить картинку?
16 Beduin
 
02.03.12
18:06
(14) А если будет два документа оприходывания, то на них будет одинаковый резерв?
17 ad205
 
02.03.12
18:09
(16) Да именно так, главное что в номенклатуре он будет правильным,

В итоге будет вот так:

+Номенклатура                                Количество50     Резерв10
   Серия        ДокументОприходования1      Количество50     Резерв10
   Серия        ДокументОприходования2      Количество50     Резерв10
18 ad205
 
02.03.12
18:09
Ой вру, количество у серий будет разное в сумме 50
19 ad205
 
02.03.12
18:11
Сейчас отчет работает корректно, но строки задвоены

+Номенклатура                                Количество50     Резерв10
   Серия              NULL                       0           Резерв10
   Серия        ДокументОприходования1      Количество20    
   Серия        ДокументОприходования2      Количество30
20 Beduin
 
02.03.12
18:12
Делай как в (8)
21 ad205
 
02.03.12
18:13
Либо как сделать что бы верхняя строка с серией вообще не выводилась в отчет

(20) тогда задваивается резерв
22 Beduin
 
02.03.12
18:14
(21) Если у тебя в резерве одна строчка по номенклатуре, то задваиваться ничего не должно.
23 ad205
 
02.03.12
18:18
(22) Еще раз проверил Задваиваются
24 ad205
 
02.03.12
18:20
В отчет то данные выводятся с детализацией до серии, и туда же лезет и резерв, в итоге на уровне номенклатуры он * на количество строк с серией
25 КМ155
 
02.03.12
18:23
(22) пипец, ну распредели ты резерв пропорционально количеству в документе оприходования
26 Beduin
 
02.03.12
18:25
(24) Так ты сгруппируй сперва таблицу, которую будешь слева соединять.
27 КМ155
 
02.03.12
18:29
(26) не взлетит,
у таблиц разная детальность аналитик, тут либо
- распределять
- соединять наборы в СКД
28 ad205
 
02.03.12
18:32
(25) С распределением мысль хорошая, тоже думал. Но столкнулся с такой проблемой, как распределить, если просто разделить на количество документов оприходования, то в итоге резерв может не сойтись.
29 КМ155
 
02.03.12
18:34
(28) делить надо на количество номенклатурных позиций в ПТиУ,
а то, что итоговая сумма будет не целая - очевидно

для целой надо делать программный цикл и результат запихивать в отчет
30 azernot
 
02.03.12
18:41
Надо делать соединением, но для ресурса КоличествоРезерв применять агрегирование не Сумма() а Среднее() например.
31 ad205
 
02.03.12
18:42
(30)
пробовал и среднее и максимальное, не помагло
32 ad205
 
02.03.12
18:42
Пробую (29)
33 azernot
 
02.03.12
18:44
(31) Запрос с соедниением (а не с объединением) в студию.
34 ad205
 
02.03.12
18:48
В итоге решил остановиться на варианте (29)
35 ad205
 
02.03.12
18:49
ВЫБРАТЬ РАЗЛИЧНЫЕ
   ПартииТоваровНаСкладахОстатки.Номенклатура КАК Номенклатура,
   ПартииТоваровНаСкладахОстатки.Склад КАК Склад,
   ПартииТоваровНаСкладахОстатки.СерияНоменклатуры КАК СерияНоменклатуры,
   ПартииТоваровНаСкладахОстатки.ДокументОприходования,
   ПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
   ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток КАК КоличествоРезерв,
   ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток / Опреход.КолДокументОприходования КАК Резерв,
   Опреход.КолДокументОприходования
ИЗ
   РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&НаДату, ) КАК ПартииТоваровНаСкладахОстатки
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&НаДату, ) КАК ТоварыВРезервеНаСкладахОстатки
       ПО ПартииТоваровНаСкладахОстатки.Склад = ТоварыВРезервеНаСкладахОстатки.Склад
           И ПартииТоваровНаСкладахОстатки.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
           И ПартииТоваровНаСкладахОстатки.СерияНоменклатуры = ТоварыВРезервеНаСкладахОстатки.СерияНоменклатуры
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
           ПартииТоваровНаСкладахОстатки.Склад КАК Склад,
           ПартииТоваровНаСкладахОстатки.Номенклатура КАК Номенклатура,
           ПартииТоваровНаСкладахОстатки.СерияНоменклатуры КАК СерияНоменклатуры,
           КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПартииТоваровНаСкладахОстатки.ДокументОприходования) КАК КолДокументОприходования
       ИЗ
           РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&НаДату, ) КАК ПартииТоваровНаСкладахОстатки
       
       СГРУППИРОВАТЬ ПО
           ПартииТоваровНаСкладахОстатки.Склад,
           ПартииТоваровНаСкладахОстатки.СерияНоменклатуры,
           ПартииТоваровНаСкладахОстатки.Номенклатура) КАК Опреход
       ПО ПартииТоваровНаСкладахОстатки.Склад = Опреход.Склад
           И ПартииТоваровНаСкладахОстатки.Номенклатура = Опреход.Номенклатура
           И ПартииТоваровНаСкладахОстатки.СерияНоменклатуры = Опреход.СерияНоменклатуры

УПОРЯДОЧИТЬ ПО
   Склад,
   Номенклатура
ИТОГИ
   СУММА(КоличествоОстаток),
   СУММА(КоличествоРезерв),
   СУММА(Резерв)
ПО
   ОБЩИЕ,
   Склад,
   Номенклатура,
   СерияНоменклатуры
АВТОУПОРЯДОЧИВАНИЕ
36 azernot
 
02.03.12
18:49
ИТОГИ
   СУММА(КоличествоОстаток),
   СУММА(КоличествоРезерв),
   СУММА(Резерв)


ха!
37 ad205
 
02.03.12
18:52
КоличествоРезерв оставил для наглядности (себе же) просто не вырезал. Отчет то делаю другой, просто что бы на коде посмотреть как делать, сделал простенький, но с той же проблеммой.
38 КМ155
 
02.03.12
18:52
(36) ты знаешь лучший вариант соединения Рг с разным количеством измерений ?
39 КМ155
 
02.03.12
18:53
(37) проверку на 0 забыл,
нельзя делить не проверяя
40 ad205
 
02.03.12
18:55
(39) да, спасибо. Но этот только для нахождения решения проблемы)))). Теперь буду переколбашивать основной))))
41 azernot
 
02.03.12
18:55
Если всё равно по какому документу оприходования показывать резерв, то можно так:

ВЫБРАТЬ РАЗЛИЧНЫЕ
   ВложенныйЗапрос.Склад КАК Склад,
   ВложенныйЗапрос.Номенклатура КАК Номенклатура,
   ВложенныйЗапрос.СерияНоменклатуры КАК СерияНоменклатуры,
   ВложенныйЗапрос.ДокументОприходования КАК ДокументОприходования,
   ВложенныйЗапрос.КоличествоОстаток КАК КоличествоОстаток,
   ВложенныйЗапрос.КоличествоРезерв КАК КоличествоРезерв
ИЗ
   (ВЫБРАТЬ
       ПартииТоваровНаСкладахОстатки.Склад КАК Склад,
       ПартииТоваровНаСкладахОстатки.Номенклатура КАК Номенклатура,
       ПартииТоваровНаСкладахОстатки.СерияНоменклатуры КАК СерияНоменклатуры,
       ПартииТоваровНаСкладахОстатки.ДокументОприходования КАК ДокументОприходования,
       СУММА(ПартииТоваровНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстаток,
       СУММА(ВЫБОР
               КОГДА ВложенныйЗапрос.ДокументОприходования ЕСТЬ NULL
                   ТОГДА 0
               ИНАЧЕ ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0)
           КОНЕЦ) КАК КоличествоРезерв
   ИЗ
       РегистрНакопления.ПартииТоваровНаСкладах.Остатки КАК ПартииТоваровНаСкладахОстатки
           ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки КАК ТоварыВРезервеНаСкладахОстатки
           ПО ПартииТоваровНаСкладахОстатки.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
               И ПартииТоваровНаСкладахОстатки.Склад = ТоварыВРезервеНаСкладахОстатки.Склад
               И ПартииТоваровНаСкладахОстатки.СерияНоменклатуры = ТоварыВРезервеНаСкладахОстатки.СерияНоменклатуры
           ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
               ПартииТоваровНаСкладахОстатки.Склад КАК Склад,
               ПартииТоваровНаСкладахОстатки.Номенклатура КАК Номенклатура,
               ПартииТоваровНаСкладахОстатки.СерияНоменклатуры КАК СерияНоменклатуры,
               МИНИМУМ(ПартииТоваровНаСкладахОстатки.ДокументОприходования) КАК ДокументОприходования
           ИЗ
               РегистрНакопления.ПартииТоваровНаСкладах.Остатки КАК ПартииТоваровНаСкладахОстатки
           
           СГРУППИРОВАТЬ ПО
               ПартииТоваровНаСкладахОстатки.СерияНоменклатуры,
               ПартииТоваровНаСкладахОстатки.Склад,
               ПартииТоваровНаСкладахОстатки.Номенклатура) КАК ВложенныйЗапрос
           ПО ПартииТоваровНаСкладахОстатки.Склад = ВложенныйЗапрос.Склад
               И ПартииТоваровНаСкладахОстатки.СерияНоменклатуры = ВложенныйЗапрос.СерияНоменклатуры
               И ПартииТоваровНаСкладахОстатки.Номенклатура = ВложенныйЗапрос.Номенклатура
               И ПартииТоваровНаСкладахОстатки.ДокументОприходования = ВложенныйЗапрос.ДокументОприходования
   
   СГРУППИРОВАТЬ ПО
       ПартииТоваровНаСкладахОстатки.СерияНоменклатуры,
       ПартииТоваровНаСкладахОстатки.Склад,
       ПартииТоваровНаСкладахОстатки.ДокументОприходования,
       ПартииТоваровНаСкладахОстатки.Номенклатура) КАК ВложенныйЗапрос
ИТОГИ
   СУММА(КоличествоОстаток),
   СУММА(КоличествоРезерв)
ПО
   Склад,
   Номенклатура,
   СерияНоменклатуры,
   ДокументОприходования
42 КМ155
 
02.03.12
18:57
(41)  [Если всё равно по какому документу оприходования показывать резерв]
ты сравнял количество измерений
43 ad205
 
02.03.12
18:58
Это УТ тут не может не быть ДокументаОприходования, так что проверку на NULL можно и не делать, 1 все равно точно будет.
44 ad205
 
02.03.12
19:01
Всем спасибо. КМ155 отдельное и второе спасибо))))