gifts2017

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

Опубликовал Евгений П. (jack19) в раздел Программирование - Практика программирования

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

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

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



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

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

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

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

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

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

См. также

Подписаться Добавить вознаграждение

Комментарии

0. Евгений П. (jack19) 21.02.11 14:24
Часто при подсчете дней по записям журнала расчетов "Зарплата" берется знак "+" или "-" в зависимости от признака сторно-записи. Но рано или поздно результат получится ошибочным.


Перейти к публикации

1. Nicholas Mikuslas (Nicholas) 21.02.11 14:24
Начинаю верить в судьбу, божий промысел и т.п.:
Для отчета по отпускам возникла необходимость написать подобную функцию, перед написанием решил почитать новости и...
Вот она, готовая функция!
Алилуя! :)
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа