Имя: Пароль:
1C
 
Оптимизация запроса
0 SRM1C
 
23.10.17
11:47
Долго запрос отрабатывает, Ваши замечания хотел бы услышать



ВЫБРАТЬ
    ПриходныйКассовыйОрдерРасшифровкаПлатежа.ДоговорКонтрагента КАК ДоговорПлатежногоАгента,
    ПриходныйКассовыйОрдерРасшифровкаПлатежа.Ссылка
ПОМЕСТИТЬ ВТ_ДоговораПлатежногоАгента
ИЗ
    Документ.ПриходныйКассовыйОрдер.РасшифровкаПлатежа КАК ПриходныйКассовыйОрдерРасшифровкаПлатежа
ГДЕ
    ПриходныйКассовыйОрдерРасшифровкаПлатежа.Ссылка = &ПриходныйКассовыйОрдер
    И ПриходныйКассовыйОрдерРасшифровкаПлатежа.ДоговорКонтрагента.ПлатежныйАгент

СГРУППИРОВАТЬ ПО
    ПриходныйКассовыйОрдерРасшифровкаПлатежа.ДоговорКонтрагента,
    ПриходныйКассовыйОрдерРасшифровкаПлатежа.Ссылка

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

ВЫБРАТЬ
    ПриходныйКассовыйОрдер.СубконтоКт2,
    ПриходныйКассовыйОрдер.Ссылка
ИЗ
    Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
ГДЕ
    ВЫРАЗИТЬ(ПриходныйКассовыйОрдер.СубконтоКт2 КАК Справочник.ДоговорыКонтрагентов).ПлатежныйАгент
    И ПриходныйКассовыйОрдер.Ссылка = &ПриходныйКассовыйОрдер
;

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПриходныйКассовыйОрдерРасшифровкаПлатежа.Ссылка,
    ПриходныйКассовыйОрдерРасшифровкаПлатежа.ДоговорКонтрагента,
    ПриходныйКассовыйОрдерРасшифровкаПлатежа.СтавкаНДС,
    ПриходныйКассовыйОрдерРасшифровкаПлатежа.СчетНаОплату,
    ПриходныйКассовыйОрдерРасшифровкаПлатежа.СуммаПлатежа,
    ПриходныйКассовыйОрдерРасшифровкаПлатежа.СуммаВзаиморасчетов
ПОМЕСТИТЬ ВТ_РасшифровкаПлатежа
ИЗ
    Документ.ПриходныйКассовыйОрдер.РасшифровкаПлатежа КАК ПриходныйКассовыйОрдерРасшифровкаПлатежа
ГДЕ
    ПриходныйКассовыйОрдерРасшифровкаПлатежа.Ссылка = &ПриходныйКассовыйОрдер
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    РеализацияТоваровУслуг.Ссылка КАК РеализацияТоваров,
    ПриходныйКассовыйОрдерРасшифровкаПлатежа.СчетНаОплату
ПОМЕСТИТЬ ВТ_РеализацииПоСчету
ИЗ
    Документ.ПриходныйКассовыйОрдер.РасшифровкаПлатежа КАК ПриходныйКассовыйОрдерРасшифровкаПлатежа
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        ПО ПриходныйКассовыйОрдерРасшифровкаПлатежа.СчетНаОплату = РеализацияТоваровУслуг.СчетНаОплатуПокупателю
ГДЕ
    ПриходныйКассовыйОрдерРасшифровкаПлатежа.Ссылка = &ПриходныйКассовыйОрдер
    И НЕ РеализацияТоваровУслуг.Ссылка ЕСТЬ NULL
;

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВложенныйЗапрос.СчетНаОплату,
    ВложенныйЗапрос.ЭтоУслуга,
    ВложенныйЗапрос.Номенклатура,
    ВложенныйЗапрос.Содержание,
    СУММА(ВложенныйЗапрос.Количество) КАК Количество
ПОМЕСТИТЬ ВТ_РеализованнаяНоменклатура
ИЗ
    (ВЫБРАТЬ
        ВТ_РеализацииПоСчету.СчетНаОплату КАК СчетНаОплату,
        ЛОЖЬ КАК ЭтоУслуга,
        РеализованныеТовары.Номенклатура КАК Номенклатура,
        "" КАК Содержание,
        РеализованныеТовары.Количество КАК Количество
    ИЗ
        ВТ_РеализацииПоСчету КАК ВТ_РеализацииПоСчету
            ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализованныеТовары
            ПО ВТ_РеализацииПоСчету.РеализацияТоваров = РеализованныеТовары.Ссылка
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        ВТ_РеализацииПоСчету.СчетНаОплату,
        ИСТИНА,
        РеализованныеУслуги.Номенклатура,
        РеализованныеУслуги.Содержание,
        ВЫБОР
            КОГДА РеализованныеУслуги.Количество = 0
                ТОГДА 1
            ИНАЧЕ РеализованныеУслуги.Количество
        КОНЕЦ
    ИЗ
        ВТ_РеализацииПоСчету КАК ВТ_РеализацииПоСчету
            ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Услуги КАК РеализованныеУслуги
            ПО ВТ_РеализацииПоСчету.РеализацияТоваров = РеализованныеУслуги.Ссылка
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        ВТ_РеализацииПоСчету.СчетНаОплату,
        ИСТИНА,
        РеализованныеАгентскиеУслуги.Номенклатура,
        РеализованныеАгентскиеУслуги.Содержание,
        ВЫБОР
            КОГДА РеализованныеАгентскиеУслуги.Количество = 0
                ТОГДА 1
            ИНАЧЕ РеализованныеАгентскиеУслуги.Количество
        КОНЕЦ
    ИЗ
        ВТ_РеализацииПоСчету КАК ВТ_РеализацииПоСчету
            ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.АгентскиеУслуги КАК РеализованныеАгентскиеУслуги
            ПО ВТ_РеализацииПоСчету.РеализацияТоваров = РеализованныеАгентскиеУслуги.Ссылка) КАК ВложенныйЗапрос

СГРУППИРОВАТЬ ПО
    ВложенныйЗапрос.СчетНаОплату,
    ВложенныйЗапрос.ЭтоУслуга,
    ВложенныйЗапрос.Номенклатура,
    ВложенныйЗапрос.Содержание
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_РасшифровкаПлатежа.СчетНаОплату КАК Документ,
    ДокументСчетНаОплатуПокупателю.Организация КАК Организация,
    ДокументСчетНаОплатуПокупателю.Дата КАК Дата,
    ЕСТЬNULL(ДокументСчетНаОплатуПокупателю.СуммаВключаетНДС, ИСТИНА) КАК СуммаВключаетНДС,
    ЕСТЬNULL(ДокументСчетНаОплатуПокупателю.СуммаСкидки, 0) КАК СуммаСкидкиПоДокументу,
    ВТ_РасшифровкаПлатежа.ДоговорКонтрагента КАК ДоговорКонтрагента,
    ДоговорыКонтрагентов.РасчетыВУсловныхЕдиницах КАК РасчетыВУсловныхЕдиницах,
    ЕСТЬNULL(ДокументСчетНаОплатуПокупателю.ВалютаДокумента, &ВалютаРегламентированногоУчета) КАК ВалютаДокумента,
    ВТ_РеквизитыШапки.ВалютаДокумента КАК ВалютаПлатежа,
    СУММА(ВТ_РасшифровкаПлатежа.СуммаПлатежа) КАК СуммаОплаты,
    СУММА(ВТ_РасшифровкаПлатежа.СуммаВзаиморасчетов) КАК СуммаВзаиморасчетов,
    ВТ_РасшифровкаПлатежа.СтавкаНДС
ПОМЕСТИТЬ ВТ_ОплачиваемыеДокументы
ИЗ
    ВТ_РасшифровкаПлатежа КАК ВТ_РасшифровкаПлатежа
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_РеквизитыШапки КАК ВТ_РеквизитыШапки
        ПО ВТ_РасшифровкаПлатежа.Ссылка = ВТ_РеквизитыШапки.Ссылка
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю КАК ДокументСчетНаОплатуПокупателю
        ПО ВТ_РасшифровкаПлатежа.СчетНаОплату = ДокументСчетНаОплатуПокупателю.Ссылка
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
        ПО ВТ_РасшифровкаПлатежа.ДоговорКонтрагента = ДоговорыКонтрагентов.Ссылка

СГРУППИРОВАТЬ ПО
    ВТ_РасшифровкаПлатежа.СтавкаНДС,
    ДокументСчетНаОплатуПокупателю.Организация,
    ДокументСчетНаОплатуПокупателю.Дата,
    ВТ_РасшифровкаПлатежа.СчетНаОплату,
    ЕСТЬNULL(ДокументСчетНаОплатуПокупателю.СуммаВключаетНДС, ИСТИНА),
    ВТ_РеквизитыШапки.ВалютаДокумента,
    ВТ_РасшифровкаПлатежа.ДоговорКонтрагента,
    ЕСТЬNULL(ДокументСчетНаОплатуПокупателю.ВалютаДокумента, &ВалютаРегламентированногоУчета),
    ЕСТЬNULL(ДокументСчетНаОплатуПокупателю.СуммаСкидки, 0),
    ДоговорыКонтрагентов.РасчетыВУсловныхЕдиницах
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    СчетНаОплатуПокупателюТовары.Ссылка КАК Документ,
    СчетНаОплатуПокупателюТовары.Ссылка.Дата КАК ДатаДокумента,
    СчетНаОплатуПокупателюТовары.Номенклатура,
        ВЫБОР
        КОГДА НЕ (СчетНаОплатуПокупателюТовары.Содержание ПОДОБНО "") ТОГДА
            СчетНаОплатуПокупателюТовары.Содержание
        КОГДА НЕ (СчетНаОплатуПокупателюТовары.Номенклатура.НаименованиеПолное ПОДОБНО "") ТОГДА
            СчетНаОплатуПокупателюТовары.Номенклатура.НаименованиеПолное
        ИНАЧЕ
            СчетНаОплатуПокупателюТовары.Номенклатура.Наименование
    КОНЕЦ КАК Наименование,
    МАКСИМУМ(ЕСТЬNULL(ШтрихкодыНоменклатуры.Штрихкод, НЕОПРЕДЕЛЕНО)) КАК Штрихкод,
    СУММА(ВЫБОР
            КОГДА СчетНаОплатуПокупателюТовары.Количество = 0
                    И ЕСТЬNULL(СчетНаОплатуПокупателюТовары.Номенклатура.Услуга, ИСТИНА)
                ТОГДА 1
            ИНАЧЕ СчетНаОплатуПокупателюТовары.Количество
        КОНЕЦ) КАК Количество,
    ВЫРАЗИТЬ(ВЫБОР
            КОГДА ВТ_ОплачиваемыеДокументы.СуммаВключаетНДС
                ТОГДА СчетНаОплатуПокупателюТовары.Цена
            КОГДА СчетНаОплатуПокупателюТовары.Количество = 0
                ТОГДА СчетНаОплатуПокупателюТовары.Сумма + СчетНаОплатуПокупателюТовары.СуммаНДС
            ИНАЧЕ (СчетНаОплатуПокупателюТовары.Сумма + СчетНаОплатуПокупателюТовары.СуммаНДС) / СчетНаОплатуПокупателюТовары.Количество
        КОНЕЦ КАК ЧИСЛО(15, 2)) КАК Цена,
    СУММА(СчетНаОплатуПокупателюТовары.СуммаСкидки) КАК СуммаСкидок,
    СчетНаОплатуПокупателюТовары.СтавкаНДС,
    СУММА(ВЫБОР
            КОГДА ВТ_ОплачиваемыеДокументы.СуммаВключаетНДС
                ТОГДА СчетНаОплатуПокупателюТовары.Сумма - СчетНаОплатуПокупателюТовары.СуммаСкидки
            ИНАЧЕ СчетНаОплатуПокупателюТовары.Сумма + СчетНаОплатуПокупателюТовары.СуммаНДС - СчетНаОплатуПокупателюТовары.СуммаСкидки
        КОНЕЦ) КАК Сумма,
    СУММА(ЕСТЬNULL(ВТ_РеализованнаяНоменклатура.Количество, 0)) КАК КоличествоОтгружено
ИЗ
    Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОплачиваемыеДокументы КАК ВТ_ОплачиваемыеДокументы
        ПО СчетНаОплатуПокупателюТовары.Ссылка = ВТ_ОплачиваемыеДокументы.Документ
            И СчетНаОплатуПокупателюТовары.СтавкаНДС = ВТ_ОплачиваемыеДокументы.СтавкаНДС
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
        ПО СчетНаОплатуПокупателюТовары.Номенклатура = ШтрихкодыНоменклатуры.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_РеализованнаяНоменклатура КАК ВТ_РеализованнаяНоменклатура
        ПО (ВТ_РеализованнаяНоменклатура.СчетНаОплату = СчетНаОплатуПокупателюТовары.Ссылка)
            И (ВТ_РеализованнаяНоменклатура.Номенклатура = СчетНаОплатуПокупателюТовары.Номенклатура)
            И (ВТ_РеализованнаяНоменклатура.Содержание = СчетНаОплатуПокупателюТовары.Содержание)
ГДЕ
    (СчетНаОплатуПокупателюТовары.Количество <> 0
            ИЛИ ЕСТЬNULL(СчетНаОплатуПокупателюТовары.Номенклатура.Услуга, ИСТИНА))
    И НЕ ВТ_ОплачиваемыеДокументы.Документ ЕСТЬ NULL

СГРУППИРОВАТЬ ПО
    СчетНаОплатуПокупателюТовары.Ссылка,
    СчетНаОплатуПокупателюТовары.Ссылка.Дата,
        ВЫБОР
        КОГДА НЕ (СчетНаОплатуПокупателюТовары.Содержание ПОДОБНО "") ТОГДА
            СчетНаОплатуПокупателюТовары.Содержание
        КОГДА НЕ (СчетНаОплатуПокупателюТовары.Номенклатура.НаименованиеПолное ПОДОБНО "") ТОГДА
            СчетНаОплатуПокупателюТовары.Номенклатура.НаименованиеПолное
        ИНАЧЕ
            СчетНаОплатуПокупателюТовары.Номенклатура.Наименование
    КОНЕЦ,
    СчетНаОплатуПокупателюТовары.СтавкаНДС,
    ВЫРАЗИТЬ(ВЫБОР
            КОГДА ВТ_ОплачиваемыеДокументы.СуммаВключаетНДС
                ТОГДА СчетНаОплатуПокупателюТовары.Цена
            КОГДА СчетНаОплатуПокупателюТовары.Количество = 0
                ТОГДА СчетНаОплатуПокупателюТовары.Сумма + СчетНаОплатуПокупателюТовары.СуммаНДС
            ИНАЧЕ (СчетНаОплатуПокупателюТовары.Сумма + СчетНаОплатуПокупателюТовары.СуммаНДС) / СчетНаОплатуПокупателюТовары.Количество
        КОНЕЦ КАК ЧИСЛО(15, 2)),
    СчетНаОплатуПокупателюТовары.Номенклатура
;

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

СГРУППИРОВАТЬ ПО
    ОплачиваемыеСчета.СтавкаНДС,
    ОплачиваемыеСчета.Документ,
    ОплачиваемыеСчета.Организация,
    ОплачиваемыеСчета.Дата,
    ОплачиваемыеСчета.СуммаОплаты,
    ОплачиваемыеСчета.СуммаВзаиморасчетов,
    ОплачиваемыеСчета.РасчетыВУсловныхЕдиницах
        И ОплачиваемыеСчета.ВалютаДокумента <> ОплачиваемыеСчета.ВалютаПлатежа,
    ОплачиваемыеСчета.СуммаСкидкиПоДокументу
;

////////////////////////////////////////////////////////////////////////////////
1 zak555
 
23.10.17
12:03
по РБ и РН надо делать запрос
2 DrShad
 
23.10.17
12:26
(1) и не просто по ним как физическим таблицам, ибо такое соединение у ТС присутствует, а с их вирт таблицами оборотов и остатков