Objawy
Po zainstalowaniu KB3034441 w hiszpańskiej wersji systemu Microsoft Dynamics NAV 2009, po zastosowaniu normalnych płatności i BOM z zapisów księgi nabywcy lub dostawcy, zaksięgowanych zapisów K/G odnoszą się zarówno do tego samego konta, która jest niepoprawna. Wykonaj kroki opisane w sekcji zmiany kodu , aby rozwiązać ten problem. Ten problem występuje w następujących produktach:
-
W wersji hiszpańskiej dla systemu Microsoft Dynamics NAV 2009 R2
-
W wersji hiszpańskiej dla dodatku SP1 dla programu 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 systemu Microsoft Dynamics NAV są wylogowani systemu. Obejmuje to usług systemu Microsoft Dynamics NAV aplikacji serwera (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 9015 identyfikator obiektu systemu
obiekt.
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, wykonaj następujące kroki:-
Zmień kod w funkcji PostDtldCustLedgEntries w dziennika gł.-codeunit linii Post (12) w następujący sposób:
Istniejący kod 1...LOCAL PROCEDURE PostDtldCustLedgEntries@46(GenJnlLine2@1000 : Record 81;VAR DtldCVLedgEntryBuf@1001 : Record 383;CustPostingGr@1002 : Record 92;GLSetup@1003 : Record 98;NextTransactionNo@1004 : Integer;CustLedgEntryInserted@1012 : Boolean);
VAR DtldCustLedgEntry@1005 : Record 379; Currency@1007 : Record 4; GenPostingSetup@1008 : Record 252; TotalAmountLCY@1009 : Decimal; TotalAmountAddCurr@1010 : Decimal; PaymentDiscAcc@1011 : Code[20]; DtldCustLedgEntryNoOffset@1006 : Integer; PaymentTolAcc@1013 : Code[20]; ...Kod zastępczy 1
...LOCAL PROCEDURE PostDtldCustLedgEntries@46(GenJnlLine2@1000 : Record 81;VAR DtldCVLedgEntryBuf@1001 : Record 383;CustPostingGr@1002 : Record 92;GLSetup@1003 : Record 98;NextTransactionNo@1004 : Integer;CustLedgEntryInserted@1012 : Boolean);
VAR DtldCustLedgEntry@1005 : Record 379; Currency@1007 : Record 4; GenPostingSetup@1008 : Record 252; // Add the following line. DtldCustLedgEntry3@1100044 : Record 379; // End of the added line. TotalAmountLCY@1009 : Decimal; TotalAmountAddCurr@1010 : Decimal; PaymentDiscAcc@1011 : Code[20]; DtldCustLedgEntryNoOffset@1006 : Integer; PaymentTolAcc@1013 : Code[20]; ...Istniejący kod 2
...ReceivableAccAmtLCY@1100001 : Decimal;
ReceivableAccAmtAddCurr@1100000 : Decimal; DtldCustLedgEntry2@1100003 : TEMPORARY Record 379; ExistDtldCVLedgEntryBuf@1000003 : Boolean; FindBill@1100004 : Boolean; BEGIN TotalAmountLCY := 0; TotalAmountAddCurr := 0; PositiveLCYAppAmt := 0; PositiveACYAppAmt := 0; ...Kod zastępczy 2
...ReceivableAccAmtLCY@1100001 : Decimal;
ReceivableAccAmtAddCurr@1100000 : Decimal; DtldCustLedgEntry2@1100003 : TEMPORARY Record 379; ExistDtldCVLedgEntryBuf@1000003 : Boolean; FindBill@1100004 : Boolean; // Add the following line. EntryUnapplied@1100051 : Boolean; // End of the added line. BEGIN TotalAmountLCY := 0; TotalAmountAddCurr := 0; PositiveLCYAppAmt := 0; PositiveACYAppAmt := 0; ...Istniejący kod 3
... TotalAmountAddCurr := 0;
PositiveLCYAppAmt := 0; PositiveACYAppAmt := 0; NegativeLCYAppAmt := 0; NegativeACYAppAmt := 0; IF GenJnlLine2."Account Type" = GenJnlLine2."Account Type"::Customer THEN BEGIN IF DtldCustLedgEntry.FINDLAST THEN DtldCustLedgEntryNoOffset := DtldCustLedgEntry."Entry No." ELSE ...Kod zastępczy 3
...TotalAmountAddCurr := 0;
PositiveLCYAppAmt := 0; PositiveACYAppAmt := 0; NegativeLCYAppAmt := 0; NegativeACYAppAmt := 0; // Add the following line. EntryUnapplied := FALSE; // End of the added line. IF GenJnlLine2."Account Type" = GenJnlLine2."Account Type"::Customer THEN BEGIN IF DtldCustLedgEntry.FINDLAST THEN DtldCustLedgEntryNoOffset := DtldCustLedgEntry."Entry No." ELSE ...Istniejący kod 4
... END;
InsertGLEntry(TRUE); GenJnlLine."Posting Date" := OriginalPostingDate; END; // Delete the following line. PostReceivableDocs(GenJnlLine); // End of the deleted line. IF NOT GLEntryTmp.FINDFIRST AND ExistDtldCVLedgEntryBuf THEN BEGIN InitGLEntry(CustPostingGr."Receivables Account",PositiveLCYAppAmt,PositiveACYAppAmt,FALSE,TRUE); InsertGLEntry(FALSE); InitGLEntry(CustPostingGr."Receivables Account",NegativeLCYAppAmt,NegativeACYAppAmt,FALSE,TRUE); ...Kod zastępczy 4
... END;
InsertGLEntry(TRUE); GenJnlLine."Posting Date" := OriginalPostingDate; END; // Add the following lines. WITH DtldCustLedgEntry3 DO BEGIN SETCURRENTKEY("Cust. Ledger Entry No."); SETRANGE("Cust. Ledger Entry No.",DtldCustLedgEntry."Cust. Ledger Entry No."); SETFILTER("Applies-to Bill No.",'<>%1',''); SETRANGE(Unapplied,TRUE); EntryUnapplied := NOT ISEMPTY; END; PostReceivableDocs(EntryUnapplied); // End of the added lines. IF NOT GLEntryTmp.FINDFIRST AND ExistDtldCVLedgEntryBuf THEN BEGIN InitGLEntry(CustPostingGr."Receivables Account",PositiveLCYAppAmt,PositiveACYAppAmt,FALSE,TRUE); InsertGLEntry(FALSE); InitGLEntry(CustPostingGr."Receivables Account",NegativeLCYAppAmt,NegativeACYAppAmt,FALSE,TRUE); ... -
Zmień kod w funkcji PostDtldVendLedgEntries w dziennika gł.-codeunit linii Post (12) w następujący sposób:
Istniejący kod 1... PROCEDURE PostDtldVendLedgEntries@32(GenJnlLine2@1000 : Record 81;VAR DtldCVLedgEntryBuf@1001 : Record 383;VendPostingGr@1002 : Record 93;NextTransactionNo@1003 : Integer;VendLedgEntryInserted@1011 : Boolean);
VAR DtldVendLedgEntry@1004 : Record 380; Currency@1006 : Record 4; GenPostingSetup@1007 : Record 252; TotalAmountLCY@1008 : Decimal; TotalAmountAddCurr@1009 : Decimal; PaymentDiscAcc@1010 : Code[20]; DtldVendLedgEntryNoOffset@1005 : Integer; PaymentTolAcc@1012 : Code[20]; ...Kod zastępczy 1
...PROCEDURE PostDtldVendLedgEntries@32(GenJnlLine2@1000 : Record 81;VAR DtldCVLedgEntryBuf@1001 : Record 383;VendPostingGr@1002 : Record 93;NextTransactionNo@1003 : Integer;VendLedgEntryInserted@1011 : Boolean);
VAR DtldVendLedgEntry@1004 : Record 380; Currency@1006 : Record 4; GenPostingSetup@1007 : Record 252; // Add the following line. DtldVendLedgEntry3@1100055 : Record 380; // End of the added line. TotalAmountLCY@1008 : Decimal; TotalAmountAddCurr@1009 : Decimal; PaymentDiscAcc@1010 : Code[20]; DtldVendLedgEntryNoOffset@1005 : Integer; PaymentTolAcc@1012 : Code[20]; ...Istniejący kod 2
...PayableAccAmtLCY@1100002 : Decimal;
PayableAccAmtAddCurr@1100010 : Decimal; DtldVendLedgEntry2@1100003 : Record 380; ExistDtldCVLedgEntryBuf@1100004 : Boolean; FindBill@1100005 : Boolean; BEGIN TotalAmountLCY := 0; TotalAmountAddCurr := 0; PositiveLCYAppAmt := 0; PositiveACYAppAmt := 0; ...Kod zastępczy 2
...PayableAccAmtLCY@1100002 : Decimal;
PayableAccAmtAddCurr@1100010 : Decimal; DtldVendLedgEntry2@1100003 : Record 380; ExistDtldCVLedgEntryBuf@1100004 : Boolean; FindBill@1100005 : Boolean; // Add the following line. EntryUnapplied@1100051 : Boolean; // End of the added line. BEGIN TotalAmountLCY := 0; TotalAmountAddCurr := 0; PositiveLCYAppAmt := 0; PositiveACYAppAmt := 0; ...Istniejący kod 3
...TotalAmountAddCurr := 0;
PositiveLCYAppAmt := 0; PositiveACYAppAmt := 0; NegativeLCYAppAmt := 0; NegativeACYAppAmt := 0; IF GenJnlLine2."Account Type" = GenJnlLine2."Account Type"::Vendor THEN BEGIN IF DtldVendLedgEntry.FINDLAST THEN DtldVendLedgEntryNoOffset := DtldVendLedgEntry."Entry No." ELSE ...Kod zastępczy 3
...TotalAmountAddCurr := 0;
PositiveLCYAppAmt := 0; PositiveACYAppAmt := 0; NegativeLCYAppAmt := 0; NegativeACYAppAmt := 0; // Add the following line. EntryUnapplied := FALSE; // End of the added line. IF GenJnlLine2."Account Type" = GenJnlLine2."Account Type"::Vendor THEN BEGIN IF DtldVendLedgEntry.FINDLAST THEN DtldVendLedgEntryNoOffset := DtldVendLedgEntry."Entry No." ELSE ...Istniejący kod 4
...END;
InsertGLEntry(TRUE); GenJnlLine."Posting Date" := OriginalPostingDate; END; // Delete the following line. PostPayableDocs(GenJnlLine); // End of the deleted line. IF NOT GLEntryTmp.FINDFIRST AND ExistDtldCVLedgEntryBuf THEN BEGIN InitGLEntry(VendPostingGr."Payables Account",PositiveLCYAppAmt,PositiveACYAppAmt,FALSE,TRUE); InsertGLEntry(FALSE); InitGLEntry(VendPostingGr."Payables Account",NegativeLCYAppAmt,NegativeACYAppAmt,FALSE,TRUE); ...Kod zastępczy 4
...END;
InsertGLEntry(TRUE); GenJnlLine."Posting Date" := OriginalPostingDate; END; // Add the following lines. WITH DtldVendLedgEntry3 DO BEGIN SETCURRENTKEY("Vendor Ledger Entry No."); SETRANGE("Vendor Ledger Entry No.",DtldVendLedgEntry."Vendor Ledger Entry No."); SETFILTER("Applies-to Bill No.",'<>%1',''); SETRANGE(Unapplied,TRUE); EntryUnapplied := NOT ISEMPTY; END; PostPayableDocs(EntryUnapplied); // End of the added lines. IF NOT GLEntryTmp.FINDFIRST AND ExistDtldCVLedgEntryBuf THEN BEGIN InitGLEntry(VendPostingGr."Payables Account",PositiveLCYAppAmt,PositiveACYAppAmt,FALSE,TRUE); InsertGLEntry(FALSE); InitGLEntry(VendPostingGr."Payables Account",NegativeLCYAppAmt,NegativeACYAppAmt,FALSE,TRUE); ... -
Zmień kod w funkcji PostPayableDocs w dziennika gł.-codeunit linii Post (12) w następujący sposób:
Istniejący kod 1...ELSE
VATEntry."Bill-to/Pay-to No." := GenJnlLine2."Account No."; END; END; // Delete the following line. LOCAL PROCEDURE PostPayableDocs@1100009(VAR GenJnlLine@1100000 : Record 81); // End of the deleted line. BEGIN IF (DocAmountLCY <> 0) OR (CollDocAmountLCY <> 0) THEN IF NextEntryNo2 = NextEntryNo THEN NextEntryNo := NextEntryNo - 1; IF DocAmountLCY <> 0 THEN BEGIN ...Kod zastępczy 1
...ELSE
VATEntry."Bill-to/Pay-to No." := GenJnlLine2."Account No."; END; END; // Add the following line. LOCAL PROCEDURE PostPayableDocs@1100009(EntryUnapplied@1100001 : Boolean); // End of the added line. BEGIN IF (DocAmountLCY <> 0) OR (CollDocAmountLCY <> 0) THEN IF NextEntryNo2 = NextEntryNo THEN NextEntryNo := NextEntryNo - 1; IF DocAmountLCY <> 0 THEN BEGIN ...Istniejący kod 2
...BEGIN
IF (DocAmountLCY <> 0) OR (CollDocAmountLCY <> 0) THEN IF NextEntryNo2 = NextEntryNo THEN NextEntryNo := NextEntryNo - 1; IF DocAmountLCY <> 0 THEN BEGIN // Delete the following lines. // VSTF330588.begin //IF (GenJnlLine."Applies-to Doc. Type" = GenJnlLine."Applies-to Doc. Type"::Invoice) THEN BEGIN IF (GenJnlLine."Applies-to Doc. Type" = GenJnlLine."Applies-to Doc. Type"::Invoice) OR (GenJnlLine."Applies-to Doc. Type" = GenJnlLine."Applies-to Doc. Type"::" ") THEN BEGIN // VSTF330588.end // End of the deleted lines. VendPostingGr.TESTFIELD("Payables Account"); InitGLEntry(VendPostingGr."Payables Account",DocAmountLCY,DocAmtCalcAddCurrency(DocAmountLCY),TRUE,TRUE); GLEntry."Bal. Account Type" := GenJnlLine."Bal. Account Type"; GLEntry."Bal. Account No." := GenJnlLine."Bal. Account No."; InsertGLEntry(TRUE); ...Kod zastępczy 2
...BEGIN
IF (DocAmountLCY <> 0) OR (CollDocAmountLCY <> 0) THEN IF NextEntryNo2 = NextEntryNo THEN NextEntryNo := NextEntryNo - 1; IF DocAmountLCY <> 0 THEN BEGIN // Add the following lines. IF (GenJnlLine."Applies-to Doc. Type" = GenJnlLine."Applies-to Doc. Type"::Invoice) OR EntryUnapplied THEN BEGIN // End of the added lines. VendPostingGr.TESTFIELD("Payables Account"); InitGLEntry(VendPostingGr."Payables Account",DocAmountLCY,DocAmtCalcAddCurrency(DocAmountLCY),TRUE,TRUE); GLEntry."Bal. Account Type" := GenJnlLine."Bal. Account Type"; GLEntry."Bal. Account No." := GenJnlLine."Bal. Account No."; InsertGLEntry(TRUE); ... -
Zmień kod w funkcji PostReceivableDocs w dziennika gł.-codeunit linii Post (12) w następujący sposób:
Istniejący kod 1... GLEntry."Bal. Account No." := GenJnlLine."Bal. Account No.";
InsertGLEntry(TRUE); END; END; // Delete the following line. LOCAL PROCEDURE PostReceivableDocs@1100003(VAR GenJnlLine@1100000 : Record 81); // End of the deleted line. BEGIN IF (DocAmountLCY <> 0) OR (DiscDocAmountLCY <> 0) OR (CollDocAmountLCY <> 0) OR (RejDocAmountLCY <> 0) OR (DiscRiskFactAmountLCY <> 0) OR (DiscUnriskFactAmountLCY <> 0) OR (CollFactAmountLCY <> 0) THEN IF NextEntryNo2 = NextEntryNo THEN NextEntryNo := NextEntryNo - 1; ...Kod zastępczy 1
...GLEntry."Bal. Account No." := GenJnlLine."Bal. Account No.";
InsertGLEntry(TRUE); END; END; // Add the following line. LOCAL PROCEDURE PostReceivableDocs@1100003(EntryUnapplied@1100001 : Boolean); // End of the added line. BEGIN IF (DocAmountLCY <> 0) OR (DiscDocAmountLCY <> 0) OR (CollDocAmountLCY <> 0) OR (RejDocAmountLCY <> 0) OR (DiscRiskFactAmountLCY <> 0) OR (DiscUnriskFactAmountLCY <> 0) OR (CollFactAmountLCY <> 0) THEN IF NextEntryNo2 = NextEntryNo THEN NextEntryNo := NextEntryNo - 1; ...Istniejący kod 2
...IF (DocAmountLCY <> 0) OR (DiscDocAmountLCY <> 0) OR (CollDocAmountLCY <> 0) OR (RejDocAmountLCY <> 0) OR
(DiscRiskFactAmountLCY <> 0) OR (DiscUnriskFactAmountLCY <> 0) OR (CollFactAmountLCY <> 0) THEN IF NextEntryNo2 = NextEntryNo THEN NextEntryNo := NextEntryNo - 1; IF DocAmountLCY <> 0 THEN BEGIN // Delete the following lines. // VSTF330588.begin //IF (GenJnlLine."Applies-to Doc. Type" = GenJnlLine."Applies-to Doc. Type"::Invoice) THEN BEGIN IF (GenJnlLine."Applies-to Doc. Type" = GenJnlLine."Applies-to Doc. Type"::Invoice) OR (GenJnlLine."Applies-to Doc. Type" = GenJnlLine."Applies-to Doc. Type"::" ") THEN BEGIN // VSTF330588.end // End of the deleted lines. CustPostingGr.TESTFIELD("Receivables Account"); InitGLEntry(CustPostingGr."Receivables Account",DocAmountLCY,DocAmtCalcAddCurrency(DocAmountLCY),TRUE,TRUE); GLEntry."Bal. Account Type" := GenJnlLine."Bal. Account Type"; GLEntry."Bal. Account No." := GenJnlLine."Bal. Account No."; InsertGLEntry(TRUE); ...Kod zastępczy 2
...IF (DocAmountLCY <> 0) OR (DiscDocAmountLCY <> 0) OR (CollDocAmountLCY <> 0) OR (RejDocAmountLCY <> 0) OR
(DiscRiskFactAmountLCY <> 0) OR (DiscUnriskFactAmountLCY <> 0) OR (CollFactAmountLCY <> 0) THEN IF NextEntryNo2 = NextEntryNo THEN NextEntryNo := NextEntryNo - 1; IF DocAmountLCY <> 0 THEN BEGIN // Add the following lines. IF (GenJnlLine."Applies-to Doc. Type" = GenJnlLine."Applies-to Doc. Type"::Invoice) OR EntryUnapplied THEN BEGIN // End of the added lines. CustPostingGr.TESTFIELD("Receivables Account"); InitGLEntry(CustPostingGr."Receivables Account",DocAmountLCY,DocAmtCalcAddCurrency(DocAmountLCY),TRUE,TRUE); GLEntry."Bal. Account Type" := GenJnlLine."Bal. Account Type"; GLEntry."Bal. Account No." := GenJnlLine."Bal. Account No."; InsertGLEntry(TRUE); ...
Wymagania wstępne
Musi mieć jedną z następujących produktów, w celu zastosowania tej poprawki:
-
W wersji hiszpańskiej dla systemu Microsoft Dynamics NAV 2009 R2
-
W wersji hiszpańskiej dla dodatku SP1 dla programu Microsoft Dynamics NAV 2009
Ponadto musisz mieć KB3034441 zainstalowane.
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żytkowaniadla innych względów.