Показать сообщение отдельно
Старый 25.03.2009, 16:33   #1  
petr is offline
petr
Участник
Соотечественники
 
561 / 201 (8) ++++++
Регистрация: 30.05.2005
Адрес: Швейцария
Баг при печати налогового кода
DAX 5.0 SP1

Класс TaxJournalSpec метод taxSpec()

Исходный код (уже исправленный, баги выделены комментариями)
X++:
 boolean taxSpec()
{
    TaxWriteSelection   taxWriteSelection;
    TaxGroup            lastTaxGroup;
    InventTransId       lastInventTransId;
    LedgerAccount       lastOperationAccount;
    Set                 taxSpecCodeSet;
    ;

    if (released  == NoYes::No)
    {
        // BP Deviation Documented
        taxSpecTmp.setTmp();
        lastTaxGroup        = '';
        lastInventTransId   = '';
        lastOperationAccount = '';
        taxSpecCodeSet = this.initTaxSpecCodeSet();

        ...
                if (!taxJournalTrans.ExemptCode && taxJournalTrans.TaxPrintDetail != TaxPrintDetail::TaxGroup)
                {
                    taxWriteSelection = TaxTable::find(taxJournalTrans.TaxCode).TaxWriteSelection;

                    if (taxWriteSelection == TaxWriteSelection::PrintCode)
                    {
                        if(taxJournalTrans.PrintCode)
                        {
                            taxSpecTmp.PrintCode    = taxJournalTrans.PrintCode;
                        }
                        else
                        {
                            taxSpecTmp.PrintCode    = TaxTable::printCode(taxJournalTrans.TaxCode);
                        }
                    }

                    if (taxWriteSelection == TaxWriteSelection::TaxRate & /* баг - & вместо &&*/  taxJournalTrans.TaxValue)
                    {
                        taxSpecTmp.PrintCode    = strfmt("%1",taxJournalTrans.TaxValue);
                    }
                }
            }
        }

        select
            sum(TaxBaseQty),
            sum(SourceTaxAmountCur),
            sum(SourceBaseAmountCur),
            sum(SourceRegulateAmountCur),
            sum(TaxAmount),
            sum(TaxBaseAmount)
        from taxSpecTmp
          group by TaxSpecCode, TaxDirection, ExemptTax, ExemptCode, SourceCurrencyCode, TaxAutoGenerated, TransDate, euroTriangulation /* баг - забыли PrintCode */           
          where taxSpecTmp.TransTableId == sourceTableId    &&
              taxSpecTmp.TransRecId   == sourceRecId;
    }
    else
    {
        next taxSpecTmp;
    }

    released  = NoYes::Yes;

    if (taxSpecTmp)
    {
        taxCode             = taxSpecTmp.TaxSpecCode;
        taxDirection        = taxSpecTmp.TaxDirection;
        taxWriteCode        = taxSpecTmp.PrintCode; /* используем невыбранный PrintCode*/
        taxExemptTax        = taxSpecTmp.ExemptTax;
        taxExemptCode       = taxSpecTmp.ExemptCode;
        currencyCode        = taxSpecTmp.SourceCurrencyCode;
        taxExemptDescription    = '';

        ...
}
Для сравнения можно посмотреть класс TaxInvoiceSpec метод taxSpec(), который выполняет аналог. функции и не содержит этих багов.

Как получить из стандарта: Распечатать подтверждение заказа (отчет salesConfirm) - не будут напечатаны налоговые коды (если они были заданы), при печати накладной коды печатаются.