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

Публикация № 807219

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

Пантелеев Иван ЗУП ЗиУП Рарус БИТ ИТРП НИИАС ОЦРВ ЖТК ЛокоТех ЖДРМ ТТК МТППК СППК СЗППК БППК ВНИИЖТ Трансмашхолдинг

17
Это одна из серии публикаций, посвященных внедрениям прикладного решения 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

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

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

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

17

См. также

Специальные предложения

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

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

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

2. Можно и внешней обработкой обойтись. Но мне нужен этот функционал внутри формы списка.
Переделать во внешнюю обработку - элементарно.
4. Bene_Valete 20.06.18 05:56 Сейчас в теме
Большое спасибо за публикацию! Очень помогла продвинуться в решении похожей задачи
5. gorin 09.08.18 20:32 Сейчас в теме
Спасибо! Статья очень помогла!
Оставьте свое сообщение