Тормоза ЗУП

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. Кто заметит косяки просьба меня поругать!

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

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

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

13000 10400 руб.

02.09.2020    122167    670    389    

714

Для чего используют конструкцию запроса "ГДЕ ЛОЖЬ" в СКД на примере конфигурации 1С:ERP

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

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

13.02.2024    5746    KawaNoNeko    23    

23

Набор-объект для СКД по тексту или запросу

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

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

1 стартмани

31.01.2024    2000    2    Yashazz    0    

29

Запрос 1С copilot

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

Пишем на человеческом языке, что нам надо, и получаем текст запроса на языке 1С. Используются большие языковые модели (LLM GPT) от OpenAI или Яндекс на выбор.

5 стартмани

15.01.2024    6284    31    mkalimulin    25    

50

PrintWizard: поддержка представлений ЗУП в конструкторе

Инструментарий разработчика Запросы Платформа 1С v8.3 Бесплатно (free)

Одной из интересных задач, стоящих в процессе разработки, была поддержка механизма представлений в ЗУП. Но не просто возможность исполнения запросов с ними. Основная проблема была в том, чтобы с ними было удобно работать, а именно: создавать, модифицировать и отлаживать. Кратко о том, что в итоге получилось...

14.12.2023    1742    vandalsvq    7    

29

Объектная модель запроса "Схема запроса" 2

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

Далеко уже не новый тип данных "Схема запроса". Статья о том, как использовать его "попроще". Примеры создания текста запроса с нуля и изменение имеющегося запроса.

06.12.2023    5388    user1923546    26    

43

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    16185    skovpin_sa    14    

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

А я в инете скачал.. но ничего я того чувака поругаю...
Нееее если и вылезет ошибка то она родная 1С будет а не вписана мной...
4. Ish_2 1104 09.05.10 10:58 Сейчас в теме
Я так понимаю , что автор не настаивает на применении такого приёма пользователями.
А лишь делиться своим опытом в устранении тормозов.
5. artbear 1448 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 1519 12.05.10 18:44 Сейчас в теме
(12) Спасибо за совет! Но если честно не вижу практического применения. Я просто выложил блок для вставки\замены в коде... А сравнить старый и новый запрос можно в разных программах... кому как удобней... если это кому то надо...
14. scanner1980 266 13.05.10 04:55 Сейчас в теме
Прирост в 2 раза при проведении табеля и отпусков. Пока полет нормальный.
15. its 110 03.07.10 14:50 Сейчас в теме
Автор публикации Алексей заметил и исправил опасную и вредную ошибку в ЗУП,
которая существует и в релизе ЗУП 2.5.25.3:


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

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

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