8.х Пакетные запросы и выбрать док с МАХ датой

Тема в разделе "Система компоновки данных (СКД)", создана пользователем Pentыch, 12 авг 2014.

  1. TopicStarter Overlay
    Pentыch
    Offline

    Pentыch Опытный в 1С

    Регистрация:
    18 сен 2013
    Сообщения:
    51
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте, есть проблема, не могу понять как сделать доработку.
    Есть обработка, рабочее место диспетчера ГП, в ней 2 области, первая - выводит внутренние заказы по дате, вторая - выводит документы созданные на основании внутреннего заказа. Бывают ситуации, когда создаются по 2 документа на основании, и они влияют на дату отгрузки, в обработке из за этого документ выводится на 2 разные даты. Нужно брать в учет только последние документы с переносом даты отгрузки, но я понять не могу как это реализовать в имеющемся запросе. Собственно вот он:

    Код:
    ВЫБРАТЬ Различные
        |    ВложенныйЗапрос.ВнутреннийЗаказ
        |ПОМЕСТИТЬ ВложенныйЗапрос1
        |ИЗ
        |    (ВЫБРАТЬ
        |        ВнутреннийЗаказДок.Ссылка КАК ВнутреннийЗаказ
        |    ИЗ
        |        Документ.ВнутреннийЗаказ КАК ВнутреннийЗаказДок
        |            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
        |            ПО ВнутреннийЗаказДок.Заказчик = ЗначенияСвойствОбъектов.Объект
        |                И (ЗначенияСвойствОбъектов.Свойство = &СвойствоРегион)
        |            ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗакрытиеВнутреннихЗаказов.Заказы КАК ЗакрытиеВнутреннихЗаказов
        |            ПО ЗакрытиеВнутреннихЗаказов.ВнутреннийЗаказ = ВнутреннийЗаказДок.Ссылка
        |    ГДЕ
        |        ВнутреннийЗаказДок.Проведен
        |        И ВнутреннийЗаказДок.Организация В (&Организация)
        |        И ВнутреннийЗаказДок.ВидЗаказа = ЗНАЧЕНИЕ(Перечисление.ВидыВнутреннегоЗаказа.НаСклад)
        |        И НЕ ЗначенияСвойствОбъектов.Значение ЕСТЬ NULL
        |        И (ВнутреннийЗаказДок.Подразделение В ИЕРАРХИИ (&Подразделение)
        |                ИЛИ ВнутреннийЗаказДок.Подразделение = &ОтделПродажМебели)
        |        И ЗакрытиеВнутреннихЗаказов.Ссылка ЕСТЬ NULL
        | 
        |    ОБЪЕДИНИТЬ ВСЕ
        | 
        |    ВЫБРАТЬ
        |        ВнутреннийЗаказДок.Ссылка
        |    ИЗ
        |        Документ.ВнутреннийЗаказ КАК ВнутреннийЗаказДок
        |            ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗакрытиеВнутреннихЗаказов.Заказы КАК ЗакрытиеВнутреннихЗаказов
        |            ПО ЗакрытиеВнутреннихЗаказов.ВнутреннийЗаказ = ВнутреннийЗаказДок.Ссылка
        |    ГДЕ
        |        ВнутреннийЗаказДок.Проведен
        |        И ВнутреннийЗаказДок.Организация В (&Организация)
        |        И ВнутреннийЗаказДок.ВидЗаказа = ЗНАЧЕНИЕ(Перечисление.ВидыВнутреннегоЗаказа.НаСклад)
        |        И (ВнутреннийЗаказДок.Подразделение В ИЕРАРХИИ (&Подразделение)
        |                ИЛИ ВнутреннийЗаказДок.Подразделение = &ОтделПродажМебели)
        |        И ВнутреннийЗаказДок.Заказчик В
        |                (ВЫБРАТЬ
        |                    СоставГруппДоступностиСкладов.Склад
        |                ИЗ
        |                    РегистрСведений.СоставГруппДоступностиСкладов КАК СоставГруппДоступностиСкладов
        |                ГДЕ
        |                    СоставГруппДоступностиСкладов.ГруппаДоступности В
        |                        (ВЫБРАТЬ
        |                            Константы.тдЦентральныйСкладГПХранение
        |                        ИЗ
        |                            Константы КАК Константы)
        |         
        |                ОБЪЕДИНИТЬ ВСЕ
        |         
        |                ВЫБРАТЬ
        |                    СоставГруппДоступностиСкладов.Склад
        |                ИЗ
        |                    РегистрСведений.СоставГруппДоступностиСкладов КАК СоставГруппДоступностиСкладов
        |                ГДЕ
        |                    СоставГруппДоступностиСкладов.ГруппаДоступности В
        |                        (ВЫБРАТЬ
        |                            Константы.тдЦентральныйСкладГПСервисный
        |                        ИЗ
        |                            Константы КАК Константы))
        |        И ЗакрытиеВнутреннихЗаказов.Ссылка ЕСТЬ NULL ) КАК ВложенныйЗапрос
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ВложенныйЗапрос1.ВнутреннийЗаказ,
        |    НАЧАЛОПЕРИОДА(ВложенныйЗапрос1.ВнутреннийЗаказ.Дата, ДЕНЬ) КАК ДатаКонсолидации,
        |    ЕСТЬNULL(Диспетчеризация_ПараметрыОтгрузки.ВремяНачалаЗагрузки, ДАТАВРЕМЯ(1, 1, 1)) КАК ВремяНачалаЗагрузкиТС,
        |    ЕСТЬNULL(Диспетчеризация_ПлановоеИзменениеДатыОтгрузки.РасчетнаяДатаОтгрузки, ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВложенныйЗапрос1.ВнутреннийЗаказ.Дата, ДЕНЬ), ДЕНЬ, &НормативПоОтгрузкеСДатыКонсолидации / 24)) КАК РасчетнаяДатаОтгрузки,
        |    ЕСТЬNULL(Диспетчеризация_ПлановоеИзменениеДатыОтгрузки.СмещениеДатыОтгрузки, 0) КАК ПлановоеСмещениеДатыОтгрузки,
        |    Диспетчеризация_ВнеплановоеСмещениеДатыОтгрузки.Ссылка КАК ВнеплановоеСмещениеДатыОтгрузкиСсылка
        |ПОМЕСТИТЬ ВложенныйЗапрос2
        |ИЗ
        |    ВложенныйЗапрос1 КАК ВложенныйЗапрос1
        |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.тдДиспетчеризацияЦепиПоставокГП КАК Диспетчеризация_ПараметрыОтгрузки
        |        ПО ВложенныйЗапрос1.ВнутреннийЗаказ = Диспетчеризация_ПараметрыОтгрузки.ВнутреннийЗаказ
        |            И (Диспетчеризация_ПараметрыОтгрузки.ВидОперации = ЗНАЧЕНИЕ(Перечисление.тдВидОперацииДиспетчеризация.ПараметрыОтгрузки))
        |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.тдДиспетчеризацияЦепиПоставокГП КАК Диспетчеризация_ПлановоеИзменениеДатыОтгрузки
        |        ПО ВложенныйЗапрос1.ВнутреннийЗаказ = Диспетчеризация_ПлановоеИзменениеДатыОтгрузки.ВнутреннийЗаказ
        |            И (Диспетчеризация_ПлановоеИзменениеДатыОтгрузки.ВидОперации = ЗНАЧЕНИЕ(Перечисление.тдВидОперацииДиспетчеризация.ПлановоеИзменениеДатыОтгрузки))
        |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.тдДиспетчеризацияЦепиПоставокГП КАК Диспетчеризация_ВнеплановоеСмещениеДатыОтгрузки
        |        ПО ВложенныйЗапрос1.ВнутреннийЗаказ = Диспетчеризация_ВнеплановоеСмещениеДатыОтгрузки.ВнутреннийЗаказ
        |            И (Диспетчеризация_ВнеплановоеСмещениеДатыОтгрузки.ВидОперации = ЗНАЧЕНИЕ(Перечисление.тдВидОперацииДиспетчеризация.ВнеплановоеСмещениеДатыОтгрузки))
        |{УПОРЯДОЧИТЬ ПО
        |    ВнеплановоеСмещениеДатыОтгрузкиСсылка.*}
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ВложенныйЗапрос2.ВнутреннийЗаказ КАК ВнутреннийЗаказ,
        |    ВложенныйЗапрос2.ДатаКонсолидации КАК ДатаКонсолидации,
        |    ВложенныйЗапрос2.ВремяНачалаЗагрузкиТС КАК ВремяНачалаЗагрузкиТС,
        |    ВложенныйЗапрос2.РасчетнаяДатаОтгрузки КАК РасчетнаяДатаОтгрузки,
        |    ВложенныйЗапрос2.ПлановоеСмещениеДатыОтгрузки КАК ПлановоеСмещениеДатыОтгрузки,
        |    ВложенныйЗапрос2.ВнеплановоеСмещениеДатыОтгрузкиСсылка КАК ВнеплановоеСмещениеДатыОтгрузкиСсылка
        |ПОМЕСТИТЬ ВложенныйЗапрос3
        |ИЗ
        |    ВложенныйЗапрос2 КАК ВложенныйЗапрос2
        |
        |СГРУППИРОВАТЬ ПО
        |    ВложенныйЗапрос2.ВнутреннийЗаказ,
        |    ВложенныйЗапрос2.ДатаКонсолидации,
        |    ВложенныйЗапрос2.ВремяНачалаЗагрузкиТС,
        |    ВложенныйЗапрос2.РасчетнаяДатаОтгрузки,
        |    ВложенныйЗапрос2.ПлановоеСмещениеДатыОтгрузки,
        |    ВложенныйЗапрос2.ВнеплановоеСмещениеДатыОтгрузкиСсылка
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ВложенныйЗапрос3.ВнутреннийЗаказ КАК ВнутреннийЗаказ,
        |    ВложенныйЗапрос3.ДатаКонсолидации КАК ДатаКонсолидации,
        |    ВложенныйЗапрос3.ВремяНачалаЗагрузкиТС КАК ВремяНачалаЗагрузкиТС,
        |    ВложенныйЗапрос3.РасчетнаяДатаОтгрузки КАК РасчетнаяДатаОтгрузки,
        |    ВложенныйЗапрос3.ПлановоеСмещениеДатыОтгрузки КАК ПлановоеСмещениеДатыОтгрузки,
        |    ЕСТЬNULL(ВложенныйЗапрос3.ВнеплановоеСмещениеДатыОтгрузкиСсылка.ОкончательнаяДатаИВремяЗагрузки, ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ВложенныйЗапрос3.РасчетнаяДатаОтгрузки, ДЕНЬ, ВложенныйЗапрос3.ПлановоеСмещениеДатыОтгрузки + ЕСТЬNULL(ВложенныйЗапрос3.ВнеплановоеСмещениеДатыОтгрузкиСсылка.СмещениеДатыОтгрузки, 0)), ЧАС, ЧАС(ВложенныйЗапрос3.ВремяНачалаЗагрузкиТС)), МИНУТА, МИНУТА(ВложенныйЗапрос3.ВремяНачалаЗагрузкиТС)), СЕКУНДА, &НормативПоЗагрузкеТС)) КАК ОкончательныеДатаИВремяОтгрузкиЗаказа
        |ПОМЕСТИТЬ ВложенныйЗапрос4
        |ИЗ
        |    ВложенныйЗапрос3 КАК ВложенныйЗапрос3
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ВложенныйЗапрос4.ВнутреннийЗаказ
        |ИЗ
        |    ВложенныйЗапрос4 КАК ВложенныйЗапрос4
        |ГДЕ
        |    //ДатаКонсолидации//НАЧАЛОПЕРИОДА(ВложенныйЗапрос4.ДатаКонсолидации, ДЕНЬ) = &ДатаКонсолидации
        |    //ОкончательнаяДатаОтгрузки//НАЧАЛОПЕРИОДА(ВложенныйЗапрос4.ОкончательныеДатаИВремяОтгрузкиЗаказа, ДЕНЬ) = &ОкончательныеДатаИВремяОтгрузкиЗаказа
        |");
    
    Все таинство происходит во втором запросе, т.е. мне нужно брать только первые документы с видом Внеплановое и Плановое изменение даты отгрузки. Пробовал вложенный запрос в левом соединении с "Выбрать первые" но не работает вообще, т.е. какие то документы в итоге есть, но не то.
    Предложить ставить пометку удаления на неактуальные документы пока не рассматривается, хочется понять как в запросе это сделать :)
    Помогите, пожалуйста, тупняк словил, а задача висит.
    Update: Конкретно кусок нужного кода:
    Код:
    |ВЫБРАТЬ
        |    ВложенныйЗапрос1.ВнутреннийЗаказ,
        |    НАЧАЛОПЕРИОДА(ВложенныйЗапрос1.ВнутреннийЗаказ.Дата, ДЕНЬ) КАК ДатаКонсолидации,
        |    ЕСТЬNULL(Диспетчеризация_ПараметрыОтгрузки.ВремяНачалаЗагрузки, ДАТАВРЕМЯ(1, 1, 1)) КАК ВремяНачалаЗагрузкиТС,
        |    ЕСТЬNULL(Диспетчеризация_ПлановоеИзменениеДатыОтгрузки.РасчетнаяДатаОтгрузки, ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВложенныйЗапрос1.ВнутреннийЗаказ.Дата, ДЕНЬ), ДЕНЬ, &НормативПоОтгрузкеСДатыКонсолидации / 24)) КАК РасчетнаяДатаОтгрузки,
        |    ЕСТЬNULL(Диспетчеризация_ПлановоеИзменениеДатыОтгрузки.СмещениеДатыОтгрузки, 0) КАК ПлановоеСмещениеДатыОтгрузки,
        |    Диспетчеризация_ВнеплановоеСмещениеДатыОтгрузки.Ссылка КАК ВнеплановоеСмещениеДатыОтгрузкиСсылка
        |ПОМЕСТИТЬ ВложенныйЗапрос2
        |ИЗ
        |    ВложенныйЗапрос1 КАК ВложенныйЗапрос1
        |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.тдДиспетчеризацияЦепиПоставокГП КАК Диспетчеризация_ПараметрыОтгрузки
        |        ПО ВложенныйЗапрос1.ВнутреннийЗаказ = Диспетчеризация_ПараметрыОтгрузки.ВнутреннийЗаказ
        |            И (Диспетчеризация_ПараметрыОтгрузки.ВидОперации = ЗНАЧЕНИЕ(Перечисление.тдВидОперацииДиспетчеризация.ПараметрыОтгрузки))
        |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.тдДиспетчеризацияЦепиПоставокГП КАК Диспетчеризация_ПлановоеИзменениеДатыОтгрузки
        |        ПО ВложенныйЗапрос1.ВнутреннийЗаказ = Диспетчеризация_ПлановоеИзменениеДатыОтгрузки.ВнутреннийЗаказ
        |            И (Диспетчеризация_ПлановоеИзменениеДатыОтгрузки.ВидОперации = ЗНАЧЕНИЕ(Перечисление.тдВидОперацииДиспетчеризация.ПлановоеИзменениеДатыОтгрузки))
        |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.тдДиспетчеризацияЦепиПоставокГП КАК Диспетчеризация_ВнеплановоеСмещениеДатыОтгрузки
        |        ПО ВложенныйЗапрос1.ВнутреннийЗаказ = Диспетчеризация_ВнеплановоеСмещениеДатыОтгрузки.ВнутреннийЗаказ
        |            И (Диспетчеризация_ВнеплановоеСмещениеДатыОтгрузки.ВидОперации = ЗНАЧЕНИЕ(Перечисление.тдВидОперацииДиспетчеризация.ВнеплановоеСмещениеДатыОтгрузки))
        |{УПОРЯДОЧИТЬ ПО
        |    ВнеплановоеСмещениеДатыОтгрузкиСсылка.*}
        |;
    
  2. TopicStarter Overlay
    Pentыch
    Offline

    Pentыch Опытный в 1С

    Регистрация:
    18 сен 2013
    Сообщения:
    51
    Симпатии:
    0
    Баллы:
    26
    Ну что, никто не поможет? на правах апа

Поделиться этой страницей