Запрос: Нахождение даты, когда заказ покупателя был обработан Ключевые слова: РегистрНакопления, ОстаткиИОбороты, Периодичность, Остатки
Задача: найти дату, когда заказ покупателя был обработан, т.е. когда остаток по заказу стал равен сумме остатков по резервам и размещениям в заказах поставщикам или (если ни резервов, ни размещений не было) дате закрытия заказов.
Параметры &МаленькаяДата - рекомендуется указывать заведомо маленькую дату (но не раньше 1700 года - SQL-сервер выдаст ошибку)
ВЫБРАТЬ РАЗЛИЧНЫЕ
МИНИМУМ(ВЫБОР
КОГДА ЕСТЬNULL(ТаблицаРезерв.ПериодРезервирования, &МаленькаяДата) > ЕСТЬNULL(ТаблицаРазмещение.ПериодРазмещения, &МаленькаяДата)
ТОГДА ЕСТЬNULL(ТаблицаРезерв.ПериодРезервирования, ТаблицаРезерв.ПериодЗаказа)
ИНАЧЕ ЕСТЬNULL(ТаблицаРазмещение.ПериодРазмещения, ТаблицаРазмещение.ПериодЗаказа)
КОНЕЦ) КАК ПериодДоп,
ТаблицаРезерв.Номенклатура,
ТаблицаРезерв.ЗаказПокупателя
ИЗ
(ВЫБРАТЬ РАЗЛИЧНЫЕ
ЗаказыПокупателейОстаткиИОбороты.Период КАК ПериодЗаказа,
ДатаОстатковЗаказа.ПериодРазмещения КАК ПериодРазмещения,
ЗаказыПокупателейОстаткиИОбороты.Номенклатура КАК Номенклатура,
ЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя КАК ЗаказПокупателя,
ЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток КАК Заказано,
ДатаОстатковЗаказа.Размещено КАК Размещено,
ДатаОстатковЗаказа.РазмещеноНач КАК РазмещеноНач
ИЗ
РегистрНакопления.ЗаказыПокупателей.ОстаткиИОбороты(, , Регистратор, , {Номенклатура.* КАК Номенклатура, ЗаказПокупателя.* КАК ЗаказПокупателя}) КАК ЗаказыПокупателейОстаткиИОбороты
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
МАКСИМУМ(ЗаказыПокупателейОстаткиИОбороты.Период) КАК ПериодЗаказа1,
РазмещениеЗаказовПокупателейОстаткиИОбороты.Период КАК ПериодРазмещения,
РазмещениеЗаказовПокупателейОстаткиИОбороты.Номенклатура КАК Номенклатура,
РазмещениеЗаказовПокупателейОстаткиИОбороты.ЗаказПокупателя КАК ЗаказПокупателя,
РазмещениеЗаказовПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток КАК Размещено,
РазмещениеЗаказовПокупателейОстаткиИОбороты.КоличествоНачальныйОстаток КАК РазмещеноНач
ИЗ
РегистрНакопления.ЗаказыПокупателей.ОстаткиИОбороты(, , Регистратор, , {Номенклатура.* КАК Номенклатура, ЗаказПокупателя.* КАК ЗаказПокупателя}) КАК ЗаказыПокупателейОстаткиИОбороты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РазмещениеЗаказовПокупателей.ОстаткиИОбороты(, , Регистратор, , {Номенклатура.* КАК Номенклатура, ЗаказПокупателя.* КАК ЗаказПокупателя}) КАК РазмещениеЗаказовПокупателейОстаткиИОбороты
ПО ЗаказыПокупателейОстаткиИОбороты.Период <= РазмещениеЗаказовПокупателейОстаткиИОбороты.Период
И ЗаказыПокупателейОстаткиИОбороты.Номенклатура = РазмещениеЗаказовПокупателейОстаткиИОбороты.Номенклатура
И ЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя = РазмещениеЗаказовПокупателейОстаткиИОбороты.ЗаказПокупателя
ГДЕ
(НЕ РазмещениеЗаказовПокупателейОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг)
СГРУППИРОВАТЬ ПО
РазмещениеЗаказовПокупателейОстаткиИОбороты.Период,
РазмещениеЗаказовПокупателейОстаткиИОбороты.Номенклатура,
РазмещениеЗаказовПокупателейОстаткиИОбороты.ЗаказПокупателя,
РазмещениеЗаказовПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток,
РазмещениеЗаказовПокупателейОстаткиИОбороты.КоличествоНачальныйОстаток) КАК ДатаОстатковЗаказа
ПО ДатаОстатковЗаказа.ПериодЗаказа1 = ЗаказыПокупателейОстаткиИОбороты.Период
И ДатаОстатковЗаказа.Номенклатура = ЗаказыПокупателейОстаткиИОбороты.Номенклатура
И ДатаОстатковЗаказа.ЗаказПокупателя = ЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя) КАК ТаблицаРазмещение
ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
ЗаказыПокупателейОстаткиИОбороты.Период КАК ПериодЗаказа,
ДатаОстатковЗаказа.ПериодРезервирования КАК ПериодРезервирования,
ЗаказыПокупателейОстаткиИОбороты.Номенклатура КАК Номенклатура,
ЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя КАК ЗаказПокупателя,
ЗаказыПокупателейОстаткиИОбороты.КоличествоКонечныйОстаток КАК Заказано,
ДатаОстатковЗаказа.Зарезервировано КАК Зарезервировано,
ДатаОстатковЗаказа.ЗарезервированоНач КАК ЗарезервированоНач
ИЗ
РегистрНакопления.ЗаказыПокупателей.ОстаткиИОбороты(, , Регистратор, , {Номенклатура.* КАК Номенклатура, ЗаказПокупателя.* КАК ЗаказПокупателя}) КАК ЗаказыПокупателейОстаткиИОбороты
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
МАКСИМУМ(ЗаказыПокупателейОстаткиИОбороты.Период) КАК ПериодЗаказа1,
ТоварыВРезервеНаСкладахОстаткиИОбороты.Период КАК ПериодРезервирования,
ТоварыВРезервеНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
ТоварыВРезервеНаСкладахОстаткиИОбороты.ДокументРезерва КАК ЗаказПокупателя,
ТоварыВРезервеНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК Зарезервировано,
ТоварыВРезервеНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК ЗарезервированоНач
ИЗ
РегистрНакопления.ЗаказыПокупателей.ОстаткиИОбороты(, , Регистратор, , {Номенклатура.* КАК Номенклатура, ЗаказПокупателя.* КАК ЗаказПокупателя}) КАК ЗаказыПокупателейОстаткиИОбороты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.ОстаткиИОбороты(, , Регистратор, , {Номенклатура.* КАК Номенклатура, ДокументРезерва.* КАК ЗаказПокупателя}) КАК ТоварыВРезервеНаСкладахОстаткиИОбороты
ПО ЗаказыПокупателейОстаткиИОбороты.Период <= ТоварыВРезервеНаСкладахОстаткиИОбороты.Период
И ЗаказыПокупателейОстаткиИОбороты.Номенклатура = ТоварыВРезервеНаСкладахОстаткиИОбороты.Номенклатура
И ЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя = ТоварыВРезервеНаСкладахОстаткиИОбороты.ДокументРезерва
ГДЕ
(НЕ ТоварыВРезервеНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг)
СГРУППИРОВАТЬ ПО
ТоварыВРезервеНаСкладахОстаткиИОбороты.Период,
ТоварыВРезервеНаСкладахОстаткиИОбороты.Номенклатура,
ТоварыВРезервеНаСкладахОстаткиИОбороты.ДокументРезерва,
ТоварыВРезервеНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток,
ТоварыВРезервеНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток) КАК ДатаОстатковЗаказа
ПО ДатаОстатковЗаказа.ПериодЗаказа1 = ЗаказыПокупателейОстаткиИОбороты.Период
И ДатаОстатковЗаказа.Номенклатура = ЗаказыПокупателейОстаткиИОбороты.Номенклатура
И ДатаОстатковЗаказа.ЗаказПокупателя = ЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя) КАК ТаблицаРезерв
ПО ТаблицаРазмещение.ПериодЗаказа = ТаблицаРезерв.ПериодЗаказа
И ТаблицаРазмещение.Номенклатура = ТаблицаРезерв.Номенклатура
И ТаблицаРазмещение.ЗаказПокупателя = ТаблицаРезерв.ЗаказПокупателя
ГДЕ
ЕСТЬNULL(ТаблицаРазмещение.Заказано, ТаблицаРезерв.Заказано) = ЕСТЬNULL(ТаблицаРезерв.Зарезервировано, 0) + ЕСТЬNULL(ТаблицаРазмещение.Размещено, 0)
СГРУППИРОВАТЬ ПО
ТаблицаРезерв.Номенклатура,
ТаблицаРезерв.ЗаказПокупателя |