|
v7: ПрямойЗапрос: как правильно собрать все в кучу (Номенклатура, Штрихкод) | ☑ | ||
---|---|---|---|---|
0
Dolly_EV
31.03.14
✎
15:57
|
Есть табличка (#тзПрайс) поставщика с колонками 'ID' и 'EANCode'
Есть Спр.Номенклатура и Спр.ШтрихКод, подчиненный "Номенклатуре" (почти как в ТиС) Есть документы 'РасходнаяНакладная', 'РасходнаяРозница' ("+") и 'Возврат' ("-") Вопрос: Как одним запросом собрать все в кучу вида 'ДатаДок','ID','Кво'? Засада в том, что ШтрихКодов, подчиненных Спр.Номенклатура может быть несколько для одной позиции Номенклатуры. Вот такой запрос ТекстЗапроса=" |ВЫБРАТЬ | ВыборкаДок.ДатаДок КАК [ДатаДок $Дата] | ,ВыборкаДок.Товар КАК [Товар $Справочник.Номенклатура] | ,МАКСИМУМ($СпрШК.Штрихкод) КАК ШК | ,МАКСИМУМ(тзПрайс.ID) КАК ИД | ,СУММА(ВыборкаДок.Кво) КАК Кво |ИЗ("+ТекстЗапроса+") КАК ВыборкаДок |ЛЕВОЕ СОЕДИНЕНИЕ | Справочник.ШтрихКодСпр КАК СпрШК $nolock |ПО | $СпрШК.Владелец = ВыборкаДок.Товар |ЛЕВОЕ СОЕДИНЕНИЕ | #тзПрайс КАК тзПрайс |ПО | $СпрШК.ШтрихКод = тзПрайс.EANCode |СГРУППИРОВАТЬ | ВыборкаДок.ДатаДок, ВыборкаДок.ТТ, ВыборкаДок.Товар"; Возвращает неправильное Кво (увеличенное на кол-во дублей Штихкодов для товара) Пы.Сы. в серединке |ИЗ("+ТекстЗапроса+") КАК ВыборкаДок ТекстЗапроса = запрос к документам и их ТЧ через UNION ALL |
|||
1
Dolly_EV
31.03.14
✎
15:59
|
вот ДенисЧ мне сейчас поможет))
|
|||
2
AntonU
31.03.14
✎
16:39
|
Мне кажется, это v8 -)))
|
|||
3
Dolly_EV
31.03.14
✎
16:43
|
(2) не, это V7, класс "ПрямойЗапрос", да не суть важно. Тут у меня с логикой проблемы :-(
|
|||
4
viktor_vv
31.03.14
✎
16:44
|
"ШтрихКодов, подчиненных Спр.Номенклатура может быть несколько
для одной позиции Номенклатуры." имеется ввиду одинаковых штрихкодов может быть несколько для одной номенклатуры? |
|||
5
viktor_vv
31.03.14
✎
16:45
|
(4)+ Если да и все равно какой элемент справочника Шрихкодов возьместя, то загони вначале вопроменную таблицу справочник штрихкодов, скгруппированный по владельцу и штрихкоду и максимум(по ссылке).
|
|||
6
viktor_vv
31.03.14
✎
16:46
|
* во временную таблицу
|
|||
7
КонецЦикла
31.03.14
✎
16:47
|
Штрихкод любой что ли?
Базовая единица есть? |
|||
8
КонецЦикла
31.03.14
✎
16:49
|
Зачем выводить ШК если он есть в прайсе и по нему соединение?
|
|||
9
viktor_vv
31.03.14
✎
16:52
|
(8) Это он скорее всего соотвествие хочет получить Товар в базе и ID в прайсе.
|
|||
10
ikea
31.03.14
✎
16:52
|
(0) На величину Кво количество штрих-кодов никак не влияет. У тебя группировка по реквизитам документа и только потом соединение с сгруппированной выборкой.
|
|||
11
КонецЦикла
31.03.14
✎
16:53
|
(10) Если бы он группировал во вложенном запросе или во временной таблице - таки да...
|
|||
12
akaBrr
31.03.14
✎
17:01
|
(11) Вот собственно и решение
|
|||
13
Дык ё
31.03.14
✎
17:23
|
(11) при такой структуре можно и без группировки засада будет только, если одной номенклатуре соответствует несколько ID
|
|||
14
Dolly_EV
01.04.14
✎
03:28
|
(9) Это и хочу, да.
(13) даже две засады: несколько ШК для одного Товара и (теоретически) несколько ID для одного ШК. в общем связать надо Товар с тзПрайс через Спр.Шк и EANCode |
|||
15
Dolly_EV
01.04.14
✎
05:06
|
Все, разобрался...вот так взлетело:
ТекстЗапроса=" |ВЫБРАТЬ | ВыборкаДок.ДатаДок КАК [ДатаДок $Дата] | ,ВыборкаДок.Товар КАК [Товар $Справочник.Номенклатура] | ,МАКСИМУМ(СпрШК.Штрихкод) КАК ШК | ,МАКСИМУМ(тзПрайс.ID) КАК ИД | ,СУММА(ВыборкаДок.Кво) КАК Кво |ИЗ("+ТекстЗапроса+") КАК ВыборкаДок |ЛЕВОЕ СОЕДИНЕНИЕ | (ВЫБРАТЬ | $СпрШК.Владелец КАК Товар | ,МАКСИМУМ($СпрШК.Штрихкод) КАК Штрихкод | ИЗ Справочник.ШтрихКодСпр КАК СпрШК $nolock | ГДЕ 1000=1000 | СГРУППИРОВАТЬ $СпрШК.Владелец) КАК СпрШК |ПО | СпрШК.Товар = ВыборкаДок.Товар |ЛЕВОЕ СОЕДИНЕНИЕ | #тзПрайс КАК тзПрайс |ПО | СпрШК.ШтрихКод = тзПрайс.EANCode |СГРУППИРОВАТЬ | ВыборкаДок.ДатаДок, ВыборкаДок.ТТ, ВыборкаДок.Товар"; Соответственно, если тзПрайс не уникальна по 'EANCode' - ее тоже в подзапрос. Но остается один большой минус: МАКСИМУМ($СпрШК.Штрихкод) вернет один бОльший ШК. А если это не тот ШК, который нужен для поиска по 'EANCode' ? :-( |
|||
16
Dolly_EV
01.04.14
✎
13:36
|
+(15)
Вот так будет совсем правильно: ТекстЗапроса=" |ВЫБРАТЬ | ВыборкаДок.ДатаДок КАК [ДатаДок $Дата] | ,ВыборкаДок.ТТ КАК [ТТ $Справочник.ТоргТочки] | ,МАКСИМУМ(ВыборкаДок.Контр_ИННКПП) КАК Контр_ИННКПП | ,МАКСИМУМ(ВыборкаДок.ТТ_КПП) КАК ТТ_КПП | ,МАКСИМУМ(ВыборкаДок.АдресТТ) КАК АдресТТ | ,ВыборкаДок.Товар КАК [Товар $Справочник.Номенклатура] |-- ,МАКСИМУМ(СпрШК.Штрихкод) КАК ШК | ,МАКСИМУМ(СпрШК.ИД) КАК ИД | ,СУММА(ВыборкаДок.Кво) КАК Кво |ИЗ("+ТекстЗапроса+") КАК ВыборкаДок |ЛЕВОЕ СОЕДИНЕНИЕ | (ВЫБРАТЬ | $СпрШК.Владелец КАК Товар | ,МАКСИМУМ($СпрШК.Штрихкод) КАК Штрихкод | ,МАКСИМУМ(тзПрайс.ID) КАК ИД | ИЗ Справочник.ШтрихКодСпр КАК СпрШК $nolock | ЛЕВОЕ СОЕДИНЕНИЕ | #тзПрайс КАК тзПрайс | ПО $СпрШК.ШтрихКод = тзПрайс.EANCode | ГДЕ 1000=1000 | СГРУППИРОВАТЬ $СпрШК.Владелец) КАК СпрШК |ПО | СпрШК.Товар = ВыборкаДок.Товар |СГРУППИРОВАТЬ | ВыборкаДок.ДатаДок, ВыборкаДок.ТТ, ВыборкаДок.Товар"; |
|||
17
Dolly_EV
01.04.14
✎
13:38
|
(9)(11) @ viktor_vv, КонецЦикла
Спасибо за пинок в нужном направлении! |
|||
18
dk
01.04.14
✎
14:00
|
может и не критично, но я бы поменял все левые на внутренние соединения
|
|||
19
Dolly_EV
01.04.14
✎
14:14
|
(18) не, на внутр не надо. Мне надо, чтобы товар, по которому не найден ИД из тзПрайс, тоже отображался в итоговой таблице
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |