Ця стаття стосується мови портуґальської мови Dynamics NAV.
Ознаки
Коли ви опублікувати готівкою сповіщення журналу з рахунком-фактурою і відхилити законопроект одночасно в портуґальської версії Microsoft Dynamics NAV 2009, усі розміщені головна книга записи опубліковано за допомогою відхилити рахунків облікового запису. Проте для рахунка-фактури слід використовувати обліковий запис дебіторської заборгованості, а для відхиленого документа має використовуватися обліковий запис відхилених рахунків. Ця проблема виникає в таких продуктах:
- Португальська версія Microsoft Dynamics NAV 2009 R2
- Португальська версія Microsoft Dynamics NAV 2009 із пакетом оновлень 1
Спосіб усунення проблеми
Відомості про виправлення
Від корпорації Майкрософт доступне виправлення, що підтримується. Однак вона призначена лише для виправлення проблеми, описаної в цій статті. Застосуйте її лише до систем, у яких виникла ця проблема. Це виправлення може отримати додаткове тестування. Таким чином, якщо ви не серйозно постраждали від цієї проблеми, ми радимо дочекатися наступного Microsoft Dynamics NAV 2009 пакет оновлень або наступної версії Microsoft Dynamics NAV, яка містить це виправлення.
Примітка У особливих випадках стягнення плати, які зазвичай понесені для викликів підтримки, може бути скасовано, якщо спеціаліст служби технічної підтримки Microsoft Dynamics і пов'язані продукти визначать, що конкретне оновлення вирішить вашу проблему. Звичайні витрати на підтримку застосовуватимуться до додаткових запитань і питань підтримки, які не відповідають вимогам для конкретного оновлення, про яке йде мова.
Відомості про інсталяцію
Корпорація Майкрософт надає приклади програмування лише для ілюстрації без жодних гарантій, явних або неявних. Це стосується зокрема неявних гарантій щодо придатності до продажу чи придатності для певної мети. У цій статті припускається, що ви знайомі з мовою програмування, яка демонструється, і з інструментами, які використовуються для створення і налагодження процедур. Спеціалісти служби підтримки Microsoft можуть пояснити вам функціональні можливості певної процедури. Однак вони не змінюватимуть ці приклади, щоб надавати додаткові функції або конструювати процедури відповідно до ваших конкретних вимог.
Примітка. Перш ніж інсталювати це виправлення, переконайтеся, що всі користувачі клієнта Microsoft Navision, вийти із системи. Це стосується користувачів клієнтських служб Microsoft Navision (NAS). Ви повинні бути єдиним клієнтом користувача, який ввійшов, коли ви впроваджуєте це виправлення.
Щоб реалізувати це виправлення, потрібно мати ліцензію розробника.
Радимо призначити обліковому запису користувача у вікні "Вхід у Windows" або у вікні "Вхід до бази даних" ідентифікатор ролі "SUPER". Якщо обліковому запису користувача не вдалося призначити ідентифікатор ролі SUPER, переконайтеся, що обліковий запис має такі дозволи:
- Дозвіл на змінення об'єкта, який буде змінюватися.
- Дозвіл Execute для об'єкта System Object ID 5210 і для об'єкта System Object ID 9015.
Примітка. Ви не повинні мати права на зберігання даних, якщо не потрібно відновлювати дані.
Зміни коду
Примітка. Завжди перевіряйте виправлення коду в контрольованому середовищі, перш ніж застосовувати виправлення до робочих комп'ютерів.
Щоб вирішити цю проблему, змініть код в gen. Jnl.-Post Line codeunit (12) . Ось як це зробити:
Додайте таку глобальну змінну:
TempRejCustLedgEntry@1100047 : TEMPORARY Record 21;Щоб змінити код у функції PostCust, зробіть таке:
Наявний код 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 ...Код заміни 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 ...Наявний код 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; ...Код заміни 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; ...Щоб змінити код у функції PostVend, зробіть таке:
Наявний код... // 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; ...Код заміни
... // 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; ...Змініть код у функції ApplyCustLedgEntry, як виконайте наведені нижче дії.
Наявний код... 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; ...Код заміни
... 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; ...Змініть код у функції PostDtldCustLedgEntries таким мовою:
Наявний код... 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 + ...Код заміни
... AccNo := CustPostingGr."Bills Account"; END ELSE BEGIN CustPostingGr.TESTFIELD("Receivables Account"); AccNo := CustPostingGr."Receivables Account"; END; ReceivableAccAmtLCY := TotalAmountLCY - (DocAmountLCY + DiscDocAmountLCY + CollDocAmountLCY + RejDocAmountLCY + DiscRiskFactAmountLCY + ...Змініть код у функції PostReceivableDocs, як виконайте наведені нижче дії.
Наявний код... 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.", ...Код заміни
... 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.", ...
Попередні вимоги
Щоб застосувати це виправлення, потрібно мати один із таких продуктів:
- Португальська версія Microsoft Dynamics NAV 2009 R2
- Португальська версія Microsoft Dynamics NAV 2009 із пакетом оновлень 1
Відомості про видалення
Не можна видалити це виправлення.
Стан
Корпорація Microsoft підтвердила, що це одна з проблем з продуктами Microsoft, перелічених у розділі "Застосовується до".
Примітка. Це стаття "FAST PUBLISH", створена безпосередньо з організації підтримки Корпорації Майкрософт. Інформація, що міститься в цьому документі, надається як у відповідь на нові проблеми. В результаті швидкості її використання матеріали можуть включати друкарські помилки і можуть бути переглянуті в будь-який час без попередження. Інші зауваження див. в розділі Умови використання .