Тормоза ЗУП

08.05.10

Разработка - Запросы

Тормоза ЗУП

Проблемма:

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

Лекарство:

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

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

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

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

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

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

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

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    152493    836    397    

846

Запросы Программист Запросы Бесплатно (free)

Отлаживая взаимодействие с базой данных, мы регулярно сталкиваемся с зависающими или подозрительно долго выполняющимися обращениями, негативно влияющими на производительность. О том, как в PostgreSQL выявить подозрительные запросы, основываясь на доступной о них информации, расскажем в статье.

16.08.2024    6897    user1840182    5    

28

Математика и алгоритмы Запросы Программист Платформа 1С v8.3 Запросы Бесплатно (free)

Рассмотрим быстрый алгоритм поиска дублей с использованием hash функции по набору полей шапки и табличных частей.

08.07.2024    2114    ivanov660    9    

22

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

Часто при разработке отчетов в СКД возникает ситуация, когда не совсем понятно, почему отчет выводит не те данные, которые нужны, либо не выводит вовсе. Возникает потребность увидеть конечный запрос, который формирует СКД. Как это сделать, рассмотрим в этой статье.

15.05.2024    7300    implecs_team    6    

46

Запросы Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Часто поступают задачи по произвольному распределению общих сумм. После распределения иногда пропадают копейки. Суть решения добавить АвтоНомерЗаписи() в ВТ распределения, и далее используя функции МАКСИМУМ или МИНИМУМ можем положить разницу копеек в первую или последнюю строку знаменателя распределения.

11.04.2024    3211    andrey_sag    10    

35

Запросы СКД Программист Стажер Платформа 1С v8.3 Запросы Система компоновки данных 1С:ERP Управление предприятием 2 Бесплатно (free)

В типовых конфигурациях разработчики компании 1С иногда используют в отчетах, построенных на СКД, такую конструкцию, как "ГДЕ ЛОЖЬ". Такая конструкция говорит о том, что данные в запросе не будут получены совсем. Для чего же нужен тогда запрос?

13.02.2024    7327    KawaNoNeko    23    

26

Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    2994    3    Yashazz    0    

34
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. anton.fly7 174 08.05.10 15:47 Сейчас в теме
респект чувак!
я слышал, что те кто лезет в ЗУП самоубивцы и ЗП у них от статыщ
7. WiseSnake 1521 11.05.10 13:36 Сейчас в теме
По порядку:
(1) Спасибо! Я не из Москвы у нас таких ЗП нет. А про самоубийц я согласен, особенно в начале этого года, нерв потратил много.
(2) mastakw
Суть в том что вложенный запрос вынесен в основной и сразу связывается с "ограничивающим" что дает огромный выигрыш в скорости. Предполагаю что происходит из-за того что в первую очередь собирается вложенный запрос, который внутри не ограничен условиями и чем больше регистр тем хуже.
(3) iov
ну если у Вас не возникает проблем при работе то Вам и не нужно ничего править :), но вот объяснить расчетчику почему у него больничный проводится 20 мин тоже довольно проблематично. А я как известно тоже человек и могу ошибаться и Вы кстати тоже ;)
(4) Ish_2
Конечно, чем меньше изменений тем лучше, если нет тормозов, лучше не лезть, а вот если есть милости просим.
(5) artbear
Фразу понимать так:
1. Комментарии то все равно свои стаить
2. Может отличаться в зависимости от релиза ЗУП, ведь они могут и исправить данный запрос, поэтому желательно голову при исправлении тоже использовать ;)
(6) Спасибо!
9. iov 407 11.05.10 16:36 Сейчас в теме
(7) то (3) Ага именно по этому и весело... Я тоже ошибался и за свои ошибки сам отвечал и по молодости чужие обработки юзал и за них меня драли... В общем по ощущениям свои как то- не так глубоко "казнили ".
А насчет доделки- ничего плохого сказать пока не могу.. просто потому что штатную ЗП Я ХЕРТРОГАТЬЬБУДУ (вспомните после новогодние обновления бухгалтерия чуть меня не порвала пришлось дать телефон франчей. а дальше быстро уползти за границы видимости бухгалтерии)
10. WiseSnake 1521 11.05.10 18:16 Сейчас в теме
(9) Ну у Вас как я понял 1 база ЗУП, а у меня на ЗУП 2 конторы за 2000 чел. численности + на ЗиК штук 5 из них 2 крупные, это если не считать филиалов... и все не типовые :D и это еще не моя основная работа, скажем так, так что мне с января месяца досталось по полной и восновном не из-за моих кривых рук, поеду отдыхать... задолбало все... :D
11. iov 407 11.05.10 19:30 Сейчас в теме
(10) Именно по этому и весело что у меня ЗУП (пусть не одна) но главное что я её не трогаю.!!!
p.S. Это был не подкол а радость что у меня проще. И конечно надо отдыхать...
Я советую необитаемый остров... без телефона и компов..
2. mastakw 171 08.05.10 21:29 Сейчас в теме
(0) В чем суть изменений
3. iov 407 09.05.10 01:42 Сейчас в теме
P.S. Кто заметит косяки просьба меня поругать!
ага объяснение 200 человекам почему у них зп не правильно расчитана..

А я в инете скачал.. но ничего я того чувака поругаю...
Нееее если и вылезет ошибка то она родная 1С будет а не вписана мной...
4. Ish_2 1110 09.05.10 10:58 Сейчас в теме
Я так понимаю , что автор не настаивает на применении такого приёма пользователями.
А лишь делиться своим опытом в устранении тормозов.
5. artbear 1562 11.05.10 09:54 Сейчас в теме
Цитату "примерно так" как понимать?
что это неточный текст запроса и статью нельзя использовать?
опиши смысл изменения, за счет чего произошло столь резкое увеличение производительности?
6. Jekka84 11.05.10 13:13 Сейчас в теме
Посещаю данный сайт именно из-за таких рекомендаций. Молодец, спасибо. Возьмем на вооружение.
8. Jekka84 11.05.10 13:38 Сейчас в теме
Посещаю данный сайт именно из-за таких рекомендаций. Молодец, спасибо. Возьмем на вооружение.

Только есть еще одно пожелание:
В модуле набора записей регистра накопления "РабочееВремяРаботниковОрганизаций" есть процедура "ЗарегистрироватьПерерасчеты". На мой взгляд, исполнение этой процедуры тормозит систему наиболее сильно, около 70% времени при проведении табелей отнимает именно она.

Как бы оптимизировать это дело?
12. lustin 12.05.10 09:11 Сейчас в теме
подсвеченный diff (из комплекта git) сравнивающий изменения в запросе

хочу обратить внимание автора публикации - можно подсвечивать разницу в коде с помощью онлайн сервисов, а также можно преобразовать напрямую в html представление

будет красивше ;)
13. WiseSnake 1521 12.05.10 18:44 Сейчас в теме
(12) Спасибо за совет! Но если честно не вижу практического применения. Я просто выложил блок для вставки\замены в коде... А сравнить старый и новый запрос можно в разных программах... кому как удобней... если это кому то надо...
14. scanner1980 268 13.05.10 04:55 Сейчас в теме
Прирост в 2 раза при проведении табеля и отпусков. Пока полет нормальный.
15. its 110 03.07.10 14:50 Сейчас в теме
Автор публикации Алексей заметил и исправил опасную и вредную ошибку в ЗУП,
которая существует и в релизе ЗУП 2.5.25.3:


В некоторых ИБ, при использовании документов "Табель учета рабочего времени", в документе "Начисление зарплаты работникам организаций" количество отрботанных дней устанавливалось меньше, чем указано в табеле. Это касалось тех работников, которые работали весь месяц без неявок.

А то, что безобразно (содержал потенциальную ошибку) и неоптимально написанный первоначально запрос вызывал резкое замедление в работе при проведении документов - это уже вторично.

Рекомендую применять данное "лекарство", пока 1С не внесет изменения в типовую конфигурацию.
16. WiseSnake 1521 03.07.10 17:33 Сейчас в теме
(15) Спасибо за содержательный комментарий!
17. pirog-ann 05.07.10 14:30 Сейчас в теме
its, изменение запроса не помогло. всё равно у сотрудников, отработавших весь месяц без неявок в документе "Начисление зарплаты работникам организаций" зп насчиталась на 1 отработанный день меньше.
Оставьте свое сообщение