Не программируя никак
Можно сделать следующее:
1. Добавьте в таблицу RPayCounterTable поле TaxPeriod с типом RPayFundTaxPeriod
Ну и на форму RPayTaxFund заодно. При настройке надо будет выбрать период "Месяц" или "Год".
2. Замените метод calcFundAmount() класса RPayTaxSumCalc на
X++:
private RPayAmount calcFundAmount(RPayCounterUnit _counterUnit,RPayPeriod _payPeriod,EmplId _emplId)
{
RpayAmount fundTotalAmount,
baseTotalAmount,
fundTotalAmountPrev;
RpayRateTable rpayRateTable;
// ---> KSU #0075
RPayCounterTable rPayCounterTable = RPayCounterTable::find(_counterUnit);
// <--- KSU #0075
;
// ---> KSU #0075
rpayRateTable = RpayRateTable::Find(rPayCounterTable.PayRate);
if (rPayCounterTable.TaxPeriod == RPayFundTaxPeriod::Year)
{
baseTotalAmount = RpayFundEmplSum::GetFundBaseAmount(_emplId,_counterUnit,endMth(dateStartYr(_payPeriod)),_payPeriod);
fundTotalAmountPrev = RpayFundEmplSum::GetFundAmount(_emplId,_counterUnit,endMth(dateStartYr(_payPeriod)),endMth(PrevMth(_payPeriod)));
fundTotalAmount = rPayRateTable.GetValue(_payPeriod,_emplId,baseTotalAmount) *
((rpayRateTable.CritValueType || rPayRateTable.RateValueType == RPayRateValueType::CounterValue)? 1 : baseTotalAmount/100);
fundTotalAmount = currency::amount(fundTotalAmount);
return fundTotalAmount - fundTotalAmountPrev;
}
else if (rPayCounterTable.TaxPeriod == RPayFundTaxPeriod::Month)// ?? ?????
{
baseTotalAmount = RpayFundEmplSum::GetFundBaseAmount(_emplId,_counterUnit,_payPeriod,_payPeriod);
fundTotalAmount = rPayRateTable.GetValue(_payPeriod,_emplId,baseTotalAmount) *
((rpayRateTable.CritValueType || rPayRateTable.RateValueType == RPayRateValueType::CounterValue)? 1 : baseTotalAmount/100);
fundTotalAmount = currency::amount(fundTotalAmount);
return fundTotalAmount;
}
/*
baseTotalAmount = RpayFundEmplSum::GetFundBaseAmount(_emplId,_counterUnit,endMth(dateStartYr(_payPeriod)),_payPeriod);
fundTotalAmountPrev = RpayFundEmplSum::GetFundAmount(_emplId,_counterUnit,endMth(dateStartYr(_payPeriod)),endMth(PrevMth(_payPeriod)));
rpayRateTable = RpayRateTable::Find(RpayCounterTable::Find(_counterUnit).PayRate);
fundTotalAmount = rPayRateTable.GetValue(_payPeriod,_emplId,baseTotalAmount) *
((rpayRateTable.CritValueType || rPayRateTable.RateValueType == RPayRateValueType::CounterValue)? 1 : baseTotalAmount/100);
fundTotalAmount = currency::amount(fundTotalAmount);
return fundTotalAmount - fundTotalAmountPrev;
*/
// <--- KSU #075
}