يعرض تقرير "انفجار الكمية ل BOM" العناصر غير المكتملة عند تعيين لا. لصنف إنتاج باستخدام رقم العنصر في جدول العنصر في Microsoft Dynamics NAV 2009 SP1 أو في Microsoft Dynamics NAV 2009 R2

ينطبق على
Microsoft Dynamics NAV 2009 R2 Dynamics NAV 2009 Service Pack 1

تنطبق هذه المقالة على Microsoft Dynamics NAV لجميع اللغات المحلية.

الأعراض

في Microsoft Dynamics NAV، عند تعيين لا. بالنسبة إلى قائمة مكونات الصنف للإنتاج باستخدام رقم العنصر في جدول العنصر ثم تشغيل تقرير "انفجار الكمية ل BOM"، يعرض التقرير عناصر غير مكتملة.
تحدث هذه المشكلة في المنتجات التالية:

  • Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)
  • Microsoft Dynamics NAV 2009 R2

الدقة

معلومات الإصلاح العاجل

يتوفر الآن إصلاح عاجل مدعوم من Microsoft. ومع ذلك، فإنه يهدف فقط إلى تصحيح المشكلة الموضحة في هذه المقالة. قم بتطبيقه فقط على الأنظمة التي تواجه هذه المشكلة المحددة. قد يتلقى الإصلاح العاجل هذا اختبارا إضافيا. لذلك، إذا لم تتأثر بشدة بهذه المشكلة، نوصي بالانتظار حتى حزمة خدمة Microsoft Dynamics NAV 2009 التالية أو إصدار Microsoft Dynamics NAV التالي الذي يحتوي على هذا الإصلاح العاجل.

ملاحظة في حالات خاصة، قد يتم إلغاء الرسوم التي يتم تكبدها عادة لمكالمات الدعم إذا حدد محترف الدعم التقني ل Microsoft Dynamics والمنتجات ذات الصلة أن تحديثا معينا سيحل مشكلتك. سيتم تطبيق تكاليف الدعم المعتادة على أسئلة الدعم الإضافية والمشكلات غير المؤهلة للتحديث المحدد المعني.

            
          

معلومات التثبيت

توفر Microsoft أمثلة برمجة للتوضيح فقط، دون ضمان سواء تم التعبير عنه أو تضمينه. وهذا يشمل، على سبيل المثال لا الحصر، الضمانات الضمنية للقابلية التجارية أو اللياقة البدنية لغرض معين. تفترض هذه المقالة أنك على دراية بلغة البرمجة التي يتم توضيحها ومع الأدوات المستخدمة لإنشاء إجراءات وتصحيح الأخطاء. يمكن لمهندسي دعم Microsoft المساعدة في شرح وظائف إجراء معين، لكنهم لن يعدلوا هذه الأمثلة لتوفير وظائف إضافية أو إجراءات بناء لتلبية متطلباتك المحددة.

ملاحظة قبل تثبيت هذا الإصلاح العاجل، تحقق من تسجيل خروج جميع مستخدمي عميل Microsoft Navision من النظام. يتضمن ذلك مستخدمي عميل Microsoft Navision Application Services (NAS). يجب أن تكون المستخدم العميل الوحيد الذي قام بتسجيل الدخول عند تنفيذ هذا الإصلاح العاجل.

لتنفيذ هذا الإصلاح العاجل، يجب أن يكون لديك ترخيص مطور.

نوصي بتعيين معرف دور "SUPER" لحساب المستخدم في نافذة تسجيلات الدخول إلى Windows أو في نافذة تسجيلات دخول قاعدة البيانات. إذا تعذر تعيين معرف دور "SUPER" لحساب المستخدم، فيجب عليك التحقق من أن حساب المستخدم لديه الأذونات التالية:

  • إذن تعديل للكائن الذي ستقوم بتغييره.
  • إذن Execute للكائن System Object ID 5210 ولعنصر System Object ID 9015.

                
ملاحظة ليس لديك حقوق في مخازن البيانات ما لم يكن لديك لإجراء إصلاح البيانات.

تغييرات التعليمات البرمجية

ملاحظة اختبر دائما إصلاحات التعليمات البرمجية في بيئة خاضعة للرقابة قبل تطبيق الإصلاحات على أجهزة الكمبيوتر الإنتاجية.
لحل هذه المشكلة، اتبع الخطوات التالية:

  1. تغيير التعليمات البرمجية في الدالة Data Item Number 2 في تقرير Quantity Explosion of BOM (99000753) كما يلي:
    التعليمات البرمجية الموجودة 1

    ...
                               BomComponent[Level]."Production BOM No." := Item."Production BOM No.";
    
                              BomComponent[Level].SETRANGE("Production BOM No.",Item."Production BOM No.");
    
                              BomComponent[Level].SETRANGE("Version Code",VersionCode[Level]);
    
                              BomComponent[Level].SETFILTER("Starting Date",'%1|..%2',0D,CalculateDate);
    
                              BomComponent[Level].SETFILTER("Ending Date",'%1|%2..',0D,CalculateDate);
    
                              NoList[Level] := Item."No.";
    
                              Quantity[Level] :=
    
                                UOMMgt.GetQtyPerUnitOfMeasure(Item,Item."Base Unit of Measure") /
    
                                UOMMgt.GetQtyPerUnitOfMeasure(
    
                                  Item,
    ...
    

    رمز الاستبدال 1

    ...
                             BomComponent[Level]."Production BOM No." := Item."Production BOM No.";
    
                              BomComponent[Level].SETRANGE("Production BOM No.",Item."Production BOM No.");
    
                              BomComponent[Level].SETRANGE("Version Code",VersionCode[Level]);
    
                              BomComponent[Level].SETFILTER("Starting Date",'%1|..%2',0D,CalculateDate);
    
                              BomComponent[Level].SETFILTER("Ending Date",'%1|%2..',0D,CalculateDate);
    
    // Add the following line.
                             NoListType[Level] := NoListType[Level]::Item;
    // End of the added line.
    
                              NoList[Level] := Item."No.";
    
                              Quantity[Level] :=
    
                                UOMMgt.GetQtyPerUnitOfMeasure(Item,Item."Base Unit of Measure") /
    
                                UOMMgt.GetQtyPerUnitOfMeasure(
    
                                  Item,
    ...
    

    التعليمات البرمجية الموجودة 2

    ...
                             BEGIN
    
                                 WHILE BomComponent[Level].NEXT = 0 DO BEGIN
    
                                   Level := Level - 1;
    
                                   IF Level <1 THEN
    
                                     CurrReport.BREAK;
    
    // Delete the following line.
                                  IF NOT UpperLevelItem.GET(NoList[Level]) THEN
    // End of the deleted line.
    
                                     UpperLevelItem."Production BOM No." := NoList[Level];
    
                                   BomComponent[Level].SETRANGE("Production BOM No.",UpperLevelItem."Production BOM No.");
    
                                   BomComponent[Level].SETRANGE("Version Code",VersionCode[Level]);
    
                                 END; 
    ...
    

    رمز الاستبدال 2

    ...
                              BEGIN
    
                                 WHILE BomComponent[Level].NEXT = 0 DO BEGIN
    
                                   Level := Level - 1;
    
                                   IF Level <1 THEN
    
                                     CurrReport.BREAK;
    
    // Add the following line.
                                  IF NoListType[NextLevel] = NoListType[NextLevel]::"Production BOM" THEN
    // End of the added line.
    
                                     UpperLevelItem."Production BOM No." := NoList[Level];
    
                                   BomComponent[Level].SETRANGE("Production BOM No.",UpperLevelItem."Production BOM No.");
    
                                   BomComponent[Level].SETRANGE("Version Code",VersionCode[Level]);
    
                                 END;
    ...
    

    التعليمات البرمجية الموجودة 3

    ...
                                      BEGIN
    
                                       CompItem.GET(BomComponent[Level]."No.");
    
                                       IF CompItem."Production BOM No."<>'' THEN BEGIN
    
                                         NextLevel := Level + 1;
    
                                         CLEAR(BomComponent[NextLevel]);
    
                                         NoList[NextLevel] := CompItem."No.";
    
                                         VersionCode[NextLevel] :=
    
                                           VersionMgt.GetBOMVersion(CompItem."Production BOM No.",CalculateDate,FALSE);
    
                                         BomComponent[NextLevel].SETRANGE("Production BOM No.",CompItem."Production BOM No.");
    
                                         BomComponent[NextLevel].SETRANGE("Version Code",VersionCode[NextLevel]);
    ...
    

    رمز الاستبدال 3

    ...
                                      BEGIN
    
                                       CompItem.GET(BomComponent[Level]."No.");
    
                                       IF CompItem."Production BOM No."<>'' THEN BEGIN
    
                                         NextLevel := Level + 1;
    
                                         CLEAR(BomComponent[NextLevel]);
    
    // Add the following line.
                                        NoListType[NextLevel] := NoListType[NextLevel]::Item;
    // End of the added line.
    
                                         NoList[NextLevel] := CompItem."No.";
    
                                         VersionCode[NextLevel] :=
    
                                           VersionMgt.GetBOMVersion(CompItem."Production BOM No.",CalculateDate,FALSE);
    
                                         BomComponent[NextLevel].SETRANGE("Production BOM No.",CompItem."Production BOM No.");
    
                                         BomComponent[NextLevel].SETRANGE("Version Code",VersionCode[NextLevel]);
    ...
    

    التعليمات البرمجية الموجودة 4

    ...
                                            CompItem,
    
                                             VersionMgt.GetBOMUnitOfMeasure(
    
                                               CompItem."Production BOM No.",VersionCode[NextLevel]));
    
                                       END;
    
                                       IF Level > 1 THEN BEGIN
    
    // Delete the following lines.
                                        IF BomItem.GET(BomComponent[Level - 1]."No.") THEN BEGIN
    
                                          QtyPerUnitOfMeasure :=
    
                                            UOMMgt.GetQtyPerUnitOfMeasure(BomItem,BomComponent[Level - 1]."Unit of Measure Code") /
    
                                            UOMMgt.GetQtyPerUnitOfMeasure(
    
                                              BomItem,VersionMgt.GetBOMUnitOfMeasure(BomItem."Production BOM No.",VersionCode[Level]));
    // End of the deleted lines.
    
                                         END;
    
                                       END;
    
                                     END;
    
                                   BomComponent[Level].Type::"Production BOM":
    
                                     BEGIN
    ...
    

    رمز الاستبدال 4

    ...
                                           CompItem,
    
                                             VersionMgt.GetBOMUnitOfMeasure(
    
                                               CompItem."Production BOM No.",VersionCode[NextLevel]));
    
                                       END;
    
                                       IF Level > 1 THEN BEGIN
    
    // Add the following lines.
                                        IF (BomComponent[Level - 1].Type = BomComponent[Level - 1].Type::Item) THEN BEGIN
    
                                          IF BomItem.GET(BomComponent[Level - 1]."No.") THEN BEGIN
    
                                            QtyPerUnitOfMeasure :=
    
                                              UOMMgt.GetQtyPerUnitOfMeasure(BomItem,BomComponent[Level - 1]."Unit of Measure Code") /
    
                                              UOMMgt.GetQtyPerUnitOfMeasure(
    
                                                BomItem,VersionMgt.GetBOMUnitOfMeasure(BomItem."Production BOM No.",VersionCode[Level]));
    
                                          END;
    // End of the added lines.
    
                                         END;
    
                                       END;
    
                                     END;
    
                                   BomComponent[Level].Type::"Production BOM":
    
                                     BEGIN
    ...
    

    التعليمات البرمجية الموجودة 5

    ...
                                 BomComponent[Level].Type::"Production BOM":
    
                                     BEGIN
    
                                       ProdBOM.GET(BomComponent[Level]."No.");
    
                                       NextLevel := Level + 1;
    
                                       CLEAR(BomComponent[NextLevel]);
    
                                       NoList[NextLevel] := ProdBOM."No.";
    
                                       VersionCode[NextLevel] := VersionMgt.GetBOMVersion(ProdBOM."No.",CalculateDate,FALSE);
    
                                       BomComponent[NextLevel].SETRANGE("Production BOM No.",NoList[NextLevel]);
    
                                       BomComponent[NextLevel].SETRANGE("Version Code",VersionCode[NextLevel]);
    
                                       BomComponent[NextLevel].SETFILTER("Starting Date",'%1|..%2',0D,CalculateDate); 
    ...
    

    رمز الاستبدال 5

    ...
                                BomComponent[Level].Type::"Production BOM":
    
                                     BEGIN
    
                                       ProdBOM.GET(BomComponent[Level]."No.");
    
                                       NextLevel := Level + 1;
    
                                       CLEAR(BomComponent[NextLevel]);
    
    // Add the following line.
                                      NoListType[NextLevel] := NoListType[NextLevel]::"Production BOM";
    // End of the added line.
    
                                       NoList[NextLevel] := ProdBOM."No.";
    
                                       VersionCode[NextLevel] := VersionMgt.GetBOMVersion(ProdBOM."No.",CalculateDate,FALSE);
    
                                       BomComponent[NextLevel].SETRANGE("Production BOM No.",NoList[NextLevel]);
    
                                       BomComponent[NextLevel].SETRANGE("Version Code",VersionCode[NextLevel]);
    
                                       BomComponent[NextLevel].SETFILTER("Starting Date",'%1|..%2',0D,CalculateDate);
    ...
    
  2. تغيير التعليمات البرمجية في المتغيرات العمومية في تقرير انفجار الكمية ل BOM (99000753) كما يلي:
    التعليمات البرمجية الموجودة

    ...
          Quantity@1013 : ARRAY [99] OF Decimal;
    
            QtyPerUnitOfMeasure@1014 : Decimal;
    
            Level@1015 : Integer;
    
            NextLevel@1016 : Integer;
    
            BOMQty@1017 : Decimal;
    
    
    
          BEGIN
    
          END.
    
        }
    
        RDLDATA
    ...
    

    رمز الاستبدال

    ...
           Quantity@1013 : ARRAY [99] OF Decimal;
    
            QtyPerUnitOfMeasure@1014 : Decimal;
    
            Level@1015 : Integer;
    
           NextLevel@1016 : Integer;
    
            BOMQty@1017 : Decimal;
    
    // Add the following line.
           NoListType@1018 : ARRAY [99] OF ' ,Item,Production BOM';
    // End of the added line.  
    
          BEGIN
    
          END.
    
        }
    
        RDLDATA
    ...
    

          

المتطلبات الأساسية

يجب أن يكون لديك أحد المنتجات التالية مثبتا لتطبيق هذا الإصلاح العاجل:

  • Microsoft Dynamics NAV 2009 Service Pack 1 (SP1)
  • Microsoft Dynamics NAV 2009 R2

                
              

معلومات الإزالة

لا يمكنك إزالة هذا الإصلاح العاجل.

الحالة

لقد أكدت Microsoft على أن هذه مشكلة في منتجات Microsoft المُدرجة في القسم "ينطبق على".

المراجع

VSTF DynamicsNAV SE: 251802

ملاحظة هذه مقالة "FAST PUBLISH" تم إنشاؤها مباشرة من داخل مؤسسة دعم Microsoft. وتقدم المعلومات الواردة هنا كما هي استجابة للقضايا الناشئة. نتيجة لسرعة إتاحتها، قد تتضمن المواد أخطاء مطبعية ويمكن مراجعتها في أي وقت دون إشعار. راجع شروط الاستخدام لاعتبارات أخرى.