Подскажите, пожалуйста, какой должен быть запрос к документам «ЗаказПоставщику» и «ПоступлениеТоваровУслуг» чтобы получить отчёт в виде:
Номенклатура, Код, ДатаПоследнегоЗаказа, КоличествоПоследнегоЗаказа, СуммаПоследнегоЗаказа, ДатаПоследнегоПоступления, КоличествоПоследнегоПоступления, СуммаПоследнегоПоступления
Должно быть в одну строку для списка номенклатуры по списку складов
Заранее спасибо за помощь.
Если имеется в виду последний документ по дате то так как в примере ниже, если документ последний в принципе - то брать максимум по ссылке.
P.S. Ещё я бы использовал не документы а регистры накопления ЗаказыПоставщикам, Закупки и т.п.
ВЫБРАТЬ РАЗРЕШЕННЫЕ
СпрНоменклатура.Ссылка КАК Номенклатура,
МАКСИМУМ(ЕСТЬNULL(ТоварыЗаказа.Ссылка.Дата, &ПустаяДата)) КАК ДатаПослЗаказа,
МАКСИМУМ(ЕСТЬNULL(ТоварыПоступления.Ссылка.Дата, &ПустаяДата)) КАК ДатаПослПоступления
ПОМЕСТИТЬ ВтПоследниеДокументы
ИЗ
Справочник.Номенклатура КАК СпрНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПоставщику.Товары КАК ТоварыЗаказа
ПО СпрНоменклатура.Ссылка = ТоварыЗаказа.Номенклатура
И ТоварыЗаказа.Ссылка.Проведен = ИСТИНА
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ТоварыПоступления
ПО СпрНоменклатура.Ссылка = ТоварыПоступления.Номенклатура
И ТоварыПоступления.Ссылка.Проведен = ИСТИНА
ГДЕ
СпрНоменклатура.Ссылка В ИЕРАРХИИ(&ГруппаНоменклатуры)
СГРУППИРОВАТЬ ПО
СпрНоменклатура.Ссылка
;
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ВтПоследниеДокументы.Номенклатура,
ВтПоследниеДокументы.Номенклатура.Код КАК Код,
ВтПоследниеДокументы.ДатаПослЗаказа КАК ДатаЗаказа,
ЕСТЬNULL(ЗаказПоставщикуТовары.Сумма, 0) КАК СуммаЗаказа,
ЕСТЬNULL(ЗаказПоставщикуТовары.Количество, 0) КАК КоличествоЗаказа,
ВтПоследниеДокументы.ДатаПослПоступления КАК ДатаПоступления,
ЕСТЬNULL(ПоступлениеТовары.Сумма, 0) КАК СуммаДокумента,
ЕСТЬNULL(ПоступлениеТовары.Количество, 0) КАК КоличествоДокумента
ИЗ
ВтПоследниеДокументы КАК ВтПоследниеДокументы
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПоставщику.Товары КАК ЗаказПоставщикуТовары
ПО ВтПоследниеДокументы.ДатаПослЗаказа = ЗаказПоставщикуТовары.Ссылка.Дата
И ВтПоследниеДокументы.Номенклатура = ЗаказПоставщикуТовары.Номенклатура
И ЗаказПоставщикуТовары.Ссылка.Проведен = ИСТИНА
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТовары
ПО ВтПоследниеДокументы.ДатаПослПоступления = ПоступлениеТовары.Ссылка.Дата
И ВтПоследниеДокументы.Номенклатура = ПоступлениеТовары.Номенклатура
И ПоступлениеТовары.Ссылка.Проведен = ИСТИНА
ВЫБРАТЬ РАЗРЕШЕННЫЕ
СпрНоменклатура.Ссылка КАК Номенклатура,
МАКСИМУМ(ЕСТЬNULL(ТоварыЗаказа.Ссылка.Дата, &ПустаяДата)) КАК ДатаПослЗаказа,
МАКСИМУМ(ЕСТЬNULL(ТоварыПоступления.Ссылка.Дата, &ПустаяДата)) КАК ДатаПослПоступления
ПОМЕСТИТЬ ВтПоследниеДокументы
ИЗ
Справочник.Номенклатура КАК СпрНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПоставщику.Товары КАК ТоварыЗаказа
ПО СпрНоменклатура.Ссылка = ТоварыЗаказа.Номенклатура
И ТоварыЗаказа.Ссылка.Проведен = ИСТИНА
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ТоварыПоступления
ПО СпрНоменклатура.Ссылка = ТоварыПоступления.Номенклатура
И ТоварыПоступления.Ссылка.Проведен = ИСТИНА
ГДЕ
СпрНоменклатура.Ссылка В ИЕРАРХИИ(&ГруппаНоменклатуры)
СГРУППИРОВАТЬ ПО
СпрНоменклатура.Ссылка
;
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ВтПоследниеДокументы.Номенклатура,
ВтПоследниеДокументы.Номенклатура.Код КАК Код,
ВтПоследниеДокументы.ДатаПослЗаказа КАК ДатаЗаказа,
ЕСТЬNULL(ЗаказПоставщикуТовары.Сумма, 0) КАК СуммаЗаказа,
ЕСТЬNULL(ЗаказПоставщикуТовары.Количество, 0) КАК КоличествоЗаказа,
ВтПоследниеДокументы.ДатаПослПоступления КАК ДатаПоступления,
ЕСТЬNULL(ПоступлениеТовары.Сумма, 0) КАК СуммаДокумента,
ЕСТЬNULL(ПоступлениеТовары.Количество, 0) КАК КоличествоДокумента
ИЗ
ВтПоследниеДокументы КАК ВтПоследниеДокументы
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПоставщику.Товары КАК ЗаказПоставщикуТовары
ПО ВтПоследниеДокументы.ДатаПослЗаказа = ЗаказПоставщикуТовары.Ссылка.Дата
И ВтПоследниеДокументы.Номенклатура = ЗаказПоставщикуТовары.Номенклатура
И ЗаказПоставщикуТовары.Ссылка.Проведен = ИСТИНА
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТовары
ПО ВтПоследниеДокументы.ДатаПослПоступления = ПоступлениеТовары.Ссылка.Дата
И ВтПоследниеДокументы.Номенклатура = ПоступлениеТовары.Номенклатура
И ПоступлениеТовары.Ссылка.Проведен = ИСТИНА
Т.е. учитывать при выводе последнего заказа не только заказ поставщика, но и внутренний заказ? или отдельными колонками?
! | Правила, п.13 |
наверно что-то вроде этого, запрос не самый оптимальный + возможно задвоение строк если есть документы проведенные в одну и ту же секунду
ВЫБРАТЬ РАЗРЕШЕННЫЕ
СпрНоменклатура.Ссылка КАК Номенклатура,
МАКСИМУМ(ЕСТЬNULL(ЗаказыПоставщикам.Период, &ПустаяДата)) КАК ДатаПослЗаказа,
МАКСИМУМ(ЕСТЬNULL(ПоступленияТоваров.Период, &ПустаяДата)) КАК ДатаПослПоступления,
МАКСИМУМ(ЕСТЬNULL(ВнутренниеЗаказы.Период, &ПустаяДата)) КАК ДатаПослВнутреннегоЗаказа,
МАКСИМУМ(ЕСТЬNULL(ПеремещенияТоваров.Период, &ПустаяДата)) КАК ДатаПослПеремещения
ПОМЕСТИТЬ ВтПоследниеДокументы
ИЗ
Справочник.Номенклатура КАК СпрНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыПоставщикам.Обороты(&НачалоПериода, &КонецПериода, Регистратор, Номенклатура В ИЕРАРХИИ (&ГруппаНоменклатуры)) КАК ЗаказыПоставщикам
ПО СпрНоменклатура.Ссылка = ЗаказыПоставщикам.Номенклатура
И (ЗаказыПоставщикам.Регистратор ССЫЛКА Документ.ЗаказПоставщику)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыПоставщикам.Обороты(&НачалоПериода, &КонецПериода, Регистратор, Номенклатура В ИЕРАРХИИ (&ГруппаНоменклатуры)) КАК ПоступленияТоваров
ПО (СпрНоменклатура.Ссылка = ЗаказыПоставщикам.Номенклатура)
И (ПоступленияТоваров.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВнутренниеЗаказы.Обороты(&НачалоПериода, &КонецПериода, Регистратор, Номенклатура В ИЕРАРХИИ (&ГруппаНоменклатуры)) КАК ВнутренниеЗаказы
ПО СпрНоменклатура.Ссылка = ВнутренниеЗаказы.Номенклатура
И (ВнутренниеЗаказы.Регистратор ССЫЛКА Документ.ВнутреннийЗаказ)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВнутренниеЗаказы.Обороты(&НачалоПериода, &КонецПериода, Регистратор, Номенклатура В ИЕРАРХИИ (&ГруппаНоменклатуры)) КАК ПеремещенияТоваров
ПО (СпрНоменклатура.Ссылка = ВнутренниеЗаказы.Номенклатура)
И (ПеремещенияТоваров.Регистратор ССЫЛКА Документ.ПеремещениеТоваров)
ГДЕ
СпрНоменклатура.ЭтоГруппа = ЛОЖЬ
И СпрНоменклатура.Ссылка В ИЕРАРХИИ(&ГруппаНоменклатуры)
СГРУППИРОВАТЬ ПО
СпрНоменклатура.Ссылка
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ВтПоследниеДокументы.Номенклатура,
ВтПоследниеДокументы.Номенклатура.Код КАК Код,
ВтПоследниеДокументы.ДатаПослЗаказа КАК ДатаЗаказаПоставщика,
ЕСТЬNULL(ЗаказыПоставщикам.СуммаВзаиморасчетовПриход, 0) КАК СуммаЗаказаПоставщика,
ЕСТЬNULL(ЗаказыПоставщикам.КоличествоПриход, 0) КАК КоличествоЗаказаПоставщика,
ВтПоследниеДокументы.ДатаПослПоступления КАК ДатаПоступления,
ЕСТЬNULL(ПоступленияТоваров.СуммаВзаиморасчетовРасход, 0) КАК СуммаПоступления,
ЕСТЬNULL(ПоступленияТоваров.КоличествоРасход, 0) КАК КоличествоПоступления,
ВтПоследниеДокументы.ДатаПослВнутреннегоЗаказа КАК ДатаВнутреннегоЗаказа,
ЕСТЬNULL(ВнутренниеЗаказы.КоличествоПриход, 0) КАК КоличествоВнутреннегоЗаказа,
ВтПоследниеДокументы.ДатаПослПеремещения КАК ДатаПеремещения,
ЕСТЬNULL(ПеремещенияТоваров.КоличествоРасход, 0) КАК КоличествоПеремещения
ИЗ
ВтПоследниеДокументы КАК ВтПоследниеДокументы
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыПоставщикам.Обороты(&НачалоПериода, &КонецПериода, Регистратор, Номенклатура В ИЕРАРХИИ (&ГруппаНоменклатуры)) КАК ЗаказыПоставщикам
ПО ВтПоследниеДокументы.ДатаПослЗаказа = ЗаказыПоставщикам.Период
И ВтПоследниеДокументы.Номенклатура = ЗаказыПоставщикам.Номенклатура
И (ЗаказыПоставщикам.Регистратор ССЫЛКА Документ.ЗаказПоставщику)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыПоставщикам.Обороты(&НачалоПериода, &КонецПериода, Регистратор, Номенклатура В ИЕРАРХИИ (&ГруппаНоменклатуры)) КАК ПоступленияТоваров
ПО ВтПоследниеДокументы.ДатаПослПоступления = ПоступленияТоваров.Период
И ВтПоследниеДокументы.Номенклатура = ПоступленияТоваров.Номенклатура
И (ПоступленияТоваров.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВнутренниеЗаказы.Обороты(&НачалоПериода, &КонецПериода, Регистратор, Номенклатура В ИЕРАРХИИ (&ГруппаНоменклатуры)) КАК ВнутренниеЗаказы
ПО ВтПоследниеДокументы.ДатаПослВнутреннегоЗаказа = ВнутренниеЗаказы.Период
И ВтПоследниеДокументы.Номенклатура = ВнутренниеЗаказы.Номенклатура
И (ВнутренниеЗаказы.Регистратор ССЫЛКА Документ.ВнутреннийЗаказ)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВнутренниеЗаказы.Обороты(&НачалоПериода, &КонецПериода, Регистратор, Номенклатура В ИЕРАРХИИ (&ГруппаНоменклатуры)) КАК ПеремещенияТоваров
ПО ВтПоследниеДокументы.ДатаПослПеремещения = ПеремещенияТоваров.Период
И ВтПоследниеДокументы.Номенклатура = ПеремещенияТоваров.Номенклатура
И (ПеремещенияТоваров.Регистратор ССЫЛКА Документ.ПеремещениеТоваров)
Пустую дату я передавал для себя, чтобы мне надпись "NULL" глаза в консоли не мозолила.
Передавать можно или список или группу или вообще тупо одну номенклатуру - не принципиально.
Ускорить его можно наверно только путем сокращения периода поиска, т.е. параметрами
&НачалоПериода
и &КонецПериода
&НачалоПериода
и &КонецПериода
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua