Ошибки округления выплат в ЗУП 3.0
09.09.2015
11:07
#1
С недавнего времени (релиз ЗУП 3.0.23) при формировании ведомостей на выплату зарплаты в них учитываются и указываются в расшифровке прошлые месяцы, за которые есть несовпадения начислений и выплат. Если заполнение выплат производится без округления, проблем нет, но если выплаты необходимо округлять, то округляются по правилам округления для формирования выплаты не только начисления текущего месяца, но и остатки прошлых месяцев. В результате конечная сумма к выплате не округляется по правилу округления, а искажается, остатки предыдущих месяцев не "списываются" полностью, как если бы они не округлялись, а продолжают в последующем участвовать (в отдельных случаях в других суммах) в формировании выплат следующих месяцев, а в расшифровке появляется всё больше месяцев, которые участвуют в формировании выплаты, к тому же в расшифровке указываются месяцы с нулевыми (после округления) выплатами, что сильно затрудняет анализ реальных невыплат за прошлые расчетные периоды. В 1С сейчас большой напряг с количеством писем по ЗУП 3.0 и рассмотрение этого вопроса идёт уже больше месяца без конкретного результата.
Для тех, у кого данный вопрос актуален (выплаты через кассу) привожу временную заплатку в общем модуле ВзаиморасчетыССотрудникамиБазовый для устранения этого явления. Изменения касаются процедуры "ВедомостьЗарплатаКВыплатеРассчитатьСуммы", текст процедуры следует заменить на приведённый далее.
Для тех, у кого данный вопрос актуален (выплаты через кассу) привожу временную заплатку в общем модуле ВзаиморасчетыССотрудникамиБазовый для устранения этого явления. Изменения касаются процедуры "ВедомостьЗарплатаКВыплатеРассчитатьСуммы", текст процедуры следует заменить на приведённый далее.
| Код |
|---|
Процедура ВедомостьЗарплатаКВыплатеРассчитатьСуммы(Ведомость, ЗарплатаКВыплате) Экспорт
Перем Сотрудник, СтрокаСальдо;
// Округление результатов
Если ЗначениеЗаполнено(Ведомость.Округление) Тогда
СпособОкругленияСсылка = Ведомость.Округление;
Иначе
СпособОкругленияСсылка = Справочники.СпособыОкругленияПриРасчетеЗарплаты.ПоУмолчанию();
КонецЕсли;
Если СпособОкругленияСсылка<>Справочники.СпособыОкругленияПриРасчетеЗарплаты.ПоУмолчанию() Тогда
СпособОкругления = СпособОкругленияСсылка.ПолучитьОбъект();
СальдоПрошлыхВыплат = Новый ТаблицаЗначений;
СальдоПрошлыхВыплат.Колонки.Добавить("СтрокаЗарплатыСсылка");
СальдоПрошлыхВыплат.Колонки.Добавить("Сальдо");
ЗарплатаКВыплате.Сортировать("ФизическоеЛицо");
Для Каждого СтрокаЗарплаты Из ЗарплатаКВыплате Цикл
// СтрокаЗарплаты.КВыплате = СпособОкругления.Округлить(СтрокаЗарплаты.КВыплате);
//соберём попутно сальдо невыплат прошлых периодов и уберём копейки
Если Сотрудник = Неопределено Тогда
Сотрудник=СтрокаЗарплаты.ФизическоеЛицо;
СтрокаСальдо = СальдоПрошлыхВыплат.Добавить();
СтрокаСальдо.Сальдо = 0;
ИначеЕсли Сотрудник<>СтрокаЗарплаты.ФизическоеЛицо Тогда
Сотрудник=СтрокаЗарплаты.ФизическоеЛицо;
Если СтрокаСальдо.СтрокаЗарплатыСсылка <> Неопределено Тогда
СтрокаСальдо = СальдоПрошлыхВыплат.Добавить();
КонецЕсли;
СтрокаСальдо.Сальдо = 0;
КонецЕсли;
Если СтрокаЗарплаты.ПериодВзаиморасчетов <> Ведомость.ПериодРегистрации Тогда
СтрокаСальдо.Сальдо = СтрокаСальдо.Сальдо + СтрокаЗарплаты.КВыплате;
Иначе
Если СтрокаСальдо.СтрокаЗарплатыСсылка <> Неопределено Тогда
СтрокаСальдо.Сальдо = СтрокаСальдо.Сальдо + СтрокаЗарплаты.КВыплате;
Иначе
СтрокаСальдо.СтрокаЗарплатыСсылка = СтрокаЗарплаты;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для Индекс=0 По СальдоПрошлыхВыплат.Количество()-1 Цикл
СтрокаСальдо = СальдоПрошлыхВыплат.Получить(Индекс);
Если СтрокаСальдо.СтрокаЗарплатыСсылка <> Неопределено Тогда
СтрокаЗарплаты = СтрокаСальдо.СтрокаЗарплатыСсылка;
СтрокаЗарплаты.КВыплате = СпособОкругления.Округлить(СтрокаЗарплаты.КВыплате + СтрокаСальдо.Сальдо) - СтрокаСальдо.Сальдо;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры |
Читают тему
(гостей: 1)