Ошибки округления выплат в ЗУП 3.0

Новая тема
С недавнего времени (релиз ЗУП 3.0.23) при формировании ведомостей на выплату зарплаты в них учитываются и указываются в расшифровке прошлые месяцы, за которые есть несовпадения начислений и выплат. Если заполнение выплат производится без округления, проблем нет, но если выплаты необходимо округлять, то округляются по правилам округления для формирования выплаты не только начисления текущего месяца, но и остатки прошлых месяцев. В результате конечная сумма к выплате не округляется по правилу округления, а искажается, остатки предыдущих месяцев не "списываются" полностью, как если бы они не округлялись, а продолжают в последующем участвовать (в отдельных случаях в других суммах) в формировании выплат следующих месяцев, а в расшифровке появляется всё больше месяцев, которые участвуют в формировании выплаты, к тому же в расшифровке указываются месяцы с нулевыми (после округления) выплатами, что сильно затрудняет анализ реальных невыплат за прошлые расчетные периоды. В 1С сейчас большой напряг с количеством писем по ЗУП 3.0 и рассмотрение этого вопроса идёт уже больше месяца без конкретного результата.
Для тех, у кого данный вопрос актуален (выплаты через кассу) привожу временную заплатку в общем модуле ВзаиморасчетыССотрудникамиБазовый для устранения этого явления. Изменения касаются процедуры "ВедомостьЗарплатаКВыплатеРассчитатьСуммы", текст процедуры следует заменить на приведённый далее.

Код
Процедура ВедомостьЗарплатаКВыплатеРассчитатьСуммы(Ведомость, ЗарплатаКВыплате) Экспорт

    Перем Сотрудник, СтрокаСальдо;

    // Округление результатов
    Если ЗначениеЗаполнено(Ведомость.Округление) Тогда
        СпособОкругленияСсылка = Ведомость.Округление;
    Иначе
        СпособОкругленияСсылка = Справочники.СпособыОкругленияПриРасчетеЗарплаты.ПоУмолчанию();
    КонецЕсли;
    
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Если СпособОкругленияСсылка<>Справочники.СпособыОкругленияПриРасчетеЗарплаты.ПоУмолчанию() Тогда
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    СпособОкругления = СпособОкругленияСсылка.ПолучитьОбъект();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;СальдоПрошлыхВыплат = Новый ТаблицаЗначений;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    СальдоПрошлыхВыплат.Колонки.Добавить("СтрокаЗарплатыСсылка");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    СальдоПрошлыхВыплат.Колонки.Добавить("Сальдо");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    ЗарплатаКВыплате.Сортировать("ФизическоеЛицо");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    Для Каждого СтрокаЗарплаты Из ЗарплатаКВыплате Цикл

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//        СтрокаЗарплаты.КВыплате = СпособОкругления.Округлить(СтрокаЗарплаты.КВыплате);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;            //соберём попутно сальдо невыплат прошлых периодов и уберём копейки
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;        Если Сотрудник = Неопределено Тогда
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;            Сотрудник=СтрокаЗарплаты.ФизическоеЛицо;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;            СтрокаСальдо = СальдоПрошлыхВыплат.Добавить();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;            СтрокаСальдо.Сальдо = 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;        ИначеЕсли    Сотрудник<>СтрокаЗарплаты.ФизическоеЛицо Тогда
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;            Сотрудник=СтрокаЗарплаты.ФизическоеЛицо;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;            Если    СтрокаСальдо.СтрокаЗарплатыСсылка <> Неопределено Тогда
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;                СтрокаСальдо = СальдоПрошлыхВыплат.Добавить(); 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;            КонецЕсли;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;            СтрокаСальдо.Сальдо = 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;        КонецЕсли;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;        
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;        Если СтрокаЗарплаты.ПериодВзаиморасчетов <> Ведомость.ПериодРегистрации Тогда
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;            СтрокаСальдо.Сальдо = СтрокаСальдо.Сальдо + СтрокаЗарплаты.КВыплате;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;        Иначе
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;            Если СтрокаСальдо.СтрокаЗарплатыСсылка <> Неопределено Тогда
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;                СтрокаСальдо.Сальдо = СтрокаСальдо.Сальдо + СтрокаЗарплаты.КВыплате;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;            Иначе
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;                СтрокаСальдо.СтрокаЗарплатыСсылка =  СтрокаЗарплаты;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;            КонецЕсли;    
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;        КонецЕсли;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    КонецЦикла;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    Для Индекс=0 По СальдоПрошлыхВыплат.Количество()-1 Цикл
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;        СтрокаСальдо = СальдоПрошлыхВыплат.Получить(Индекс);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;        Если СтрокаСальдо.СтрокаЗарплатыСсылка <> Неопределено Тогда
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;            СтрокаЗарплаты = СтрокаСальдо.СтрокаЗарплатыСсылка;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;            СтрокаЗарплаты.КВыплате = СпособОкругления.Округлить(СтрокаЗарплаты.КВыплате + СтрокаСальдо.Сальдо) - СтрокаСальдо.Сальдо;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;        КонецЕсли;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    КонецЦикла;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;КонецЕсли;
    
КонецПроцедуры

Читают тему

(гостей: 1)

Быстрый переход