|
v7: Прямой запрос выбрать первое поступление товара по всей номенклатуре | ☑ | ||
---|---|---|---|---|
0
PRO100 NigGaZ
02.08.13
✎
21:48
|
Не могу сообразить как выбрать из регистра ЗакзыЗаявки первое поступление для каждого товара по всей номенклатуре
На отдельный товар TOP 1 по группировке ДатаОтгрузки спасает |
|||
1
YHVVH
02.08.13
✎
21:53
|
товар, мин(датаотгрузки) групп по товар
а дальше выбирай все записи из регистра по товару и минимальной дате отгрузки |
|||
2
PRO100 NigGaZ
02.08.13
✎
22:02
|
Если брать мин(датаотгрузки) то он и будет выбирать минимальное это понятно, а что делать с количеством если суммировать нельзя?
SELECT ЗаказыОстатки.Номенклатура [Номенклатура $Справочник.Номенклатура] , NullIf($ЗаказПоставщику.ДатаОтгрузки, '17530101') ДатаОтгрузки , Sum(ЗаказыОстатки.КоличествоПриходОстаток) СуммаКоличествоПриходОстаток FROM $РегистрОстатки.Заказы(,,, (Номенклатура, ЗаказПоставщику), КоличествоПриход) AS ЗаказыОстатки LEFT OUTER JOIN $Документ.ЗаказПоставщику AS ЗаказПоставщику With (NOLOCK) ON ЗаказыОстатки.ЗаказПоставщику = ЗаказПоставщику.IDDOC GROUP BY ЗаказыОстатки.Номенклатура , $ЗаказПоставщику.ДатаОтгрузки ORDER BY ЗаказыОстатки.Номенклатура так выводит все поступления по каждому товару... |
|||
3
YHVVH
02.08.13
✎
22:15
|
теперь тебе надо выбрать записи только
те которые имеют датуотгрузки = минмальной |
|||
4
YHVVH
02.08.13
✎
22:16
|
минимальной для каждого товара разумеется
|
|||
5
PRO100 NigGaZ
02.08.13
✎
22:33
|
Все это можно сделать в запросе?
|
|||
6
YHVVH
02.08.13
✎
22:35
|
(5) да
|
|||
7
PRO100 NigGaZ
02.08.13
✎
22:45
|
"
|SELECT Номенклатура [Номенклатура $Справочник.Номенклатура] |, MIN(ДатаОтгрузки) ДатаОтгрузки |, WHEN ДатаОтгрузки = MIN(ДатаОтгрузки) THEN СуммаКоличествоПриходОстаток END СуммаКоличествоПриходОстаток |FROM ( |SELECT ЗаказыОстатки.Номенклатура [Номенклатура $Справочник.Номенклатура] | , NullIf($ЗаказПоставщику.ДатаОтгрузки, '17530101') ДатаОтгрузки | , Sum(ЗаказыОстатки.КоличествоПриходОстаток) СуммаКоличествоПриходОстаток |FROM $РегистрОстатки.Заказы(,,, | (Номенклатура, ЗаказПоставщику), | КоличествоПриход) AS ЗаказыОстатки | LEFT OUTER JOIN $Документ.ЗаказПоставщику AS ЗаказПоставщику With (NOLOCK) ON ЗаказыОстатки.ЗаказПоставщику = ЗаказПоставщику.IDDOC |GROUP BY ЗаказыОстатки.Номенклатура | , $ЗаказПоставщику.ДатаОтгрузки |ORDER BY ЗаказыОстатки.Номенклатура |) Итоги |GROUP BY Итоги.Номенклатура | , Итоги.ДатаОтгрузки | " каким то таким способом? |
|||
8
Тьма
02.08.13
✎
22:46
|
соединение с вложенным запросом. поиск первой отгрузки
///////// Запрос = СоздатьОбъект("ODBCRecordSet"); Запрос.УстановитьТекстовыйПараметр("НачДата",дата("01.01.2009")); Запрос.УстановитьТекстовыйПараметр("КонДата",рабочаядата()); ТекстЗапроса = " |SELECT | CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок, | РТ.SP1031 as [ТМЦ $Справочник.ТМЦ], | sum(РТ.SP1033) as Кво |FROM | _1SJourn Жур (NOLOCK) |INNER JOIN | DH1011 РШ ON РШ.IDDoc = Жур.IDDoc |INNER JOIN | DT1011 РТ ON РТ.IDDoc = Жур.IDDoc |INNER JOIN | (SELECT | MIN(CAST(LEFT(Жур1.Date_Time_IDDoc, 8) as DateTime)) as ДатаДок1, | РТ1.SP1031 as ТМЦ1 | FROM | _1SJourn Жур1 (NOLOCK) | INNER JOIN | DH1011 РШ1 ON РШ1.IDDoc = Жур1.IDDoc | INNER JOIN | DT1011 РТ1 ON РТ1.IDDoc = Жур1.IDDoc | WHERE | Жур1.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND | Жур1.IDDocDef = $ВидДокумента.РасходнаяНакладная AND | Жур1.Closed & 1 = 1 | Group By РТ1.SP1031 | ) as ВложенныйЗапрос ON ((ВложенныйЗапрос.ДатаДок1=CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime))) AND (ВложенныйЗапрос.ТМЦ1=РТ.SP1031) |WHERE | Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND | Жур.IDDocDef = $ВидДокумента.РасходнаяНакладная AND | Жур.Closed & 1 = 1 |Group By РТ.SP1031,CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime)"; тр=запрос.выполнитьинструкцию(ТекстЗапроса); тр.выбратьстроку(); |
|||
9
YHVVH
02.08.13
✎
22:52
|
(7) -> (8) как то так :-)
|
|||
10
Тьма
02.08.13
✎
23:03
|
+(8)Соединение с DH1011 лишнее, переделывал из другого запроса, пропустил.
|
|||
11
PRO100 NigGaZ
03.08.13
✎
00:15
|
У меня получается 2 запроса первый получает товар количество и документ
" |SELECT ЗаказыОстатки.Номенклатура [Номенклатура $Справочник.Номенклатура] | , NullIf($ЗаказПоставщику.ДатаОтгрузки, '17530101') ДатаОтгрузки | , Sum(ЗаказыОстатки.КоличествоПриходОстаток) СуммаКоличествоПриходОстаток |FROM $РегистрОстатки.Заказы(,,, | (Номенклатура, ЗаказПоставщику), | КоличествоПриход) AS ЗаказыОстатки | LEFT OUTER JOIN $Документ.ЗаказПоставщику AS ЗаказПоставщику With (NOLOCK) ON ЗаказыОстатки.ЗаказПоставщику = ЗаказПоставщику.IDDOC |GROUP BY ЗаказыОстатки.Номенклатура | , $ЗаказПоставщику.ДатаОтгрузки |ORDER BY ЗаказыОстатки.Номенклатура | " Второй получает товар и дату первого послупления " |SELECT ЗаказыОстатки.Номенклатура [Номенклатура $Справочник.Номенклатура] | , NullIf(Min($ЗаказПоставщику.ДатаОтгрузки), '17530101') МинимумДатаОтгрузки |FROM $РегистрОстатки.Заказы(,,, | (Номенклатура, ЗаказПоставщику),) AS ЗаказыОстатки | LEFT OUTER JOIN $Документ.ЗаказПоставщику AS ЗаказПоставщику With (NOLOCK) ON ЗаказыОстатки.ЗаказПоставщику = ЗаказПоставщику.IDDOC |GROUP BY ЗаказыОстатки.Номенклатура |ORDER BY ЗаказыОстатки.Номенклатура | " как к первому добавить второй чтобы получить именно те строки где дата из второго документа? :'( |
|||
12
Тьма
03.08.13
✎
09:00
|
//не уверен в синтаксисе, но попытка не пытка
" |SELECT ЗаказыОстатки.Номенклатура [Номенклатура $Справочник.Номенклатура] | , NullIf($ЗаказПоставщику.ДатаОтгрузки, '17530101') ДатаОтгрузки | , Sum(ЗаказыОстатки.КоличествоПриходОстаток) СуммаКоличествоПриходОстаток |FROM $РегистрОстатки.Заказы(,,, | (Номенклатура, ЗаказПоставщику), | КоличествоПриход) AS ЗаказыОстатки | LEFT OUTER JOIN $Документ.ЗаказПоставщику AS ЗаказПоставщику With (NOLOCK) ON ЗаказыОстатки.ЗаказПоставщику = ЗаказПоставщику.IDDOC |INNER JOIN | (SELECT ЗаказыОстатки.Номенклатура as Номенклатура | , NullIf(Min($ЗаказПоставщику.ДатаОтгрузки), '17530101') as МинимумДатаОтгрузки |FROM $РегистрОстатки.Заказы(,,, | (Номенклатура, ЗаказПоставщику),) AS ЗаказыОстатки | LEFT OUTER JOIN $Документ.ЗаказПоставщику AS ЗаказПоставщику With (NOLOCK) ON ЗаказыОстатки.ЗаказПоставщику = ЗаказПоставщику.IDDOC |GROUP BY ЗаказыОстатки.Номенклатура |ORDER BY ЗаказыОстатки.Номенклатура) as ВложенныйЗапрос |ON (ВложенныйЗапрос.МинимумДатаОтгрузки=NullIf($ЗаказПоставщику.ДатаОтгрузки, '17530101'))AND(ВложенныйЗапрос.Номенклатура=ЗаказыОстатки.Номенклатура) |GROUP BY ЗаказыОстатки.Номенклатура | , $ЗаказПоставщику.ДатаОтгрузки |ORDER BY ЗаказыОстатки.Номенклатура | " |
|||
13
PRO100 NigGaZ
03.08.13
✎
18:54
|
неа, не работает, просто я не знаю синтаксиса и порядка таких объединений, даже нет идей где ошибка :(
|
|||
14
hohol
03.08.13
✎
22:51
|
а функции максимум в sql нет?
|
|||
15
hohol
03.08.13
✎
22:52
|
вернее минимум?
|
|||
16
Злопчинский
03.08.13
✎
22:53
|
вроде есть
|
|||
17
hohol
03.08.13
✎
22:55
|
а чего тогда по товару не объединить и минимум даты вывести. Вроде должно сработать.
|
|||
18
hohol
03.08.13
✎
23:00
|
ну взять таблицу из регистра, объединить с таблицей из приходных накладных по товару и на дату в таблице поступлений функцию минимум.
|
|||
19
hohol
03.08.13
✎
23:00
|
в восьмерке такое вроде будет работать.
|
|||
20
Ёпрст
03.08.13
✎
23:03
|
(13) покажи свой текст запроса и описание ошибки
|
|||
21
Cthulhu
03.08.13
✎
23:04
|
а ордер бай позиция документа и фёст 1, ммм?..
|
|||
22
hohol
03.08.13
✎
23:06
|
(21) ну оно тебе и выберет одну запись.
|
|||
23
hohol
03.08.13
✎
23:07
|
А ему нужно для каждого товара, а не для одного.
|
|||
24
hohol
03.08.13
✎
23:18
|
ВЫБРАТЬ
МАКСИМУМ(ПоступлениеТоваровУслугТовары.Ссылка.Дата) КАК Дата, ЗаказПоставщикуТовары.Номенклатура, ЗаказПоставщикуТовары.ХарактеристикаНоменклатуры ИЗ Документ.ЗаказПоставщику.Товары КАК ЗаказПоставщикуТовары ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары ПО ЗаказПоставщикуТовары.Номенклатура = ПоступлениеТоваровУслугТовары.Номенклатура И ЗаказПоставщикуТовары.ХарактеристикаНоменклатуры = ПоступлениеТоваровУслугТовары.ХарактеристикаНоменклатуры ГДЕ ЗаказПоставщикуТовары.Ссылка.Дата МЕЖДУ &ДатаНачада И &ДатаОкончания СГРУППИРОВАТЬ ПО ЗаказПоставщикуТовары.Номенклатура, ЗаказПоставщикуТовары.ХарактеристикаНоменклатуры вот тебе запрос из восьмерки, может поможет. |
|||
25
hohol
03.08.13
✎
23:27
|
Вернее вот
ВЫБРАТЬ МинДаты.Номенклатура, МинДаты.ХарактеристикаНоменклатуры, МинДаты.Дата, ПоступлениеТоваровУслугТовары.Ссылка ИЗ (ВЫБРАТЬ ЗаказПоставщикуТовары.Номенклатура КАК Номенклатура, ЗаказПоставщикуТовары.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, МИНИМУМ(ПоступлениеТоваровУслугТовары.Ссылка.Дата) КАК Дата ИЗ Документ.ЗаказПоставщику.Товары КАК ЗаказПоставщикуТовары ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары ПО ЗаказПоставщикуТовары.Номенклатура = ПоступлениеТоваровУслугТовары.Номенклатура И ЗаказПоставщикуТовары.ХарактеристикаНоменклатуры = ПоступлениеТоваровУслугТовары.ХарактеристикаНоменклатуры ГДЕ ЗаказПоставщикуТовары.Ссылка.Дата МЕЖДУ &ДатаНачада И &ДатаОкончания СГРУППИРОВАТЬ ПО ЗаказПоставщикуТовары.Номенклатура, ЗаказПоставщикуТовары.ХарактеристикаНоменклатуры) КАК МинДаты ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары ПО МинДаты.Номенклатура = ПоступлениеТоваровУслугТовары.Номенклатура И МинДаты.ХарактеристикаНоменклатуры = ПоступлениеТоваровУслугТовары.ХарактеристикаНоменклатуры И МинДаты.Дата = ПоступлениеТоваровУслугТовары.Ссылка.Дата |
|||
26
hohol
03.08.13
✎
23:32
|
только я не с регистром а с таблицей заказов сделал. Можно заменить на таблицу остатков
|
|||
27
PRO100 NigGaZ
04.08.13
✎
10:47
|
(20) мой запрос (12)
|
|||
28
Ёпрст
05.08.13
✎
08:09
|
(27) текст ошибки какой?
|
|||
29
PRO100 NigGaZ
10.08.13
✎
11:30
|
Запрос >>> ODBCRecordset:ВыполнитьИнструкцию() error:
State 42000, native 170, message [Microsoft][ODBC SQL Server Driver][SQL Server]Line 2: Incorrect syntax near '.'. |
|||
30
PRO100 NigGaZ
10.08.13
✎
11:36
|
"
|SELECT ЗаказыОстатки.Номенклатура [Номенклатура $Справочник.Номенклатура] | , NullIf($ЗаказПоставщику.ДатаОтгрузки, '17530101') ДатаОтгрузки | , Sum(ЗаказыОстатки.КоличествоПриходОстаток) СуммаКоличествоПриходОстаток |FROM $РегистрОстатки.Заказы(,,, | (Номенклатура, ЗаказПоставщику), | КоличествоПриход) AS ЗаказыОстатки | LEFT OUTER JOIN $Документ.ЗаказПоставщику AS ЗаказПоставщику With (NOLOCK) ON ЗаказыОстатки.ЗаказПоставщику = ЗаказПоставщику.IDDOC |INNER JOIN | (SELECT ЗаказыОстатки.Номенклатура as Номенклатура | , NullIf(Min($ЗаказПоставщику.ДатаОтгрузки), '17530101') as МинимумДатаОтгрузки |FROM $РегистрОстатки.Заказы(,,, | (Номенклатура, ЗаказПоставщику),) AS ЗаказыОстатки | LEFT OUTER JOIN $Документ.ЗаказПоставщику AS ЗаказПоставщику With (NOLOCK) ON ЗаказыОстатки.ЗаказПоставщику = ЗаказПоставщику.IDDOC |GROUP BY ЗаказыОстатки.Номенклатура |ORDER BY ЗаказыОстатки.Номенклатура) as ВложенныйЗапрос |ON (ВложенныйЗапрос.МинимумДатаОтгрузки=NullIf($ЗаказПоставщику.ДатаОтгрузки, '17530101'))AND(ВложенныйЗапрос.Номенклатура=ЗаказыОстатки.Номенклатура) |GROUP BY ЗаказыОстатки.Номенклатура | , $ЗаказПоставщику.ДатаОтгрузки |ORDER BY ЗаказыОстатки.Номенклатура | " Запрос >>> ODBCRecordset:ВыполнитьИнструкцию() error: Meta name parser error: недопустимое значение параметра "$РегистрОстатки.Заказы" (4) |
|||
31
PRO100 NigGaZ
11.08.13
✎
15:27
|
"
|SELECT ЗаказыОстатки.Номенклатура [Номенклатура $Справочник.Номенклатура] | , NullIf($ЗаказПоставщику.ДатаОтгрузки, '17530101') ДатаОтгрузки | , Sum(ЗаказыОстатки.КоличествоПриходОстаток) СуммаКоличествоПриходОстаток |FROM (($РегистрОстатки.Заказы(,,, | (Номенклатура, ЗаказПоставщику), | КоличествоПриход) AS ЗаказыОстатки | LEFT OUTER JOIN $Документ.ЗаказПоставщику AS ЗаказПоставщику With (NOLOCK) ON ЗаказыОстатки.ЗаказПоставщику = ЗаказПоставщику.IDDOC) |INNER JOIN | (SELECT ЗаказыОстатки.Номенклатура as Номенклатура | , NullIf(Min($ЗаказПоставщику.ДатаОтгрузки), '17530101') as МинимумДатаОтгрузки |FROM $РегистрОстатки.Заказы(,,, | (Номенклатура, ЗаказПоставщику),) AS ЗаказыОстатки | LEFT OUTER JOIN $Документ.ЗаказПоставщику AS ЗаказПоставщику With (NOLOCK) ON ЗаказыОстатки.ЗаказПоставщику = ЗаказПоставщику.IDDOC |GROUP BY ЗаказыОстатки.Номенклатура) as ВложенныйЗапрос |ON (ВложенныйЗапрос.МинимумДатаОтгрузки=NullIf($ЗаказПоставщику.ДатаОтгрузки, '17530101')) AND(ВложенныйЗапрос.Номенклатура=ЗаказыОстатки.Номенклатура)) |GROUP BY ЗаказыОстатки.Номенклатура | , $ЗаказПоставщику.ДатаОтгрузки |ORDER BY ЗаказыОстатки.Номенклатура | " Запрос в QA работает, а в 1С пустой результат как так?! О_о |
|||
32
PRO100 NigGaZ
11.08.13
✎
16:20
|
все сделал спасибо участникам за помощь!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |