|
Оптимизация времени выполнения запросов. | ☑ | ||
---|---|---|---|---|
0
xipypg2012
04.09.16
✎
13:58
|
Подскажите.
Вариант 1: ВЫБРАТЬ СУММА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток) КАК Сумма, NULL КАК СуммаНаличныйРасчет, NULL КАК СуммаБезналичныйРасчет, СУММА(ВЫБОР КОГДА РАЗНОСТЬДАТ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаОтгрузки, &ДатаОтчета, ДЕНЬ) > ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности И ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаДоставки = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) ТОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток КОГДА РАЗНОСТЬДАТ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаДоставки, &ДатаОтчета, ДЕНЬ) > ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности И ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаДоставки <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) ТОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток КОНЕЦ) КАК ОбщаяСуммаПросрочки, NULL КАК ПросрочкаНал, NULL КАК ПросрочкаБезнал, NULL КАК КоличествоПросроченных, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Проект КАК Проект, NULL КАК КоличествоДокументов, NULL КАК ДатаПервойПросрочки, NULL КАК СуммаДЗПоКлиенту ПОМЕСТИТЬ Врем ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки( &ДатаОтчета, Организация = &Организация И ДокументРасчетовСКонтрагентом.Проект = &Проект И ДокументРасчетовСКонтрагентом <> &ДокументРасчетовСКонтрагентом) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки СГРУППИРОВАТЬ ПО ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Проект ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ NULL, СУММА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток), NULL, NULL, СУММА(ВЫБОР КОГДА РАЗНОСТЬДАТ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаОтгрузки, &ДатаОтчета, ДЕНЬ) > ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности И ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаДоставки = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) ТОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток КОГДА РАЗНОСТЬДАТ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаДоставки, &ДатаОтчета, ДЕНЬ) > ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности И ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаДоставки <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) ТОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток КОНЕЦ), NULL, NULL, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Проект, NULL, NULL, NULL ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки( &ДатаОтчета, Организация = &Организация И ДокументРасчетовСКонтрагентом.Проект = &Проект И ДокументРасчетовСКонтрагентом <> &ДокументРасчетовСКонтрагентом) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки ГДЕ ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента.ВидВзаиморасчетов.Код = "000000001" СГРУППИРОВАТЬ ПО ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Проект ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ NULL, NULL, СУММА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток), NULL, NULL, СУММА(ВЫБОР КОГДА РАЗНОСТЬДАТ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаОтгрузки, &ДатаОтчета, ДЕНЬ) > ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности И ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаДоставки = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) ТОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток КОГДА РАЗНОСТЬДАТ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаДоставки, &ДатаОтчета, ДЕНЬ) > ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности И ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаДоставки <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) ТОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток КОНЕЦ), NULL, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Проект, NULL, NULL, NULL ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки( &ДатаОтчета, Организация = &Организация И ДокументРасчетовСКонтрагентом.Проект = &Проект И ДокументРасчетовСКонтрагентом <> &ДокументРасчетовСКонтрагентом) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки ГДЕ ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента.ВидВзаиморасчетов.Код = "000000002" СГРУППИРОВАТЬ ПО ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Проект ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ NULL, NULL, NULL, NULL, NULL, NULL, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом), ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Проект, NULL, NULL, СУММА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток) ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки( &ДатаОтчета, Организация = &Организация И ДокументРасчетовСКонтрагентом.Проект = &Проект И ДокументРасчетовСКонтрагентом <> &ДокументРасчетовСКонтрагентом И ВЫБОР КОГДА ДокументРасчетовСКонтрагентом.ДатаДоставки = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) ТОГДА РАЗНОСТЬДАТ(ДокументРасчетовСКонтрагентом.ДатаОтгрузки, &ДатаОтчета, ДЕНЬ) > ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности КОГДА ДокументРасчетовСКонтрагентом.ДатаДоставки <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) ТОГДА РАЗНОСТЬДАТ(ДокументРасчетовСКонтрагентом.ДатаДоставки, &ДатаОтчета, ДЕНЬ) > ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности КОНЕЦ И Контрагент = &Контрагент) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки ГДЕ ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток > 0 СГРУППИРОВАТЬ ПО ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Проект ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ NULL, NULL, NULL, NULL, NULL, NULL, NULL, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Проект, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом), МИНИМУМ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата), NULL ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки( &ДатаОтчета, Организация = &Организация И ДокументРасчетовСКонтрагентом.Проект = &Проект И ДокументРасчетовСКонтрагентом <> &ДокументРасчетовСКонтрагентом И Контрагент = &Контрагент) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки ГДЕ ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток > 0 СГРУППИРОВАТЬ ПО ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Проект ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СУММА(Врем.Сумма) КАК Сумма, СУММА(Врем.СуммаНаличныйРасчет) КАК СуммаНаличныйРасчет, СУММА(Врем.СуммаБезналичныйРасчет) КАК СуммаБезналичныйРасчет, СУММА(Врем.ОбщаяСуммаПросрочки) КАК ОбщаяСуммаПросрочки, СУММА(Врем.ПросрочкаНал) КАК ПросрочкаНал, СУММА(Врем.ПросрочкаБезнал) КАК ПросрочкаБезнал, СУММА(Врем.ПросрочкаНал / Врем.Сумма * 100) КАК ПроцентПросрочкиНал, СУММА(Врем.ПросрочкаБезнал / Врем.Сумма * 100) КАК ПроцентПросрочкиБезнал, Врем.Проект, СУММА(Врем.КоличествоПросроченных) КАК КоличествоПросроченных, СУММА(Врем.КоличествоДокументов) КАК КоличествоДокументов, МАКСИМУМ(КомандыТП.Ссылка) КАК Команда, РАЗНОСТЬДАТ(Врем.ДатаПервойПросрочки, &ДатаОтчета, ДЕНЬ) КАК ДатаПервойПросрочки, СУММА(Врем.СуммаДЗПоКлиенту) КАК СуммаДЗПоКлиенту ПОМЕСТИТЬ времН ИЗ Врем КАК Врем ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КомандыТП КАК КомандыТП ПО (Врем.Проект.Родитель = КомандыТП.Проект ИЛИ Врем.Проект.Родитель.Родитель = КомандыТП.Проект ИЛИ Врем.Проект.Родитель.Родитель.Родитель = КомандыТП.Проект ИЛИ Врем.Проект.Родитель.Родитель.Родитель.Родитель = КомандыТП.Проект) ГДЕ НЕ КомандыТП.Ссылка ЕСТЬ NULL СГРУППИРОВАТЬ ПО Врем.Проект, РАЗНОСТЬДАТ(Врем.ДатаПервойПросрочки, &ДатаОтчета, ДЕНЬ) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СУММА(времН.Сумма) КАК Сумма, СУММА(времН.СуммаНаличныйРасчет) КАК СуммаНаличныйРасчет, СУММА(времН.СуммаБезналичныйРасчет) КАК СуммаБезналичныйРасчет, СУММА(времН.ОбщаяСуммаПросрочки) КАК ОбщаяСуммаПросрочки, СУММА(времН.ПросрочкаНал) КАК ПросрочкаНал, СУММА(времН.ПросрочкаБезнал) КАК ПросрочкаБезнал, СУММА(ВЫБОР КОГДА времН.ПросрочкаНал / времН.Сумма * 100 ЕСТЬ NULL ТОГДА 0 ИНАЧЕ времН.ПросрочкаНал / времН.Сумма * 100 КОНЕЦ) КАК ПроцентПросрочкиНал, СУММА(ВЫБОР КОГДА времН.ПросрочкаБезнал / времН.Сумма * 100 ЕСТЬ NULL ТОГДА 0 ИНАЧЕ времН.ПросрочкаБезнал / времН.Сумма * 100 КОНЕЦ) КАК ПроцентПросрочкиБезНал, времН.Проект КАК Проект, СУММА(ВЫБОР КОГДА времН.КоличествоПросроченных ЕСТЬ NULL ТОГДА 0 ИНАЧЕ времН.КоличествоПросроченных КОНЕЦ) КАК КоличествоПросроченных, СУММА(ВЫБОР КОГДА времН.КоличествоДокументов ЕСТЬ NULL ТОГДА 0 ИНАЧЕ времН.КоличествоДокументов КОНЕЦ) КАК КоличествоДокументов, времН.Команда КАК Команда, МАКСИМУМ(БлокировкиУсловия.СуммаЗадолжности) КАК СуммаЗадолжности, МАКСИМУМ(БлокировкиУсловия.ЧислоДнейЗадолжности) КАК ЧислоДнейЗадолжности, МАКСИМУМ(БлокировкиУсловия.ГлубинаНакладных) КАК ГлубинаНакладных, МИНИМУМ(БлокировкиУсловия.ГлубинаПросроченныхНакладных) КАК ГлубинаПросроченныхНакладных, МАКСИМУМ(БлокировкиУсловия.ПроцентПДЗНал) КАК ПроцентПДЗНал, МАКСИМУМ(БлокировкиУсловия.ПроцентПДЗБезНал) КАК ПроцентПДЗБезНал, СУММА(времН.СуммаДЗПоКлиенту) КАК СуммаДЗПоКлиенту, СУММА(времН.ДатаПервойПросрочки) КАК ДатаПервойПросрочки ИЗ времН КАК времН ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Блокировки.Условия КАК БлокировкиУсловия ПО времН.Команда = БлокировкиУсловия.КомандаТП И (БлокировкиУсловия.Ссылка.Владелец = &Контрагент) СГРУППИРОВАТЬ ПО времН.Проект, времН.Команда Вариант 2: ВЫБРАТЬ РАЗЛИЧНЫЕ СУММА(СуммаПросрочки.СуммаВзаиморасчетовОстаток) КАК Сумма, СУММА(Наличка.СуммаВзаиморасчетовОстаток) КАК СуммаНаличныйРасчет, СУММА(БезНал.СуммаВзаиморасчетовОстаток) КАК СуммаБезналичныйРасчет, СУММА(ВЫБОР КОГДА РАЗНОСТЬДАТ(СуммаПросрочки.ДокументРасчетовСКонтрагентом.ДатаОтгрузки, &ДатаОтчета, ДЕНЬ) > СуммаПросрочки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности И СуммаПросрочки.ДокументРасчетовСКонтрагентом.ДатаДоставки = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) ТОГДА СуммаПросрочки.СуммаВзаиморасчетовОстаток КОГДА РАЗНОСТЬДАТ(СуммаПросрочки.ДокументРасчетовСКонтрагентом.ДатаДоставки, &ДатаОтчета, ДЕНЬ) > СуммаПросрочки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности И СуммаПросрочки.ДокументРасчетовСКонтрагентом.ДатаДоставки <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) ТОГДА СуммаПросрочки.СуммаВзаиморасчетовОстаток КОНЕЦ) КАК ОбщаяСуммаПросрочки, СУММА(ВЫБОР КОГДА РАЗНОСТЬДАТ(Наличка.ДокументРасчетовСКонтрагентом.ДатаОтгрузки, &ДатаОтчета, ДЕНЬ) > Наличка.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности И Наличка.ДокументРасчетовСКонтрагентом.ДатаДоставки = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) ТОГДА Наличка.СуммаВзаиморасчетовОстаток КОГДА РАЗНОСТЬДАТ(Наличка.ДокументРасчетовСКонтрагентом.ДатаДоставки, &ДатаОтчета, ДЕНЬ) > Наличка.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности И Наличка.ДокументРасчетовСКонтрагентом.ДатаДоставки <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) ТОГДА Наличка.СуммаВзаиморасчетовОстаток КОНЕЦ) КАК ПросрочкаНал, СУММА(ВЫБОР КОГДА РАЗНОСТЬДАТ(БезНал.ДокументРасчетовСКонтрагентом.ДатаОтгрузки, &ДатаОтчета, ДЕНЬ) > БезНал.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности И БезНал.ДокументРасчетовСКонтрагентом.ДатаДоставки = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) ТОГДА БезНал.СуммаВзаиморасчетовОстаток КОГДА РАЗНОСТЬДАТ(БезНал.ДокументРасчетовСКонтрагентом.ДатаДоставки, &ДатаОтчета, ДЕНЬ) > БезНал.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности И БезНал.ДокументРасчетовСКонтрагентом.ДатаДоставки <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) ТОГДА БезНал.СуммаВзаиморасчетовОстаток КОНЕЦ) КАК ПросрочкаБезнал, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПДЗ.ДокументРасчетовСКонтрагентом) КАК КоличествоПросроченных, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ КолвоДокументов.ДокументРасчетовСКонтрагентом) КАК КоличествоДокументов, МИНИМУМ(КолвоДокументов.ДокументРасчетовСКонтрагентом.Дата) КАК ДатаПервойПросрочки, СУММА(ПДЗ.СуммаВзаиморасчетовОстаток) КАК СуммаДЗПоКлиенту, СуммаПросрочки.ДокументРасчетовСКонтрагентом.Проект КАК Проект ПОМЕСТИТЬ Врем ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки( &ДатаОтчета, Организация = &Организация И ДокументРасчетовСКонтрагентом.Проект = &Проект И ДокументРасчетовСКонтрагентом <> &ДокументРасчетовСКонтрагентом) КАК СуммаПросрочки ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки( &ДатаОтчета, Организация = &Организация И ДокументРасчетовСКонтрагентом.Проект = &Проект И ДокументРасчетовСКонтрагентом <> &ДокументРасчетовСКонтрагентом И ВЫБОР КОГДА ДокументРасчетовСКонтрагентом.ДатаДоставки = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) ТОГДА РАЗНОСТЬДАТ(ДокументРасчетовСКонтрагентом.ДатаОтгрузки, &ДатаОтчета, ДЕНЬ) > ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности КОГДА ДокументРасчетовСКонтрагентом.ДатаДоставки <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) ТОГДА РАЗНОСТЬДАТ(ДокументРасчетовСКонтрагентом.ДатаДоставки, &ДатаОтчета, ДЕНЬ) > ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности КОНЕЦ И Контрагент = &Контрагент) КАК ПДЗ ПО (ПДЗ.СуммаВзаиморасчетовОстаток > 0) И СуммаПросрочки.ДокументРасчетовСКонтрагентом = ПДЗ.ДокументРасчетовСКонтрагентом ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки( &ДатаОтчета, Организация = &Организация И ДокументРасчетовСКонтрагентом.Проект = &Проект И ДокументРасчетовСКонтрагентом <> &ДокументРасчетовСКонтрагентом И ДоговорКонтрагента.ВидВзаиморасчетов.Код = "000000002") КАК БезНал ПО СуммаПросрочки.ДокументРасчетовСКонтрагентом = БезНал.ДокументРасчетовСКонтрагентом ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки( &ДатаОтчета, ДоговорКонтрагента.ВидВзаиморасчетов.Код = "000000001" И Организация = &Организация И ДокументРасчетовСКонтрагентом.Проект = &Проект И ДокументРасчетовСКонтрагентом <> &ДокументРасчетовСКонтрагентом) КАК Наличка ПО СуммаПросрочки.ДокументРасчетовСКонтрагентом = Наличка.ДокументРасчетовСКонтрагентом ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки( &ДатаОтчета, Организация = &Организация И ДокументРасчетовСКонтрагентом.Проект = &Проект И ДокументРасчетовСКонтрагентом <> &ДокументРасчетовСКонтрагентом И Контрагент = &Контрагент) КАК КолвоДокументов ПО СуммаПросрочки.ДокументРасчетовСКонтрагентом = КолвоДокументов.ДокументРасчетовСКонтрагентом СГРУППИРОВАТЬ ПО СуммаПросрочки.ДокументРасчетовСКонтрагентом.Проект ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СУММА(Врем.Сумма) КАК Сумма, СУММА(Врем.СуммаНаличныйРасчет) КАК СуммаНаличныйРасчет, СУММА(Врем.СуммаБезналичныйРасчет) КАК СуммаБезналичныйРасчет, СУММА(Врем.ОбщаяСуммаПросрочки) КАК ОбщаяСуммаПросрочки, СУММА(Врем.ПросрочкаНал) КАК ПросрочкаНал, СУММА(Врем.ПросрочкаБезнал) КАК ПросрочкаБезнал, СУММА(Врем.ПросрочкаНал / Врем.Сумма * 100) КАК ПроцентПросрочкиНал, СУММА(Врем.ПросрочкаБезнал / Врем.Сумма * 100) КАК ПроцентПросрочкиБезнал, СУММА(Врем.КоличествоПросроченных) КАК КоличествоПросроченных, СУММА(Врем.КоличествоДокументов) КАК КоличествоДокументов, МАКСИМУМ(КомандыТП.Ссылка) КАК Команда, РАЗНОСТЬДАТ(Врем.ДатаПервойПросрочки, &ДатаОтчета, ДЕНЬ) КАК ДатаПервойПросрочки, СУММА(Врем.СуммаДЗПоКлиенту) КАК СуммаДЗПоКлиенту, Врем.Проект ПОМЕСТИТЬ времН ИЗ Врем КАК Врем ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КомандыТП КАК КомандыТП ПО (Врем.Проект.Родитель = КомандыТП.Проект ИЛИ Врем.Проект.Родитель.Родитель = КомандыТП.Проект ИЛИ Врем.Проект.Родитель.Родитель.Родитель = КомандыТП.Проект ИЛИ Врем.Проект.Родитель.Родитель.Родитель.Родитель = КомандыТП.Проект) ГДЕ НЕ КомандыТП.Ссылка ЕСТЬ NULL СГРУППИРОВАТЬ ПО РАЗНОСТЬДАТ(Врем.ДатаПервойПросрочки, &ДатаОтчета, ДЕНЬ), Врем.Проект ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СУММА(времН.Сумма) КАК Сумма, СУММА(времН.СуммаНаличныйРасчет) КАК СуммаНаличныйРасчет, СУММА(времН.СуммаБезналичныйРасчет) КАК СуммаБезналичныйРасчет, СУММА(времН.ОбщаяСуммаПросрочки) КАК ОбщаяСуммаПросрочки, СУММА(времН.ПросрочкаНал) КАК ПросрочкаНал, СУММА(времН.ПросрочкаБезнал) КАК ПросрочкаБезнал, СУММА(ВЫБОР КОГДА времН.ПросрочкаНал / времН.Сумма * 100 ЕСТЬ NULL ТОГДА 0 ИНАЧЕ времН.ПросрочкаНал / времН.Сумма * 100 КОНЕЦ) КАК ПроцентПросрочкиНал, СУММА(ВЫБОР КОГДА времН.ПросрочкаБезнал / времН.Сумма * 100 ЕСТЬ NULL ТОГДА 0 ИНАЧЕ времН.ПросрочкаБезнал / времН.Сумма * 100 КОНЕЦ) КАК ПроцентПросрочкиБезНал, СУММА(ВЫБОР КОГДА времН.КоличествоПросроченных ЕСТЬ NULL ТОГДА 0 ИНАЧЕ времН.КоличествоПросроченных КОНЕЦ) КАК КоличествоПросроченных, СУММА(ВЫБОР КОГДА времН.КоличествоДокументов ЕСТЬ NULL ТОГДА 0 ИНАЧЕ времН.КоличествоДокументов КОНЕЦ) КАК КоличествоДокументов, времН.Команда КАК Команда, СУММА(БлокировкиУсловия.СуммаЗадолжности) КАК СуммаЗадолжности, СУММА(БлокировкиУсловия.ЧислоДнейЗадолжности) КАК ЧислоДнейЗадолжности, СУММА(БлокировкиУсловия.ГлубинаНакладных) КАК ГлубинаНакладных, СУММА(БлокировкиУсловия.ГлубинаПросроченныхНакладных) КАК ГлубинаПросроченныхНакладных, СУММА(БлокировкиУсловия.ПроцентПДЗНал) КАК ПроцентПДЗНал, СУММА(БлокировкиУсловия.ПроцентПДЗБезНал) КАК ПроцентПДЗБезНал, СУММА(времН.СуммаДЗПоКлиенту) КАК СуммаДЗПоКлиенту, СУММА(времН.ДатаПервойПросрочки) КАК ДатаПервойПросрочки, времН.Проект ИЗ времН КАК времН ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Блокировки.Условия КАК БлокировкиУсловия ПО времН.Команда = БлокировкиУсловия.КомандаТП И (БлокировкиУсловия.Ссылка.Владелец = &Контрагент) СГРУППИРОВАТЬ ПО времН.Команда, времН.Проект Поидеи 2-й должен выполняться быстрей. Но консоль показывает в первом варианте 1.9, во втором 9.3. Можно как-то это дело оптимизировать и сократить хотя бы до 0.5. |
|||
1
H A D G E H O G s
04.09.16
✎
14:21
|
Пишите запросы проще.
|
|||
2
karabas11
04.09.16
✎
14:35
|
(0) с хера ли второй быстрее должен? Оптимизатор же с ума сходит
и откуда целевая цифра 0.5? |
|||
3
xipypg2012
04.09.16
✎
14:56
|
опустил до 0.9
Получилось вот что : ВЫБРАТЬ РАЗЛИЧНЫЕ СУММА(СуммаПросрочки.СуммаВзаиморасчетовОстаток) КАК Сумма, СУММА(ВЫБОР КОГДА РАЗНОСТЬДАТ(СуммаПросрочки.ДокументРасчетовСКонтрагентом.ДатаОтгрузки, &ДатаОтчета, ДЕНЬ) > СуммаПросрочки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности И СуммаПросрочки.ДокументРасчетовСКонтрагентом.ДатаДоставки = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) ТОГДА СуммаПросрочки.СуммаВзаиморасчетовОстаток КОГДА РАЗНОСТЬДАТ(СуммаПросрочки.ДокументРасчетовСКонтрагентом.ДатаДоставки, &ДатаОтчета, ДЕНЬ) > СуммаПросрочки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности И СуммаПросрочки.ДокументРасчетовСКонтрагентом.ДатаДоставки <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) ТОГДА СуммаПросрочки.СуммаВзаиморасчетовОстаток КОНЕЦ) КАК ОбщаяСуммаПросрочки, СуммаПросрочки.ДокументРасчетовСКонтрагентом.Проект КАК Проект, СУММА(ВЫБОР КОГДА СуммаПросрочки.ДоговорКонтрагента.ВидВзаиморасчетов.Код = "000000001" ТОГДА СуммаПросрочки.СуммаВзаиморасчетовОстаток ИНАЧЕ 0 КОНЕЦ) КАК СуммаНаличныйРасчет, СУММА(ВЫБОР КОГДА РАЗНОСТЬДАТ(СуммаПросрочки.ДокументРасчетовСКонтрагентом.ДатаОтгрузки, &ДатаОтчета, ДЕНЬ) > СуммаПросрочки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности И СуммаПросрочки.ДокументРасчетовСКонтрагентом.ДатаДоставки = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) И СуммаПросрочки.ДоговорКонтрагента.ВидВзаиморасчетов.Код = "000000001" ТОГДА СуммаПросрочки.СуммаВзаиморасчетовОстаток КОГДА РАЗНОСТЬДАТ(СуммаПросрочки.ДокументРасчетовСКонтрагентом.ДатаДоставки, &ДатаОтчета, ДЕНЬ) > СуммаПросрочки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности И СуммаПросрочки.ДокументРасчетовСКонтрагентом.ДатаДоставки <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) И СуммаПросрочки.ДоговорКонтрагента.ВидВзаиморасчетов.Код = "000000001" ТОГДА СуммаПросрочки.СуммаВзаиморасчетовОстаток КОНЕЦ) КАК ПросрочкаНал, СУММА(ВЫБОР КОГДА СуммаПросрочки.ДоговорКонтрагента.ВидВзаиморасчетов.Код = "000000002" ТОГДА СуммаПросрочки.СуммаВзаиморасчетовОстаток ИНАЧЕ 0 КОНЕЦ) КАК СуммаБезналичныйРасчет, СУММА(ВЫБОР КОГДА РАЗНОСТЬДАТ(СуммаПросрочки.ДокументРасчетовСКонтрагентом.ДатаОтгрузки, &ДатаОтчета, ДЕНЬ) > СуммаПросрочки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности И СуммаПросрочки.ДокументРасчетовСКонтрагентом.ДатаДоставки = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) И СуммаПросрочки.ДоговорКонтрагента.ВидВзаиморасчетов.Код = "000000002" ТОГДА СуммаПросрочки.СуммаВзаиморасчетовОстаток КОГДА РАЗНОСТЬДАТ(СуммаПросрочки.ДокументРасчетовСКонтрагентом.ДатаДоставки, &ДатаОтчета, ДЕНЬ) > СуммаПросрочки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности И СуммаПросрочки.ДокументРасчетовСКонтрагентом.ДатаДоставки <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) И СуммаПросрочки.ДоговорКонтрагента.ВидВзаиморасчетов.Код = "000000002" ТОГДА СуммаПросрочки.СуммаВзаиморасчетовОстаток КОНЕЦ) КАК ПросрочкаБезнал, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВЫБОР КОГДА СуммаПросрочки.СуммаВзаиморасчетовОстаток > 0 И СуммаПросрочки.Контрагент = &Контрагент ТОГДА СуммаПросрочки.ДокументРасчетовСКонтрагентом КОНЕЦ) КАК КоличествоДокументов, МИНИМУМ(ВЫБОР КОГДА СуммаПросрочки.Контрагент = &Контрагент ТОГДА СуммаПросрочки.ДокументРасчетовСКонтрагентом.Дата КОНЕЦ) КАК ДатаПервойПросрочки, СУММА(ВЫБОР КОГДА СуммаПросрочки.ДокументРасчетовСКонтрагентом.ДатаДоставки = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) И РАЗНОСТЬДАТ(СуммаПросрочки.ДокументРасчетовСКонтрагентом.ДатаОтгрузки, &ДатаОтчета, ДЕНЬ) > СуммаПросрочки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности И СуммаПросрочки.СуммаВзаиморасчетовОстаток > 0 И СуммаПросрочки.Контрагент = &Контрагент ТОГДА СуммаПросрочки.СуммаВзаиморасчетовОстаток КОГДА СуммаПросрочки.ДокументРасчетовСКонтрагентом.ДатаДоставки <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) И РАЗНОСТЬДАТ(СуммаПросрочки.ДокументРасчетовСКонтрагентом.ДатаДоставки, &ДатаОтчета, ДЕНЬ) > СуммаПросрочки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности И СуммаПросрочки.СуммаВзаиморасчетовОстаток > 0 И СуммаПросрочки.Контрагент = &Контрагент ТОГДА СуммаПросрочки.СуммаВзаиморасчетовОстаток КОНЕЦ) КАК СуммаДЗПоКлиенту, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВЫБОР КОГДА СуммаПросрочки.ДокументРасчетовСКонтрагентом.ДатаДоставки = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) И РАЗНОСТЬДАТ(СуммаПросрочки.ДокументРасчетовСКонтрагентом.ДатаОтгрузки, &ДатаОтчета, ДЕНЬ) > СуммаПросрочки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности И СуммаПросрочки.СуммаВзаиморасчетовОстаток > 0 И СуммаПросрочки.Контрагент = &Контрагент ТОГДА СуммаПросрочки.ДокументРасчетовСКонтрагентом КОГДА СуммаПросрочки.ДокументРасчетовСКонтрагентом.ДатаДоставки <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) И РАЗНОСТЬДАТ(СуммаПросрочки.ДокументРасчетовСКонтрагентом.ДатаДоставки, &ДатаОтчета, ДЕНЬ) > СуммаПросрочки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности И СуммаПросрочки.СуммаВзаиморасчетовОстаток > 0 И СуммаПросрочки.Контрагент = &Контрагент ТОГДА СуммаПросрочки.ДокументРасчетовСКонтрагентом КОНЕЦ) КАК КоличествоПросроченных ПОМЕСТИТЬ Врем ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки( &ДатаОтчета, Организация = &Организация И ДокументРасчетовСКонтрагентом.Проект = &Проект И ДокументРасчетовСКонтрагентом <> &ДокументРасчетовСКонтрагентом) КАК СуммаПросрочки СГРУППИРОВАТЬ ПО СуммаПросрочки.ДокументРасчетовСКонтрагентом.Проект ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СУММА(Врем.Сумма) КАК Сумма, СУММА(Врем.СуммаНаличныйРасчет) КАК СуммаНаличныйРасчет, СУММА(Врем.СуммаБезналичныйРасчет) КАК СуммаБезналичныйРасчет, СУММА(Врем.ОбщаяСуммаПросрочки) КАК ОбщаяСуммаПросрочки, СУММА(Врем.ПросрочкаНал) КАК ПросрочкаНал, СУММА(Врем.ПросрочкаБезнал) КАК ПросрочкаБезнал, СУММА(Врем.ПросрочкаНал / Врем.Сумма * 100) КАК ПроцентПросрочкиНал, СУММА(Врем.ПросрочкаБезнал / Врем.Сумма * 100) КАК ПроцентПросрочкиБезНал, Врем.Проект, СУММА(Врем.КоличествоПросроченных) КАК КоличествоПросроченных, СУММА(Врем.КоличествоДокументов) КАК КоличествоДокументов, МАКСИМУМ(КомандыТП.Ссылка) КАК Команда, РАЗНОСТЬДАТ(Врем.ДатаПервойПросрочки, &ДатаОтчета, ДЕНЬ) КАК ДатаПервойПросрочки, СУММА(Врем.СуммаДЗПоКлиенту) КАК СуммаДЗПоКлиенту ПОМЕСТИТЬ времН ИЗ Врем КАК Врем ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КомандыТП КАК КомандыТП ПО (Врем.Проект.Родитель = КомандыТП.Проект ИЛИ Врем.Проект.Родитель.Родитель = КомандыТП.Проект ИЛИ Врем.Проект.Родитель.Родитель.Родитель = КомандыТП.Проект ИЛИ Врем.Проект.Родитель.Родитель.Родитель.Родитель = КомандыТП.Проект) ГДЕ НЕ КомандыТП.Ссылка ЕСТЬ NULL СГРУППИРОВАТЬ ПО Врем.Проект, РАЗНОСТЬДАТ(Врем.ДатаПервойПросрочки, &ДатаОтчета, ДЕНЬ) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СУММА(времН.Сумма) КАК Сумма, СУММА(времН.СуммаНаличныйРасчет) КАК СуммаНаличныйРасчет, СУММА(времН.СуммаБезналичныйРасчет) КАК СуммаБезналичныйРасчет, СУММА(времН.ОбщаяСуммаПросрочки) КАК ОбщаяСуммаПросрочки, СУММА(времН.ПросрочкаНал) КАК ПросрочкаНал, СУММА(времН.ПросрочкаБезнал) КАК ПросрочкаБезнал, СУММА(ВЫБОР КОГДА времН.ПросрочкаНал / времН.Сумма * 100 ЕСТЬ NULL ТОГДА 0 ИНАЧЕ времН.ПросрочкаНал / времН.Сумма * 100 КОНЕЦ) КАК ПроцентПросрочкиНал, СУММА(ВЫБОР КОГДА времН.ПросрочкаБезнал / времН.Сумма * 100 ЕСТЬ NULL ТОГДА 0 ИНАЧЕ времН.ПросрочкаБезнал / времН.Сумма * 100 КОНЕЦ) КАК ПроцентПросрочкиБезНал, времН.Проект, СУММА(времН.КоличествоПросроченных) КАК КоличествоПросроченных, СУММА(времН.КоличествоДокументов) КАК КоличествоДокументов, времН.Команда КАК Команда, МАКСИМУМ(БлокировкиУсловия.СуммаЗадолжности) КАК СуммаЗадолжности, МАКСИМУМ(БлокировкиУсловия.ЧислоДнейЗадолжности) КАК ЧислоДнейЗадолжности, МАКСИМУМ(БлокировкиУсловия.ГлубинаНакладных) КАК ГлубинаНакладных, МАКСИМУМ(БлокировкиУсловия.ГлубинаПросроченныхНакладных) КАК ГлубинаПросроченныхНакладных, МАКСИМУМ(БлокировкиУсловия.ПроцентПДЗНал) КАК ПроцентПДЗНал, МАКСИМУМ(БлокировкиУсловия.ПроцентПДЗБезНал) КАК ПроцентПДЗБезНал, СУММА(времН.СуммаДЗПоКлиенту) КАК СуммаДЗПоКлиенту, СУММА(времН.ДатаПервойПросрочки) КАК ДатаПервойПросрочки ИЗ времН КАК времН ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Блокировки.Условия КАК БлокировкиУсловия ПО времН.Команда = БлокировкиУсловия.КомандаТП И (БлокировкиУсловия.Ссылка.Владелец = &Контрагент) СГРУППИРОВАТЬ ПО времН.Команда, времН.Проект |
|||
4
xipypg2012
04.09.16
✎
14:57
|
Можно ли еще что придумать?
|
|||
5
xipypg2012
04.09.16
✎
15:01
|
щас при первом выполнение показывает от 0.9 до 1.4 . При повторном 0.3 В прежних версиях при любых вариантах 1.9 минимум.
|
|||
6
Рэйв
04.09.16
✎
15:05
|
(1)+1
|
|||
7
NcSteel
04.09.16
✎
15:14
|
тех журнал в зубы....
|
|||
8
NcSteel
04.09.16
✎
15:15
|
(Врем.Проект.Родитель = КомандыТП.Проект
ИЛИ Врем.Проект.Родитель.Родитель = КомандыТП.Проект ИЛИ Врем.Проект.Родитель.Родитель.Родитель = КомандыТП.Проект ИЛИ Врем.Проект.Родитель.Родитель.Родитель.Родитель = КомандыТП.Проект) эпично конечно |
|||
9
karabas11
04.09.16
✎
15:16
|
а когда иерархия еще глубже будет, то будете запрос переписывать? :))))
ИЛИ Врем.Проект.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель |
|||
10
NcSteel
04.09.16
✎
15:20
|
(9) Особенно если командаТП будет установлена и на группу и на группу группы, то будем иметь завоение строк и в конечном итоге кривой результат...
Такие вещи (соответствие проекта и командыТП) надо хранить однозначно, например в РС. |
|||
11
xipypg2012
04.09.16
✎
15:27
|
(10) Это понятно, до меня так все сделано вот так, еще руки не дошли до переделывания....тут бы разобраться с тем г... что есть, то что ничего не проводится из-за безобразных запросов.
|
|||
12
H A D G E H O G s
04.09.16
✎
15:40
|
(11) Это в проведении документа?
Охренеть. |
|||
13
xipypg2012
04.09.16
✎
15:42
|
это в подписи при записи , с условием если проведение.
|
|||
14
Рэйв
04.09.16
✎
15:44
|
(11)Ты точно уверен, что ты программист 1с?. А то возникают сомнения.
|
|||
15
xipypg2012
04.09.16
✎
15:45
|
(14) ну потролить эт святое, вот что нибудь подсказать эт не судьба.
|
|||
16
Рэйв
04.09.16
✎
15:47
|
(15)"Да как же тебя понять если ты ничего не говоришь"(С)Иван Васильевич меняет профессию.
|
|||
17
H A D G E H O G s
04.09.16
✎
15:49
|
(15) Никто не будет подсказывать. Кому охота разбираться в вашей портянке. Пищи запрос с нуля, оставляй 2 режима - старый запрос и новый запрос по константе и если все встанет колом - вернешься на старый запрос, изменив константу.
|
|||
18
xipypg2012
04.09.16
✎
15:52
|
Смысл в том что этот запрос получает ДЗ и просроченную ДЗ по торговому, так же кол-во неоплаченных документом и кол-во документов по которым дз просроченно уже в разрезе клиента. После чего идет проверка полученных значений согласно заданных в программе, если что-то превышено то запрещается проведение документа и торговый или клиент взависимости от условий попадает в блок.
(17) запрос переписал покрайней мере основную часть , это третий вариант но мне все равно не очень нравится, а как еще оптимизировать не могу придумать. |
|||
19
Рэйв
04.09.16
✎
15:55
|
он еще и косноязычен:-)..Нет, я пас.:-)
|
|||
20
NcSteel
04.09.16
✎
15:55
|
(8) Оптимизируй (8)
|
|||
21
karabas11
04.09.16
✎
15:58
|
(20) можно я, можно я, можно я не буду... :-)
|
|||
22
H A D G E H O G s
04.09.16
✎
15:59
|
(18) Избавься вот от этой дичи
И ДокументРасчетовСКонтрагентом.Проект = &Проект |
|||
23
NcSteel
04.09.16
✎
16:27
|
(22) и это тоже
|
|||
24
xReason
04.09.16
✎
18:42
|
(0) NULL-ов маловато
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |