Nekateri vnosi v glavno knjigo so knjiženi nepravilno, ko v portugalski različici programa Microsoft Dynamics NAV 2009 hkrati objavite dnevnik blagajniških potrdil z računom in obračunom za zavrnitev

Velja za
Dynamics NAV 2009

Ta članek velja za Microsoft Dynamics NAV za območne nastavitve portugalščine (pt).

Znaki

Ko v portugalski različici programa Microsoft Dynamics NAV 2009 hkrati objavite dnevnik blagajniških potrdil z računom in obračunom za zavrnitev, so vsi knjiženi vnosi glavne knjige knjiženi z računom za zavrnitev računov. Vendar pa morate za račun terjatev uporabiti račun terjatev, za zavrnjen dokument pa račun zavrnjenih računov. Do te težave pride pri teh izdelkih:

  • Portugalska različica izdelka Microsoft Dynamics NAV 2009 R2
  • Portugalska različica servisnega paketa SP1 za Microsoft Dynamics NAV 2009

Rešitev

Informacije o sprotnih popravkih

Microsoft zdaj ponuja podprt sprotni popravek. Vendar pa je njegov namen le odpraviti težavo, ki je opisana v tem članku. Uporabite ga samo v sistemih, v katerih se je spopadalo s to določeno težavo. Ta sprotni popravek bo morda dodatno pretestiran. Če ta težava ne vpliva resno, priporočamo, da počakate na naslednji servisni paket za Microsoft Dynamics NAV 2009 ali naslednjo različico Microsoft Dynamics NAV, ki vsebuje ta hitri popravek.

Opomba V posebnih primerih so klici za podporo, v katere so običajno vključeni stroški, lahko brezplačni, če strokovnjak za tehnično podporo za Microsoft Dynamics in sorodne izdelke ugotovi, da neka posodobitev lahko odpravi vašo težavo. Običajni stroški podpore veljajo za dodatna vprašanja o podpori in težavah, ki niso povezana z določeno posodobitvijo.

          

Informacije o namestitvi

Microsoft ponuja primere programiranja samo za ponazoritev, brez izrecnega ali naznačenega jamstva. To vključuje, vendar ni omejeno na, naznačena jamstva glede primernosti za prodajo ali določen namen. V tem članku predvidevamo, da poznate programski jezik, ki je predstavljen, in orodja, ki se uporabljajo za ustvarjanje postopkov in njihovo odpravljanje napak. Microsoftovi inženirji za podporo vam lahko pomagajo razložiti delovanje določenega postopka. Vendar pa teh primerov ne bodo spremenili z namenom zagotavljanja dodatne funkcionalnosti ali oblikovali postopkov, ki ustrezajo vašim posebnim zahtevam.

Opomba Preden namestite ta hitri popravek, preverite, ali so vsi uporabniki odjemalca Microsoft Navision odjavljeni iz sistema. To vključuje uporabnike odjemalskih storitev Microsoft Navision Application Services (NAS). Ko uvedete ta sprotni popravek, morate biti edini odjemalski uporabnik, ki je prijavljen.

Če želite uvesti ta sprotni popravek, morate imeti licenco za razvijalce.

Priporočamo, da uporabniškemu računu v oknu »Prijave v Windows« ali »Prijave v zbirko podatkov« dodelite ID vloge »SUPER«. Če uporabniškemu računu ni mogoče dodeliti ID-ja vloge »SUPER«, morate preveriti, ali ima uporabniški račun ta dovoljenja:

  • Dovoljenje »Spremeni« za predmet, ki ga boste spreminjali.
  • Dovoljenje za izvajanje za predmet »Sistemski predmet z ID-jem 5210« in za predmet »Sistemski predmet z ID-jem 9015«.

                
Opomba: Če morate popraviti podatke, vam ni treba imeti pravic do podatkovnih shramb.

Spremembe kode

Opomba: Popravke kode vedno preskusite v nadzorovanem okolju, preden jih uporabite v produkcijskih računalnikih.
Če želite odpraviti to težavo, spremenite kodo v polju Gen. Jnl.-Post Line codeunit (12) . To naredite tako:

  1. Dodajte to globalno spremenljivko:

    TempRejCustLedgEntry@1100047 : TEMPORARY Record 21;
    
  2. Spremenite kodo v funkciji PostCust na naslednji način:
    Obstoječa koda 1

    ...
              DiscRiskFactAmountLCY := 0;
              DiscUnriskFactAmountLCY := 0;
              CollFactAmountLCY := 0;
            //--------
    
              IF Cust."No." <> "Account No." THEN
                Cust.GET("Account No.");
              Cust.CheckBlockedCustOnJnls(Cust,"Document Type",TRUE);
    
              IF "Posting Group" = '' THEN BEGIN
    ...
    
    

    Nadomestna koda 1

    ...
              DiscRiskFactAmountLCY := 0;
              DiscUnriskFactAmountLCY := 0;
              CollFactAmountLCY := 0;
            //--------
    
    // Add the following lines. 
             TempRejCustLedgEntry.RESET;
             TempRejCustLedgEntry.DELETEALL;
    // End of the lines.
    
              IF Cust."No." <> "Account No." THEN
                Cust.GET("Account No.");
              Cust.CheckBlockedCustOnJnls(Cust,"Document Type",TRUE);
    
              IF "Posting Group" = '' THEN BEGIN
    ...
    
    

    Obstoječa koda 2

    ...
                END;
    
              // Post the application
              ApplyCustLedgEntry(
                CVLedgEntryBuf,DtldCVLedgEntryBuf,GenJnlLine,GLSetup."Appln. Rounding Precision");
    
    // Delete the following lines.
             IF GenJnlLine."Applies-to Doc. Type" = GenJnlLine."Applies-to Doc. Type"::" " THEN
               GenJnlLine."Applies-to Doc. Type" := AppliesToDocType;
    // End of the lines.
    
              IF AppManagement.AccessToCartera AND NOT GenJnlLine.Prepayment THEN BEGIN
                IF "Document Type" = "Document Type"::Bill THEN BEGIN
                  DocPost.CreateReceivableDoc(GenJnlLine,CVLedgEntryBuf);
                  CustLedgEntry."Document Situation" := CustLedgEntry."Document Situation"::Cartera;
    ...
    
    

    Nadomestna koda 2

    ...
                END;
    
              // Post the application
              ApplyCustLedgEntry(
                CVLedgEntryBuf,DtldCVLedgEntryBuf,GenJnlLine,GLSetup."Appln. Rounding Precision");
    
    // Add the following lines.
             IF ("Applies-to ID" = '') AND ("Applies-to Doc. Type" = "Applies-to Doc. Type"::" ") THEN
               "Applies-to Doc. Type" := AppliesToDocType;
    // End of the lines.
    
              IF AppManagement.AccessToCartera AND NOT GenJnlLine.Prepayment THEN BEGIN
                IF "Document Type" = "Document Type"::Bill THEN BEGIN
                  DocPost.CreateReceivableDoc(GenJnlLine,CVLedgEntryBuf);
                  CustLedgEntry."Document Situation" := CustLedgEntry."Document Situation"::Cartera;
    ...
    
    
  3. Spremenite kodo v funkciji PostVend tako:
    Obstoječa koda

    ...
              // Post the application
              ApplyVendLedgEntry(
                CVLedgEntryBuf,DtldCVLedgEntryBuf,GenJnlLine,
                GLSetup."Appln. Rounding Precision");
    
    // Delete the following lines.
             IF GenJnlLine."Applies-to Doc. Type" = GenJnlLine."Applies-to Doc. Type"::" " THEN
               GenJnlLine."Applies-to Doc. Type" := AppliesToDocType;
    // End of the lines.
    
              IF AppManagement.AccessToCartera AND NOT GenJnlLine.Prepayment THEN BEGIN
                IF "Document Type" = "Document Type"::Bill THEN BEGIN
                  DocPost.CreatePayableDoc(GenJnlLine,CVLedgEntryBuf);
                  VendLedgEntry."Document Situation" := VendLedgEntry."Document Situation"::Cartera;
    ...
    
    

    Nadomestna koda

    ...
              // Post the application
              ApplyVendLedgEntry(
                CVLedgEntryBuf,DtldCVLedgEntryBuf,GenJnlLine,
                GLSetup."Appln. Rounding Precision");
    
    // Add the following lines.
             IF ("Applies-to ID" = '') AND ("Applies-to Doc. Type" = "Applies-to Doc. Type"::" ") THEN
               "Applies-to Doc. Type" := AppliesToDocType;
    // End of the lines.
    
              IF AppManagement.AccessToCartera AND NOT GenJnlLine.Prepayment THEN BEGIN
                IF "Document Type" = "Document Type"::Bill THEN BEGIN
                  DocPost.CreatePayableDoc(GenJnlLine,CVLedgEntryBuf);
                  VendLedgEntry."Document Situation" := VendLedgEntry."Document Situation"::Cartera;
    ...
    
    
  4. Spremenite kodo v funkciji ApplyCustLedgEntry takole:
    Obstoječa koda

    ...
                    OldCustLedgEntry."Document Situation"::"Closed Documents",
                    OldCustLedgEntry."Document Situation"::"Closed BG/PO"]) THEN
                    FromClosedDoc := TRUE
                  ELSE
                    FromClosedDoc := FALSE;
                  DocPost.UpdateReceivableDoc(
                    OldCustLedgEntry,GenJnlLine,AppliedAmountLCY + DeltaUnrealAmount + DeltaAmountLCY,
                    DocAmountLCY,RejDocAmountLCY,DiscDocAmountLCY,CollDocAmountLCY,
                    DiscRiskFactAmountLCY,DiscUnriskFactAmountLCY,CollFactAmountLCY);
                END;
    ...
    
    

    Nadomestna koda

    ...
                    OldCustLedgEntry."Document Situation"::"Closed Documents",
                    OldCustLedgEntry."Document Situation"::"Closed BG/PO"]) THEN
                    FromClosedDoc := TRUE
                  ELSE
                    FromClosedDoc := FALSE;
    
    // Add the following lines.
                 IF OldCustLedgEntry."Document Status" = OldCustLedgEntry."Document Status"::Rejected THEN BEGIN
                   TempRejCustLedgEntry := OldCustLedgEntry;
                   TempRejCustLedgEntry."Remaining Amount (LCY) stats." := AppliedAmountLCY + DeltaUnrealAmount + DeltaAmountLCY;
                   TempRejCustLedgEntry.INSERT;
                 END;
    // End of the lines.
    
                  DocPost.UpdateReceivableDoc(
                    OldCustLedgEntry,GenJnlLine,AppliedAmountLCY + DeltaUnrealAmount + DeltaAmountLCY,
                    DocAmountLCY,RejDocAmountLCY,DiscDocAmountLCY,CollDocAmountLCY,
                    DiscRiskFactAmountLCY,DiscUnriskFactAmountLCY,CollFactAmountLCY);
                END;
    ...
    
    
  5. Spremenite kodo v funkciji PostDtldCustLedgEntries takole:
    Obstoječa koda

    ...
                  AccNo := CustPostingGr."Bills Account";
                END ELSE BEGIN
                  CustPostingGr.TESTFIELD("Receivables Account");
                  AccNo := CustPostingGr."Receivables Account";
                END;
    
    // Delete the following lines.
               IF DiscDocAmountLCY <> 0 THEN BEGIN
                 CustPostingGr.TESTFIELD("Discted. Bills Acc.");
                 AccNo := CustPostingGr."Discted. Bills Acc.";
               END;
               IF CollDocAmountLCY <> 0 THEN BEGIN
                 CustPostingGr.TESTFIELD("Bills on Collection Acc.");
                 AccNo := CustPostingGr."Bills on Collection Acc.";
               END;
               IF RejDocAmountLCY <> 0 THEN BEGIN
                 CASE GenJnlLine."Applies-to Doc. Type" OF
                   GenJnlLine."Applies-to Doc. Type"::Bill:
                     BEGIN
                       CustPostingGr.TESTFIELD("Rejected Bills Acc.");
                       AccNo := CustPostingGr."Rejected Bills Acc.";
                     END;
                   GenJnlLine."Applies-to Doc. Type"::Invoice:
                     BEGIN
                       CustPostingGr.TESTFIELD("Rejected Factoring Acc.");
                       AccNo := CustPostingGr."Rejected Factoring Acc.";
                     END;
                   ELSE
                     IF (GenJnlLine."Document Type" IN [GenJnlLine."Document Type"::"Credit Memo",GenJnlLine."Document Type"::Payment]) AND
                       (OldCVLedgEntryBuf4."Applies-to ID" <> '') THEN BEGIN
                       CASE OldCVLedgEntryBuf4."Document Type" OF
                         OldCVLedgEntryBuf4."Document Type"::Bill:
                           BEGIN
                             CustPostingGr.TESTFIELD("Receivables Account");
                             AccNo := CustPostingGr."Receivables Account";
                           END;
                         OldCVLedgEntryBuf4."Document Type"::Invoice:
                           BEGIN
                             CustPostingGr.TESTFIELD("Receivables Account");
                             AccNo := CustPostingGr."Receivables Account";
                           END;
                       END;
                     END;
                 END;
               END;
               IF (DiscRiskFactAmountLCY <> 0) OR (DiscUnriskFactAmountLCY <> 0) THEN BEGIN
                 CustPostingGr.TESTFIELD("Factoring for Discount Acc.");
                 AccNo := CustPostingGr."Factoring for Discount Acc.";
               END;
               IF CollFactAmountLCY <> 0 THEN BEGIN
                 CustPostingGr.TESTFIELD("Factoring for Collection Acc.");
                 AccNo := CustPostingGr."Factoring for Collection Acc.";
               END;
    // End of the lines.
    
                ReceivableAccAmtLCY :=
                  TotalAmountLCY -
                  (DocAmountLCY + DiscDocAmountLCY +
                   CollDocAmountLCY + RejDocAmountLCY + DiscRiskFactAmountLCY +
    ...
    
    

    Nadomestna koda

    ...
                  AccNo := CustPostingGr."Bills Account";
                END ELSE BEGIN
                  CustPostingGr.TESTFIELD("Receivables Account");
                  AccNo := CustPostingGr."Receivables Account";
                END;
    
                ReceivableAccAmtLCY :=
                  TotalAmountLCY -
                  (DocAmountLCY + DiscDocAmountLCY +
                   CollDocAmountLCY + RejDocAmountLCY + DiscRiskFactAmountLCY +
    ...
    
    
  6. Spremenite kodo v funkciji PostReceivableDocs na naslednji način:
    Obstoječa koda

    ...
              GLEntry."Bal. Account Type" := GenJnlLine."Bal. Account Type";
              GLEntry."Bal. Account No." := GenJnlLine."Bal. Account No.";
              InsertGLEntry(TRUE);
            END;
            IF RejDocAmountLCY <> 0 THEN BEGIN
    
    // Delete the following lines.
             CASE GenJnlLine."Applies-to Doc. Type" OF
               GenJnlLine."Applies-to Doc. Type"::Bill:
                 BEGIN
                   CustPostingGr.TESTFIELD("Rejected Bills Acc.");
                   InitGLEntry(CustPostingGr."Rejected Bills Acc.",RejDocAmountLCY,DocAmtCalcAddCurrency(RejDocAmountLCY),TRUE,TRUE);
                   GLEntry."Bal. Account Type" := GenJnlLine."Bal. Account Type";
                   GLEntry."Bal. Account No." := GenJnlLine."Bal. Account No.";
                   InsertGLEntry(TRUE);
                 END;
               GenJnlLine."Applies-to Doc. Type"::Invoice:
                 BEGIN
                   CustPostingGr.TESTFIELD("Rejected Factoring Acc.");
                   InitGLEntry(CustPostingGr."Rejected Factoring Acc.",RejDocAmountLCY,DocAmtCalcAddCurrency(RejDocAmountLCY),TRUE,TRUE);
                   GLEntry."Bal. Account Type" := GenJnlLine."Bal. Account Type";
                   GLEntry."Bal. Account No." := GenJnlLine."Bal. Account No.";
                   InsertGLEntry(TRUE);
                 END;
               ELSE
                 IF (GenJnlLine."Document Type" IN [GenJnlLine."Document Type"::"Credit Memo",GenJnlLine."Document Type"::Payment]) AND
                   (OldCVLedgEntryBuf4."Applies-to ID" <> '') THEN BEGIN
                   CASE OldCVLedgEntryBuf4."Document Type" OF
                     OldCVLedgEntryBuf4."Document Type"::Bill:
                       BEGIN
                         CustPostingGr.TESTFIELD("Rejected Bills Acc.");
                         InitGLEntry(CustPostingGr."Rejected Bills Acc.",RejDocAmountLCY,DocAmtCalcAddCurrency(RejDocAmountLCY),TRUE,TRUE);
                         GLEntry."Bal. Account Type" := GenJnlLine."Bal. Account Type";
                         GLEntry."Bal. Account No." := GenJnlLine."Bal. Account No.";
                         InsertGLEntry(TRUE);
                       END;
                     OldCVLedgEntryBuf4."Document Type"::Invoice:
                       BEGIN
                         CustPostingGr.TESTFIELD("Rejected Factoring Acc.");
                         InitGLEntry(CustPostingGr."Rejected Factoring Acc.",RejDocAmountLCY,DocAmtCalcAddCurrency(RejDocAmountLCY),TRUE,TRUE
           );
    
                         GLEntry."Bal. Account Type" := GenJnlLine."Bal. Account Type";
                         GLEntry."Bal. Account No." := GenJnlLine."Bal. Account No.";
                         InsertGLEntry(TRUE);
                       END;
                   END;
                 END;
    // End of the lines.
    
              END;
            END;
            IF DiscRiskFactAmountLCY <> 0 THEN BEGIN
              CustPostingGr.TESTFIELD("Factoring for Discount Acc.");
              InitGLEntry(CustPostingGr."Factoring for Discount Acc.",
    ...
    
    

    Nadomestna koda

    ...
              GLEntry."Bal. Account Type" := GenJnlLine."Bal. Account Type";
              GLEntry."Bal. Account No." := GenJnlLine."Bal. Account No.";
              InsertGLEntry(TRUE);
            END;
            IF RejDocAmountLCY <> 0 THEN BEGIN
    
    // Add the following lines.
             WITH TempRejCustLedgEntry DO BEGIN
               RESET;
               SETCURRENTKEY("Customer No.","Document Type","Document Situation","Document Status");
               SETRANGE("Document Type","Document Type"::Bill);
               CALCSUMS("Remaining Amount (LCY) stats.");
               IF "Remaining Amount (LCY) stats." <> 0 THEN BEGIN
                 CustPostingGr.TESTFIELD("Rejected Bills Acc.");
                 InitGLEntry(
                   CustPostingGr."Rejected Bills Acc.","Remaining Amount (LCY) stats.",
                   DocAmtCalcAddCurrency("Remaining Amount (LCY) stats."),TRUE,TRUE);
                 GLEntry."Bal. Account Type" := GenJnlLine."Bal. Account Type";
                 GLEntry."Bal. Account No." := GenJnlLine."Bal. Account No.";
                 InsertGLEntry(TRUE);
               END;
               SETRANGE("Document Type","Document Type"::Invoice);
               CALCSUMS("Remaining Amount (LCY) stats.");
               IF "Remaining Amount (LCY) stats." <> 0 THEN BEGIN
                 CustPostingGr.TESTFIELD("Rejected Factoring Acc.");
                 InitGLEntry(
                   CustPostingGr."Rejected Factoring Acc.","Remaining Amount (LCY) stats.",
                   DocAmtCalcAddCurrency("Remaining Amount (LCY) stats."),TRUE,TRUE);
                 GLEntry."Bal. Account Type" := GenJnlLine."Bal. Account Type";
                 GLEntry."Bal. Account No." := GenJnlLine."Bal. Account No.";
                 InsertGLEntry(TRUE);
               END;
    // End of the lines.
    
              END;
            END;
            IF DiscRiskFactAmountLCY <> 0 THEN BEGIN
              CustPostingGr.TESTFIELD("Factoring for Discount Acc.");
              InitGLEntry(CustPostingGr."Factoring for Discount Acc.",
    ...
    
    

Pogoji

Če želite uporabiti ta sprotni popravek, morate imeti nameščenega enega od teh izdelkov:

  • Portugalska različica izdelka Microsoft Dynamics NAV 2009 R2
  • Portugalska različica servisnega paketa SP1 za Microsoft Dynamics NAV 2009

Informacije o odstranitvi

Tega sprotnega popravka ne morete odstraniti.

Stanje

Microsoft je potrdil, da gre za težavo v Microsoftovih izdelkih, ki so navedeni v razdelku »Velja za«.

Opomba: To je članek »FAST PUBLISH«, ki je bil ustvarjen neposredno v organizaciji za Microsoftovo podporo. Informacije v tem dokumentu so na voljo takšne, kot odgovor na nastajajoče težave. Zaradi hitrosti njihove razpoložljivosti lahko gradivo vsebuje tipkarske napake in jih je mogoče kadarkoli pregledati brez obvestila. Za druga priporočila si oglejte Pogoje uporabe .