Имя: Пароль:
1C
1C 7.7
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
все сделал спасибо участникам за помощь!
Независимо от того, куда вы едете — это в гору и против ветра!