Имя: Пароль:
1C
 
Оптимизация запроса
,
0 Darkvaneker
 
09.03.23
12:58
Здравствуйте, есть запрос который в среднем выполняется 2-10 секунд, хочу его оптимизировать, но попытки четны, заменил вложенный запрос на пакет он стал выполнятся в 2-3 раза дольше, заменил 2 точки на пакет еще в 2 раза.... толи советы с интернета подводят, толи я что-то делаю не так.
ВЫБРАТЬ
    ПродажиАвтомобилейОбороты.Автомобиль КАК Автомобиль,
    "Продажа" КАК Название,
    ПродажиАвтомобилейОбороты.Период КАК ДатаПродажи,
    NULL КАК Сделано,
    NULL КАК Рано,
    NULL КАК Упущено,
    NULL КАК Событие,
    NULL КАК Заявка,
    NULL КАК ЗаказНаряд,
    1 КАК Нумерация,
    ПродажиАвтомобилейОбороты.КоличествоОборот КАК Продано,
    ПродажиАвтомобилейОбороты.ПодразделениеКомпании КАК ПодразделениеКомпании,
    ПродажиАвтомобилейОбороты.Покупатель КАК Покупатель,
    ПродажиАвтомобилейОбороты.Регистратор.Организация КАК Организация
ПОМЕСТИТЬ Объединенный
ИЗ
    РегистрНакопления.ПродажиАвтомобилей.Обороты(&ДатаНачала, &ДатаОкончания, Регистратор, ) КАК ПродажиАвтомобилейОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикПрохожденияТО КАК ГрафикПрохожденияТО
        ПО ПродажиАвтомобилейОбороты.Автомобиль = ГрафикПрохожденияТО.Автомобиль
            И (ГрафикПрохожденияТО.ПрохождениеТО = ЗНАЧЕНИЕ(Справочник.ПрохождениеТО.Продажа))
            И (ГрафикПрохожденияТО.ДатаПродажи >= НАЧАЛОПЕРИОДА(ПродажиАвтомобилейОбороты.Период, ДЕНЬ))

ОБЪЕДИНИТЬ ВСЕ

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

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

ОБЪЕДИНИТЬ ВСЕ

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

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

ОБЪЕДИНИТЬ ВСЕ

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

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

ОБЪЕДИНИТЬ ВСЕ

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

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

ОБЪЕДИНИТЬ ВСЕ

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

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

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ПродажиАвтомобилейОбороты.Автомобиль,
    "ТО 6",
    ПродажиАвтомобилейОбороты.Период,
    ВЫБОР
        КОГДА ГрафикПрохожденияТО.ПрохождениеТО ЕСТЬ NULL
            ТОГДА ВЫБОР
                    КОГДА ЗаказНарядРаботы.Ссылка ЕСТЬ NULL
                        ТОГДА 0
                    ИНАЧЕ 1
                КОНЕЦ
        ИНАЧЕ ВЫБОР
                КОГДА ГрафикПрохожденияТО.ДатаФакт <> ДАТАВРЕМЯ(1, 1, 1)
                    ТОГДА 1
                ИНАЧЕ 0
            КОНЕЦ
    КОНЕЦ,
    ВЫБОР
        КОГДА ГрафикПрохожденияТО.ПрохождениеТО ЕСТЬ NULL
            ТОГДА ВЫБОР
                    КОГДА ЗаказНарядРаботы.Ссылка ЕСТЬ NULL
                        ТОГДА ВЫБОР
                                КОГДА ДОБАВИТЬКДАТЕ(ПродажиАвтомобилейОбороты.Период, ГОД, 6) >= &ГраницаУпущенных
                                    ТОГДА 1
                                ИНАЧЕ 0
                            КОНЕЦ
                    ИНАЧЕ 0
                КОНЕЦ
        ИНАЧЕ ВЫБОР
                КОГДА ГрафикПрохожденияТО.ДатаФакт <> ДАТАВРЕМЯ(1, 1, 1)
                    ТОГДА 0
                ИНАЧЕ ВЫБОР
                        КОГДА ГрафикПрохожденияТО.ДатаПлан >= &ГраницаУпущенных
                            ТОГДА 1
                        ИНАЧЕ 0
                    КОНЕЦ
            КОНЕЦ
    КОНЕЦ,
    ВЫБОР
        КОГДА ГрафикПрохожденияТО.ПрохождениеТО ЕСТЬ NULL
            ТОГДА ВЫБОР
                    КОГДА ЗаказНарядРаботы.Ссылка ЕСТЬ NULL
                        ТОГДА ВЫБОР
                                КОГДА ДОБАВИТЬКДАТЕ(ПродажиАвтомобилейОбороты.Перио
1 Darkvaneker
 
09.03.23
13:03
Запрос
ВЫБРАТЬ
    ПродажиАвтомобилейОбороты.Автомобиль КАК Автомобиль,
    "Продажа" КАК Название,
    ПродажиАвтомобилейОбороты.Период КАК ДатаПродажи,
    NULL КАК Сделано,
    NULL КАК Рано,
    NULL КАК Упущено,
    NULL КАК Событие,
    NULL КАК Заявка,
    NULL КАК ЗаказНаряд,
    1 КАК Нумерация,
    ПродажиАвтомобилейОбороты.КоличествоОборот КАК Продано,
    ПродажиАвтомобилейОбороты.ПодразделениеКомпании КАК ПодразделениеКомпании,
    ПродажиАвтомобилейОбороты.Покупатель КАК Покупатель,
    ПродажиАвтомобилейОбороты.Регистратор.Организация КАК Организация
ПОМЕСТИТЬ Объединенный
ИЗ
    РегистрНакопления.ПродажиАвтомобилей.Обороты(&ДатаНачала, &ДатаОкончания, Регистратор, ) КАК ПродажиАвтомобилейОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикПрохожденияТО КАК ГрафикПрохожденияТО
        ПО ПродажиАвтомобилейОбороты.Автомобиль = ГрафикПрохожденияТО.Автомобиль
            И (ГрафикПрохожденияТО.ПрохождениеТО = ЗНАЧЕНИЕ(Справочник.ПрохождениеТО.Продажа))
            И (ГрафикПрохожденияТО.ДатаПродажи >= НАЧАЛОПЕРИОДА(ПродажиАвтомобилейОбороты.Период, ДЕНЬ))

ОБЪЕДИНИТЬ ВСЕ

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Объединенный.Автомобиль КАК Автомобиль,
    Объединенный.Название КАК Название,
    Объединенный.Сделано КАК Сделано,
    Объединенный.Рано КАК Рано,
    Объединенный.Упущено КАК Упущено,
    Объединенный.Событие КАК Событие,
    Объединенный.Заявка КАК Заявка,
    Объединенный.ЗаказНаряд КАК ЗаказНаряд,
    Объединенный.Нумерация КАК Нумерация,
    Объединенный.Продано КАК Продано,
    Объединенный.ПодразделениеКомпании КАК ПодразделениеКомпании,
    Объединенный.Покупатель КАК Покупатель,
    Объединенный.Организация КАК Организация,
    Объединенный.Событие.Результат КАК СобытиеРезультат,
    Объединенный.ДатаПродажи КАК ДатаПродажи
ИЗ
    Объединенный КАК Объединенный


в нем 2 объединение выполняется 15 раз с разными параметрами
2 OldCondom
 
09.03.23
13:09
Начни с этого: https://its.1c.ru/db/metod8dev#content:5842:hdoc:vtable_join

По факту всрато очень много.
3 Галахад
 
гуру
09.03.23
13:13
Устал колесико крутить...
4 Darkvaneker
 
09.03.23
13:15
(3) извини, я протупил первый раз, и не могу отредактировать.
5 uPstart_
 
09.03.23
13:15
(0) (ЗаказНарядРаботы.Работа.ПрохождениеТО.Наименование = "ТО 1") все похожие на эту строки явно нужно переписать
6 Darkvaneker
 
09.03.23
13:18
(5) а как?
7 OldCondom
 
09.03.23
13:19
(6) на таблицы регистров мб? Без кучи обращений через точку, учитывая индексы.
8 Darkvaneker
 
09.03.23
13:20
(5) когда я попытался сделать пакет где были работы отобранные по условию ПрохождениеТО.Наименование = "ТО 1", то запрос стал только дольше выполняться... хоть и не значительно процентов 5 от общего времени.
9 OldCondom
 
09.03.23
13:24
(8) отдельную ВТ со списком работ, где прохождение "ТО 1".
Далее ЗаказНарядРаботы.Работа В(&СписокРаботСТО1)
10 ILM
 
гуру
09.03.23
13:24
1. Если два запроса к одному регистру, то почему бы ВЫБОР не применить?
2. Группировку делать во временной таблице.
3. Все условия делать в подзапросах, а не в соединениях.
4. Все Условие1 ИЛИ Условие2 замени на ВЫБРАТЬ ... Где Условие1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ... Где Условие2.
11 OldCondom
 
09.03.23
13:25
а еще лучше посмотри движения документа ЗаказНарядРаботы, там 100% нужная инфа есть
12 uPstart_
 
09.03.23
13:28
(8) Перепиши весь запрос через временные таблицы, и смотри по порядку какой запрос выполняется дольше всех и где большая лишняя выборка.
13 Donkey_hot
 
09.03.23
13:32
(0) Читать это все конечно не буду, но Регистратор.Организация порождает столько неявных левых соединений, сколько документов являются регистраторами регистра. Это может существенно замедлять.
14 Darkvaneker
 
09.03.23
13:37
(13) а как это можно исправить?
15 АНДР
 
09.03.23
13:52
(14) А у тебя точно по этому регистру больше одного типа документов может быть регистратором?
16 Смотрящий
 
09.03.23
13:52
Чет ты мил человек нахуевертил с запросом
17 Donkey_hot
 
09.03.23
13:52
(14) Если нужна организация от одного-двух типов документов, тогда используйте ВЫРАЗИТЬ. Если действительно ото всех, то можно задуматься о том, чтобы хранить ее непосредственно в регистре (в реквизитах).
18 lubitelxml
 
09.03.23
14:03
(0) самый главный тормоз у тебя - это соединения не с регистрами, а с документами. Регистры в разы быстрее работают в запросах
19 АНДР
 
09.03.23
14:10
(0), (1)
ГрафикПрохожденияТО.Автомобиль, ЗаказНарядРаботы.Ссылка.Автомобиль, ЗаявкаНаРемонтРаботы.Ссылка.Автомобиль - проиндексированы? Документы не делают движений по регистрам с нужными данными?
РегистрНакопления.ПродажиАвтомобилей.Обороты - Виртуальная таблица может портить план запроса. Явно собери ВТ до всех манипуляций.
РегистрСведений.ГрафикПрохожденияТО - какой процент записей с пустыми датами от общего количества записей и от количества записей удовлетворяющих условиям? Объединять 1 раз, все выбор когда считать в итоговом запросе.
20 mikecool
 
09.03.23
14:13
(18) думаешь - в скуле у регистров особые таблицы?
21 OldCondom
 
09.03.23
14:24
22 Darkvaneker
 
09.03.23
14:42
Отчет внешний и специально под него делать регистры не очень хочется.
В отчете хотят видеть особо никак не связанные данные для каждого проданного автомобиля за период его ТО, если делалось то заказ наряд, заявку если была и событие которое напоминало о том что пора если было, таких ТО 15 штук и для каждого свой пакет, чтоб сделать (9) надо еще 15 пакетов и каждый связывать со своим пакетом заказов. (10)  по 1 потому что надо выводить одну строку 15 раз с разными дополнительными данными. 3) так же придется делать еще 15 ВТ на каждое условие. 4) это дельно
В итоге из полезного можно только продажи вынести в отдельный пакет, убрать двойные условия через ИЛИ и использовать ВЫРАЗИТЬ (пока хз сколько раз)
23 Darkvaneker
 
09.03.23
14:43
Получилось вот так
ВЫБРАТЬ
    ПродажаАвтомобилейОбороты.Автомобиль,
    ВЫРАЗИТЬ(ПродажаАвтомобилейОбороты.Регистратор КАК Документ.РеализацияАвтомобилей).Организация КАК Организация,
    ПродажаАвтомобилейОбороты.Период,
    ПродажаАвтомобилейОбороты.КоличествоОборот КАК КоличествоОборот,
    ПродажаАвтомобилейОбороты.ПодразделениеКомпании КАК ПодразделениеКомпании,
    ПродажаАвтомобилейОбороты.Покупатель КАК Покупатель
ПОМЕСТИТЬ Продажа
ИЗ
    РегистрНакопления.ПродажиАвтомобилей.Обороты(&ДатаНачала, &ДатаОкончания, Регистратор, ) КАК ПродажаАвтомобилейОбороты
;

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

ОБЪЕДИНИТЬ ВСЕ

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Объединенный.Автомобиль КАК Автомобиль,
    Объединенный.Название КАК Название,
    Объединенный.Сделано КАК Сделано,
    Объединенный.Рано КАК Рано,
    Объединенный.Упущено КАК Упущено,
    Объединенный.Событие КАК Событие,
    Объединенный.Заявка КАК Заявка,
    Объединенный.ЗаказНаряд КАК ЗаказНаряд,
    Объединенный.Нумерация КАК Нумерация,
    Объединенный.Продано КАК Продано,
    Объединенный.ПодразделениеКомпании КАК ПодразделениеКомпании,
    Объединенный.Покупатель КАК Покупатель,
    Объединенный.Организация КАК Организация,
    Объединенный.Событие.Результат КАК СобытиеРезультат,
    Объединенный.ДатаПродажи КАК ДатаПродажи

ИЗ
    Объединенный КАК Объединенный
24 Darkvaneker
 
09.03.23
14:43
а самое весело что этот запрос выполняется в 2 раза дольше первого....
25 Darkvaneker
 
09.03.23
14:52
(18) это я как раз понимаю, но событие и заявка вообще ничего не двигают кроме состояния документа, а в заказ наряде можно попробовать, но будет ли толк от замены одного? пока все что я меня от начально почему только замедляет работу...
26 OldCondom
 
09.03.23
14:55
(24) пару раз выполни, статистики нет
27 Darkvaneker
 
09.03.23
14:57
(26) я так и сделал, на одних вводных старый  около 2000 мс, новый  около 5500
28 НЕА123
 
09.03.23
15:01
СУБД бы узнать какая... для начала.
29 OldCondom
 
09.03.23
15:07
ВЫБРАТЬ
    ПродажаАвтомобилейОбороты.Автомобиль,
    ВЫРАЗИТЬ(ПродажаАвтомобилейОбороты.Регистратор КАК Документ.РеализацияАвтомобилей).Организация КАК Организация,
    ПродажаАвтомобилейОбороты.Период,
    ПродажаАвтомобилейОбороты.КоличествоОборот КАК КоличествоОборот,
    ПродажаАвтомобилейОбороты.ПодразделениеКомпании КАК ПодразделениеКомпании,
    ПродажаАвтомобилейОбороты.Покупатель КАК Покупатель
ПОМЕСТИТЬ Продажа
ИЗ
    РегистрНакопления.ПродажиАвтомобилей.Обороты(&ДатаНачала, &ДатаОкончания, Регистратор, ) КАК ПродажаАвтомобилейОбороты
ИНДЕКСИРОВАТЬ ПО ПродажаАвтомобилейОбороты.Автомобиль
30 OldCondom
 
09.03.23
15:07
Зачем здесь соединение, если не используется?

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

ОБЪЕДИНИТЬ ВСЕ
31 Darkvaneker
 
09.03.23
15:18
(30) согласен, убрал, на общую скорость вообще не повлияло...
32 Darkvaneker
 
09.03.23
15:34
(30) виноват, это оказался самым дельным советом в статистике это дало примерно на 100 мс меньше) из 2000 это лучшее что удалось вообще сделать) я предполагаю что все дело только в количестве пакетов и использовании не регистров а документов, но как от этого уйти идей нет(
33 АНДР
 
09.03.23
16:40
(23) РегистрНакопления.ПродажиАвтомобилей.Обороты - зачем тут ВТ?

НАЧАЛОПЕРИОДА(Продажа.Период, ДЕНЬ)) - в ВТ.
(ВЫБОР
    КОГДА ГрафикПрохожденияТО.ДатаФакт <> ДАТАВРЕМЯ(1, 1, 1)
        ТОГДА ГрафикПрохожденияТО.ДатаФакт >= НАЧАЛОПЕРИОДА(Продажа.Период, ДЕНЬ)
    ИНАЧЕ ГрафикПрохожденияТО.ДатаФакт >= НАЧАЛОПЕРИОДА(Продажа.Период, ДЕНЬ)
КОНЕЦ) - зачем вообще это условие?

Ссылки на Документ.ЗаявкаНаРемонт и Документ.Событие получай из документа Документ.ЗаказНаряд

Индексы в ВТ на Дату и Автомобиль потерял.

P.S. Для всех 15 пакетов какой результат?
34 magicSan
 
10.03.23
07:10
(32) разбей запрос на части и смотри какая тормозит, далее её улучшай
35 МихаилМ
 
10.03.23
10:04
(0) классическая болезнь одинесника - путать получение и представление данных
36 mistеr
 
10.03.23
10:14
(4) Не твоя вина. Программисты этого сайта делают не для людей, а хз для кого..
37 АгентБезопасной Нацио
 
10.03.23
10:33
(0) "попытки четны"  делай еще и "нечетны"
38 Dmitry1c
 
10.03.23
10:34
(0), я правильно тебя понял, что ты ждешь что придут эксперты и выдадут тебе здесь оптимизированный запрос?
39 Dmitry1c
 
10.03.23
10:36
(38) +я уже не говорю про периодичность "регистратор"