Sistemul utilizează incorect data documentului în locul datei de publicare atunci când rulați raportul Declarație Make 347 pentru facturi publicate în versiunea spaniolă de Microsoft Dynamics NAV

Se aplică la
Dynamics NAV 2009 Microsoft Dynamics NAV 5.0

Acest articol se aplică la Microsoft Dynamics NAV pentru regiunea Spaniolă (es).

Simptome

Să presupunem că înregistrați mai multe facturi de achiziții sau de vânzări în versiunea în limba spaniolă de Microsoft Dynamics NAV. Atunci când rulați raportul Declarație 347 (10707) care utilizează intervalul de date din document al facturilor publicate, sistemul generează date incorect în fișierul Declarație 347. În plus, sistemul nu generează nimic în fișierul Declarație 347 atunci când rulați raportul Efectuare declarație 347 care utilizează intervalul de date de publicare al facturilor publicate. Cu toate acestea, sistemul ar trebui să utilizeze data de contabilizare în locul datei documentului atunci când rulați raportul Declarație Make 347 pentru facturi.
Această problemă apare în cazul următoarelor produse:

  • Versiunea în spaniolă de Microsoft Dynamics NAV 2009 R2
  • Versiunea în spaniolă de Microsoft Dynamics NAV 2009 Service Pack 1
  • Versiunea în spaniolă de Microsoft Dynamics NAV 5.0 Service Pack 1

      

Rezolvare

Informații despre remedierea rapidă

O remediere rapidă acceptată este acum disponibilă de la Microsoft. Însă, scopul său este doar să corecteze problema descrisă în acest articol. Aplicați-o doar sistemelor care se confruntă cu această problemă specifică. Această remediere rapidă poate fi testată suplimentar. De aceea, dacă această problemă nu vă afectează grav, vă recomandăm să așteptați următorul pachet Service Pack Microsoft Dynamics NAV 2009 sau versiunea următoare Microsoft Dynamics NAV care conține această remediere rapidă.

Notă În cazuri speciale, costurile implicate de obicei pentru apelurile de asistență pot fi revocate dacă un specialist în asistență tehnică pentru Microsoft Dynamics și produsele asociate stabilește că o anumită actualizare va rezolva problema. Costurile uzuale de suport se vor aplica pentru întrebări suplimentare de suport și pentru probleme ce nu fac obiectul actualizării în chestiune.

            
          

Informații despre instalare

Microsoft oferă exemple de programare numai în scop ilustrativ, fără nicio garanție explicită sau implicită. Aceasta include, dar nu se limitează la, garanțiile implicite de vandabilitate sau adecvare pentru un anumit scop. Acest articol presupune că sunteți familiarizat cu limbajul de programare prezentat și cu instrumentele utilizate pentru a crea și a depana proceduri. Inginerii de asistență Microsoft pot ajuta la explicarea funcționalității unei anumite proceduri, însă nu vor modifica aceste exemple pentru a furniza funcționalitate suplimentară și nu vor construi proceduri pentru a răspunde cerințelor dvs. specifice.

Notă Înainte de a instala această remediere rapidă, verificați dacă toți utilizatorii clientului Microsoft Navision sunt deconectați de la sistem. Printre aceștia se numără utilizatorii clienților Microsoft Navision Application Services (NAS). Ar trebui să fiți singurul utilizator client conectat atunci când implementați această remediere rapidă.

Pentru a implementa această remediere rapidă, trebuie să aveți o licență de dezvoltator.

Recomandăm ca contului de utilizator din fereastra Conectări Windows sau din fereastra Conectări bază de date să primească ID-ul de rol "SUPER". În cazul în care contului de utilizator nu i se poate atribui ID-ul de rol "SUPER", trebuie să verificați dacă acel cont de utilizator are următoarele permisiuni:

  • Permisiunea Modificare pentru obiectul pe care îl veți modifica.
  • Permisiunea de executare pentru obiectul cu ID obiect de sistem 5210 și pentru obiectul ID obiect de sistem 9015.

                
Notă: nu trebuie să aveți drepturi asupra depozitelor de date decât dacă trebuie să efectuați repararea datelor.

Modificări de cod

Notă: testați întotdeauna remedierile de cod într-un mediu controlat înainte de a aplica remedierile la computerele de producție.
Pentru a rezolva problema, urmați acești pași:

  1. Modificați codul din elementul de date numărul 3 din raportul de declarație Make 347 (10707), după cum urmează:
    Cod existent 1

    ...
    VATEntry.RESET;
    VATEntry.SETCURRENTKEY(Type,"Posting Date","Document Type","Document No.","Bill-to/Pay-to No.");
    VATEntry.SETRANGE(Type,VATEntry.Type::Sale);
    VATEntry.SETRANGE("Document No.","Document No.");
    
    // Delete the following line.
    VATEntry.SETRANGE("Document Date","Document Date");
    
    VATEntry.SETRANGE("Document Type","Document Type");
    VATEntry.SETRANGE("Country/Region Code",CountryCode);
    IF NOT VATEntry.FINDFIRST THEN BEGIN
    CASE "Document Type" OF
    ...
    

    Cod de înlocuire 1

    ...
    VATEntry.RESET;
    VATEntry.SETCURRENTKEY(Type,"Posting Date","Document Type","Document No.","Bill-to/Pay-to No.");
    VATEntry.SETRANGE(Type,VATEntry.Type::Sale);
    VATEntry.SETRANGE("Document No.","Document No.");
    
    // Add the following lines.
    VATEntry.SETRANGE("Document Date","Document Date");
    VATEntry.SETRANGE("Posting Date","Posting Date");
    // End of the lines.
    
    VATEntry.SETRANGE("Document Type","Document Type");
    VATEntry.SETRANGE("Country/Region Code",CountryCode);
    IF NOT VATEntry.FINDFIRST THEN BEGIN
    CASE "Document Type" OF
    ...
    

    Cod existent 2

    ...
    END;
    IF (VATEntry."VAT Registration No." <> '') OR NoTaxVATFound OR FromJournal THEN BEGIN
    CALCFIELDS("Amount (LCY)");
    SalesAmt := SalesAmt + "Amount (LCY)";
    
    // Delete the following line.
    UpdateQuarterAmount(AmountType::Sales,"Amount (LCY)","Document Date");
    
    END ELSE
    EmptyVATRegNo := TRUE;
    END;
    OnPostDataItem=VAR
    ...
    

    Codul de înlocuire 2

    ...
    END;
    IF (VATEntry."VAT Registration No." <> '') OR NoTaxVATFound OR FromJournal THEN BEGIN
    CALCFIELDS("Amount (LCY)");
    SalesAmt := SalesAmt + "Amount (LCY)";
    
    // Add the following lines.
    UpdateQuarterAmount(AmountType::Sales,"Amount (LCY)","Document Date");
    UpdateQuarterAmount(AmountType::Sales,"Amount (LCY)","Posting Date");
    // End of the lines.
    
    END ELSE
    EmptyVATRegNo := TRUE;
    END;
    OnPostDataItem=VAR
    ...
    

    Cod existent 3

    ...
    END;
    END;
    CalcFields=Amount;
    DataItemLink=Customer No.=FIELD(No.),
    
    // Delete the following line.
    Document Date=FIELD(Date Filter);
    
    }
    SECTIONS
    {
    }
    }
    ...
    

    Codul de înlocuire 3

    ...
    END;
    END;
    CalcFields=Amount;
    DataItemLink=Customer No.=FIELD(No.),
    
    // Add the following line.
    Posting Date=FIELD(Date Filter);
    
    }
    SECTIONS
    {
    }
    }
    ...
    
  2. Modificați codul din elementul de date numărul 6 din raportul de declarație Make 347 (10707), după cum urmează:
    Cod existent 1

    ...
    VATEntry.RESET;
    VATEntry.SETCURRENTKEY(Type,"Posting Date","Document Type","Document No.","Bill-to/Pay-to No.");
    VATEntry.SETRANGE(Type,VATEntry.Type::Purchase);
    VATEntry.SETRANGE("Document No.","Document No.");
    
    // Delete the following line.
    VATEntry.SETRANGE("Document Date","Document Date");
    
    VATEntry.SETRANGE("Document Type","Document Type");
    VATEntry.SETRANGE("Country/Region Code",CountryCode);
    IF NOT VATEntry.FINDFIRST THEN BEGIN
    CASE "Document Type" OF
    ...
    

    Cod de înlocuire 1

    ...
    VATEntry.RESET;
    VATEntry.SETCURRENTKEY(Type,"Posting Date","Document Type","Document No.","Bill-to/Pay-to No.");
    VATEntry.SETRANGE(Type,VATEntry.Type::Purchase);
    VATEntry.SETRANGE("Document No.","Document No.");
    
    // Add the following lines.
    VATEntry.SETRANGE("Document Date","Document Date");
    VATEntry.SETRANGE("Posting Date","Posting Date");
    // End of the lines.
    
    VATEntry.SETRANGE("Document Type","Document Type");
    VATEntry.SETRANGE("Country/Region Code",CountryCode);
    IF NOT VATEntry.FINDFIRST THEN BEGIN
    CASE "Document Type" OF
    ...
    

    Cod existent 2

    ...
    END;
    IF (VATEntry."VAT Registration No." <> '') OR NoTaxVATFound OR FromJournal THEN BEGIN
    CALCFIELDS("Amount (LCY)");
    PurchasesAmt := PurchasesAmt - "Amount (LCY)";
    
    // Delete the following line.
    UpdateQuarterAmount(AmountType::Purchase,-"Amount (LCY)","Document Date");
    
    END ELSE
    EmptyVATRegNo := TRUE;
    END;
    OnPostDataItem=BEGIN
    ...
    

    Codul de înlocuire 2

    ...
    END;
    IF (VATEntry."VAT Registration No." <> '') OR NoTaxVATFound OR FromJournal THEN BEGIN
    CALCFIELDS("Amount (LCY)");
    PurchasesAmt := PurchasesAmt - "Amount (LCY)";
    
    // Add the following lines.
    UpdateQuarterAmount(AmountType::Purchase,-"Amount (LCY)","Document Date");
    UpdateQuarterAmount(AmountType::Purchase,-"Amount (LCY)","Posting Date");
    // End of the lines.
    
    END ELSE
    EmptyVATRegNo := TRUE;
    END;
    OnPostDataItem=BEGIN
    ...
    

    Codul existent 3

    ...
    END;
    END;
    CalcFields=Amount;
    DataItemLink=Vendor No.=FIELD(No.),
    
    // Delete the following line.
    Document Date=FIELD(Date Filter);
    
    }
    SECTIONS
    {
    }
    }
    ...
    

    Codul de înlocuire 3

    ...
    END;
    END;
    CalcFields=Amount;
    DataItemLink=Vendor No.=FIELD(No.),
    
    // Add the following line.
    Posting Date=FIELD(Date Filter);
    
    }
    SECTIONS
    {
    }
    }
    ...
    
  3. Modificați codul din funcția CheckSameVATRegNo din raportul Efectuare declarație 347 (10707) după cum urmează:
    Cod existent 1

    ...
    END ELSE BEGIN
    VATEntry3.SETRANGE(Type,VATEntry3.Type::Purchase); 
    VATEntry3.SETRANGE("VAT Registration No.",Vendor."VAT Registration No.");
    VATEntry3.SETFILTER("Bill-to/Pay-to No.",'<>%1',Vendor."No.");
    END;
    
    // Delete the following line.
    VATEntry3.SETRANGE("Document Date",FromDate,ToDate); 
    
    IF VATEntry3.FINDFIRST THEN
    REPEAT
    IF IsCustomer THEN
    Amt := Amt - VATEntry3.Base - VATEntry3.Amount
    ...
    

    Cod de înlocuire 1

    ...
    END ELSE BEGIN
    VATEntry3.SETRANGE(Type,VATEntry3.Type::Purchase);
    VATEntry3.SETRANGE("VAT Registration No.",Vendor."VAT Registration No.");
    VATEntry3.SETFILTER("Bill-to/Pay-to No.",'<>%1',Vendor."No.");
    END;
    
    // Add the following lines.
    VATEntry3.SETRANGE("Document Date",FromDate,ToDate);
    VATEntry3.SETRANGE("Posting Date",FromDate,ToDate);
    // End of the lines.
    
    IF VATEntry3.FINDFIRST THEN
    REPEAT
    IF IsCustomer THEN
    Amt := Amt - VATEntry3.Base - VATEntry3.Amount
    ...
    

    Cod existent 2

    ...
    IF IsCustomer THEN
    Amt := Amt - VATEntry3.Base - VATEntry3.Amount
    ELSE
    Amt := Amt + VATEntry3.Base + VATEntry3.Amount;
    
    // Delete the following line.
    UpdateQuarterAmount(AmountType::Sales,ABS(VATEntry3.Base) + ABS(VATEntry3.Amount),VATEntry3."Document Date");
    
    TempVATEntry.SETRANGE("Transaction No.",VATEntry3."Transaction No.");
    IF NOT TempVATEntry.FINDFIRST THEN BEGIN
    GLEntry.SETRANGE("Transaction No.",VATEntry3."Transaction No.");
    IF GLEntry.FINDSET THEN
    REPEAT
    ...
    

    Codul de înlocuire 2

    ...
    IF IsCustomer THEN
    Amt := Amt - VATEntry3.Base - VATEntry3.Amount
    ELSE
    Amt := Amt + VATEntry3.Base + VATEntry3.Amount;
    
    // Add the following lines.
    UpdateQuarterAmount(AmountType::Sales,ABS(VATEntry3.Base) + ABS(VATEntry3.Amount),VATEntry3."Document Date");
    UpdateQuarterAmount(AmountType::Sales,ABS(VATEntry3.Base) + ABS(VATEntry3.Amount),VATEntry3."Posting Date");
    // End of the lines.
    
    TempVATEntry.SETRANGE("Transaction No.",VATEntry3."Transaction No.");
    IF NOT TempVATEntry.FINDFIRST THEN BEGIN
    GLEntry.SETRANGE("Transaction No.",VATEntry3."Transaction No.");
    IF GLEntry.FINDSET THEN
    REPEAT
    ...
    
  4. Modificați codul din funcția IdentifyCashPayments din raportul de declarație Make 347 (10707), după cum urmează:
    Cod existent

    ...
    CustLedgerEntry@1100001 : Record 21;
    BEGIN
    CustLedgerEntry.SETCURRENTKEY("Document Type","Customer No.","Posting Date","Currency Code");
    CustLedgerEntry.SETRANGE("Document Type",CustLedgerEntry."Document Type"::Payment);
    CustLedgerEntry.SETRANGE("Customer No.",CustomerNo);
    
    // Delete the following line.
    CustLedgerEntry.SETRANGE("Document Date",FromDate,ToDate);
    
    IF CustLedgerEntry.FINDSET THEN REPEAT
    IF (CustLedgerEntry."Bal. Account Type" = CustLedgerEntry."Bal. Account Type"::"G/L Account") AND
    (CustLedgerEntry."Bal. Account No." <> '')
    THEN BEGIN
    IF IsCashAccount(CustLedgerEntry."Bal. Account No.") THEN BEGIN
    ...
    

    Codul de înlocuire

    ...
    CustLedgerEntry@1100001 : Record 21;
    BEGIN
    CustLedgerEntry.SETCURRENTKEY("Document Type","Customer No.","Posting Date","Currency Code");
    CustLedgerEntry.SETRANGE("Document Type",CustLedgerEntry."Document Type"::Payment);
    CustLedgerEntry.SETRANGE("Customer No.",CustomerNo);
    
    // Add the following lines.
    CustLedgerEntry.SETRANGE("Document Date",FromDate,ToDate);
    CustLedgerEntry.SETRANGE("Posting Date",FromDate,ToDate);
    // End of the lines.
    
    IF CustLedgerEntry.FINDSET THEN REPEAT
    IF (CustLedgerEntry."Bal. Account Type" = CustLedgerEntry."Bal. Account Type"::"G/L Account") AND
    (CustLedgerEntry."Bal. Account No." <> '')
    THEN BEGIN
    IF IsCashAccount(CustLedgerEntry."Bal. Account No.") THEN BEGIN
    ...
    
  5. Modificați codul din funcția CreateCashTotals din raportul de declarație Make 347 (10707) după cum urmează:
    Cod existent 1

    ...
    IF DtldCustLedgEntry2."Cust. Ledger Entry No." <>
    DtldCustLedgEntry2."Applied Cust. Ledger Entry No."
    THEN BEGIN
    IF CustLedgerEntry.GET(DtldCustLedgEntry2."Cust. Ledger Entry No.") THEN
    UpdateCustomerCashBuffer(VATRegistrationNo,
    
    // Delete the following line.
    DATE2DMY(CustLedgerEntry."Document Date",3),-(DtldCustLedgEntry2."Amount (LCY)"));
    
    END;
    UNTIL DtldCustLedgEntry2.NEXT = 0;
    END ELSE BEGIN
    IF CustLedgerEntry.GET(DtldCustLedgEntry."Applied Cust. Ledger Entry No.") THEN
    UpdateCustomerCashBuffer(VATRegistrationNo,
    ...
    

    Cod de înlocuire 1

    ...
    IF DtldCustLedgEntry2."Cust. Ledger Entry No." <>
    DtldCustLedgEntry2."Applied Cust. Ledger Entry No."
    THEN BEGIN
    IF CustLedgerEntry.GET(DtldCustLedgEntry2."Cust. Ledger Entry No.") THEN
    UpdateCustomerCashBuffer(VATRegistrationNo,
    
    // Add the following lines.
    DATE2DMY(CustLedgerEntry."Document Date",3),-(DtldCustLedgEntry2."Amount (LCY)"));
    DATE2DMY(CustLedgerEntry."Posting Date",3),-(DtldCustLedgEntry2."Amount (LCY)"));
    // End of the lines.
    
    END;
    UNTIL DtldCustLedgEntry2.NEXT = 0;
    END ELSE BEGIN
    IF CustLedgerEntry.GET(DtldCustLedgEntry."Applied Cust. Ledger Entry No.") THEN
    UpdateCustomerCashBuffer(VATRegistrationNo,
    ...
    

    Cod existent 2

    ...
    END;
    UNTIL DtldCustLedgEntry2.NEXT = 0;
    END ELSE BEGIN
    IF CustLedgerEntry.GET(DtldCustLedgEntry."Applied Cust. Ledger Entry No.") THEN
    UpdateCustomerCashBuffer(VATRegistrationNo,
    
    // Delete the following line.
    DATE2DMY(CustLedgerEntry."Document Date",3),DtldCustLedgEntry."Amount (LCY)");
    
    END;
    UNTIL DtldCustLedgEntry.NEXT = 0;
    END;
    LOCAL PROCEDURE IsCashAccount@1100015(GLAccountNo@1100000 : Text[20]) : Boolean;
    ...
    

    Codul de înlocuire 2

    ...
    END;
    UNTIL DtldCustLedgEntry2.NEXT = 0;
    END ELSE BEGIN
    IF CustLedgerEntry.GET(DtldCustLedgEntry."Applied Cust. Ledger Entry No.") THEN
    UpdateCustomerCashBuffer(VATRegistrationNo,
    
    // Add the following lines.
    DATE2DMY(CustLedgerEntry."Document Date",3),DtldCustLedgEntry."Amount (LCY)");
    DATE2DMY(CustLedgerEntry."Posting Date",3),DtldCustLedgEntry."Amount (LCY)");
    // End of the lines.
    
    END;
    UNTIL DtldCustLedgEntry.NEXT = 0;
    END;
    LOCAL PROCEDURE IsCashAccount@1100015(GLAccountNo@1100000 : Text[20]) : Boolean;
    ...
    
  6. Modificați codul din funcția UpdateNotIn347Amount din raportul de declarație Make 347 (10707) după cum urmează:
    Cod existent

    ...
    BEGIN
    WITH GLEntry DO BEGIN
    GLAccount.GET("G/L Account No.");
    IF GLAccount."Ignore in 347 Report" THEN BEGIN
    NotIn347Amt := NotIn347Amt + Amount + "VAT Amount";
    
    // Delete the following line.
    UpdateQuarterAmount(AmountType::NotIn347Report,Amount + "VAT Amount","Document Date");
    
    END;
    END;
    END;
    BEGIN
    ...
    

    Codul de înlocuire

    ...
    BEGIN
    WITH GLEntry DO BEGIN
    GLAccount.GET("G/L Account No.");
    IF GLAccount."Ignore in 347 Report" THEN BEGIN
    NotIn347Amt := NotIn347Amt + Amount + "VAT Amount";
    
    // Add the following lines.
    UpdateQuarterAmount(AmountType::NotIn347Report,Amount + "VAT Amount","Document Date");
    UpdateQuarterAmount(AmountType::NotIn347Report,Amount + "VAT Amount","Posting Date");
    // End of the lines.
    
    END;
    END;
    END;
    BEGIN
    ...
    

          

Cerințe preliminare

Trebuie să aveți instalat unul dintre următoarele produse pentru a aplica această remediere rapidă:

  • Versiunea în spaniolă de Microsoft Dynamics NAV 2009 R2
  • Versiunea în spaniolă de Microsoft Dynamics NAV 2009 Service Pack 1
  • Versiunea în spaniolă de Microsoft Dynamics NAV 5.0 Service Pack 1

Eliminarea informațiilor

Nu puteți elimina această remediere rapidă.

Stare

Microsoft a confirmat că aceasta este o problemă în produsele Microsoft care sunt listate în secțiunea „Se aplică la”.

Notă: Acesta este un articol "PUBLICARE RAPIDĂ" creat direct din cadrul organizației de asistență Microsoft. Informațiile din acest document sunt furnizate ca atare ca răspuns la problemele apărute. Ca urmare a vitezei de punere la dispoziție, materialele pot include erori tipografice și pot fi revizuite în orice moment fără preaviz. Consultați Condițiile de utilizare pentru alte considerente.