Тормоза ЗУП

Конфигурации: 1С:Зарплата и Управление Персоналом 8
Внешний отчет, обработка для 1С: Предприятие 8.1; 1С: Предприятие 8.2

Тормоза ЗУП

Проблемма:

Начиная, по моему  2.5.21 релиза в ЗУП были добавлены тормоза, особенно проявляются они в тех базах в котоорых много табелей.

Лекарство:

В модуле ПpoвeдeниePacчeтoвПepeoпpeдeляeмый заменить текст запроса ОтработаноНЕПоВидуВремениДляПоказателейТекст

примерно так:

    // ИЗМЕНЕНО (Алексей) начало

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

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

В базе в которой я это попроавил скорость выполнения запроса увеличилась примерно в 1000 раз. Удачи!

P.S. Кто заметит косяки просьба меня поругать!

Оценка сообщества

10

Поставьте плюс, если вы рекомендуете данную публикацию к прочтению и использованию.
Плюс добавляет публикацию в Мои рекомендации.

[+] Рекомендую   [−] Не тратить время
Если рейтинг упадет до -5, то публикация автоматически скроется.