|
Тормозит работа с ТЧ заказа | ☑ | ||
---|---|---|---|---|
0
Dirk Diggler
27.12.11
✎
10:12
|
Сабж, сегодня заметил - при введении новой строки заметная пауза. УПП, база(файловая) пока оч. скромных размеров - 2 ГБ, одновременно работают 5 пользователей, из них в заказах ковыряется только 2. Сервер - IBM System x3850, так что железа с запасом.
Замер производительности показывает, что тормозит ЗапросПоСкидкам. Тормоза оч. заметны, это не норма. Как ускорить? |
|||
1
qwerty072
27.12.11
✎
10:15
|
покажи какой запрос по скидкам!видимо его надо автоматизировать
|
|||
2
Dirk Diggler
27.12.11
✎
10:16
|
это из общего модуля ОбработкаТабличныхЧастей типовой УПП:
Запрос = Новый Запрос(" |ВЫБРАТЬ РАЗРЕШЕННЫЕ | РегПороги.ЗначениеПорога КАК ЗначениеПорога |ИЗ | (ВЫБРАТЬ | ЕСТЬNULL(СУММА(РегПродажи.СуммаОборот), 0) КАК СуммаОборот | ИЗ | РегистрНакопления.ПродажиПоДисконтнымКартам.Обороты(&ДатаНач, &ДатаКон, , | ДисконтнаяКарта = &ДисконтнаяКарта) КАК РегПродажи | ) КАК РегПродажи |ВНУТРЕННЕЕ СОЕДИНЕНИЕ | (ВЫБРАТЬ | Пороги.НижняяГраница, | Пороги.ЗначениеПорога | ИЗ | РегистрСведений.ПорогиНакопительныхСкидок.СрезПоследних(&ДатаКон) КАК Пороги | ВНУТРЕННЕЕ СОЕДИНЕНИЕ | (ВЫБРАТЬ | МАКСИМУМ(ПорогиМакс.Период) КАК Период | ИЗ | РегистрСведений.ПорогиНакопительныхСкидок.СрезПоследних(&ДатаКон) КАК ПорогиМакс | ) КАК ПорогиМакс | ПО | Пороги.Период = ПорогиМакс.Период |) КАК РегПороги |ПО | РегПороги.НижняяГраница <= РегПродажи.СуммаОборот |ВНУТРЕННЕЕ СОЕДИНЕНИЕ | (ВЫБРАТЬ | МАКСИМУМ(РегПороги.НижняяГраница) КАК НижняяГраница | ИЗ | (ВЫБРАТЬ | ЕСТЬNULL(СУММА(РегПродажи.СуммаОборот), 0) КАК СуммаОборот | ИЗ | РегистрНакопления.ПродажиПоДисконтнымКартам.Обороты(&ДатаНач, &ДатаКон, , | ДисконтнаяКарта = &ДисконтнаяКарта) КАК РегПродажи | ) КАК РегПродажи | ВНУТРЕННЕЕ СОЕДИНЕНИЕ | (ВЫБРАТЬ | Пороги.НижняяГраница | ИЗ | РегистрСведений.ПорогиНакопительныхСкидок.СрезПоследних(&ДатаКон) КАК Пороги | ВНУТРЕННЕЕ СОЕДИНЕНИЕ | (ВЫБРАТЬ | МАКСИМУМ(ПорогиМакс.Период) КАК Период | ИЗ | РегистрСведений.ПорогиНакопительныхСкидок.СрезПоследних(&ДатаКон) КАК ПорогиМакс | ) КАК ПорогиМакс | ПО | Пороги.Период = ПорогиМакс.Период | ) КАК РегПороги | ПО | РегПороги.НижняяГраница <= РегПродажи.СуммаОборот | ) КАК РегПорогиМакс |ПО | РегПорогиМакс.НижняяГраница = РегПороги.НижняяГраница |"); Запрос.УстановитьПараметр("ДатаНач", ПериодНакопления.ДатаНач); Запрос.УстановитьПараметр("ДатаКон", ПериодНакопления.ДатаКон); Запрос.УстановитьПараметр("ДисконтнаяКарта", ДисконтнаяКарта); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда ПроцентНакопительнойСкидки = Выборка.ЗначениеПорога; Иначе ПроцентНакопительнойСкидки = 0; КонецЕсли; КонецЕсли; Запрос = Новый Запрос; Запрос.УстановитьПараметр("Дата" , ДатаСкидок); Запрос.УстановитьПараметр("МассивНоменклатуры" , МассивНоменклатуры); Запрос.УстановитьПараметр("МассивХарактеристик" , МассивХарактеристик); Запрос.УстановитьПараметр("МассивКачество" , МассивКачество); Запрос.УстановитьПараметр("МассивПолучателей" , МассивПолучателей); Запрос.УстановитьПараметр("ДеньНедели" , Перечисления.ДниНедели[ДеньНедели(ДатаСкидок) - 1]); Запрос.УстановитьПараметр("ТекущееВремя" , Дата(1, 1, 1, Час(ДатаСкидок), Минута(ДатаСкидок), Секунда(ДатаСкидок))); Запрос.УстановитьПараметр("КурсКратность" , КурсКратность); Запрос.УстановитьПараметр("Сумма" , СуммаДокумента); Запрос.УстановитьПараметр("ВидОплаты" , ВидОплаты); Запрос.УстановитьПараметр("ДисконтнаяКарта" , ДисконтнаяКарта); Запрос.УстановитьПараметр("ВидДисконтнойКарты" , ДисконтнаяКарта.ВидДисконтнойКарты); Если ЭтоНакопительнаяСкидка Тогда Запрос.УстановитьПараметр("ПроцентНакопительнойСкидки" , ПроцентНакопительнойСкидки); КонецЕсли; ТекстЗапроса = " | ВЫБРАТЬ РАЗРЕШЕННЫЕ | СпрНоменклатура.Номенклатура КАК Номенклатура, | СпрНоменклатура.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, | СпрКачество.Ссылка КАК Качество, | РегСкидкиНоменклатуры.Условие КАК НУсловие, | РегСкидкиНоменклатуры.ЗначениеУсловия КАК НЗначениеУсловия, | РегСкидкиНоменклатуры.ОграничениеСкидкиНаценки КАК НОграничениеСкидкиНаценки, | " + ?(ЭтоНакопительнаяСкидка, "ВЫБОР КОГДА РегСкидкиНоменклатуры.ПроцентСкидкиНаценки ЕСТЬ НЕ NULL | И (РегСкидкиНоменклатуры.Условие = ЗНАЧЕНИЕ(Перечисление.УсловияСкидкиНаценки.ПоДисконтнойКарте) | ИЛИ РегСкидкиНоменклатуры.Условие = ЗНАЧЕНИЕ(Перечисление.УсловияСкидкиНаценки.ПоВидуДисконтныхКарт)) ТОГДА &ПроцентНакопительнойСкидки ИНАЧЕ РегСкидкиНоменклатуры.ПроцентСкидкиНаценки КОНЕЦ", "РегСкидкиНоменклатуры.ПроцентСкидкиНаценки") + " КАК НПроцентСкидкиНаценки, | РегСкидкиПоЦеновымГруппам.Условие КАК ЦУсловие, | РегСкидкиПоЦеновымГруппам.ЗначениеУсловия КАК ЦЗначениеУсловия, | РегСкидкиПоЦеновымГруппам.ОграничениеСкидкиНаценки КАК ЦОграничениеСкидкиНаценки, | " + ?(ЭтоНакопительнаяСкидка, "ВЫБОР КОГДА РегСкидкиПоЦеновымГруппам.ПроцентСкидкиНаценки ЕСТЬ НЕ NULL | И (РегСкидкиПоЦеновымГруппам.Условие = ЗНАЧЕНИЕ(Перечисление.УсловияСкидкиНаценки.ПоДисконтнойКарте) | ИЛИ РегСкидкиПоЦеновымГруппам.Условие = ЗНАЧЕНИЕ(Перечисление.УсловияСкидкиНаценки.ПоВидуДисконтныхКарт)) ТОГДА &ПроцентНакопительнойСкидки ИНАЧЕ РегСкидкиПоЦеновымГруппам.ПроцентСкидкиНаценки КОНЕЦ", "РегСкидкиПоЦеновымГруппам.ПроцентСкидкиНаценки") + " КАК ЦПроцентСкидкиНаценки |ИЗ | (ВЫБРАТЬ | СпрНоменклатура.Ссылка КАК Номенклатура, | ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК ХарактеристикаНоменклатуры | ИЗ | Справочник.Номенклатура КАК СпрНоменклатура | ГДЕ | СпрНоменклатура.Ссылка В (&МассивНоменклатуры) | ОБЪЕДИНИТЬ ВСЕ | ВЫБРАТЬ | СпрХарактеристики.Владелец, | СпрХарактеристики.Ссылка | ИЗ | Справочник.ХарактеристикиНоменклатуры КАК СпрХарактеристики | ГДЕ | СпрХарактеристики.Ссылка В (&МассивХарактеристик) | ОБЪЕДИНИТЬ ВСЕ | ВЫБРАТЬ | ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка), | ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) | ) КАК СпрНоменклатура | ВНУТРЕННЕЕ СОЕДИНЕНИЕ | Справочник.Качество КАК СпрКачество | ПО | СпрКачество.Ссылка В (&МассивКачество) |ЛЕВОЕ СОЕДИНЕНИЕ | (ВЫБРАТЬ | РегСкидкиНоменклатуры.Номенклатура, | РегСкидкиНоменклатуры.ХарактеристикаНоменклатуры, | РегСкидкиНоменклатуры.Качество, | РегСкидкиНоменклатуры.Условие, | ВЫБОР КОГДА РегСкидкиНоменклатуры.Условие = ЗНАЧЕНИЕ(Перечисление.УсловияСкидкиНаценки.ПоСуммеДокумента) ТОГДА | ВЫРАЗИТЬ(РегСкидкиНоменклатуры.ЗначениеУсловия КАК ЧИСЛО) * &КурсКратность * КурсыВалют.Курс / КурсыВалют.Кратность | ИНАЧЕ | РегСкидкиНоменклатуры.ЗначениеУсловия | КОНЕЦ КАК ЗначениеУсловия, | МАКСИМУМ(РегСкидкиНоменклатуры.ПроцентСкидкиНаценки) КАК ПроцентСкидкиНаценки, | РегСкидкиНоменклатуры.ОграничениеСкидкиНаценки * &КурсКратность * КурсыВалют.Курс / КурсыВалют.Кратность КАК ОграничениеСкидкиНаценки | ИЗ | РегистрСведений.СкидкиНаценкиНоменклатуры.СрезПоследних(&Дата, | Номенклатура В (&МассивНоменклатуры) | И Качество В (&МассивКачество) | И ПолучательСкидки В (&МассивПолучателей)) КАК РегСкидкиНоменклатуры | ЛЕВОЕ СОЕДИНЕНИЕ | РегистрСведений.ВремяДействияСкидок КАК ВремяДействия | ПО | РегСкидкиНоменклатуры.Регистратор = ВремяДействия.Регистратор | ЛЕВОЕ СОЕДИНЕНИЕ | РегистрСведений.КурсыВалют.СрезПоследних(&Дата) КАК КурсыВалют | ПО | РегСкидкиНоменклатуры.Валюта = КурсыВалют.Валюта | ГДЕ | (ВремяДействия.ДеньНедели ЕСТЬ NULL | ИЛИ ВремяДействия.ДеньНедели = &ДеньНедели | И &ТекущееВремя МЕЖДУ ВремяДействия.ВремяНачала И ВремяДействия.ВремяОкончания) | И РегСкидкиНоменклатуры.Валюта <> ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка) //| И РегСкидкиНоменклатуры.ПроцентСкидкиНаценки <> 0 | И (РегСкидкиНоменклатуры.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1) ИЛИ КОНЕЦПЕРИОДА(РегСкидкиНоменклатуры.ДатаОкончания, ДЕНЬ) >= &Дата) | И (РегСкидкиНоменклатуры.Условие = ЗНАЧЕНИЕ(Перечисление.УсловияСкидкиНаценки.ПоСуммеДокумента) И ВЫРАЗИТЬ(РегСкидкиНоменклатуры.ЗначениеУсловия КАК ЧИСЛО) * &КурсКратность * КурсыВалют.Курс / КурсыВалют.Кратность < &Сумма ИЛИ РегСкидкиНоменклатуры.Условие <> ЗНАЧЕНИЕ(Перечисление.УсловияСкидкиНаценки.ПоСуммеДокумента)) | И (РегСкидкиНоменклатуры.Условие = ЗНАЧЕНИЕ(Перечисление.УсловияСкидкиНаценки.ПоВидуОплаты) И РегСкидкиНоменклатуры.ЗначениеУсловия = &ВидОплаты ИЛИ РегСкидкиНоменклатуры.Условие <> ЗНАЧЕНИЕ(Перечисление.УсловияСкидкиНаценки.ПоВидуОплаты)) | И (РегСкидкиНоменклатуры.Условие = ЗНАЧЕНИЕ(Перечисление.УсловияСкидкиНаценки.ПоВидуДисконтныхКарт) И РегСкидкиНоменклатуры.ЗначениеУсловия = &ВидДисконтнойКарты ИЛИ РегСкидкиНоменклатуры.Условие <> ЗНАЧЕНИЕ(Перечисление.УсловияСкидкиНаценки.ПоВидуДисконтныхКарт)) | И (РегСкидкиНоменклатуры.Условие = ЗНАЧЕНИЕ(Перечисление.УсловияСкидкиНаценки.ПоДисконтнойКарте) И РегСкидкиНоменклатуры.ЗначениеУсловия = &ДисконтнаяКарта ИЛИ РегСкидкиНоменклатуры.Условие <> ЗНАЧЕНИЕ(Перечисление.УсловияСкидкиНаценки.ПоДисконтнойКарте)) | СГРУППИРОВАТЬ ПО | РегСкидкиНоменклатуры.Номенклатура, | РегСкидкиНоменклатуры.ХарактеристикаНоменклатуры, | РегСкидкиНоменклатуры.Качество, | РегСкидкиНоменклатуры.Условие, | ВЫБОР КОГДА РегСкидкиНоменклатуры.Условие = ЗНАЧЕНИЕ(Перечисление.УсловияСкидкиНаценки.ПоСуммеДокумента) ТОГДА | ВЫРАЗИТЬ(РегСкидкиНоменклатуры.ЗначениеУсловия КАК ЧИСЛО) * &КурсКратность * КурсыВалют.Курс / КурсыВалют.Кратность | ИНАЧЕ | РегСкидкиНоменклатуры.ЗначениеУсловия | КОНЕЦ, | РегСкидкиНоменклатуры.ОграничениеСкидкиНаценки * &КурсКратность * КурсыВалют.Курс / КурсыВалют.Кратность | ) КАК РегСкидкиНоменклатуры |ПО | СпрНоменклатура.Номенклатура = РегСкидкиНоменклатуры.Номенклатура | И (СпрНоменклатура.ХарактеристикаНоменклатуры = РегСкидкиНоменклатуры.ХарактеристикаНоменклатуры ИЛИ РегСкидкиНоменклатуры.ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)) | И СпрКачество.Ссылка = РегСкидкиНоменклатуры.Качество |ЛЕВОЕ СОЕДИНЕНИЕ | (ВЫБРАТЬ | РегСкидкиПоЦеновымГруппам.ЦеноваяГруппа, | РегСкидкиПоЦеновымГруппам.Качество, | РегСкидкиПоЦеновымГруппам.Условие, | ВЫБОР КОГДА РегСкидкиПоЦеновымГруппам.Условие = ЗНАЧЕНИЕ(Перечисление.УсловияСкидкиНаценки.ПоСуммеДокумента) ТОГДА | ВЫРАЗИТЬ(РегСкидкиПоЦеновымГруппам.ЗначениеУсловия КАК ЧИСЛО) * &КурсКратность * КурсыВалют.Курс / КурсыВалют.Кратность | ИНАЧЕ | РегСкидкиПоЦеновымГруппам.ЗначениеУсловия | КОНЕЦ КАК ЗначениеУсловия, | МАКСИМУМ(РегСкидкиПоЦеновымГруппам.ПроцентСкидкиНаценки) КАК ПроцентСкидкиНаценки, | РегСкидкиПоЦеновымГруппам.ОграничениеСкидкиНаценки * &КурсКратность * КурсыВалют.Курс / КурсыВалют.Кратность КАК ОграничениеСкидкиНаценки | ИЗ | РегистрСведений.СкидкиНаценкиПоЦеновымГруппам.СрезПоследних(&Дата, Качество В (&МассивКачество) И ПолучательСкидки В (&МассивПолучателей)) КАК РегСкидкиПоЦеновымГруппам | ЛЕВОЕ СОЕДИНЕНИЕ | РегистрСведений.ВремяДействияСкидок КАК ВремяДействия | ПО | РегСкидкиПоЦеновымГруппам.Регистратор = ВремяДействия.Регистратор | ЛЕВОЕ СОЕДИНЕНИЕ | РегистрСведений.КурсыВалют.СрезПоследних(&Дата) КАК КурсыВалют | ПО | РегСкидкиПоЦеновымГруппам.Валюта = КурсыВалют.Валюта | ГДЕ | (ВремяДействия.ДеньНедели ЕСТЬ NULL | ИЛИ ВремяДействия.ДеньНедели = &ДеньНедели | И &ТекущееВремя МЕЖДУ ВремяДействия.ВремяНачала И ВремяДействия.ВремяОкончания) | И РегСкидкиПоЦеновымГруппам.Валюта <> ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка) //| И РегСкидкиПоЦеновымГруппам.ПроцентСкидкиНаценки <> 0 | И(РегСкидкиПоЦеновымГруппам.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1) ИЛИ КОНЕЦПЕРИОДА(РегСкидкиПоЦеновымГруппам.ДатаОкончания, ДЕНЬ) >= &Дата) | И(РегСкидкиПоЦеновымГруппам.Условие = ЗНАЧЕНИЕ(Перечисление.УсловияСкидкиНаценки.ПоСуммеДокумента) И ВЫРАЗИТЬ(РегСкидкиПоЦеновымГруппам.ЗначениеУсловия КАК ЧИСЛО) * &КурсКратность * КурсыВалют.Курс / КурсыВалют.Кратность < &Сумма ИЛИ РегСкидкиПоЦеновымГруппам.Условие <> ЗНАЧЕНИЕ(Перечисление.УсловияСкидкиНаценки.ПоСуммеДокумента)) | И (РегСкидкиПоЦеновымГруппам.Условие = ЗНАЧЕНИЕ(Перечисление.УсловияСкидкиНаценки.ПоВидуОплаты) И РегСкидкиПоЦеновымГруппам.ЗначениеУсловия = &ВидОплаты ИЛИ РегСкидкиПоЦеновымГруппам.Условие <> ЗНАЧЕНИЕ(Перечисление.УсловияСкидкиНаценки.ПоВидуОплаты)) | И (РегСкидкиПоЦеновымГруппам.Условие = ЗНАЧЕНИЕ(Перечисление.УсловияСкидкиНаценки.ПоВидуДисконтныхКарт) И РегСкидкиПоЦеновымГруппам.ЗначениеУсловия = &ВидДисконтнойКарты ИЛИ РегСкидкиПоЦеновымГруппам.Условие <> ЗНАЧЕНИЕ(Перечисление.УсловияСкидкиНаценки.ПоВидуДисконтныхКарт)) | И (РегСкидкиПоЦеновымГруппам.Условие = ЗНАЧЕНИЕ(Перечисление.УсловияСкидкиНаценки.ПоДисконтнойКарте) И РегСкидкиПоЦеновымГруппам.ЗначениеУсловия = &ДисконтнаяКарта ИЛИ РегСкидкиПоЦеновымГруппам.Условие <> ЗНАЧЕНИЕ(Перечисление.УсловияСкидкиНаценки.ПоДисконтнойКарте)) | СГРУППИРОВАТЬ ПО | РегСкидкиПоЦеновымГруппам.ЦеноваяГруппа, | РегСкидкиПоЦеновымГруппам.Качество, | РегСкидкиПоЦеновымГруппам.Условие, | ВЫБОР КОГДА РегСкидкиПоЦеновымГруппам.Условие = ЗНАЧЕНИЕ(Перечисление.УсловияСкидкиНаценки.ПоСуммеДокумента) ТОГДА | ВЫРАЗИТЬ(РегСкидкиПоЦеновымГруппам.ЗначениеУсловия КАК ЧИСЛО) * &КурсКратность * КурсыВалют.Курс / КурсыВалют.Кратность | ИНАЧЕ | РегСкидкиПоЦеновымГруппам.ЗначениеУсловия | КОНЕЦ, | РегСкидкиПоЦеновымГруппам.ОграничениеСкидкиНаценки * &КурсКратность * КурсыВалют.Курс / КурсыВалют.Кратность | ) КАК РегСкидкиПоЦеновымГруппам |ПО | СпрНоменклатура.Номенклатура.ЦеноваяГруппа = РегСкидкиПоЦеновымГруппам.ЦеноваяГруппа | И СпрКачество.Ссылка = РегСкидкиПоЦеновымГруппам.Качество |ГДЕ | РегСкидкиНоменклатуры.Условие ЕСТЬ НЕ NULL | ИЛИ РегСкидкиПоЦеновымГруппам.Условие ЕСТЬ НЕ NULL |"; Запрос.Текст = ТекстЗапроса; Возврат Запрос.Выполнить().Выгрузить(); |
|||
3
vmv
27.12.11
✎
10:19
|
этот лот уходит в 2012
|
|||
4
qwerty072
27.12.11
✎
10:28
|
:)
мда...для начала убери ВЫРАЗИТЬ, это сильно притормаживает работу, округление можно делать при выводе |
|||
5
asady
27.12.11
✎
10:35
|
(0) перепиши с использованием временных таблиц - потом можно и оптимизировать
|
|||
6
Alex S D
27.12.11
✎
10:36
|
(4) думаешь это ускорит работу?
|
|||
7
Alex S D
27.12.11
✎
10:36
|
отключи использование скидок
|
|||
8
Dirk Diggler
27.12.11
✎
10:41
|
(5) мне вообще имхается, что правильным будет вообще отключать вычисление автоскидок, если у контрагента нет ни единой активной записи в соот-щем РС, и делать это надо ПриИзмененииКонтрагента. Сейчас это делается при открытии дока, и контрагент не проверяется...
|
|||
9
qwerty072
27.12.11
✎
10:43
|
(6) конечно, во всей выборке идёт преобразование к числу и сравнивается, это лишнее!
|
|||
10
Dirk Diggler
27.12.11
✎
10:52
|
(7) думал уже ))) да вообще мне кажется нездоровым - тормоза при работе с тч. может где физически что недотягивает?
|
|||
11
qwerty072
27.12.11
✎
11:22
|
(4) пробывал?
|
|||
12
Dirk Diggler
27.12.11
✎
11:43
|
(11) пока нет. не так сразу...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |