Долгий расчет среднего заработка в 1С8 ЗБУ
13.11.2010
23:32
#1
"Имеется база 1С81 ЗБУ релиз 1.0.17.1. При расчете среднего заработка в документе Начисление отпуска программа задумывается на 1.5-2 минуты. У других клиентов та же процедура проходит за 5-10 секунд. Обращались в поддержу 1С, но нам ответили, что сами не знают почему так и сейчас заниматься этим не будут. Просмотр кода показал, что стопор идет в Общем модуле ПроведениеРасчетовПереопределяемый, когда идет выполнение запроса в стр. 2234. Что может так тормозить программу? Кто-нибудь может пролить свет на этот вопрос?
*****************************ТЕКСТ ЗАПРОСА**************************************
ВЫБРАТЬ
РасчетСреднегоЗаработка.НомерСтроки,
РасчетСреднегоЗаработка.ДатаНачалаСобытия,
РасчетСреднегоЗаработка.ДатаНачалаРасчетногоПериода,
РасчетСреднегоЗаработка.ДатаОкончанияРасчетногоПериода,
РасчетСреднегоЗаработка.ПериодРасчетаСреднегоЗаработка,
РасчетСреднегоЗаработка.ПериодРегистрации,
РасчетСреднегоЗаработка.БазовыйПериодНачало,
РасчетСреднегоЗаработка.БазовыйПериодКонец,
РасчетСреднегоЗаработка.Сотрудник КАК Сотрудник,
РасчетСреднегоЗаработка.Сотрудник.Физлицо КАК ФизЛицо,
РасчетСреднегоЗаработка.Сотрудник.Организация КАК Организация,
РасчетСреднегоЗаработка.ВидРасчета КАК ВидРасчета,
СреднийЗаработокБазовыеВидыРасчета.ВидРасчета КАК БазовыйВидРасчета
ПОМЕСТИТЬ ВТСтрокиСреднегоЗаработка
ИЗ
РегистрРасчета.РасчетСреднегоЗаработка КАК РасчетСреднегоЗаработка
ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.СреднийЗаработок.БазовыеВидыРасчета КАК СреднийЗаработокБазовыеВидыРасчета
ПО РасчетСреднегоЗаработка.ВидРасчета = СреднийЗаработокБазовыеВидыРасчета.Ссылка
ГДЕ
РасчетСреднегоЗаработка.Регистратор = &парамРегистратор
ИНДЕКСИРОВАТЬ ПО
Сотрудник,
ВидРасчета
;
//////////////////////////////////////////////////// ////////////////////////////
ВЫБРАТЬ
СтраховыеВзносыСведенияОДоходахОбороты.Период КАК Период,
СтраховыеВзносыСведенияОДоходахОбороты.ФизЛицо КАК ФизЛицо,
СтраховыеВзносыСведенияОДоходахОбороты.Организация КАК Организация,
СтраховыеВзносыСведенияОДоходахОбороты.ВидДохода КАК ВидДохода,
СтраховыеВзносыСведенияОДоходахОбороты.СкидкаОборот
ПОМЕСТИТЬ ВТДанныеУчетаСкидок
ИЗ
РегистрНакопления.СтраховыеВзносыСведенияОДоходах.Обороты(
&парамДатаС,
&парамДатаПо,
Месяц,
(ФизЛицо, Организация) В
(ВЫБРАТЬ
СтрокиСреднегоЗаработка.ФизЛицо,
СтрокиСреднегоЗаработка.Организация
ИЗ
ВТСтрокиСреднегоЗаработка КАК СтрокиСреднегоЗаработка)
И ВидДохода В (ЗНАЧЕНИЕ(Справочник.ДоходыПоСтраховымВзносам.Матпомощь), ЗНАЧЕНИЕ(Справочник.ДоходыПоСтраховымВзносам.МатпомощьПриРожденииРебенка))) КАК СтраховыеВзносыСведенияОДоходахОбороты
ГДЕ
СтраховыеВзносыСведенияОДоходахОбороты.Период >= &ДатаЗакона213ФЗ
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(ЕСНСведенияОДоходах.Период, МЕСЯЦ),
ЕСНСведенияОДоходах.ФизЛицо,
ЕСНСведенияОДоходах.Организация,
ЕСНСведенияОДоходах.КодДоходаЕСН,
СУММА(ЕСНСведенияОДоходах.Скидка)
ИЗ
РегистрНакопления.ЕСНСведенияОДоходах КАК ЕСНСведенияОДоходах
ГДЕ
(ЕСНСведенияОДоходах.ФизЛицо, ЕСНСведенияОДоходах.Организация) В
(ВЫБРАТЬ
СтрокиСреднегоЗаработка.ФизЛицо,
СтрокиСреднегоЗаработка.Организация
ИЗ
ВТСтрокиСреднегоЗаработка КАК СтрокиСреднегоЗаработка)
И ЕСНСведенияОДоходах.КодДоходаЕСН В (ЗНАЧЕНИЕ(Справочник.ДоходыЕСН.Матпомощь), ЗНАЧЕНИЕ(Справочник.ДоходыЕСН.МатпомощьПриРожденииРебенка))
И ЕСНСведенияОДоходах.Период МЕЖДУ &парамДатаС И &парамДатаПо
И ЕСНСведенияОДоходах.Период < &ДатаЗакона213ФЗ
СГРУППИРОВАТЬ ПО
ЕСНСведенияОДоходах.ФизЛицо,
ЕСНСведенияОДоходах.Организация,
ЕСНСведенияОДоходах.КодДоходаЕСН,
НАЧАЛОПЕРИОДА(ЕСНСведенияОДоходах.Период, МЕСЯЦ)
ИНДЕКСИРОВАТЬ ПО
Период,
ВидДохода,
ФизЛицо,
Организация
;
//////////////////////////////////////////////////// ////////////////////////////
ВЫБРАТЬ
БазаДополнительныеНачисления.РезультатБаза,
БазаДополнительныеНачисления.ПериодРасчетаСреднегоЗаработка,
БазаДополнительныеНачисления.НомерСтроки,
БазаДополнительныеНачисления.ФизЛицо КАК ФизЛицо,
БазаДополнительныеНачисления.Организация КАК Организация,
ВЫБОР
КОГДА БазаДополнительныеНачисления.БазовыйПериодНачало < &ДатаЗакона213ФЗ
ТОГДА БазаДополнительныеНачисления.ВидРасчетаРазрез.КодДоходаЕСН
ИНАЧЕ БазаДополнительныеНачисления.ВидРасчетаРазрез.КодДоходаСтраховыеВзносы
КОНЕЦ КАК КодДоходаСтраховыеВзносы,
БазаДополнительныеНачисления.Сотрудник.ВидЗанятости КАК ВидЗанятости,
БазаДополнительныеНачисления.БазовыйПериодНачало КАК БазовыйПериодНачало
ПОМЕСТИТЬ ВТБазаДопНачисленийПоБЛ
ИЗ
РегистрРасчета.РасчетСреднегоЗаработка.БазаДополнительныеНачисленияРаботниковОрганизаций(
&парамИзмерения,
&парамИзмерения,
&парамРазрезыБЛ,
Регистратор = &парамРегистратор
И ВидРасчета В (ЗНАЧЕНИЕ(ПланВидовРасчета.СреднийЗаработок.ПоЗаработкуПособийС2010), ЗНАЧЕНИЕ(ПланВидовРасчета.СреднийЗаработок.ПоПремиямПособийС2010))) КАК БазаДополнительныеНачисления
ИНДЕКСИРОВАТЬ ПО
БазовыйПериодНачало,
КодДоходаСтраховыеВзносы,
ФизЛицо,
Организация
;
//////////////////////////////////////////////////// ////////////////////////////
ВЫБРАТЬ
ЕСТЬNULL(СУММА(База.РезультатБаза), 0) КАК РезультатБаза,
База.ЧислоМесяцев,
База.ПериодРасчетаСреднегоЗаработка,
База.НомерСтроки КАК НомерСтроки,
База.ОшибкаВводаСводногоТабеля,
ЕСТЬNULL(СУММА(База.СкидкаПоСтраховымВзносам), 0) КАК СкидкаПоСтраховымВзносам
ИЗ
(ВЫБРАТЬ
БазаОсновныеНачисления.РезультатБаза КАК РезультатБаза,
1 КАК ЧислоМесяцев,
БазаОсновныеНачисления.ПериодРасчетаСреднегоЗаработка КАК ПериодРасчетаСреднегоЗаработка,
БазаОсновныеНачисления.НомерСтроки КАК НомерСтроки,
ВЫБОР
КОГДА ОтработанноеВремя.Период ЕСТЬ НЕ NULL
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ КАК ОшибкаВводаСводногоТабеля,
0 КАК СкидкаПоСтраховымВзносам
ИЗ
РегистрРасчета.РасчетСреднегоЗаработка.БазаОсновныеНачисленияРаботниковОрганизаций(
&парамИзмерения,
&парамИзмерения,
&парамРазрезы,
Регистратор = &парамРегистратор
И ВидРасчета В (&парамЗаработок)
И (БазовыйПериодНачало <> НАЧАЛОПЕРИОДА(БазовыйПериодНачало, МЕСЯЦ)
ИЛИ БазовыйПериодКонец <> КОНЕЦПЕРИОДА(БазовыйПериодКонец, МЕСЯЦ))) КАК БазаОсновныеНачисления
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РабочееВремяРаботниковОрганизаций КАК ОтработанноеВремя
ПО БазаОсновныеНачисления.Сотрудник = ОтработанноеВремя.Сотрудник
И (НАЧАЛОПЕРИОДА(БазаОсновныеНачисления.БазовыйПериодНачало, МЕСЯЦ) = ОтработанноеВремя.Период)
И (ОтработанноеВремя.ВидИспользованияРабочегоВремени = ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.Работа))
И (ОтработанноеВремя.ВЦеломЗаПериод)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ОсновныеНачисленияРаботниковОрганизаций.Результат,
1,
РасчетСреднегоЗаработка.ПериодРасчетаСреднегоЗаработка,
РасчетСреднегоЗаработка.НомерСтроки,
ЛОЖЬ,
0
ИЗ
ВТСтрокиСреднегоЗаработка КАК РасчетСреднегоЗаработка
ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисленияРаботниковОрганизаций
ПО РасчетСреднегоЗаработка.БазовыйВидРасчета = ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета
И РасчетСреднегоЗаработка.Сотрудник = ОсновныеНачисленияРаботниковОрганизаций.Сотрудник
И (ОсновныеНачисленияРаботниковОрганизаций.ПериодДействия = НАЧАЛОПЕРИОДА(РасчетСреднегоЗаработка.БазовыйПериодНачало, МЕСЯЦ))
И (ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации <= РасчетСреднегоЗаработка.ПериодРегистрации)
ГДЕ
РасчетСреднегоЗаработка.ВидРасчета В(&парамЗаработок)
И РасчетСреднегоЗаработка.БазовыйПериодНачало = НАЧАЛОПЕРИОДА(РасчетСреднегоЗаработка.БазовыйПериодНачало, МЕСЯЦ)
И РасчетСреднегоЗаработка.БазовыйПериодКонец = КОНЕЦПЕРИОДА(РасчетСреднегоЗаработка.БазовыйПериодКонец, МЕСЯЦ)
И ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета ЕСТЬ НЕ NULL
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
БазаДополнительныеНачисления.РезультатБаза,
ВЫБОР
КОГДА БазаДополнительныеНачисления.ЧислоМесяцевРазрез = 0
ТОГДА 1
ИНАЧЕ БазаДополнительныеНачисления.ЧислоМесяцевРазрез
КОНЕЦ,
БазаДополнительныеНачисления.ПериодРасчетаСреднегоЗаработка,
БазаДополнительныеНачисления.НомерСтроки,
ЛОЖЬ,
0
ИЗ
РегистрРасчета.РасчетСреднегоЗаработка.БазаДополнительныеНачисленияРаботниковОрганизаций(
&парамИзмерения,
&парамИзмерения,
&парамРазрезыДоп,
Регистратор = &парамРегистратор
И ВидРасчета В (&парамЗаработокБезБольничных)) КАК БазаДополнительныеНачисления
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
БазаДополнительныеНачисления.РезультатБаза - ЕСТЬNULL(ВЫБОР
КОГДА ЕСТЬNULL(ДанныеУчетаСкидок.СкидкаОборот, 0) = 0
ТОГДА 0
КОГДА БазаДополнительныеНачисления.РезультатБаза > ДанныеУчетаСкидок.СкидкаОборот
ТОГДА ДанныеУчетаСкидок.СкидкаОборот
ИНАЧЕ БазаДополнительныеНачисления.РезультатБаза
КОНЕЦ, 0),
1,
БазаДополнительныеНачисления.ПериодРасчетаСреднегоЗаработка,
БазаДополнительныеНачисления.НомерСтроки,
ЛОЖЬ,
ЕСТЬNULL(ВЫБОР
КОГДА ЕСТЬNULL(ДанныеУчетаСкидок.СкидкаОборот, 0) = 0
ТОГДА 0
КОГДА БазаДополнительныеНачисления.РезультатБаза > ДанныеУчетаСкидок.СкидкаОборот
ТОГДА ДанныеУчетаСкидок.СкидкаОборот
ИНАЧЕ БазаДополнительныеНачисления.РезультатБаза
КОНЕЦ, 0)
ИЗ
ВТБазаДопНачисленийПоБЛ КАК БазаДополнительныеНачисления
ЛЕВОЕ СОЕДИНЕНИЕ ВТДанныеУчетаСкидок КАК ДанныеУчетаСкидок
ПО БазаДополнительныеНачисления.ФизЛицо = ДанныеУчетаСкидок.ФизЛицо
И БазаДополнительныеНачисления.Организация = ДанныеУчетаСкидок.Организация
И БазаДополнительныеНачисления.КодДоходаСтраховыеВзносы = ДанныеУчетаСкидок.ВидДохода
И (БазаДополнительныеНачисления.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство))
И БазаДополнительныеНачисления.БазовыйПериодНачало = ДанныеУчетаСкидок.Период
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
Дополнительные.Результат,
12,
РасчетСреднегоЗаработка.ПериодРасчетаСреднегоЗаработка,
РасчетСреднегоЗаработка.НомерСтроки,
ЛОЖЬ,
0
ИЗ
ВТСтрокиСреднегоЗаработка КАК РасчетСреднегоЗаработка
ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ДополнительныеНачисленияРаботниковОрганизаций КАК Дополнительные
ПО РасчетСреднегоЗаработка.БазовыйВидРасчета = Дополнительные.ВидРасчета
И РасчетСреднегоЗаработка.Сотрудник = Дополнительные.Сотрудник
И (НАЧАЛОПЕРИОДА(Дополнительные.ПериодРегистрации, МЕСЯЦ) <= РасчетСреднегоЗаработка.ПериодРегистрации)
И (ГОД(Дополнительные.БазовыйПериодНачало) = ГОД(РасчетСреднегоЗаработка.ДатаНачалаСобытия) - 1)
ГДЕ
РасчетСреднегоЗаработка.ВидРасчета В(&парамПоГодовойПремии)
И Дополнительные.ВидРасчета ЕСТЬ НЕ NULL
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ОсновныеНачисления.Результат,
12,
РасчетСреднегоЗаработка.ПериодРасчетаСреднегоЗаработка,
РасчетСреднегоЗаработка.НомерСтроки,
ЛОЖЬ,
0
ИЗ
ВТСтрокиСреднегоЗаработка КАК РасчетСреднегоЗаработка
ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисления
ПО РасчетСреднегоЗаработка.БазовыйВидРасчета = ОсновныеНачисления.ВидРасчета
И РасчетСреднегоЗаработка.Сотрудник = ОсновныеНачисления.Сотрудник
И (ОсновныеНачисления.ПериодРегистрации <= РасчетСреднегоЗаработка.ПериодРегистрации)
И (ГОД(ВЫБОР
КОГДА ОсновныеНачисления.ВидРасчета.ПериодДействияБазовый
ТОГДА ОсновныеНачисления.ПериодДействияНачало
ИНАЧЕ ОсновныеНачисления.БазовыйПериодНачало
КОНЕЦ) = ГОД(РасчетСреднегоЗаработка.ДатаНачалаСобытия) - 1)
ГДЕ
РасчетСреднегоЗаработка.ВидРасчета В(&парамПоГодовойПремии)
И ОсновныеНачисления.ВидРасчета ЕСТЬ НЕ NULL
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
Дополнительные.Результат,
12,
РасчетСреднегоЗаработка.ПериодРасчетаСреднегоЗаработка,
РасчетСреднегоЗаработка.НомерСтроки,
ЛОЖЬ,
0
ИЗ
ВТСтрокиСреднегоЗаработка КАК РасчетСреднегоЗаработка
ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ДополнительныеНачисленияРаботниковОрганизаций КАК Дополнительные
ПО РасчетСреднегоЗаработка.БазовыйВидРасчета = Дополнительные.ВидРасчета
И РасчетСреднегоЗаработка.Сотрудник = Дополнительные.Сотрудник
И (НАЧАЛОПЕРИОДА(Дополнительные.ПериодРегистрации, МЕСЯЦ) <= РасчетСреднегоЗаработка.ПериодРегистрации)
И (ГОД(Дополнительные.БазовыйПериодНачало) = ГОД(РасчетСреднегоЗаработка.ДатаНачалаСобытия) - 1)
И (Дополнительные.ПериодРегистрации МЕЖДУ РасчетСреднегоЗаработка.БазовыйПериодНачало И РасчетСреднегоЗаработка.БазовыйПериодКонец
ИЛИ РасчетСреднегоЗаработка.БазовыйПериодНачало = РасчетСреднегоЗаработка.ДатаНачалаРасчетногоПериода
И Дополнительные.ПериодРегистрации < РасчетСреднегоЗаработка.ДатаНачалаРасчетногоПериода
ИЛИ КОНЕЦПЕРИОДА(РасчетСреднегоЗаработка.БазовыйПериодКонец, ДЕНЬ) = КОНЕЦПЕРИОДА(РасчетСреднегоЗаработка.ДатаОкончанияРасчетногоПериода, ДЕНЬ)
И Дополнительные.ПериодРегистрации > РасчетСреднегоЗаработка.ДатаОкончанияРасчетногоПериода)
ГДЕ
РасчетСреднегоЗаработка.ВидРасчета В(&парамПоГодовойПремииИндексируемые)
И Дополнительные.ВидРасчета ЕСТЬ НЕ NULL
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ОсновныеНачисления.Результат,
12,
РасчетСреднегоЗаработка.ПериодРасчетаСреднегоЗаработка,
РасчетСреднегоЗаработка.НомерСтроки,
ЛОЖЬ,
0
ИЗ
ВТСтрокиСреднегоЗаработка КАК РасчетСреднегоЗаработка
ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисления
ПО РасчетСреднегоЗаработка.БазовыйВидРасчета = ОсновныеНачисления.ВидРасчета
И РасчетСреднегоЗаработка.Сотрудник = ОсновныеНачисления.Сотрудник
И (ОсновныеНачисления.ПериодРегистрации <= РасчетСреднегоЗаработка.ПериодРегистрации)
И (ГОД(ВЫБОР
КОГДА ОсновныеНачисления.ВидРасчета.ПериодДействияБазовый
ТОГДА ОсновныеНачисления.ПериодДействияНачало
ИНАЧЕ ОсновныеНачисления.БазовыйПериодНачало
КОНЕЦ) = ГОД(РасчетСреднегоЗаработка.ДатаНачалаСобытия) - 1)
И (ОсновныеНачисления.ПериодРегистрации МЕЖДУ РасчетСреднегоЗаработка.БазовыйПериодНачало И РасчетСреднегоЗаработка.БазовыйПериодКонец
ИЛИ РасчетСреднегоЗаработка.БазовыйПериодНачало = РасчетСреднегоЗаработка.ДатаНачалаРасчетногоПериода
И ОсновныеНачисления.ПериодРегистрации < РасчетСреднегоЗаработка.ДатаНачалаРасчетногоПериода
ИЛИ КОНЕЦПЕРИОДА(РасчетСреднегоЗаработка.БазовыйПериодКонец, ДЕНЬ) = КОНЕЦПЕРИОДА(РасчетСреднегоЗаработка.ДатаОкончанияРасчетногоПериода, ДЕНЬ)
И ОсновныеНачисления.ПериодРегистрации > РасчетСреднегоЗаработка.ДатаОкончанияРасчетногоПериода)
ГДЕ
РасчетСреднегоЗаработка.ВидРасчета В(&парамПоГодовойПремииИндексируемые)
И ОсновныеНачисления.ВидРасчета ЕСТЬ НЕ NULL ) КАК База
СГРУППИРОВАТЬ ПО
База.ЧислоМесяцев,
База.ПериодРасчетаСреднегоЗаработка,
База.НомерСтроки,
База.ОшибкаВводаСводногоТабеля
УПОРЯДОЧИТЬ ПО
НомерСтроки"
*****************************ТЕКСТ ЗАПРОСА**************************************
ВЫБРАТЬ
РасчетСреднегоЗаработка.НомерСтроки,
РасчетСреднегоЗаработка.ДатаНачалаСобытия,
РасчетСреднегоЗаработка.ДатаНачалаРасчетногоПериода,
РасчетСреднегоЗаработка.ДатаОкончанияРасчетногоПериода,
РасчетСреднегоЗаработка.ПериодРасчетаСреднегоЗаработка,
РасчетСреднегоЗаработка.ПериодРегистрации,
РасчетСреднегоЗаработка.БазовыйПериодНачало,
РасчетСреднегоЗаработка.БазовыйПериодКонец,
РасчетСреднегоЗаработка.Сотрудник КАК Сотрудник,
РасчетСреднегоЗаработка.Сотрудник.Физлицо КАК ФизЛицо,
РасчетСреднегоЗаработка.Сотрудник.Организация КАК Организация,
РасчетСреднегоЗаработка.ВидРасчета КАК ВидРасчета,
СреднийЗаработокБазовыеВидыРасчета.ВидРасчета КАК БазовыйВидРасчета
ПОМЕСТИТЬ ВТСтрокиСреднегоЗаработка
ИЗ
РегистрРасчета.РасчетСреднегоЗаработка КАК РасчетСреднегоЗаработка
ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.СреднийЗаработок.БазовыеВидыРасчета КАК СреднийЗаработокБазовыеВидыРасчета
ПО РасчетСреднегоЗаработка.ВидРасчета = СреднийЗаработокБазовыеВидыРасчета.Ссылка
ГДЕ
РасчетСреднегоЗаработка.Регистратор = &парамРегистратор
ИНДЕКСИРОВАТЬ ПО
Сотрудник,
ВидРасчета
;
////////////////////////////////////////////////////
ВЫБРАТЬ
СтраховыеВзносыСведенияОДоходахОбороты.Период КАК Период,
СтраховыеВзносыСведенияОДоходахОбороты.ФизЛицо КАК ФизЛицо,
СтраховыеВзносыСведенияОДоходахОбороты.Организация КАК Организация,
СтраховыеВзносыСведенияОДоходахОбороты.ВидДохода КАК ВидДохода,
СтраховыеВзносыСведенияОДоходахОбороты.СкидкаОборот
ПОМЕСТИТЬ ВТДанныеУчетаСкидок
ИЗ
РегистрНакопления.СтраховыеВзносыСведенияОДоходах.Обороты(
&парамДатаС,
&парамДатаПо,
Месяц,
(ФизЛицо, Организация) В
(ВЫБРАТЬ
СтрокиСреднегоЗаработка.ФизЛицо,
СтрокиСреднегоЗаработка.Организация
ИЗ
ВТСтрокиСреднегоЗаработка КАК СтрокиСреднегоЗаработка)
И ВидДохода В (ЗНАЧЕНИЕ(Справочник.ДоходыПоСтраховымВзносам.Матпомощь), ЗНАЧЕНИЕ(Справочник.ДоходыПоСтраховымВзносам.МатпомощьПриРожденииРебенка))) КАК СтраховыеВзносыСведенияОДоходахОбороты
ГДЕ
СтраховыеВзносыСведенияОДоходахОбороты.Период >= &ДатаЗакона213ФЗ
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(ЕСНСведенияОДоходах.Период, МЕСЯЦ),
ЕСНСведенияОДоходах.ФизЛицо,
ЕСНСведенияОДоходах.Организация,
ЕСНСведенияОДоходах.КодДоходаЕСН,
СУММА(ЕСНСведенияОДоходах.Скидка)
ИЗ
РегистрНакопления.ЕСНСведенияОДоходах КАК ЕСНСведенияОДоходах
ГДЕ
(ЕСНСведенияОДоходах.ФизЛицо, ЕСНСведенияОДоходах.Организация) В
(ВЫБРАТЬ
СтрокиСреднегоЗаработка.ФизЛицо,
СтрокиСреднегоЗаработка.Организация
ИЗ
ВТСтрокиСреднегоЗаработка КАК СтрокиСреднегоЗаработка)
И ЕСНСведенияОДоходах.КодДоходаЕСН В (ЗНАЧЕНИЕ(Справочник.ДоходыЕСН.Матпомощь), ЗНАЧЕНИЕ(Справочник.ДоходыЕСН.МатпомощьПриРожденииРебенка))
И ЕСНСведенияОДоходах.Период МЕЖДУ &парамДатаС И &парамДатаПо
И ЕСНСведенияОДоходах.Период < &ДатаЗакона213ФЗ
СГРУППИРОВАТЬ ПО
ЕСНСведенияОДоходах.ФизЛицо,
ЕСНСведенияОДоходах.Организация,
ЕСНСведенияОДоходах.КодДоходаЕСН,
НАЧАЛОПЕРИОДА(ЕСНСведенияОДоходах.Период, МЕСЯЦ)
ИНДЕКСИРОВАТЬ ПО
Период,
ВидДохода,
ФизЛицо,
Организация
;
////////////////////////////////////////////////////
ВЫБРАТЬ
БазаДополнительныеНачисления.РезультатБаза,
БазаДополнительныеНачисления.ПериодРасчетаСреднегоЗаработка,
БазаДополнительныеНачисления.НомерСтроки,
БазаДополнительныеНачисления.ФизЛицо КАК ФизЛицо,
БазаДополнительныеНачисления.Организация КАК Организация,
ВЫБОР
КОГДА БазаДополнительныеНачисления.БазовыйПериодНачало < &ДатаЗакона213ФЗ
ТОГДА БазаДополнительныеНачисления.ВидРасчетаРазрез.КодДоходаЕСН
ИНАЧЕ БазаДополнительныеНачисления.ВидРасчетаРазрез.КодДоходаСтраховыеВзносы
КОНЕЦ КАК КодДоходаСтраховыеВзносы,
БазаДополнительныеНачисления.Сотрудник.ВидЗанятости КАК ВидЗанятости,
БазаДополнительныеНачисления.БазовыйПериодНачало КАК БазовыйПериодНачало
ПОМЕСТИТЬ ВТБазаДопНачисленийПоБЛ
ИЗ
РегистрРасчета.РасчетСреднегоЗаработка.БазаДополнительныеНачисленияРаботниковОрганизаций(
&парамИзмерения,
&парамИзмерения,
&парамРазрезыБЛ,
Регистратор = &парамРегистратор
И ВидРасчета В (ЗНАЧЕНИЕ(ПланВидовРасчета.СреднийЗаработок.ПоЗаработкуПособийС2010), ЗНАЧЕНИЕ(ПланВидовРасчета.СреднийЗаработок.ПоПремиямПособийС2010))) КАК БазаДополнительныеНачисления
ИНДЕКСИРОВАТЬ ПО
БазовыйПериодНачало,
КодДоходаСтраховыеВзносы,
ФизЛицо,
Организация
;
////////////////////////////////////////////////////
ВЫБРАТЬ
ЕСТЬNULL(СУММА(База.РезультатБаза), 0) КАК РезультатБаза,
База.ЧислоМесяцев,
База.ПериодРасчетаСреднегоЗаработка,
База.НомерСтроки КАК НомерСтроки,
База.ОшибкаВводаСводногоТабеля,
ЕСТЬNULL(СУММА(База.СкидкаПоСтраховымВзносам), 0) КАК СкидкаПоСтраховымВзносам
ИЗ
(ВЫБРАТЬ
БазаОсновныеНачисления.РезультатБаза КАК РезультатБаза,
1 КАК ЧислоМесяцев,
БазаОсновныеНачисления.ПериодРасчетаСреднегоЗаработка КАК ПериодРасчетаСреднегоЗаработка,
БазаОсновныеНачисления.НомерСтроки КАК НомерСтроки,
ВЫБОР
КОГДА ОтработанноеВремя.Период ЕСТЬ НЕ NULL
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ КАК ОшибкаВводаСводногоТабеля,
0 КАК СкидкаПоСтраховымВзносам
ИЗ
РегистрРасчета.РасчетСреднегоЗаработка.БазаОсновныеНачисленияРаботниковОрганизаций(
&парамИзмерения,
&парамИзмерения,
&парамРазрезы,
Регистратор = &парамРегистратор
И ВидРасчета В (&парамЗаработок)
И (БазовыйПериодНачало <> НАЧАЛОПЕРИОДА(БазовыйПериодНачало, МЕСЯЦ)
ИЛИ БазовыйПериодКонец <> КОНЕЦПЕРИОДА(БазовыйПериодКонец, МЕСЯЦ))) КАК БазаОсновныеНачисления
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РабочееВремяРаботниковОрганизаций КАК ОтработанноеВремя
ПО БазаОсновныеНачисления.Сотрудник = ОтработанноеВремя.Сотрудник
И (НАЧАЛОПЕРИОДА(БазаОсновныеНачисления.БазовыйПериодНачало, МЕСЯЦ) = ОтработанноеВремя.Период)
И (ОтработанноеВремя.ВидИспользованияРабочегоВремени = ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.Работа))
И (ОтработанноеВремя.ВЦеломЗаПериод)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ОсновныеНачисленияРаботниковОрганизаций.Результат,
1,
РасчетСреднегоЗаработка.ПериодРасчетаСреднегоЗаработка,
РасчетСреднегоЗаработка.НомерСтроки,
ЛОЖЬ,
0
ИЗ
ВТСтрокиСреднегоЗаработка КАК РасчетСреднегоЗаработка
ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисленияРаботниковОрганизаций
ПО РасчетСреднегоЗаработка.БазовыйВидРасчета = ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета
И РасчетСреднегоЗаработка.Сотрудник = ОсновныеНачисленияРаботниковОрганизаций.Сотрудник
И (ОсновныеНачисленияРаботниковОрганизаций.ПериодДействия = НАЧАЛОПЕРИОДА(РасчетСреднегоЗаработка.БазовыйПериодНачало, МЕСЯЦ))
И (ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации <= РасчетСреднегоЗаработка.ПериодРегистрации)
ГДЕ
РасчетСреднегоЗаработка.ВидРасчета В(&парамЗаработок)
И РасчетСреднегоЗаработка.БазовыйПериодНачало = НАЧАЛОПЕРИОДА(РасчетСреднегоЗаработка.БазовыйПериодНачало, МЕСЯЦ)
И РасчетСреднегоЗаработка.БазовыйПериодКонец = КОНЕЦПЕРИОДА(РасчетСреднегоЗаработка.БазовыйПериодКонец, МЕСЯЦ)
И ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета ЕСТЬ НЕ NULL
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
БазаДополнительныеНачисления.РезультатБаза,
ВЫБОР
КОГДА БазаДополнительныеНачисления.ЧислоМесяцевРазрез = 0
ТОГДА 1
ИНАЧЕ БазаДополнительныеНачисления.ЧислоМесяцевРазрез
КОНЕЦ,
БазаДополнительныеНачисления.ПериодРасчетаСреднегоЗаработка,
БазаДополнительныеНачисления.НомерСтроки,
ЛОЖЬ,
0
ИЗ
РегистрРасчета.РасчетСреднегоЗаработка.БазаДополнительныеНачисленияРаботниковОрганизаций(
&парамИзмерения,
&парамИзмерения,
&парамРазрезыДоп,
Регистратор = &парамРегистратор
И ВидРасчета В (&парамЗаработокБезБольничных)) КАК БазаДополнительныеНачисления
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
БазаДополнительныеНачисления.РезультатБаза - ЕСТЬNULL(ВЫБОР
КОГДА ЕСТЬNULL(ДанныеУчетаСкидок.СкидкаОборот, 0) = 0
ТОГДА 0
КОГДА БазаДополнительныеНачисления.РезультатБаза > ДанныеУчетаСкидок.СкидкаОборот
ТОГДА ДанныеУчетаСкидок.СкидкаОборот
ИНАЧЕ БазаДополнительныеНачисления.РезультатБаза
КОНЕЦ, 0),
1,
БазаДополнительныеНачисления.ПериодРасчетаСреднегоЗаработка,
БазаДополнительныеНачисления.НомерСтроки,
ЛОЖЬ,
ЕСТЬNULL(ВЫБОР
КОГДА ЕСТЬNULL(ДанныеУчетаСкидок.СкидкаОборот, 0) = 0
ТОГДА 0
КОГДА БазаДополнительныеНачисления.РезультатБаза > ДанныеУчетаСкидок.СкидкаОборот
ТОГДА ДанныеУчетаСкидок.СкидкаОборот
ИНАЧЕ БазаДополнительныеНачисления.РезультатБаза
КОНЕЦ, 0)
ИЗ
ВТБазаДопНачисленийПоБЛ КАК БазаДополнительныеНачисления
ЛЕВОЕ СОЕДИНЕНИЕ ВТДанныеУчетаСкидок КАК ДанныеУчетаСкидок
ПО БазаДополнительныеНачисления.ФизЛицо = ДанныеУчетаСкидок.ФизЛицо
И БазаДополнительныеНачисления.Организация = ДанныеУчетаСкидок.Организация
И БазаДополнительныеНачисления.КодДоходаСтраховыеВзносы = ДанныеУчетаСкидок.ВидДохода
И (БазаДополнительныеНачисления.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство))
И БазаДополнительныеНачисления.БазовыйПериодНачало = ДанныеУчетаСкидок.Период
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
Дополнительные.Результат,
12,
РасчетСреднегоЗаработка.ПериодРасчетаСреднегоЗаработка,
РасчетСреднегоЗаработка.НомерСтроки,
ЛОЖЬ,
0
ИЗ
ВТСтрокиСреднегоЗаработка КАК РасчетСреднегоЗаработка
ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ДополнительныеНачисленияРаботниковОрганизаций КАК Дополнительные
ПО РасчетСреднегоЗаработка.БазовыйВидРасчета = Дополнительные.ВидРасчета
И РасчетСреднегоЗаработка.Сотрудник = Дополнительные.Сотрудник
И (НАЧАЛОПЕРИОДА(Дополнительные.ПериодРегистрации, МЕСЯЦ) <= РасчетСреднегоЗаработка.ПериодРегистрации)
И (ГОД(Дополнительные.БазовыйПериодНачало) = ГОД(РасчетСреднегоЗаработка.ДатаНачалаСобытия) - 1)
ГДЕ
РасчетСреднегоЗаработка.ВидРасчета В(&парамПоГодовойПремии)
И Дополнительные.ВидРасчета ЕСТЬ НЕ NULL
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ОсновныеНачисления.Результат,
12,
РасчетСреднегоЗаработка.ПериодРасчетаСреднегоЗаработка,
РасчетСреднегоЗаработка.НомерСтроки,
ЛОЖЬ,
0
ИЗ
ВТСтрокиСреднегоЗаработка КАК РасчетСреднегоЗаработка
ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисления
ПО РасчетСреднегоЗаработка.БазовыйВидРасчета = ОсновныеНачисления.ВидРасчета
И РасчетСреднегоЗаработка.Сотрудник = ОсновныеНачисления.Сотрудник
И (ОсновныеНачисления.ПериодРегистрации <= РасчетСреднегоЗаработка.ПериодРегистрации)
И (ГОД(ВЫБОР
КОГДА ОсновныеНачисления.ВидРасчета.ПериодДействияБазовый
ТОГДА ОсновныеНачисления.ПериодДействияНачало
ИНАЧЕ ОсновныеНачисления.БазовыйПериодНачало
КОНЕЦ) = ГОД(РасчетСреднегоЗаработка.ДатаНачалаСобытия) - 1)
ГДЕ
РасчетСреднегоЗаработка.ВидРасчета В(&парамПоГодовойПремии)
И ОсновныеНачисления.ВидРасчета ЕСТЬ НЕ NULL
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
Дополнительные.Результат,
12,
РасчетСреднегоЗаработка.ПериодРасчетаСреднегоЗаработка,
РасчетСреднегоЗаработка.НомерСтроки,
ЛОЖЬ,
0
ИЗ
ВТСтрокиСреднегоЗаработка КАК РасчетСреднегоЗаработка
ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ДополнительныеНачисленияРаботниковОрганизаций КАК Дополнительные
ПО РасчетСреднегоЗаработка.БазовыйВидРасчета = Дополнительные.ВидРасчета
И РасчетСреднегоЗаработка.Сотрудник = Дополнительные.Сотрудник
И (НАЧАЛОПЕРИОДА(Дополнительные.ПериодРегистрации, МЕСЯЦ) <= РасчетСреднегоЗаработка.ПериодРегистрации)
И (ГОД(Дополнительные.БазовыйПериодНачало) = ГОД(РасчетСреднегоЗаработка.ДатаНачалаСобытия) - 1)
И (Дополнительные.ПериодРегистрации МЕЖДУ РасчетСреднегоЗаработка.БазовыйПериодНачало И РасчетСреднегоЗаработка.БазовыйПериодКонец
ИЛИ РасчетСреднегоЗаработка.БазовыйПериодНачало = РасчетСреднегоЗаработка.ДатаНачалаРасчетногоПериода
И Дополнительные.ПериодРегистрации < РасчетСреднегоЗаработка.ДатаНачалаРасчетногоПериода
ИЛИ КОНЕЦПЕРИОДА(РасчетСреднегоЗаработка.БазовыйПериодКонец, ДЕНЬ) = КОНЕЦПЕРИОДА(РасчетСреднегоЗаработка.ДатаОкончанияРасчетногоПериода, ДЕНЬ)
И Дополнительные.ПериодРегистрации > РасчетСреднегоЗаработка.ДатаОкончанияРасчетногоПериода)
ГДЕ
РасчетСреднегоЗаработка.ВидРасчета В(&парамПоГодовойПремииИндексируемые)
И Дополнительные.ВидРасчета ЕСТЬ НЕ NULL
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ОсновныеНачисления.Результат,
12,
РасчетСреднегоЗаработка.ПериодРасчетаСреднегоЗаработка,
РасчетСреднегоЗаработка.НомерСтроки,
ЛОЖЬ,
0
ИЗ
ВТСтрокиСреднегоЗаработка КАК РасчетСреднегоЗаработка
ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисления
ПО РасчетСреднегоЗаработка.БазовыйВидРасчета = ОсновныеНачисления.ВидРасчета
И РасчетСреднегоЗаработка.Сотрудник = ОсновныеНачисления.Сотрудник
И (ОсновныеНачисления.ПериодРегистрации <= РасчетСреднегоЗаработка.ПериодРегистрации)
И (ГОД(ВЫБОР
КОГДА ОсновныеНачисления.ВидРасчета.ПериодДействияБазовый
ТОГДА ОсновныеНачисления.ПериодДействияНачало
ИНАЧЕ ОсновныеНачисления.БазовыйПериодНачало
КОНЕЦ) = ГОД(РасчетСреднегоЗаработка.ДатаНачалаСобытия) - 1)
И (ОсновныеНачисления.ПериодРегистрации МЕЖДУ РасчетСреднегоЗаработка.БазовыйПериодНачало И РасчетСреднегоЗаработка.БазовыйПериодКонец
ИЛИ РасчетСреднегоЗаработка.БазовыйПериодНачало = РасчетСреднегоЗаработка.ДатаНачалаРасчетногоПериода
И ОсновныеНачисления.ПериодРегистрации < РасчетСреднегоЗаработка.ДатаНачалаРасчетногоПериода
ИЛИ КОНЕЦПЕРИОДА(РасчетСреднегоЗаработка.БазовыйПериодКонец, ДЕНЬ) = КОНЕЦПЕРИОДА(РасчетСреднегоЗаработка.ДатаОкончанияРасчетногоПериода, ДЕНЬ)
И ОсновныеНачисления.ПериодРегистрации > РасчетСреднегоЗаработка.ДатаОкончанияРасчетногоПериода)
ГДЕ
РасчетСреднегоЗаработка.ВидРасчета В(&парамПоГодовойПремииИндексируемые)
И ОсновныеНачисления.ВидРасчета ЕСТЬ НЕ NULL ) КАК База
СГРУППИРОВАТЬ ПО
База.ЧислоМесяцев,
База.ПериодРасчетаСреднегоЗаработка,
База.НомерСтроки,
База.ОшибкаВводаСводногоТабеля
УПОРЯДОЧИТЬ ПО
НомерСтроки"
14.11.2010
08:42
#2
Мне программист объяснил это так: запросы мощные, в серверном варианте выполняются быстро, ну а если как у меня файловый вариант, то долго.
14.11.2010
16:46
#3
Запрос мощный, не спорю. Но я думаю дело тут не в серверном или файловом вариантах(в серверном, кстати, работает также долго). У других при тех же самых условиях работает в разы быстрее. Проблема кроется где то глубже.
14.11.2010
17:33
#4
За всё и всех не скажу. Но на одной базе проверяла: у клиентов на сервере несколько секунд, у меня в копии тот же расчет несколько минут.
Возможно, зависит от объема данных. Или от направления ветра. В любом случае, почти у всех конфигурация на поддержке и запрос переписывать не будем.
Возможно, зависит от объема данных. Или от направления ветра. В любом случае, почти у всех конфигурация на поддержке и запрос переписывать не будем.
15.11.2010
09:11
#5
Это не один запрос, а пакет из 4-х запросов.
Отладчик , замер производительности и т п.
> других при тех же самых условиях
И права одинаковые ?
Отладчик , замер производительности и т п.
> других при тех же самых условиях
И права одинаковые ?
15.11.2010
11:16
#6
Судя по первому посту другие, это другая база и другие машины. По моему копать надо эдесь.
15.11.2010
11:22
#7
Тогда как сравнивать можно? "Шли две девушки, одна красивая, другая в яму упала"
15.11.2010
13:00
#8
Сравнить можно так. Берем базу где медленно и запускаем на той машине где быстро. Если и тут медленно проблемы в базе, если быстро проблемы в машине.
Читают тему
(гостей: 1)