Имя: Пароль:
1C
1С v8
Пакетные запросы и нахождение максимума
0 Pentosh
 
06.08.14
13:12
Здравствуйте, помогите пожалуйста найти ответ, на вопрос.
Есть обработка (Рабочее место диспетчера ГП), где на основании Внутреннего заказа, создаешь документ Диспетчеризация ГП с определенным видом (Плановое и Внеплановое изменение даты отгрузки). И когда создаешь второй документ, то в обработке заказ начинает отображаться дважды (на разные даты), чего быть не должно.
Нужно выбрать только последний/новый/свежий док с таким видом, и чтобы только с его данными работать (док Диспетчеризация ГП)

Код запроса:

"ВЫБРАТЬ
    |    ВложенныйЗапрос.ВнутреннийЗаказ
    |ПОМЕСТИТЬ ВложенныйЗапрос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
    |СГРУППИРОВАТЬ ПО
    |    ВложенныйЗапрос3.ВнутреннийЗаказ,
    |    ВложенныйЗапрос3.ДатаКонсолидации,
    |    ВложенныйЗапрос3.ВремяНачалаЗагрузкиТС,
    |    ВложенныйЗапрос3.РасчетнаяДатаОтгрузки,
    |    ВложенныйЗапрос3.ПлановоеСмещениеДатыОтгрузки,
    |ВложенныйЗапрос3.ВнеплановоеСмещениеДатыОтгрузкиСсылка.ОкончательнаяДатаИВремяЗагрузки,
    |ВложенныйЗапрос3.ВнеплановоеСмещениеДатыОтгрузкиСсылка.СмещениеДатыОтгрузки
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ВложенныйЗапрос4.ВнутреннийЗаказ
    |ИЗ
    |    ВложенныйЗапрос4 КАК ВложенныйЗапрос4
    |ГДЕ
    |    //ДатаКонсолидации//НАЧАЛОПЕРИОДА(ВложенныйЗапрос4.ДатаКонсолидации, ДЕНЬ) = &ДатаКонсолидации
    |    //ОкончательнаяДатаОтгрузки//НАЧАЛОПЕРИОДА(ВложенныйЗапрос4.ОкончательныеДатаИВремяОтгрузкиЗаказа, ДЕНЬ) = &ОкончательныеДатаИВремяОтгрузкиЗаказа
    |");


Все свои четные попытки убрал, оставил только первозданный вид (мб и не совсем), пробовал и функцию МАКСИМУМ и в блоке ИЗ вставлять доб под запросы в нужные строки, но результата нет.
1 Pentosh
 
08.08.14
11:36
Чет никто не заметил а вопрос все еще остро стоит.
Уточню, нужно выбрать последние документы в с определенным видом.
Непосредственно в коде в данном месте:
|ВЫБРАТЬ
    |    ВложенныйЗапрос1.ВнутреннийЗаказ,
    |    НАЧАЛОПЕРИОДА(ВложенныйЗапрос1.ВнутреннийЗаказ.Дата, ДЕНЬ) КАК ДатаКонсолидации,
    |    ЕСТЬNULL(Диспетчеризация_ПараметрыОтгрузки.ВремяНачалаЗагрузки, ДАТАВРЕМЯ(1, 1, 1)) КАК ВремяНачалаЗагрузкиТС,
    |    ЕСТЬNULL(Диспетчеризация_ПлановоеИзменениеДатыОтгрузки.РасчетнаяДатаОтгрузки, ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВложенныйЗапрос1.ВнутреннийЗаказ.Дата, ДЕНЬ), ДЕНЬ, &НормативПоОтгрузкеСДатыКонсолидации / 24)) КАК РасчетнаяДатаОтгрузки,
    |    ЕСТЬNULL(Диспетчеризация_ПлановоеИзменениеДатыОтгрузки.СмещениеДатыОтгрузки, 0) КАК ПлановоеСмещениеДатыОтгрузки,
    |    Диспетчеризация_ВнеплановоеСмещениеДатыОтгрузки.Ссылка КАК ВнеплановоеСмещениеДатыОтгрузкиСсылка
    |ПОМЕСТИТЬ ВложенныйЗапрос2
    |ИЗ
    |    ВложенныйЗапрос1 КАК ВложенныйЗапрос1
    |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.тдДиспетчеризацияЦепиПоставокГП КАК Диспетчеризация_ПараметрыОтгрузки
    |        ПО ВложенныйЗапрос1.ВнутреннийЗаказ = Диспетчеризация_ПараметрыОтгрузки.ВнутреннийЗаказ
    |            И (Диспетчеризация_ПараметрыОтгрузки.ВидОперации = ЗНАЧЕНИЕ(Перечисление.тдВидОперацииДиспетчеризация.ПараметрыОтгрузки))
    |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.тдДиспетчеризацияЦепиПоставокГП КАК Диспетчеризация_ПлановоеИзменениеДатыОтгрузки
    |        ПО ВложенныйЗапрос1.ВнутреннийЗаказ = Диспетчеризация_ПлановоеИзменениеДатыОтгрузки.ВнутреннийЗаказ
    |            И (Диспетчеризация_ПлановоеИзменениеДатыОтгрузки.ВидОперации = ЗНАЧЕНИЕ(Перечисление.тдВидОперацииДиспетчеризация.ПлановоеИзменениеДатыОтгрузки))
    |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.тдДиспетчеризацияЦепиПоставокГП КАК Диспетчеризация_ВнеплановоеСмещениеДатыОтгрузки
    |        ПО ВложенныйЗапрос1.ВнутреннийЗаказ = Диспетчеризация_ВнеплановоеСмещениеДатыОтгрузки.ВнутреннийЗаказ
    |            И (Диспетчеризация_ВнеплановоеСмещениеДатыОтгрузки.ВидОперации = ЗНАЧЕНИЕ(Перечисление.тдВидОперацииДиспетчеризация.ВнеплановоеСмещениеДатыОтгрузки))
    |{УПОРЯДОЧИТЬ ПО
    |    ВнеплановоеСмещениеДатыОтгрузкиСсылка.*}
    |;

Пробовал описать так:
|        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ПЕРВЫЕ 1
    |            ДиспетчерГП.Ссылка КАК Ссылка,
    |            ДиспетчерГП.ВнутреннийЗаказ КАК ВнутреннийЗаказ,
    |            ДиспетчерГП.РасчетнаяДатаОтгрузки КАК РасчетнаяДатаОтгрузки,
    |            ДиспетчерГП.СмещениеДатыОтгрузки КАК СмещениеДатыОтгрузки
    |        ИЗ
    |            Документ.тдДиспетчеризацияЦепиПоставокГП КАК ДиспетчерГП
    |                ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВложенныйЗапрос1 КАК ВложенныйЗапрос1
    |                ПО ДиспетчерГП.ВнутреннийЗаказ = ВложенныйЗапрос1.ВнутреннийЗаказ
    |        ГДЕ
    |            ДиспетчерГП.ВидОперации = ЗНАЧЕНИЕ(Перечисление.тдВидОперацииДиспетчеризация.ПлановоеИзменениеДатыОтгрузки)
    |    
    |        УПОРЯДОЧИТЬ ПО
    |            ДиспетчерГП.Дата УБЫВ) КАК Диспетчеризация_ПлановоеИзменениеДатыОтгрузки
    |        ПО ВложенныйЗапрос1.ВнутреннийЗаказ = Диспетчеризация_ПлановоеИзменениеДатыОтгрузки.ВнутреннийЗаказ
    
    |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ПЕРВЫЕ 1
    |            ДиспетчерГП.Ссылка КАК Ссылка,
    |            ДиспетчерГП.ВнутреннийЗаказ КАК ВнутреннийЗаказ
    |        ИЗ
    |            Документ.тдДиспетчеризацияЦепиПоставокГП КАК ДиспетчерГП
    |                ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВложенныйЗапрос1 КАК ВложенныйЗапрос1
    |                ПО ДиспетчерГП.ВнутреннийЗаказ = ВложенныйЗапрос1.ВнутреннийЗаказ
    |        ГДЕ
    |            ДиспетчерГП.ВидОперации = ЗНАЧЕНИЕ(Перечисление.тдВидОперацииДиспетчеризация.ВнеплановоеСмещениеДатыОтгрузки)
    |    
    |        УПОРЯДОЧИТЬ ПО
    |            ДиспетчерГП.Дата УБЫВ) КАК Диспетчеризация_ВнеплановоеСмещениеДатыОтгрузки
    |        ПО ВложенныйЗапрос1.ВнутреннийЗаказ = Диспетчеризация_ВнеплановоеСмещениеДатыОтгрузки.ВнутреннийЗаказ

Но результат в таком случае совсем плачевный, не выводит 80% документов вообще.


Помогите плиз, горит очаг.
2 Ёпрст
 
08.08.14
11:42
в первый запрос воткни так, для начала

"ВЫБРАТЬ Различные
    |    ВложенныйЗапрос.ВнутреннийЗаказ
    |ПОМЕСТИТЬ ВложенныйЗапрос1
3 Ёпрст
 
08.08.14
11:43
дальше не читал , ибо лень