8.х И снова оптимизация запроса

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Inonia, 19 авг 2016.

  1. TopicStarter Overlay
    Inonia
    Offline

    Inonia

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

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

    ВЫБРАТЬ
    ГОД(ЗаказыНаПроизводство.Период),
    МЕСЯЦ(ЗаказыНаПроизводство.Период),
    ЗаказыНаПроизводство.Подразделение,
    ЗаказыНаПроизводство.Номенклатура,
    ЗаказыНаПроизводство.ХарактеристикаНоменклатуры,
    ЗаказыНаПроизводство.Количество * -1,
    ЗаказыНаПроизводство.Регистратор
    ИЗ
    РегистрНакопления.ЗаказыНаПроизводство КАК ЗаказыНаПроизводство
    ГДЕ
    ЗаказыНаПроизводство.Период >= &НачалоПериода
    И ЗаказыНаПроизводство.Период < &КонецПериода
    И ЗаказыНаПроизводство.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
    И ЗаказыНаПроизводство.Регистратор ССЫЛКА Документ.ЗакрытиеЗаказовНаПроизводство
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ПрограммаЦехаБезГруппировки.Год,
    ПрограммаЦехаБезГруппировки.Месяц,
    ПрограммаЦехаБезГруппировки.УчастокЦеха,
    ПрограммаЦехаБезГруппировки.Изделие,
    ПрограммаЦехаБезГруппировки.Характеристика,
    СУММА(ПрограммаЦехаБезГруппировки.Количество) КАК Количество
    ПОМЕСТИТЬ ПрограммаЦехаИзделиеМесяц
    ИЗ
    ПрограммаЦехаБезГруппировки КАК ПрограммаЦехаБезГруппировки

    СГРУППИРОВАТЬ ПО
    ПрограммаЦехаБезГруппировки.Изделие,
    ПрограммаЦехаБезГруппировки.УчастокЦеха,
    ПрограммаЦехаБезГруппировки.Характеристика,
    ПрограммаЦехаБезГруппировки.Год,
    ПрограммаЦехаБезГруппировки.Месяц
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ПрограммаЦехаИзделиеМесяц.Год,
    ПрограммаЦехаИзделиеМесяц.Месяц,
    ПрограммаЦехаИзделиеМесяц.УчастокЦеха,
    ПрограммаЦехаИзделиеМесяц.Изделие,
    ПрограммаЦехаИзделиеМесяц.Характеристика,
    ПрограммаЦехаИзделиеМесяц.Количество
    ПОМЕСТИТЬ ПрограммаЦехаИзделиеМесяцНеНоль
    ИЗ
    ПрограммаЦехаИзделиеМесяц КАК ПрограммаЦехаИзделиеМесяц
    ГДЕ
    ПрограммаЦехаИзделиеМесяц.Количество <> 0
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ПрограммаЦехаИзделиеМесяцНеНоль.УчастокЦеха,
    ПрограммаЦехаИзделиеМесяцНеНоль.Изделие,
    ПрограммаЦехаИзделиеМесяцНеНоль.Характеристика
    ПОМЕСТИТЬ СписокУчастокИзделие
    ИЗ
    ПрограммаЦехаИзделиеМесяцНеНоль КАК ПрограммаЦехаИзделиеМесяцНеНоль

    СГРУППИРОВАТЬ ПО
    ПрограммаЦехаИзделиеМесяцНеНоль.УчастокЦеха,
    ПрограммаЦехаИзделиеМесяцНеНоль.Изделие,
    ПрограммаЦехаИзделиеМесяцНеНоль.Характеристика
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    СписокУчастокИзделие.УчастокЦеха,
    СписокУчастокИзделие.Изделие,
    СписокУчастокИзделие.Характеристика,
    чзКомплектовочнаяВедомостьЦеха.Комплектующее КАК Деталь,
    чзКомплектовочнаяВедомостьЦеха.ХарактеристикаКомплектующего КАК ХарактеристикаДетали,
    МАКСИМУМ(чзКомплектовочнаяВедомостьЦеха.КоличествоКомплектующего / чзКомплектовочнаяВедомостьЦеха.КоличествоИзделия) КАК КоличествоНаОдноИзделие
    ПОМЕСТИТЬ ПотребностьДеталейНаИзделие
    ИЗ
    СписокУчастокИзделие КАК СписокУчастокИзделие
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.чзКомплектовочнаяВедомостьЦеха КАК чзКомплектовочнаяВедомостьЦеха
    ПО СписокУчастокИзделие.УчастокЦеха = чзКомплектовочнаяВедомостьЦеха.ЦехИзготовитель
    И СписокУчастокИзделие.Изделие = чзКомплектовочнаяВедомостьЦеха.Изделие
    И СписокУчастокИзделие.Характеристика = чзКомплектовочнаяВедомостьЦеха.ХарактеристикаИзделия
    ГДЕ
    чзКомплектовочнаяВедомостьЦеха.Период = &НачалоУчетногоМесяца
    И чзКомплектовочнаяВедомостьЦеха.Комплектующее.ВидВоспроизводства = &ВидВоспроизводства

    СГРУППИРОВАТЬ ПО
    СписокУчастокИзделие.УчастокЦеха,
    СписокУчастокИзделие.Изделие,
    СписокУчастокИзделие.Характеристика,
    чзКомплектовочнаяВедомостьЦеха.Комплектующее,
    чзКомплектовочнаяВедомостьЦеха.ХарактеристикаКомплектующего
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ПрограммаЦехаИзделиеМесяцНеНоль.Год,
    ПрограммаЦехаИзделиеМесяцНеНоль.Месяц,
    ПрограммаЦехаИзделиеМесяцНеНоль.УчастокЦеха,
    ПрограммаЦехаИзделиеМесяцНеНоль.Изделие,
    ПрограммаЦехаИзделиеМесяцНеНоль.Характеристика,
    ПрограммаЦехаИзделиеМесяцНеНоль.Количество КАК КоличествоИзделия,
    ПотребностьДеталейНаИзделие.Деталь,
    ПотребностьДеталейНаИзделие.ХарактеристикаДетали,
    ПотребностьДеталейНаИзделие.КоличествоНаОдноИзделие,
    ПрограммаЦехаИзделиеМесяцНеНоль.Количество * ПотребностьДеталейНаИзделие.КоличествоНаОдноИзделие КАК КоличествоНаИзделия
    ПОМЕСТИТЬ ПотребностьДеталейПоМесяцамВсеЗаписи
    ИЗ
    ПрограммаЦехаИзделиеМесяцНеНоль КАК ПрограммаЦехаИзделиеМесяцНеНоль
    ЛЕВОЕ СОЕДИНЕНИЕ ПотребностьДеталейНаИзделие КАК ПотребностьДеталейНаИзделие
    ПО ПрограммаЦехаИзделиеМесяцНеНоль.УчастокЦеха = ПотребностьДеталейНаИзделие.УчастокЦеха
    И ПрограммаЦехаИзделиеМесяцНеНоль.Изделие = ПотребностьДеталейНаИзделие.Изделие
    И ПрограммаЦехаИзделиеМесяцНеНоль.Характеристика = ПотребностьДеталейНаИзделие.Характеристика
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ПотребностьДеталейПоМесяцамВсеЗаписи.Год,
    ПотребностьДеталейПоМесяцамВсеЗаписи.Месяц,
    ПотребностьДеталейПоМесяцамВсеЗаписи.УчастокЦеха,
    ПотребностьДеталейПоМесяцамВсеЗаписи.Изделие,
    ПотребностьДеталейПоМесяцамВсеЗаписи.Характеристика,
    ПотребностьДеталейПоМесяцамВсеЗаписи.КоличествоИзделия,
    ВЫБОР
    КОГДА ПотребностьДеталейПоМесяцамВсеЗаписи.Деталь ЕСТЬ NULL
    ТОГДА ПотребностьДеталейПоМесяцамВсеЗаписи.Изделие
    ИНАЧЕ ПотребностьДеталейПоМесяцамВсеЗаписи.Деталь
    КОНЕЦ КАК Деталь,
    ВЫБОР
    КОГДА ПотребностьДеталейПоМесяцамВсеЗаписи.Деталь ЕСТЬ NULL
    ТОГДА ПотребностьДеталейПоМесяцамВсеЗаписи.Характеристика
    ИНАЧЕ ПотребностьДеталейПоМесяцамВсеЗаписи.ХарактеристикаДетали
    КОНЕЦ КАК ХарактеристикаДетали,
    ПотребностьДеталейПоМесяцамВсеЗаписи.КоличествоНаОдноИзделие,
    ПотребностьДеталейПоМесяцамВсеЗаписи.КоличествоНаИзделия
    ПОМЕСТИТЬ ПотребносьДеталейВключаяСамоСебя
    ИЗ
    ПотребностьДеталейПоМесяцамВсеЗаписи КАК ПотребностьДеталейПоМесяцамВсеЗаписи
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ПотребносьДеталейВключаяСамоСебя.Год,
    ПотребносьДеталейВключаяСамоСебя.Месяц,
    ПотребносьДеталейВключаяСамоСебя.УчастокЦеха,
    ПотребносьДеталейВключаяСамоСебя.Деталь,
    ПотребносьДеталейВключаяСамоСебя.ХарактеристикаДетали КАК Характеристика,
    СУММА(ПотребносьДеталейВключаяСамоСебя.КоличествоНаИзделия) КАК КоличествоНаПрограммуВыпуска,
    0 КАК НедоделНаСледующийМесяц
    ПОМЕСТИТЬ ДеталиПотребностьПоМесяцам
    ИЗ
    ПотребносьДеталейВключаяСамоСебя КАК ПотребносьДеталейВключаяСамоСебя

    СГРУППИРОВАТЬ ПО
    ПотребносьДеталейВключаяСамоСебя.УчастокЦеха,
    ПотребносьДеталейВключаяСамоСебя.Деталь,
    ПотребносьДеталейВключаяСамоСебя.ХарактеристикаДетали,
    ПотребносьДеталейВключаяСамоСебя.Год,
    ПотребносьДеталейВключаяСамоСебя.Месяц
    ;

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

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ПриходРасходВсеЗаписи.УчастокЦеха,
    ПриходРасходВсеЗаписи.Деталь,
    ПриходРасходВсеЗаписи.Характеристика,
    ПриходРасходВсеЗаписи.Год,
    ПриходРасходВсеЗаписи.Месяц,
    СУММА(ПриходРасходВсеЗаписи.Количество) КАК Количество
    ПОМЕСТИТЬ ПриходПоМесяцам
    ИЗ
    ПриходРасходВсеЗаписи КАК ПриходРасходВсеЗаписи
    ГДЕ
    ПриходРасходВсеЗаписи.ВидДвижения = &ВидДвиженияПриход
    И ПриходРасходВсеЗаписи.Количество <> 0

    СГРУППИРОВАТЬ ПО
    ПриходРасходВсеЗаписи.УчастокЦеха,
    ПриходРасходВсеЗаписи.Деталь,
    ПриходРасходВсеЗаписи.Характеристика,
    ПриходРасходВсеЗаписи.Год,
    ПриходРасходВсеЗаписи.Месяц
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ПриходРасходВсеЗаписи.УчастокЦеха,
    ПриходРасходВсеЗаписи.Деталь,
    ПриходРасходВсеЗаписи.Характеристика,
    ПриходРасходВсеЗаписи.Год,
    ПриходРасходВсеЗаписи.Месяц,
    СУММА(ПриходРасходВсеЗаписи.Количество) КАК Количество
    ПОМЕСТИТЬ РасходПоМесяцам
    ИЗ
    ПриходРасходВсеЗаписи КАК ПриходРасходВсеЗаписи
    ГДЕ
    ПриходРасходВсеЗаписи.ВидДвижения = &ВидДвиженияРасход
    И ПриходРасходВсеЗаписи.Количество <> 0

    СГРУППИРОВАТЬ ПО
    ПриходРасходВсеЗаписи.УчастокЦеха,
    ПриходРасходВсеЗаписи.Деталь,
    ПриходРасходВсеЗаписи.Характеристика,
    ПриходРасходВсеЗаписи.Год,
    ПриходРасходВсеЗаписи.Месяц
    ;

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

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

    ВЫБРАТЬ
    ПриходПоМесяцам.УчастокЦеха,
    ПриходПоМесяцам.Деталь,
    ПриходПоМесяцам.Характеристика,
    ПриходПоМесяцам.Год,
    ПриходПоМесяцам.Месяц,
    NULL,
    ПриходПоМесяцам.Количество,
    NULL
    ИЗ
    ПриходПоМесяцам КАК ПриходПоМесяцам
    ЛЕВОЕ СОЕДИНЕНИЕ ДеталиПотребностьПоМесяцам КАК ДеталиПотребностьПоМесяцам
    ПО ПриходПоМесяцам.Год = ДеталиПотребностьПоМесяцам.Год
    И ПриходПоМесяцам.Месяц = ДеталиПотребностьПоМесяцам.Месяц
    И ПриходПоМесяцам.УчастокЦеха = ДеталиПотребностьПоМесяцам.УчастокЦеха
    И ПриходПоМесяцам.Деталь = ДеталиПотребностьПоМесяцам.Деталь
    И ПриходПоМесяцам.Характеристика = ДеталиПотребностьПоМесяцам.Характеристика

    ГДЕ
    ДеталиПотребностьПоМесяцам.Деталь ЕСТЬ NULL И ПриходПоМесяцам.Количество <> 0
    ;

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

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

    ВЫБРАТЬ
    РасходПоМесяцам.УчастокЦеха,
    РасходПоМесяцам.Деталь,
    РасходПоМесяцам.Характеристика,
    РасходПоМесяцам.Год,
    РасходПоМесяцам.Месяц,
    NULL,
    NULL,
    РасходПоМесяцам.Количество,
    NULL
    ИЗ
    РасходПоМесяцам КАК РасходПоМесяцам
    ЛЕВОЕ СОЕДИНЕНИЕ ДеталиПотребностьЗаказано КАК ДеталиПотребностьЗаказано
    ПО (ДеталиПотребностьЗаказано.Год = РасходПоМесяцам.Год)
    И (ДеталиПотребностьЗаказано.Месяц = РасходПоМесяцам.Месяц)
    И (ДеталиПотребностьЗаказано.УчастокЦеха = РасходПоМесяцам.УчастокЦеха)
    И (ДеталиПотребностьЗаказано.Деталь = РасходПоМесяцам.Деталь)
    И (ДеталиПотребностьЗаказано.Характеристика = РасходПоМесяцам.Характеристика)
    ГДЕ
    ДеталиПотребностьЗаказано.Деталь ЕСТЬ NULL
    ;

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

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ДеталиПотребностьЗаказаноПолучено.УчастокЦеха,
    ДеталиПотребностьЗаказаноПолучено.Деталь,
    ДеталиПотребностьЗаказаноПолучено.Характеристика,
    ДеталиПотребностьЗаказаноПолучено.Год,
    ДеталиПотребностьЗаказаноПолучено.Месяц,
    ДеталиПотребностьЗаказаноПолучено.Потребность1С,
    ДеталиПотребностьЗаказаноПолучено.НедоделНаСледующийМесяц КАК ПотребностьПереходит1С,
    ДеталиПотребностьЗаказаноПолучено.Заказано1С,
    ДеталиПотребностьЗаказаноПолучено.Получено1С,
    КарточкаДеталиСтатистика.ПотребностьДУС КАК ПотребностьКарточкаДетали,
    КарточкаДеталиСтатистика.ЗаказаноДУС КАК ЗаказаноКарточкаДетали,
    КарточкаДеталиСтатистика.ПолученоДУС КАК ПолученоКарточкаДетали
    ПОМЕСТИТЬ КарточкаДеталиСравнение1СиДУС
    ИЗ
    ДеталиПотребностьЗаказаноПолучено КАК ДеталиПотребностьЗаказаноПолучено
    ЛЕВОЕ СОЕДИНЕНИЕ КарточкаДеталиСтатистика КАК КарточкаДеталиСтатистика
    ПО ДеталиПотребностьЗаказаноПолучено.Год = КарточкаДеталиСтатистика.Год
    И ДеталиПотребностьЗаказаноПолучено.Месяц = КарточкаДеталиСтатистика.Месяц
    И ДеталиПотребностьЗаказаноПолучено.УчастокЦеха = КарточкаДеталиСтатистика.УчастокЦеха
    И ДеталиПотребностьЗаказаноПолучено.Деталь = КарточкаДеталиСтатистика.Деталь
    И ДеталиПотребностьЗаказаноПолучено.Характеристика = КарточкаДеталиСтатистика.Характеристика

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

    ВЫБРАТЬ
    КарточкаДеталиСтатистика.УчастокЦеха,
    КарточкаДеталиСтатистика.Деталь,
    КарточкаДеталиСтатистика.Характеристика,
    КарточкаДеталиСтатистика.Год,
    КарточкаДеталиСтатистика.Месяц,
    NULL,
    NULL,
    NULL,
    NULL,
    КарточкаДеталиСтатистика.ПотребностьДУС,
    КарточкаДеталиСтатистика.ЗаказаноДУС,
    КарточкаДеталиСтатистика.ПолученоДУС
    ИЗ
    КарточкаДеталиСтатистика КАК КарточкаДеталиСтатистика
    ЛЕВОЕ СОЕДИНЕНИЕ ДеталиПотребностьЗаказаноПолучено КАК ДеталиПотребностьЗаказаноПолучено
    ПО (ДеталиПотребностьЗаказаноПолучено.Год = КарточкаДеталиСтатистика.Год)
    И (ДеталиПотребностьЗаказаноПолучено.Месяц = КарточкаДеталиСтатистика.Месяц)
    И (ДеталиПотребностьЗаказаноПолучено.УчастокЦеха = КарточкаДеталиСтатистика.УчастокЦеха)
    И (ДеталиПотребностьЗаказаноПолучено.Деталь = КарточкаДеталиСтатистика.Деталь)
    И (ДеталиПотребностьЗаказаноПолучено.Характеристика = КарточкаДеталиСтатистика.Характеристика)
    ГДЕ
    ДеталиПотребностьЗаказаноПолучено.Деталь ЕСТЬ NULL
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    КарточкаДеталиСравнение1СиДУС.УчастокЦеха,
    КарточкаДеталиСравнение1СиДУС.Деталь,
    КарточкаДеталиСравнение1СиДУС.Характеристика,
    КарточкаДеталиСравнение1СиДУС.Год,
    КарточкаДеталиСравнение1СиДУС.Месяц,
    КарточкаДеталиСравнение1СиДУС.Потребность1С,
    КарточкаДеталиСравнение1СиДУС.Заказано1С,
    КарточкаДеталиСравнение1СиДУС.Получено1С,
    КарточкаДеталиСравнение1СиДУС.ПотребностьКарточкаДетали,
    КарточкаДеталиСравнение1СиДУС.ЗаказаноКарточкаДетали,
    КарточкаДеталиСравнение1СиДУС.ПолученоКарточкаДетали,
    КарточкаДеталиСравнение1СиДУС.ПотребностьПереходит1С
    ИЗ
    КарточкаДеталиСравнение1СиДУС КАК КарточкаДеталиСравнение1СиДУС

    ГДЕ
    КарточкаДеталиСравнение1СиДУС.Деталь = &Номенклатура
    И КарточкаДеталиСравнение1СиДУС.УчастокЦеха = &Цех ​


    Регистры сведений "чзКарточкаДеталиСтатистика" и "чзКомплектовочнаяВедомостьЦеха" не типовые.

    1. Оператор МЕЖДУ способствует оптимизации?
    2. Целесообразно ли ставить условие в соединении?
    Пример:
    ЛЕВОЕ СОЕДИНЕНИЕ ДеталиПотребностьПоМесяцам КАК ДеталиПотребностьПоМесяцам
    ПО (ДеталиПотребностьПоМесяцам.Год = ПриходПоМесяцам.Год)
    И (ДеталиПотребностьПоМесяцам.Месяц = ПриходПоМесяцам.Месяц)
    И (ДеталиПотребностьПоМесяцам.УчастокЦеха = ПриходПоМесяцам.УчастокЦеха)
    И (ДеталиПотребностьПоМесяцам.Деталь = ПриходПоМесяцам.Деталь)
    И (ДеталиПотребностьПоМесяцам.Характеристика = ПриходПоМесяцам.Характеристика)
    И (ПриходПоМесяцам.Количество <> 0)​

    3. Можно ли к полю обратиться как-нибудь иначе (без двух точек)? Ведь это не оптимально или к этому случаю не относится? Пример: чзКомплектовочнаяВедомостьЦеха.Комплектующее.ВидВоспроизводства = &ВидВоспроизводства.
    4. Запуталась в конструкции ВЫБОР. Если поле Деталь пусто, выбирается Изделие (запрос ПотребностьДеталейПоМесяцамВсеЗаписи). А потом в запросах Приход/РасходПоМесяцам задается отбор по пустым значениям полей Детали и Характеристики. Нужна ли тогда конструкция ВЫБОР?
    5. В самом начале выбираются поля ГОД и МЕСЯЦ, можно Период отделять потом? Ведь количество полей в выборке тоже влияет на оптимизацию?
    6. Обязательно ли использовать параметры, когда можно задать их через оператор ЗНАЧЕНИЕ?

    Прим.: &ВидВоспроизводства = Перечисление.ВидыВоспроизводстваНоменклатуры.Производство
    &ВидДвиженияПриход = ВидДвиженияНакопления.Приход
    &ВидДвиженияРасход = ВидДвиженияНакопления.Расход
  2. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.638
    Симпатии:
    948
    Баллы:
    204
    1. Это неопнятно самое первое оббъединенеи - зачем оно не проще взять виртуальную таблицу оборотов с периодичностью авто и регистратором.
    Простоу Вас если регистраторы на приход и расход одинаковы то у вас Приход + расход - и тот же оборот получается, а если различные тои думать тут нечего. Зачем объеденять?
    2
    Вот это что одним запросом сделать нельзя что ли?
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ПрограммаЦехаБезГруппировки.Год,
    ПрограммаЦехаБезГруппировки.Месяц,
    ПрограммаЦехаБезГруппировки.УчастокЦеха,
    ПрограммаЦехаБезГруппировки.Изделие,
    ПрограммаЦехаБезГруппировки.Характеристика,
    СУММА(ПрограммаЦехаБезГруппировки.Количество) КАК Количество
    ПОМЕСТИТЬ ПрограммаЦехаИзделиеМесяц
    ИЗ
    ПрограммаЦехаБезГруппировки КАК ПрограммаЦехаБезГруппировки

    СГРУППИРОВАТЬ ПО
    ПрограммаЦехаБезГруппировки.Изделие,
    ПрограммаЦехаБезГруппировки.УчастокЦеха,
    ПрограммаЦехаБезГруппировки.Характеристика,
    ПрограммаЦехаБезГруппировки.Год,
    ПрограммаЦехаБезГруппировки.Месяц
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ПрограммаЦехаИзделиеМесяц.Год,
    ПрограммаЦехаИзделиеМесяц.Месяц,
    ПрограммаЦехаИзделиеМесяц.УчастокЦеха,
    ПрограммаЦехаИзделиеМесяц.Изделие,
    ПрограммаЦехаИзделиеМесяц.Характеристика,
    ПрограммаЦехаИзделиеМесяц.Количество
    ПОМЕСТИТЬ ПрограммаЦехаИзделиеМесяцНеНоль
    ИЗ
    ПрограммаЦехаИзделиеМесяц КАК ПрограммаЦехаИзделиеМесяц
    ГДЕ
    ПрограммаЦехаИзделиеМесяц.Количество <> 0
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ПрограммаЦехаИзделиеМесяцНеНоль.УчастокЦеха,
    ПрограммаЦехаИзделиеМесяцНеНоль.Изделие,
    ПрограммаЦехаИзделиеМесяцНеНоль.Характеристика
    ПОМЕСТИТЬ СписокУчастокИзделие
    ИЗ
    ПрограммаЦехаИзделиеМесяцНеНоль КАК ПрограммаЦехаИзделиеМесяцНеНоль

    СГРУППИРОВАТЬ ПО
    ПрограммаЦехаИзделиеМесяцНеНоль.УчастокЦеха,
    ПрограммаЦехаИзделиеМесяцНеНоль.Изделие,
    ПрограммаЦехаИзделиеМесяцНеНоль.Характеристика

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

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.565
    Симпатии:
    716
    Баллы:
    204
    1. Нет
    2. Зависит от того, что необходимо получить запросом. Условие на основную таблицу смысла лично я не вижу, т.к. это можно сделать конструкцией ГДЕ
    3. Можно, для этого нужно выбрать исходные данные во времменную таблицу, но для получения значения в любом случае придется сделать соединение с таблицей, где это значение присутствует, либо платформа сама выполнит этот запрос не явным образом.
    4.Зависит от того, какое значение необходимо получать в зависимости от различных условий. Если условие одно, то и ВЫБОР не нужен.
    5.Зависит от логики запроса в целом: возможно, что можно и потом определять эти значения.
    6.Значение - это такой же неявный запрос в БД, но с точки зрения оптимизации, это вызовет один большой запрос в БД - время выполнения всего алгоритма существенно не изменится.
    Inonia нравится это.
  4. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    если про первые подзапросы говорится - то МЕЖДУтам не пойдет (либо тогда параметр &КонецПериода корректировать)

    в запросе помещающем данные в ВТ ПрограммаЦехаИзделиеМесяц - смысла вероятно нет, можно это сделать следущим запросом.

    запрос помещающий данные в СписокУчастокИзделие - возможно там быстрее будет работать просто конструкция выбрать различные без группировок.

    запрос помещающий данные в ПотребносьДеталейВключаяСамоСебя - вероятно не нужен, там никаких группировок или соединений же нет. Для понятности ок, полезно бывает таблицы в отдельные запросы выделить, но вероятно данные просто можно получить в следующем запросе.

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