Каталог решений - Две простенькие функции для правильного учета сторно-записей и записей-перерасчетов

Две простенькие функции для правильного учета сторно-записей и записей-перерасчетов

Две простенькие функции для правильного учета сторно-записей и записей-перерасчетов

В наличии

Часто при подсчете дней по записям журнала расчетов "Зарплата" берется знак "+" или "-" в зависимости от признака сторно-записи. Но рано или поздно результат получится ошибочным.

Категория:

Описание

Дело в том, что при повторном сторнировании дни должны быть учтены снова с плюсом. Предлагается простенькая функция, возвращающая всегда правильное значение:

//******************************************************************************
// глКоэффСторно(Знач ЗаписьЖР,Коэфф=1)
//
// Параметры: 
// ЗаписьЖР - ссылка на запись журнала расчетов
// ВозвращаемоеЗначение - если сторно, тогда вернет -1, иначе 1
//
Функция глКоэффСторно(Знач ЗаписьЖР,Коэфф=1) Экспорт
      Если ЗаписьЖР.Сторно = 1 Тогда
           Возврат глКоэффСторно(ЗаписьЖР.ПервичнаяЗапись,-Коэфф);
     КонецЕсли;
     Возврат Коэфф;
КонецФункции

Тогда вместо конструкции:

Дней = Дней + (ЖрнЗарплата.ДатаОкончания - ЖрнЗарплата.ДатаНачала + 1) * ?(ЖрнЗарплата.Сторно = 1,-1,1);

следует написать:

Дней = Дней + (ЖрнЗарплата.ДатаОкончания - ЖрнЗарплата.ДатаНачала + 1) * глКоэффСторно(ЖрнЗарплата.ТекущаяЗапись());

Предварительно, перед использованием функции глКоэффСторно() нужно отсеять записи перерасчета. Но с признаком «перерасчет» похожая ситуация. Поэтому ниже предлагается текст функции для определения записи-перерасчета:

//******************************************************************************
// глЭтоЗаписьПерерасчета(Знач ЗаписьЖР)
//
// Параметры: 
// ЗаписьЖР - ссылка на запись журнала расчетов
// ВозвращаемоеЗначение - если перерасчет, тогда вернет 1, иначе 0
//
Функция глЭтоЗаписьПерерасчета(Знач ЗаписьЖР) Экспорт
     Если (ЗаписьЖР.Перерасчет = 1) и (ЗаписьЖР.Сторно = 0) Тогда
          Возврат 1;
     ИначеЕсли (ЗаписьЖР.Сторно = 1) и (ЗаписьЖР.ПервичнаяЗапись.Перерасчет = 1) Тогда
          Возврат глЭтоЗаписьПерерасчета(ЗаписьЖР.ПервичнаяЗапись);
     КонецЕсли;
     Возврат 0;
КонецФункции
has been added to your cart:
Оформление заказа