Перерасчет выбранных в списке документов "Начисление зарплаты" для ЗУП 3.1.2 и 2.5.123

Программирование - Практика программирования

Это одна из серии публикаций, посвященных внедрениям прикладного решения 1С:ЗУП на больших проектах внутри холдинга РЖД. Статья будет полезна разработчикам и внедренцам. В статье рассказываю, как быстро и просто реализовать групповой перерасчет документов «Начисление зарплаты...» в форме списка для ЗУП 3.1.2 и для ЗУП 2.5.123 (платформа 8.3.10.2699).

Часто при внедрении 1С:ЗУП на больших проектах внутри холдинга РЖД возникает задача реализовать групповой перерасчет документов «Начисление зарплаты». Заказчики хотят иметь возможность выделять сразу несколько документов в списке и их пересчитывать нажатием на одну кнопку. Типовой ЗУП не дает возможности перерасчитывать документы прямо в списке.  

 

1. Групповой перерасчет выбранных в списке документов "Начисление зарплаты и Взносов" в ЗУП 3.1.2

Заказчик хочет следующий функционал:

Решение.

В конфигураторе создаем новую форму списка документа копированием типовой. Задаем префикс в имени формы. Создаем команду формы списка, подменю «ГруппаПересчетДокументов». Устанавливаем флаг «Множественный выбор» в свойствах элемента формы «Список» - чтобы пользователи могли выделять несколько документов при нажатии «Ctrl+Клик мыши».

Спустя некоторое время добавил еще одну кнопку:

Кнопка "Пересчитать (аналог: над таблицей Начисления)" - работает так же, как если бы мы открыли документ и нажали в нем кнопку Пересчитать над табличной частью Начисления (справа от кнопки Очистить), пересчет может потребоваться когда мы вручную меняем Результат начисления по сотруднику и надо по цепочке далее пересчитать зависимые начисления, налоги и взносы. 

Кнопка "Пересчитать (аналог: таблица Начисления Сtrl+A --> прав. кнопка мыши Пересчитать сотрудника)"  -  работает так же, как если бы мы открыли документ, выделили все строки в таблице Начисления (Сtrl+A) и нажали правой кнопкой мыши Пересчитать сотрудника. В этом случае происходит не только пересчет сотрудника, но перезаполнение всех начислений сотрудника (как при первичном нажатии на кнопку Подбор). Это может понадобиться, когда сотрудник в документ есть, но в документе не хватает каких-либо начислений по нему (их ввели немного позже, после первого заполнения документа). Можно не заходя внутрь документа сделать дозаполнение недостающих начислений и сразу перерасчет. 

В модуле созданной формы списка пропишем текст процедуры «ПересчитатьСотрудниковВДокументах»

 
 Листинг нетипового функционала модуля формы списка ЗУП 3.1.2

 

Пример работы реализованного функционала в пользовательском режиме 1С:Предприятие:

Перерасчет выбранных документов работает так же, как и кнопки внутри документа «Пересчитать» или «Пересчитать сотрудника» (если все сотрудники выбраны):

 

Подводные камни:

1) перед началом перерасчета выделенных документов желательно организовать проверку не открыта ли какая либо из форм одного из выбранных документов сейчас, если открыта - выдавать предупреждение о том, что надо ее закрыть (этого в коде выше нет)

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

3) после перерасчета выбранных документов иногда приходится обновить список документов вручную, поскольку некоторые документы начинают отображаться как не проведенные, хотя в коде и присутствует строчка

Элементы.Список.Обновить();

4) массовый перерасчет документов может вызывать конфликт блокировок при выполнении транзакции по причине превышении времени ожидания запроса на блокировку.

5) рекомендую изучить механизм утверждения (и расчета) межрасчетных документов в журнале "Начисление зарплаты": когда кадровики вводят документы, затем расчетчики должны эти документы выделить, утвердить и рассчитать. Механизм работы кнопки "Утвердить" содержит типовые алгоритмы перебора выделенных документов и их расчета - очень рекомендую их изучить.  

2. Групповой перерасчет выбранных в списке документов "Начисление зарплаты сотрудникам организаций" в ЗУП 2.5.123

Заказчик хочет следующий функционал:

Решение.

В конфигураторе создаем новую форму списка документа копированием типовой. В элемент формы «ДокументСписок» добавляем колонку «Пометка» (без привязки к данным базы данных). Для элемента формы «ДокументСписок» добавляем командную панель с тремя подменю, см. рисунок.

Реализация выделения документов в списке.

Создаем реквизит формы «ТаблицаПометок».

Создаем 3 процедуры для выделения документов в списке:

ДокументСписокПриПолученииДанных(…),ДокументСписокВыбор(…),КоманднаяПанель1СнятьФлажки(…)

 
Листинг процедур для выделения документов в списке (ЗУП 2.5.123):

 

Реализация перерасчетов выделенных документов в списке.

Для каждой кнопки подменю добавленной командной панели элемента формы «ДокументСписок» создаем свой обработчик и одну общую процедуру ОбработатьДокументы(ВариантДействий) для всех вариантов перерасчета выбранных документов.

В ЗУП 2.5 в обычных формах мы можем очень просто реализовать расчет в форме списка:

Объект.РассчитатьВсе(); или Объект.РассчитатьНачисления(); или Объект.РассчитатьНДФЛ();

 
 Листинг процедур перерасчета выделенных документов (ЗУП 2.5.123)

 

Пример работы реализованного функционала в ЗУП 2.5.123:

Ссылки на публикации по теме перерасчетов документов в списке для ЗУП:

Групповой перерасчет отпусков. ЗУП 3.0, ЗУП 3.1 Корп

Групповой перерасчет документов начисления зарплаты. ЗУП 3.0

 

Рекомендую публикации, посвященные теме внедрений ЗУП на больших проектах:

Отчет "Штатное расписание и расстановка на выбранные даты"

Учет и расчет выплат работникам за время прохождения медосмотров в программе «1С:ЗУП» редакции 2.5

Отчет по состояниям (отклонениям) сотрудников за период.

Отчет «Среднесписочная численность» для ЗУП

Пример создания в КД 2.1 правил обмена данными ЗУП 2.5 -> БП 3.0.

Пример создания в КД 2.1 правил выгрузки данных регистра «Лицевые счета работников» из ЗУП 2.5 в справочник «Банковские счета» БП 3.0

Вопросы, предложения сотрудничества и замечания по статье пишите в комментариях, в личку или по адресу Panteleevi@inbox.ru.

Резюме автора: //infostart.ru/job/resume/537490/

Если статья принесла Вам пользу, то поддержите развитие публикации и автора - поставьте звездочку и/или напишите комментарий. 

С пожеланием творческих успехов всем посетителям сайта ИС, Пантелеев Иван.

См. также

Комментарии
2. Антон Милованов (barneotec) 08.04.18 18:34 Сейчас в теме
1. При пересчете сотрудников запускается фоновая операция, вы же записывается документ не дожидаясь ее выполнения, или ваш вариант корректно работает?
2. Можно ли было обойтись внешней обработкой, а не доработкой конфигурации?
3. Иван Пантелеев (RailMen) 754 10.04.18 15:26 Сейчас в теме
(2)
1. пересчет весь идет корректно - описанный механизм аналогичен нажатию на кнопку Пересчитать над таблицей Начисления документа Начисление зарплаты и взносов.

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

В фоне идет замер производительности в типовой, который я не использую, например:
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина, "ПерерасчетСотрудникаВФормеДокументаНачислениеЗарплаты");

2. Можно и внешней обработкой обойтись. Но мне нужен этот функционал внутри формы списка.
Переделать во внешнюю обработку - элементарно.
Оставьте свое сообщение