ערכים מסוימים ספר ראשי מסוימים פורסמו שגויים בעת פרסום יומן קבלות מזומנים עם חשבונית וחשבונית לדחות בו-זמנית בגירסת פורטוגזית של Microsoft Dynamics NAV 2009

חל על
Dynamics NAV 2009

מאמר זה חל על Microsoft Dynamics NAV עבור אזור השפה הפורטוגזית (pt).

סימפטומים

בעת פרסום יומן קבלות מזומנים עם חשבונית וחשבון דחייה בו-זמנית בגירסה הפורטוגזית של Microsoft Dynamics NAV 2009, כל ערכי הספר הראשי שפורסמו פורסמו באמצעות חשבון דחיית חשבונות. עם זאת, יש להשתמש בחשבון חייבים עבור החשבונית, ויש להשתמש בחשבון חשבונות שנדחו עבור המסמך שנדחו. בעיה זו מתרחשת במוצרים הבאים:

  • הגירסה הפורטוגזית של Microsoft Dynamics NAV 2009 R2
  • הגירסה הפורטוגזית של Microsoft Dynamics NAV 2009 Service Pack 1

פתרון

מידע אודות תיקונים חמים

תיקון חם נתמך זמין כעת מ- Microsoft. עם זאת, הוא מיועד רק לתיקון הבעיה המתוארת במאמר זה. החל אותו רק על מערכות שנתקלות בבעיה ספציפית זו. תיקון חם זה עשוי לקבל בדיקות נוספות. לכן, אם אתה לא מושפע באופן חמור מבעיה זו, מומלץ להמתין ל- Service Pack הבא של Microsoft Dynamics NAV 2009 או לגירסת MICROSOFT Dynamics NAV הבאה המכילה תיקון חם זה.

הערה במקרים מיוחדים, חיובים שנצבורים בדרך כלל עבור שיחות תמיכה עשויים להבוטל אם מומחה תמיכה טכנית עבור Microsoft Dynamics ומוצרים קשורים קובע שעדכון ספציפי יפתור את הבעיה. עלויות התמיכה הרגילות יחולו על שאלות ובעיות תמיכה נוספות שלא עומדות בדרישות לעדכון הספציפי הרלוונטי.

          

מידע התקנה

Microsoft מספקת דוגמאות תיכנות לאיור בלבד, ללא אחריות, מפורשת או משתמעת. הדבר כולל, אך אינו מוגבל לאחריות המשתמעת של סוחר או התאמה למטרה מסוימת. מאמר זה מבוסס על ההנחה שאתה מכיר את שפת התיכנות המודגמת, עם הכלים המשמשים ליצירת הליכים ולאתר באגים. מהנדסי התמיכה של Microsoft יכולים לעזור להסביר את הפונקציונליות של הליך מסוים. עם זאת, הם לא שינוי דוגמאות אלה כדי לספק פונקציונליות נוספת או לבנות הליכים כדי לעמוד בדרישות הספציפיות שלך.

הערה לפני התקנת תיקון חם זה, ודא כי כל משתמשי לקוח Microsoft Navision נרשם המערכת. הדבר כולל משתמשי לקוח של Microsoft Navision Application Services (NAS). עליך להיות משתמש הלקוח היחיד שנכנס בעת יישום תיקון חם זה.

כדי ליישם תיקון חם זה, דרוש לך רשיון מפתח.

אנו ממליצים להקצות לחשבון המשתמש בחלון כניסות Windows או בחלון כניסות מסד נתונים את מזהה התפקיד "SUPER". אם אין אפשרות להקצות לחשבון המשתמש את מזהה התפקיד "SUPER", עליך לוודא שלחשבון המשתמש יש את ההרשאות הבאות:

  • ההרשאה Modify עבור האובייקט שאתה תשנה.
  • ההרשאה Execute עבור אובייקט System Object ID 5210 ולאובייקט System Object ID 9015.

                
הערה אין צורך להחזיק בזכויות על מאגרי הנתונים אלא אם עליך לבצע תיקון נתונים.

שינויי קוד

הערה בדוק תמיד את תיקוני הקוד בסביבה מבוקרת לפני החלת התיקונים על מחשבי הייצור שלך.
כדי לפתור בעיה זו, שנה את הקוד ב- Gen. Jnl.-Post Line codeunit (12) . לשם כך, בצע את השלבים הבאים:

  1. הוסף את המשתנה הכללי הבא:

    TempRejCustLedgEntry@1100047 : TEMPORARY Record 21;
    
  2. שנה את הקוד בפונקציה 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;
    ...
    
    
  3. שנה את הקוד בפונקציה 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;
    ...
    
    
  4. שנה את הקוד בפונקציה 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;
    ...
    
    
  5. שנה את הקוד בפונקציה 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 +
    ...
    
    
  6. שנה את הקוד בפונקציה 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 Service Pack 1

מידע על הסרה

אין באפשרותך להסיר תיקון חם זה.

מצב

Microsoft אישרה שזוהי בעיה במוצרי Microsoft המפורטים בסעיף "חל על".

הערה זהו מאמר "FAST PUBLISH" שנוצר ישירות מתוך ארגון התמיכה של Microsoft. המידע הכלול ב- Herein מסופק כפי שהוא בתגובה לבעיות מתפתחות. כתוצאה מההפיכתה לזמינה, החומרים עשויים לכלול שגיאות טיפוגרפיות וייתכן שיתוקנו בכל עת ללא הודעה מוקדמת. ראה תנאי שימוש לקבלת שיקולים אחרים.