Показать сообщение отдельно
Старый 19.04.2012, 15:36   #49  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Поле "К расчетно-платежному документу"
Последняя версия кода (для RU8 + KB 2677302):

\Data Dictionary\Tables\FactureJour_RU\Methods\document
X++:
server public container document()
{
    DocumentNum         docNum;
    DocumentDate        docDate;

    FactureTrans_RU     tmpFactureTrans;
    LedgerJournalTrans  ledgerJournalTrans;
    Set                 docNumSet = new Set(Types::String);

    switch (this.FactureType)
    {
        case FactureType_RU::TaxCorrection   :
            if (this.vatTaxAgent && !this.DocumentNum && !this.DocumentDate)
            {
                while select ledgerJournalTrans
                    group by DocumentDate, DocumentNum
                    join tmpFactureTrans
                        where tmpFactureTrans.MarkupRefRecId == ledgerJournalTrans.RecId &&
                              tmpFactureTrans.Module         == this.Module              &&
                              tmpFactureTrans.FactureId      == this.FactureId
                {
                    docNumSet.add(ledgerJournalTrans.DocumentNum);

                    if (docNumSet.elements() > 1)
                    {
                        docNum  = '';
                        docDate = dateNull();
                        break;
                    }
                    docNum  = ledgerJournalTrans.DocumentNum;
                    docDate = ledgerJournalTrans.DocumentDate;
                }
            }
            break;

       // begin
       case FactureType_RU::Invoice:
            [docNum, docDate] = this. getPaymentInfo();
            break;
       
    }

    return [ docNum, docDate ];
}
X++:
container getPaymentInfo()
{
    RecordSortedList    rst;
    CustVendInvoiceJour custVendInvoiceJour;

    CustVendTrans       custVendTrans, custVendTransPayment;
    CustVendSettlement  custVendSettlement;

    CustInvoiceJour     custInvoiceJour;
    VendInvoiceJour     vendInvoiceJour;
    CustTrans           custTrans, custTransPayment;
    VendTrans           vendTrans, vendTransPayment;
    CustSettlement      custSettlement;
    VendSettlement      vendSettlement;

    DocumentNum         docuNum;
    DocumentDate        docDate;
    ;

    switch (this.Module)
    {
        case FactureModule_RU::Cust :
            custVendInvoiceJour = custInvoiceJour;
            custVendTrans = custTrans;
            custVendTransPayment = custTransPayment;
            custVendSettlement = custSettlement;
            break;
        case FactureModule_RU::Vend :
            custVendInvoiceJour = vendInvoiceJour;
            custVendTrans = vendTrans;
            custVendTransPayment = vendTransPayment;
            custVendSettlement = vendSettlement;
            break;
        default                     :
            throw error(Error::wrongUseOfFunction(funcname()));
    }

    rst = this.invoiceJourSortedList_CustVend();
    while (rst.next(custVendInvoiceJour))
    {
        custVendTrans = custVendInvoiceJour.CustVendInvoiceJour::custVendTrans(custVendTrans);

        while select custVendSettlement
            where custVendSettlement.TransCompany   == custVendTrans.dataAreaId
               && custVendSettlement.TransRecId     == custVendTrans.RecId
               && custVendSettlement.AccountNum     == custVendTrans.AccountNum
        {
            while select custVendTransPayment
               where custVendTransPayment.AccountNum    == custVendSettlement.AccountNum
                  && custVendTransPayment.Voucher       == custVendSettlement.OffsetTransVoucher
                  && custVendTransPayment.Recid         == custVendSettlement.OffsetRecid
            {
                docuNum += ((docuNum ? ', ' : '') + custTransPayment.Txt);
                docDate = max(docDate, custTransPayment.TransDate);
            }
        }
    }

    return [docuNum, docDate];
}