Многопоточное формирование резервов отпусков

25.06.25

База данных - HighLoad оптимизация

Формирование резервов - когда у Вас тысячи сотрудников - занимает часы. И есть огромное желание у пользователей ускорить этот долгий процесс. Данное расширение позволяет ускорить расчет в десятки раз - зависит от мощности сервера. Например, на 8500 сотрудников идет порядка 2-х часов. После применения расширения - порядка 3-15 минут, на 20000 сотрудников - почти весь рабочий день. После применения - до получаса.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Ускоряем формирование резервов отпусков
.cfe 54,44Kb ver:19.05.2025
8 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Данное расширение позволяет существенно ускорить расчет.

За счет чего

  1. Сделаны потоки расчета. В  итоге можно задействовать все ресурсы серверов. Количество потоков (максимальное) и количество человек в пачке потока - параметры в организации  и настройке расчета резервов
  2. При расчете остатка отпусков проверяет - надо ли перезаписывать данные, если не изменились.  Это ускоряет процесс и уменьшает нагрузку на скуль и приводит к минимизации блокировок. Типовой всегда перезаписывает.
  3. При расчете количества потоков смотрит загрузку сервера 1С (если есть права сервера запускать проверку загрузки) - если более 90% - новые потоки не создает и ждет очереди...  Пока закомментировано - так как только для виндоуз и если есть права - ищу другие способы. Но кто хочет использовать - просто раскоментируйте.

Дополнительно изменены формы прогресса и документа.

  1. В форме прогресса  выведен индикатор прогресса графически
  2. В форме документа ожидание не просто "ждите" - а более информативный: показывает, что делается и сколько осталось.

Настройки

При первом запуске -открытии формы документа расчета резервов создаются допреквизиты для двух объектов если есть права. 

  1. Организация - максимальное количество потоков.
  2. Настройка резервов в организации - количество людей в пакете

Если значения не заполнены, то срабатывает автомат и ставит оптимальные значения:

  • Максимальное количество потоков равно 64.
  • Количество людей в пачке 100 человек.

В расширении закомментирован привилегированный режим. Если вам он необходим чтобы не давать лишние права - раскомментируйте

 

Изменения

19.05.2025

Оптимизация

 

 

Изменения

24.04.2025

Убран привилегированный режим и COM вызовы

Проверено на следующих конфигурациях и релизах:

  • Зарплата и управление персоналом КОРП, редакция 3.1, релизы 3.1.30.178, 3.1.30.133

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

Расчет резервов отпусков ускорение ЗУП

См. также

HighLoad оптимизация Программист 1C:ERP Бесплатно (free)

Использование оператора «В» для полей или данных составного типа (например, Регистратор) может приводить к неочевидным проблемам.

10.11.2025    5265    ivanov660    48    

51

HighLoad оптимизация Программист 1С:Предприятие 8 1C:ERP Бесплатно (free)

Приведем примеры использования различных в динамических списках и посмотрим, почему это плохо.

18.02.2025    8109    ivanov660    39    

61

HighLoad оптимизация Технологический журнал Системный администратор Программист Бесплатно (free)

Обсудим поиск и разбор причин длительных серверных вызовов CALL, SCALL.

24.06.2024    10536    ivanov660    13    

64

HighLoad оптимизация Программист 1С:Предприятие 8 Бесплатно (free)

Метод очень медленно работает, когда параметр приемник содержит намного меньше свойств, чем источник.

06.06.2024    16507    Evg-Lylyk    73    

46

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

Анализ простого плана запроса. Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы.

13.03.2024    8109    spyke    29    

54

HighLoad оптимизация Программист 1С:Предприятие 8 Бесплатно (free)

Оказывается, в типовых конфигурациях 1С есть, что улучшить!

13.03.2024    11437    vasilev2015    22    

47
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. paulwist 17.04.25 15:57 Сейчас в теме
При расчете остатка отпусков проверяет - надо ли перезаписывать данные, если не изменились.


Вопрос: где (в каком интерфейсе: на клиенте, на Сервере 1С, в табличках СУБД) проверяется условие проверяет - надо ли перезаписывать данные, (где этот код исполняется)??
2. ZAOSTG 192 17.04.25 17:16 Сейчас в теме
(1) естественно на сервере 1с
ОМ.Остатки отпусков
Функция ЗаработанныеОтпуска
рассчитывает - и записывает на всякий случай
тут проверяет -стоит ли перезаписывать если это уже и так в базе
3. paulwist 18.04.25 08:14 Сейчас в теме
(2)
естественно на сервере 1с


А как ,в таком случае, вы узнаёте, что данные не изменились (что с чем сравниваете)??
4. ZAOSTG 192 18.04.25 09:22 Сейчас в теме
(3) Набор записей что собираюсь записать и что в базе записано
Есть другие варианты?
5. paulwist 18.04.25 10:36 Сейчас в теме
(4)
Набор записей что собираюсь записать и что в базе записано


Меня как раз этот момент интересует, "что собираюсь записать" - это лежит на Сервере 1С, так?

"Что в базе записано" - это лежит в СУБД, так?

Какой код (можно псевдо-код, можно просто описать словами) выясняет, "что в базе записано".
6. ZAOSTG 192 18.04.25 22:07 Сейчас в теме
(5) В запрос передать таблицу значений -набор записей
и параметры отбора
и получить запросом что в базе
потом сложить со знаком
если итого не равен 0 -то записать
7. paulwist 21.04.25 08:37 Сейчас в теме
(6)
потом сложить со знаком
если итого не равен 0 -то записать


Правильно ли я понял.

1. На Сервер 1С вынимаем из табличек СУБД данные.
2. На Сервере 1С проверяем надо/не надо записывать (именно эта часть выполняет проверку стоит/не стоит записывать)
3. Если надо записать, то запись (recored)/строка записывается.

ТАК?

Если изложенный алгоритм реализован в обработке, то

Вопрос: каким образом "защищаются" записи, которые требуется перезаписать?

Например: Пусть будет всего одна запись, которую требуется перезаписать id = 1.

1. Вынимаем эту запись (id = 1) из СУБД на Сервер 1С
2. Проверили - надо перезаписать.

2.1. В этот момент другой поток, скрипт изменил эту запись (id = 1)

3. В вашем алгоритме что произойдёт? ведь значение у записи (id = 1) уже поменялось!!!

Как, с помощью чего защищается запись (id = 1) от изменения другим юзером??
8. ZAOSTG 192 21.04.25 12:46 Сейчас в теме
Резервы отпусков - считаются по каждому человеку и набор записей -по одному человеку
типовой
1.Посчитал -
2.записал
3.перешел к следующему


добавлена проверка
2.1 - прочитали с отбором по сотруднику
2.2 "вычли" что есть и что надо
2.3 - если итог не равно нулю -то есть что-то отличается - то записываем новый набор

что такое "защищается"?
в один момент пересчитывают по одному человеку резерв?
Так же как и всегда и в типовом - кто первый встал того и тапки - второй ждет
но в моем случае -если "тапки" не изменились - то записи не будет и никаких блокировок не будет -каждый пойдет дальше, а не будет пытаться переписать одно и тоже много раз.
9. paulwist 23.04.25 08:25 Сейчас в теме
(8)
что такое "защищается"?
в один момент пересчитывают по одному человеку резерв?


Да.

(8)

Так же как и всегда и в типовом - кто первый встал того и тапки - второй ждет
но в моем случае -если "тапки" не изменились - то записи не будет и никаких блокировок не будет -каждый пойдет дальше, а не будет пытаться переписать одно и тоже много раз.


С помощью чего достигается "кто первый встал того и тапки - второй ждет"??
Для отправки сообщения требуется регистрация/авторизация