Книга знаний

1С:Предприятие / Объекты конфигурации / Регистры

Запрос: Нахождение даты, когда заказ покупателя был обработан

Автор статьи: monomo1
Последняя редакция №1 от 23.03.07
URL: http://kb.mista.ru/article.php?id=502

Ключевые слова: РегистрНакопления, ОстаткиИОбороты, Периодичность, Остатки


Задача: найти дату, когда заказ покупателя был обработан, т.е. когда остаток по заказу стал равен сумме остатков по резервам и размещениям в заказах поставщикам или (если ни резервов, ни размещений не было) дате закрытия заказов.
Параметры &МаленькаяДата - рекомендуется указывать заведомо маленькую дату (но не раньше 1700 года -  SQL-сервер выдаст ошибку)

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

СГРУППИРОВАТЬ ПО
    ТаблицаРезерв.Номенклатура,
    ТаблицаРезерв.ЗаказПокупателя

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика