В нашей компании всего с 2022 года перешли на ЗУП, но до сих пор занимаемся оптимизацией скорости, и обновления подкидывают новые проблемы, с которыми приходится бороться.
Очередное обновление принесло массу интересного, но и по ходу еще изменило способы хранения части информации.
Конкретно
- РС БухучетЗарплатыСотрудников стал зависимым - появился документ + можно туда писать и другими документами
- в очередной раз решили обновить РС Отпуска сотрудников - решили из него сделать регистр остатков отпусков
Оба эти нововведения негативно отразились на процессе обновления
1 - первый этап обновления -монопольный -прошел на копии 7,5 часов и создал 79 000 документов БухучетЗарплатыСотрудников
2 - отложенное обновление -идет десятки часов
Чтобы понять -стоит ли именно Вам этим "заморачиваться", выполните запрос. У нас было порядка 900 000 заработанных, и 79 000 бухучет зарплаты
ВЫБРАТЬ
"1.1 ЗаработанныеПраваНаОтпуска - всего" КАК РС,
КОЛИЧЕСТВО(*) КАК Всего,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ОбновлениеАналитикиОстатковОтпусков.Сотрудник) КАК Сотрудников
ИЗ
РегистрСведений.ЗаработанныеПраваНаОтпуска КАК ОбновлениеАналитикиОстатковОтпусков
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"1.2 ЗаработанныеПраваНаОтпуска - нулевые дни" КАК РС,
КОЛИЧЕСТВО(*) КАК Всего,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ОбновлениеАналитикиОстатковОтпусков.Сотрудник) КАК Сотрудников
ИЗ
РегистрСведений.ЗаработанныеПраваНаОтпуска КАК ОбновлениеАналитикиОстатковОтпусков
где ОбновлениеАналитикиОстатковОтпусков.КоличествоДней=0
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"1.3 БухучетЗарплатыСотрудников - всего" КАК РС,
КОЛИЧЕСТВО(*) КАК Всего,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ БухучетЗарплатыСотрудников.Сотрудник) КАК Сотрудников
ИЗ
РегистрСведений.БухучетЗарплатыСотрудников КАК БухучетЗарплатыСотрудников
Для решения данной проблемы был произведен анализ и предложено 3 пути
- Заставить предприятие простаивать почти 8 часов, пока обновится
- Вынести последнюю процедуру за монопольный режим - и запустить потом, когда все работают
- Переписать обновление
Первый вариант самый простой, но и самый тяжелый для предприятия, начиная с простоя, и заканчивая огромным количеством служебных документов. Его не выбрали.
Второй вариант - позволяет сократить время простоя до несколько минут - но после разрешения работы надо "ограничить" пользователей в плане, что не все можно делать, и количество документов в итоге не уменьшится.
Третий вариант - это не делать по документу на каждую строку записи РС БухучетЗарплатыСотрудников, а сгруппировать.
Его и выбрали
В результате переписал 1 функцию, и вместо 79 000 документов появилось меньше двух десятков, разбитых по организации и месяцу, в каждом по несколько тысяч записей по каждому сотруднику.
В итоге процесс обновления прошел за 10 минут, и можно работать.
Отложенное обновление
Процесс отложенного обновления тоже претерпел часть изменений
1 - по результатам замеров выяснилось, что одно из узких мест - это вызов сортировки по "ФизическоеЛицо,ДатаПриема"
Логический смысл непонятен, потому что берется порция данных из общего пула - порядка 60 000, и сортируется по алфавиту и дате приема.
Но так как сортировка сортирует не по ссылке, а по наименованию, 1С пришлось много раз обращаться к базе, в итоге каждый вызов этого куска шел от 300 до 500 сек. Переписал это на динамический запрос - стал порядка 2-х сек сортироваться.
Алгоритм работы
- Запустить обработку до обновления - там вызвать пункты меню. Влияют галки "свернуть до" и "уволенные". Если не интересны уже старые данные
- Очистить нулевые заработанные отпуска - удалит строки, где количество 0, иначе замедляется расчет
- Свернуть РС бухучет зарплаты сотрудников. Свернет периоды, если одинаковые способы. Свернуть до - убирает старые способы, но оставит старые, если они были единственные для этого сотрудника
- Накатить обновление и расширение. В расширении реализовано ускорение сортировки и главное - делает группировочные документы бухучету зарплаты сотрудников (помесячно).
Важно
Это подходит только при переходе на Зарплата и управление персоналом КОРП, редакция 3.1 (3.1.25.136) или через нее выше!