Показать сообщение отдельно
Старый 03.04.2009, 15:22   #8  
Roman_812 is offline
Roman_812
Участник
 
1 / 11 (1) +
Регистрация: 03.04.2009
Может данная "особенность" алгоритма всё-таки не есть чья-то хитрая задумка? Похоже на простой косяк. Проводки по задолженности за предприятием или сотрудником формируются в методе closePayment класса RPayController. В тексте метода присутствует такой вот "странный" кусок кода:
X++:
        if (rpayTransOld.Amount > 0)
        {
            debtAmount = rpayTransOld.Amount - roundDown(rpayTransOld.Amount,rPayParameters.PaySheetRound);
        }
        else
        {
            debtAmount = rpayTransOld.Amount;
        }

        if (debtAmount != 0)
        {
            rPayTransNew.clear();
            rPayTransNew.SourceDate    = payPeriod;
            rPayTransNew.PayPeriod     = payPeriod;
            rPayTransNew.TransDate     = systemdateget();
            rPayTransNew.PayCtype      =  debtAmount > 0 ? costCompanyDebt : costEmplDebt;
            rPayTransNew.Amount        = currency::amount(debtAmount);
            rPayTransNew.PayModuleCode = #ModuleNameClosePayment;
            rPayTransNew.initFromEmplTable(emplTable1);
            rPayTransNew.doInsert();
        }
Таким образом, если сальдо собрали отрицательное, всё нормально - формируется строка в RPayTrans на эту самую сумму. Тип - "Долг за сотрудником". Если же сальдо получилось положительным, мы из него зачем-то вычитаем... ту же самую, но округлённую сумму Где логика? По-моему, надо вообще убрать этот if-else.

Последний раз редактировалось Roman_812; 03.04.2009 в 15:25.
За это сообщение автора поблагодарили: farlander (1).