Тормоза ЗУП

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

Вступайте в нашу телеграмм-группу Инфостарт

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

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

16500 руб.

02.09.2020    259225    1430    421    

1165

WEB-интеграция Запросы Программист 1С 8.3 Абонемент ($m)

Post1C - это внешняя обработка, которая превращает 1С в полноценный инструмент для тестирования REST API. Всё управление сосредоточено в одном окне: настройка запроса, выполнение, просмотр ответа и генерация кода - без переключения между формами. Аналог Postman, но работающий в привычной среде 1С.

1 стартмани

02.04.2026    2251    68    priem_nv    23    

65

Инструментарий разработчика Запросы Программист 1С 8.3 1С:Библиотека стандартных подсистем Абонемент ($m)

Представляю новую версию подсистемы работы со схемой запроса, которая завершает её эволюцию от библиотеки по работе со схемой запроса до объектной реализации модели запроса 2. Теперь есть выбор между классическим и текучим стилем написанию кода - оба варианта взаимозаменяемы. Ключевое улучшение - использование объектов в качестве источников данных, значений полей и параметров в условиях виртуальных таблиц, а также новые операторы позиционирования в схеме

1 стартмани

29.03.2026    1804    kalyaka    16    

24

Инструментарий разработчика Запросы Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

QueryConsole1C — расширение, включающее консоль запросов с поддержкой исполняемых представлений — аналогов виртуальных таблиц, основанных на методах программного интерфейса ЗУП. Оно позволяет выполнять запросы с учётом встроенной бизнес-логики, отлаживать алгоритмы получения данных и автоматически генерировать код на встроенном языке 1С.

1 стартмани

16.05.2025    11269    148    zup_dev    30    

83

Инструментарий разработчика Запросы Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 Абонемент ($m)

В данной публикации рассказывается о решении, которое позволяет находить сразу все ошибки в тексте запроса за раз, а не только самую первую.

2 стартмани

05.03.2025    6537    21    XilDen    12    

29

Обновление 1С Запросы Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 Абонемент ($m)

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

3 стартмани

06.02.2025    5806    36    XilDen    26    

42

Запросы Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

В статье приведена удобная возможность отладки исполняемого запроса динамического списка.

03.12.2024    13045    artemusII    11    

27
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 408 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 408 11.05.10 19:30 Сейчас в теме
(10) Именно по этому и весело что у меня ЗУП (пусть не одна) но главное что я её не трогаю.!!!
p.S. Это был не подкол а радость что у меня проще. И конечно надо отдыхать...
Я советую необитаемый остров... без телефона и компов..
2. mastakw 172 08.05.10 21:29 Сейчас в теме
(0) В чем суть изменений
3. iov 408 09.05.10 01:42 Сейчас в теме
P.S. Кто заметит косяки просьба меня поругать!
ага объяснение 200 человекам почему у них зп не правильно расчитана..

А я в инете скачал.. но ничего я того чувака поругаю...
Нееее если и вылезет ошибка то она родная 1С будет а не вписана мной...
4. Ish_2 1117 09.05.10 10:58 Сейчас в теме
Я так понимаю , что автор не настаивает на применении такого приёма пользователями.
А лишь делиться своим опытом в устранении тормозов.
5. artbear 1588 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 267 13.05.10 04:55 Сейчас в теме
Прирост в 2 раза при проведении табеля и отпусков. Пока полет нормальный.
15. its 111 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 отработанный день меньше.
Для отправки сообщения требуется регистрация/авторизация