Показать сообщение отдельно
Старый 28.06.2007, 12:24   #2  
Prof is offline
Prof
Участник
 
732 / 64 (4) ++++
Регистрация: 18.10.2002
Адрес: Москва
Не программируя никак

Можно сделать следующее:
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
}