Две простенькие функции для правильного учета сторно-записей и записей-перерасчетов
Часто при подсчете дней по записям журнала расчетов "Зарплата" берется знак "+" или "-" в зависимости от признака сторно-записи. Но рано или поздно результат получится ошибочным.
- Описание
- Подробнее
Описание
Дело в том, что при повторном сторнировании дни должны быть учтены снова с плюсом. Предлагается простенькая функция, возвращающая всегда правильное значение:
//******************************************************************************
// глКоэффСторно(Знач ЗаписьЖР,Коэфф=1)
//
// Параметры:
// ЗаписьЖР - ссылка на запись журнала расчетов
// ВозвращаемоеЗначение - если сторно, тогда вернет -1, иначе 1
//
Функция глКоэффСторно(Знач ЗаписьЖР,Коэфф=1) Экспорт
Если ЗаписьЖР.Сторно = 1 Тогда
Возврат глКоэффСторно(ЗаписьЖР.ПервичнаяЗапись,-Коэфф);
КонецЕсли;
Возврат Коэфф;
КонецФункции
Тогда вместо конструкции:
Дней = Дней + (ЖрнЗарплата.ДатаОкончания - ЖрнЗарплата.ДатаНачала + 1) * ?(ЖрнЗарплата.Сторно = 1,-1,1);
следует написать:
Дней = Дней + (ЖрнЗарплата.ДатаОкончания - ЖрнЗарплата.ДатаНачала + 1) * глКоэффСторно(ЖрнЗарплата.ТекущаяЗапись());
Предварительно, перед использованием функции глКоэффСторно() нужно отсеять записи перерасчета. Но с признаком «перерасчет» похожая ситуация. Поэтому ниже предлагается текст функции для определения записи-перерасчета:
//******************************************************************************
// глЭтоЗаписьПерерасчета(Знач ЗаписьЖР)
//
// Параметры:
// ЗаписьЖР - ссылка на запись журнала расчетов
// ВозвращаемоеЗначение - если перерасчет, тогда вернет 1, иначе 0
//
Функция глЭтоЗаписьПерерасчета(Знач ЗаписьЖР) Экспорт
Если (ЗаписьЖР.Перерасчет = 1) и (ЗаписьЖР.Сторно = 0) Тогда
Возврат 1;
ИначеЕсли (ЗаписьЖР.Сторно = 1) и (ЗаписьЖР.ПервичнаяЗапись.Перерасчет = 1) Тогда
Возврат глЭтоЗаписьПерерасчета(ЗаписьЖР.ПервичнаяЗапись);
КонецЕсли;
Возврат 0;
КонецФункции