Przejdź do głównej zawartości
Pomoc techniczna
Zaloguj się przy użyciu konta Microsoft
Zaloguj się lub utwórz konto.
Witaj,
Wybierz inne konto.
Masz wiele kont
Wybierz konto, za pomocą którego chcesz się zalogować.

Ten artykuł dotyczy systemu Microsoft Dynamics NAV dla ustawień regionalnych języka portugalski (pt).

Objawy

Podczas księgowania dziennika wpłat gotówkowych z faktury i faktury odrzucenia w tym samym czasie w portugalskiej wersji systemu Microsoft Dynamics NAV 2009, wszystkich zapisów zaksięgowanych księgi są księgowane przy użyciu konta rachunki odrzucić. Jednak konto należności powinien być użyty na fakturze, a konto rachunki odrzucone powinny służyć odrzucony dokument. Ten problem występuje w następujących produktach:

  • Portugalskiej wersji systemu Microsoft Dynamics NAV 2009 R2

  • Portugalskiej wersji dodatku Service Pack 1 dla systemu Microsoft Dynamics NAV 2009

Rozwiązanie

Informacje o poprawce

Obsługiwana poprawka jest obecnie udostępniana przez firmę Microsoft. Jednak to jest przeznaczona tylko do usunięcia problemu opisanego w tym artykule. Zastosuj ją tylko w systemach, w których występuje ten problem. Ta poprawka może być wciąż w fazie testowania. Jeśli dany system nie jest poważnie narażony na ten problem, firma Microsoft zaleca, aby poczekać na następny dodatek service pack dla systemu Microsoft Dynamics NAV 2009 lub następną wersję systemu Microsoft Dynamics NAV, zawierający tę poprawkę.

Uwaga W wyjątkowych przypadkach opłaty, telefonujący do pomocy technicznej mogą zostać anulowane, jeśli pomocy technicznej dla systemu Microsoft Dynamics i produktów powiązanych Określa, że określonej aktualizacji, można rozwiązać swój problem. Koszty obsługi zwykłych zastosuje się do dodatkowych pytań i problemów, których nie można rozwiązać przy użyciu określonej aktualizacji.


Informacje dotyczące instalacji

Firma Microsoft podaje przykłady programowania wyłącznie, bez jakichkolwiek gwarancji wyrażonych wprost lub domyślnie. To obejmuje, ale nie jest ograniczona, ustawowej rękojmi co do przydatności handlowej lub przydatności do określonego celu. W tym artykule założono, że użytkownik zna demonstrowany język programowania oraz narzędzia, które są używane do tworzenia i debugowania procedur. Wykwalifikowani pracownicy pomocy technicznej firmy Microsoft mogą pomóc w wyjaśnieniu, jak działa określona procedura. Nie będą jednak modyfikować tych przykładów ani dodawać funkcjonalności i konstruować procedur w celu zaspokojenia określonych potrzeb użytkownika.

Uwaga Przed zainstalowaniem tej poprawki należy zweryfikować, że wszyscy użytkownicy klienta Microsoft Navision są wylogowani systemu. Dotyczy to również użytkowników klienta Microsoft Navision Application Services (NAS). Powinny być użytkownika klienta, który jest zalogowany w momencie wdrożyć tę poprawkę.

Aby wdrożyć tę poprawkę, musi mieć licencję deweloperską.

Firma Microsoft zaleca, aby do konta użytkownika w oknie identyfikatorów logowania systemu Windows lub w oknie identyfikatorów logowania bazy danych być przypisany identyfikator roli "SUPER". Jeśli konto użytkownika nie można przypisać Identyfikatora roli "SUPER", należy sprawdzić, czy konto użytkownika ma następujące uprawnienia:

  • Uprawnienie Modyfikacja dla obiektu, który będzie zmieniany.

  • Uprawnienie Execute obiektu 5210 identyfikator obiektu systemu i dla obiektu 9015 identyfikator obiektu systemu .



Uwaga Nie trzeba mieć prawa do magazynów danych, chyba że konieczne jest przeprowadzenie naprawy danych.

Zmiany kodu

Uwaga Zawsze test poprawki kodu w kontrolowanym środowisku przed zastosowaniem poprawki na komputerach produkcyjnych.
Aby rozwiązać ten problem, Zmień kod w dziennika gł.-codeunit linii Post (12). Aby to zrobić, wykonaj następujące kroki:

  1. Dodaj następujące zmiennej globalnej:

    TempRejCustLedgEntry@1100047 : TEMPORARY Record 21;
  2. Zmień kod w funkcji PostCust w następujący sposób:
    Istniejący kod 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
    ...

    Kod zastępczy 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
    ...

    Istniejący kod 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;
    ...

    Kod zastępczy 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. Zmień kod w funkcji PostVend w następujący sposób:
    Istniejący kod

    ...          // 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;
    ...

    Kod zastępczy

    ...          // 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. Zmień kod w applycustledgentry w następujący sposób:
    Istniejący kod

    ...                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;
    ...

    Kod zastępczy

    ...                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. Zmień kod w funkcji PostDtldCustLedgEntries w następujący sposób:
    Istniejący kod

    ...              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 +
    ...

    Kod zastępczy

    ...              AccNo := CustPostingGr."Bills Account";
    END ELSE BEGIN
    CustPostingGr.TESTFIELD("Receivables Account");
    AccNo := CustPostingGr."Receivables Account";
    END;

    ReceivableAccAmtLCY :=
    TotalAmountLCY -
    (DocAmountLCY + DiscDocAmountLCY +
    CollDocAmountLCY + RejDocAmountLCY + DiscRiskFactAmountLCY +
    ...

  6. Zmień kod w funkcji PostReceivableDocs w następujący sposób:
    Istniejący kod

    ...          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.",
    ...

    Kod zastępczy

    ...          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.",
    ...

Wymagania wstępne

Musi mieć jedną z następujących produktów, w celu zastosowania tej poprawki:

  • Portugalskiej wersji systemu Microsoft Dynamics NAV 2009 R2

  • Portugalskiej wersji dodatku Service Pack 1 dla systemu Microsoft Dynamics NAV 2009

Informacje dotyczące usuwania

Nie można usunąć tej poprawki.

Stan

Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji „Dotyczy”.

Uwaga Jest to artykuł " szybkiej publikacji" tworzony bezpośrednio przez organizację pomocy technicznej firmy Microsoft. Informacje zawarte w niniejszym dokumencie są dostarczane jako odpowiedź na pojawiające się problemy. W wyniku przyspieszonego udostępnienia, materiały te mogą zawierać błędy typograficzne i mogą być zmieniane w dowolnym czasie bez uprzedzenia. Zobacz Warunki użytkowania w celu uzyskania innych informacji.

Potrzebujesz dalszej pomocy?

Chcesz uzyskać więcej opcji?

Poznaj korzyści z subskrypcji, przeglądaj kursy szkoleniowe, dowiedz się, jak zabezpieczyć urządzenie i nie tylko.

Społeczności pomagają zadawać i odpowiadać na pytania, przekazywać opinie i słuchać ekspertów z bogatą wiedzą.

Czy te informacje były pomocne?

Jaka jest jakość języka?
Co wpłynęło na Twoje wrażenia?
Jeśli naciśniesz pozycję „Wyślij”, Twoja opinia zostanie użyta do ulepszania produktów i usług firmy Microsoft. Twój administrator IT będzie mógł gromadzić te dane. Oświadczenie o ochronie prywatności.

Dziękujemy za opinię!

×