นำไปใช้กับ
Dynamics AX 2009 Service Pack 1 Microsoft Dynamics AX 2009

อย่างรวดเร็วบทความที่เผยแพร่ให้ข้อมูลโดยตรงจากภายใน Microsoft สนับสนุนองค์กร ข้อมูลที่มีอยู่ซึ่งถูกสร้างขึ้นในการตอบสนองกับหัวข้อที่เป็นที่รู้จัก หรือเฉพาะ หรือมีวัตถุประสงค์เพื่อช่วยเสริมความรู้ฐานข้อมูลอื่น ๆ

อาการ

เมื่อคุณคลิกขวาในกล่องโต้ตอบสมุดรายวันบัตรกระบวนการผลิตใน Microsoft Dynamics AX 2009 แล้ว คลิกติดตั้งเพื่อเพิ่มคอลัมน์ตั้งค่าคอนฟิกไปแท็บภาพรวมการกำหนดค่าของรายการวัสดุและส่วนประกอบ (BOM) จะไม่ปรากฏ ในกล่องโต้ตอบสมุดรายวันบัตรกระบวนการผลิตอย่างถูกต้อง

สาเหตุ

ปัญหานี้เกิดขึ้นเนื่องจาก Microsoft Dynamics AX ไม่สนับสนุนให้คุณเพิ่มแหล่งข้อมูลมีการเชื่อมโยงที่ล่าช้าไปยังตัวควบคุมกริด

การแก้ไข

ข้อมูลโปรแกรมแก้ไขด่วน

โปรแกรมแก้ไขด่วนจะพร้อมใช้งานได้ในขณะนี้จาก Microsoft อย่างไรก็ตาม มีเป้าหมายเพียงเพื่อการแก้ไขปัญหาที่อธิบายไว้ในบทความนี้ นำวิธีนี้ไปใช้กับระบบที่ประสบกับปัญหาที่เฉพาะเจาะจงเท่านั้น โปรแกรมแก้ไขด่วนนี้อาจได้รับการทดสอบเพิ่มเติม ดังนั้น ถ้าคุณจะไม่รุนแรงได้รับผลกระทบจากปัญหานี้ เราขอแนะนำให้ คุณรอ service pack ถัดไปของ Microsoft Dynamics AX 2009 หรือเวอร์ชันถัดไปที่ประกอบด้วยโปรแกรมแก้ไขด่วนนี้ หมายเหตุ ในกรณีพิเศษ ค่าธรรมเนียมค่าใช้จ่ายสำหรับการสนับสนุนโทรศัพท์อาจถูกยกเลิกถ้า Technical Support Professional สำหรับ Microsoft Dynamics และผลิตภัณฑ์ที่เกี่ยวข้องตรวจพบว่าการปรับปรุงเฉพาะจะแก้ปัญหาของคุณ ค่าใช้จ่ายในการสนับสนุนตามปกติจะใช้กับคำถามและปัญหาในการสนับสนุนเพิ่มเติมซึ่งไม่สอดคล้องตามเกณฑ์สำหรับโปรแกรมปรับปรุงเฉพาะที่เกี่ยวข้องโปรแกรมแก้ไขด่วนนี้ถูกกำหนดเวลาให้มาพร้อมกับ 2 Service Pack สำหรับ Microsoft Dynamics AX 2009

ข้อมูลการติดตั้ง

ก่อนที่คุณติดตั้งโปรแกรมแก้ไขด่วนนี้ โปรดตรวจสอบว่า ผู้ใช้ไคลเอนต์ Microsoft Dynamics AX ที่เข้าสู่ระบบออกจากระบบ คุณควรไคลเอ็นต์เฉพาะผู้ใช้ที่เข้าสู่ระบบเมื่อคุณใช้โปรแกรมแก้ไขด่วนนี้ เมื่อต้องการใช้โปรแกรมแก้ไขด่วนนี้ คุณต้องมีสิทธิ์การใช้งานสำหรับนักพัฒนาหมายเหตุ เราขอแนะนำว่า บัญชีผู้ใช้ ในหน้าต่างล็อกอินของ Windows หรือ ในหน้าต่างล็อกอินฐานข้อมูลสามารถเป็นสมาชิกของกลุ่มผู้ใช้ผู้ดูแลระบบใน Microsoft Dynamics AX

การเปลี่ยนแปลงรหัส

Microsoft แสดงตัวอย่างการเขียนโปรแกรมเพื่อประกอบการอธิบายเท่านั้น และไม่มีการรับประกัน ไม่ว่าโดยชัดแจ้งหรือโดยนัย ทั้งนี้รวมถึงแต่ไม่จำกัดเพียงการรับประกันโดยนัยในเรื่องการซื้อขายหรือความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ บทความนี้ตั้งสมมติฐานว่าคุณมีความคุ้นเคยกับภาษาการเขียนโปรแกรมที่แสดงอยู่ รวมทั้งเครื่องมือต่างๆ ที่ใช้ในการสร้างและแก้จุดบกพร่องของกระบวนการ วิศวกรฝ่ายสนับสนุนของ Microsoft สามารถช่วยอธิบายเกี่ยวกับการทำงานของกระบวนการเฉพาะได้ อย่างไรก็ตาม จะไม่มีการปรับเปลี่ยนตัวอย่างเหล่านี้เพื่อให้มีฟังก์ชันการทำงานที่เพิ่มขึ้น หรือสร้างกระบวนการใดๆ เพื่อตอบสนองความต้องการอย่างใดอย่างหนึ่งของคุณโดยเฉพาะ เสมอทดสอบรหัสแก้ไขในสภาพแวดล้อมการควบคุมก่อนที่คุณนำไปใช้แก้ไขปัญหากับคอมพิวเตอร์ของคุณผลิตเมื่อต้องการใช้โปรแกรมแก้ไขด่วนนี้ ให้ทำตามขั้นตอนเหล่านี้:

  1. เปลี่ยนแปลงรหัสนี้ในวิธีการdatasourceWritePreในคลาส ProdJournalFormTransRoute ดังนี้:รหัสที่มีอยู่

    void datasourceWritePre(){    ;    if (prodJournalRoute.ProdPickList && prodJournalRoute.OprPriority && !prodJournalRoute.ProdPickListJournalId)        prodJournalRoute.ProdPickList = NoYes::No;    if (prodJournalRoute.ProdReportFinished)        prodJournalRoute.ProdInventDimId = InventDim::findOrCreate(inventDim).InventDimId;    else        // Modify the following line.        prodJournalRoute.ProdInventDimId = '';        prodJournalRoute.ProdInventDimId = '';    super();}

    รหัสแทน

    void datasourceWritePre(){    ;    if (prodJournalRoute.ProdPickList && prodJournalRoute.OprPriority && !prodJournalRoute.ProdPickListJournalId)        prodJournalRoute.ProdPickList = NoYes::No;    if (prodJournalRoute.ProdReportFinished)        prodJournalRoute.ProdInventDimId = InventDim::findOrCreate(inventDim).InventDimId;    else        // The following line is modified.        prodJournalRoute.ProdInventDimId = InventDim::inventDimIdBlank();        prodJournalRoute.ProdInventDimId = '';    super();}
  2. เปลี่ยนแปลงรหัสนี้ในวิธีการfieldModifiedProdReportFinishedPostในคลาสProdJournalFormTransRouteดังนี้:รหัสที่มีอยู่

    void fieldModifiedProdReportFinishedPost(){    InventDim emptyInventDim;    ;    if (prodJournalRoute.ProdReportFinished)    {        if (! prodJournalRoute.ProdInventDimId)            inventDim_ds.create();        inventDim.data(InventDim::find(ProdTable::find(prodJournalRoute.ProdId).InventDimId));    }    else        inventDim.data(emptyInventDim);    inventDim_ds.setCurrent();}

    รหัสแทน

    void fieldModifiedProdReportFinishedPost(){    // Add the following line.    InventDim emptyInventDim = InventDim::find(InventDim::inventDimIdBlank());    InventDim emptyInventDim;    ;    if (prodJournalRoute.ProdReportFinished)    {        if (! prodJournalRoute.ProdInventDimId)            inventDim_ds.create();        inventDim.data(InventDim::find(ProdTable::find(prodJournalRoute.ProdId).InventDimId));    }    else        inventDim.data(emptyInventDim);    inventDim_ds.setCurrent();}
  3. เปลี่ยนรหัสในวิธีการenableFieldsActiveในรูปแบบ ProdJournalTransRoute เป็นดังนี้:รหัสที่มีอยู่

    void enableFieldsActive(){    prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,EmplId)).mandatory(prodJournalRoute.isProjMethodConsumed());    prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,CategoryHoursId)).mandatory(prodJournalRoute.isProjMethodConsumed());    prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,CategoryQtyId)).mandatory(prodJournalRoute.isProjMethodConsumed());    projectHour.visible(prodJournalRoute.isProjMethodConsumed());    prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjId)).mandatory(prodJournalRoute.isProjMethodConsumed());    prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjLinePropertyId)).mandatory(prodJournalRoute.isProjMethodConsumed());    prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjSalesCurrencyId)).mandatory(prodJournalRoute.isProjMethodConsumed());    projectQuantity.visible(prodJournalRoute.isProjMethodConsumed());    prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjId)).mandatory(prodJournalRoute.isProjMethodConsumed());    prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjLinePropertyId)).mandatory(prodJournalRoute.isProjMethodConsumed());    prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjSalesCurrencyId)).mandatory(prodJournalRoute.isProjMethodConsumed());}

    รหัสแทน

    void enableFieldsActive(){    // Add the following lines.    int i;    container enabledDimFields = InventDim::dimEnabledFieldList();    container dimFields = InventDim::dimFieldList();    ;        prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,EmplId)).mandatory(prodJournalRoute.isProjMethodConsumed());    prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,CategoryHoursId)).mandatory(prodJournalRoute.isProjMethodConsumed());    prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,CategoryQtyId)).mandatory(prodJournalRoute.isProjMethodConsumed());    projectHour.visible(prodJournalRoute.isProjMethodConsumed());    prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjId)).mandatory(prodJournalRoute.isProjMethodConsumed());    prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjLinePropertyId)).mandatory(prodJournalRoute.isProjMethodConsumed());    prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjSalesCurrencyId)).mandatory(prodJournalRoute.isProjMethodConsumed());    projectQuantity.visible(prodJournalRoute.isProjMethodConsumed());    prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjId)).mandatory(prodJournalRoute.isProjMethodConsumed());    prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjLinePropertyId)).mandatory(prodJournalRoute.isProjMethodConsumed());    prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjSalesCurrencyId)).mandatory(prodJournalRoute.isProjMethodConsumed());    // Add the following lines.    for(i = 0; i < conlen(dimFields) ; i++)    {        if (inventDim_DS.object(conpeek(dimFields, i)))        {            if (prodJournalRoute.ProdInventDimId == InventDim::inventDimIdBlank())            {                inventDim_DS.object(conpeek(dimFields,i)).enabled(false);            }            else            {                inventDim_DS.object(conpeek(dimFields,i)).enabled(confind(enabledDimeFields,i) != 0);            }        }    }}
  4. เปลี่ยนค่าของคุณสมบัติของออบเจ็กต์ InventDim ข้อมูลแหล่งที่มาในรูปแบบ ProdJournalTransRoute เป็นดังนี้:

    • เปลี่ยนแปลงค่าของคุณสมบัติLinkTypeถึงInnerJoin

    • เปลี่ยนแปลงค่าของคุณสมบัติDelayActiveเป็นNo

  5. เพิ่มรหัสต่อไปนี้ในวัตถุ "\Forms\ProdJournalTransRoute\DataSources\InventDim\Methods\ validateWrite"

    public boolean validateWrite(){    boolean ret;    ;    if (inventDim.inventDimId == InventDim::inventDimIdBlank())        return true;    ret = super();        return ret;}
  6. การเปลี่ยนแปลงรหัสนี้ในวัตถุ "\Forms\ProdJournalTransRoute\DataSources\InventDim\Methods\ เขียน" ดังนี้:รหัสที่มีอยู่

    void write(){    ;    prodJournalRoute_ds.write();}

    รหัสแทน

    void write(){    ;    prodJournalRoute_ds.write();    // Add the following line.    element.enableFieldsActive();}
  7. การเปลี่ยนแปลงรหัสนี้ใน "\Forms\ProdJournalTransRoute\DataSources\ProdJournalRoute\Methods\active" เป็นดังนี้:รหัสที่มีอยู่

    int active(){    int ret;    ret = super();    journalFormTrans.datasourceActivePost();    if (prodJournalRoute.isProjMethodConsumed())    {        skipWrite = true;        prodJournalRouteProjHour_ds.executeQuery();        prodJournalRouteProjQuantity_ds.executeQuery();        skipWrite = false;    }    element.enableFieldsActive();    return ret;}

    รหัสแทน

    int active(){    int ret;    // Add the following lines.    ;    journalFormTrans.updateDesign(InventDimFormDesignUpdate::Init);    ret = super();    journalFormTrans.datasourceActivePost();    if (prodJournalRoute.isProjMethodConsumed())    {        skipWrite = true;        prodJournalRouteProjHour_ds.executeQuery();        prodJournalRouteProjQuantity_ds.executeQuery();        skipWrite = false;    }    element.enableFieldsActive();    return ret;}
  8. เปลี่ยนรหัสในวิธีการenableFieldsActiveในรูปแบบ ProdJournalTransJob เป็นดังนี้:รหัสที่มีอยู่

    void enableFieldsActive(){    prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,EmplId)).mandatory(prodJournalRoute.isProjMethodConsumed());    prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,CategoryHoursId)).mandatory(prodJournalRoute.isProjMethodConsumed());    prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,CategoryQtyId)).mandatory(prodJournalRoute.isProjMethodConsumed());    projectHour.visible(prodJournalRoute.isProjMethodConsumed());    prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjId)).mandatory(prodJournalRoute.isProjMethodConsumed());    prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjLinePropertyId)).mandatory(prodJournalRoute.isProjMethodConsumed());    prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjSalesCurrencyId)).mandatory(prodJournalRoute.isProjMethodConsumed());    projectQuantity.visible(prodJournalRoute.isProjMethodConsumed());    prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjId)).mandatory(prodJournalRoute.isProjMethodConsumed());    prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjLinePropertyId)).mandatory(prodJournalRoute.isProjMethodConsumed());    prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjSalesCurrencyId)).mandatory(prodJournalRoute.isProjMethodConsumed());}

    รหัสแทน

    void enableFieldsActive(){  // Add the following lines.    int i;    container enabledDimFields = InventDim::dimEnabledFieldList();    container dimFields = InventDim::dimFieldList();    ;        prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,EmplId)).mandatory(prodJournalRoute.isProjMethodConsumed());    prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,CategoryHoursId)).mandatory(prodJournalRoute.isProjMethodConsumed());    prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,CategoryQtyId)).mandatory(prodJournalRoute.isProjMethodConsumed());    projectHour.visible(prodJournalRoute.isProjMethodConsumed());    prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjId)).mandatory(prodJournalRoute.isProjMethodConsumed());    prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjLinePropertyId)).mandatory(prodJournalRoute.isProjMethodConsumed());    prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjSalesCurrencyId)).mandatory(prodJournalRoute.isProjMethodConsumed());    projectQuantity.visible(prodJournalRoute.isProjMethodConsumed());    prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjId)).mandatory(prodJournalRoute.isProjMethodConsumed());    prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjLinePropertyId)).mandatory(prodJournalRoute.isProjMethodConsumed());    prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjSalesCurrencyId)).mandatory(prodJournalRoute.isProjMethodConsumed());    // Add the following lines.    for(i = 0; i < conlen(dimFields) ; i++)    {        if (inventDim_DS.object(conpeek(dimFields, i)))        {            if (prodJournalRoute.ProdInventDimId == InventDim::inventDimIdBlank())            {                inventDim_DS.object(conpeek(dimFields,i)).enabled(false);            }            else            {                inventDim_DS.object(conpeek(dimFields,i)).enabled(confind(enabledDimeFields,i) != 0);            }        }    }}
  9. เปลี่ยนค่าของคุณสมบัติของออบเจ็กต์ InventDim ข้อมูลแหล่งที่มาในรูปแบบ ProdJournalTransJob เป็นดังนี้:

    • เปลี่ยนแปลงค่าของคุณสมบัติLinkTypeถึงInnerJoin

    • เปลี่ยนแปลงค่าของคุณสมบัติDelayActiveเป็นNo

  10. เพิ่มรหัสต่อไปนี้ในวัตถุ "\Forms\ProdJournalTransJob\DataSources\InventDim\Methods\ validateWrite"

    public boolean validateWrite(){    boolean ret;    ;    if (inventDim.inventDimId == InventDim::inventDimIdBlank())        return true;    ret = super();        return ret;}
  11. การเปลี่ยนแปลงรหัสนี้ในวัตถุ "\Forms\ProdJournalTransJob\DataSources\InventDim\Methods\ เขียน" ดังนี้:รหัสที่มีอยู่

    void write(){    ;    prodJournalRoute_ds.write();}

    รหัสแทน

    void write(){    ;    prodJournalRoute_ds.write();    // Add the following line.    element.enableFieldsActive();}
  12. การเปลี่ยนแปลงรหัสนี้ใน "\Forms\ProdJournalTransJob\DataSources\ProdJournalRoute\Methods\active" เป็นดังนี้:รหัสที่มีอยู่

    int active(){    int ret;    ret = super();    journalFormTrans.datasourceActivePost();    if (prodJournalRoute.isProjMethodConsumed())    {        skipWrite = true;        prodJournalRouteProjHour_ds.executeQuery();        prodJournalRouteProjQuantity_ds.executeQuery();        skipWrite = false;    }    element.enableFieldsActive();    return ret;}

    รหัสแทน

    int active(){    int ret;    // Add the following lines.    ;    journalFormTrans.updateDesign(InventDimFormDesignUpdate::Init);    ret = super();    journalFormTrans.datasourceActivePost();    if (prodJournalRoute.isProjMethodConsumed())    {        skipWrite = true;        prodJournalRouteProjHour_ds.executeQuery();        prodJournalRouteProjQuantity_ds.executeQuery();        skipWrite = false;    }    element.enableFieldsActive();    return ret;}
  13. เปลี่ยนรหัสในวิธีการแทรกในตาราง ProdJournalRoute ดังนี้:รหัสที่มีอยู่

    void insert(){    ttsbegin;    if (! this.LineNum)        this.LineNum = ProdJournalRoute::lastLineNum(this.JournalId) + 1;    if (this.OprFinished)        this.JobFinished = NoYes::Yes;    this.updateRouteConstantRelease();    super();    ttscommit;}

    รหัสแทน

    void insert(){    ttsbegin;    if (! this.LineNum)        this.LineNum = ProdJournalRoute::lastLineNum(this.JournalId) + 1;    if (this.OprFinished)        this.JobFinished = NoYes::Yes;            // Add the following lines.    if(!this.ProdInventDimId)        this.ProdInventDimId = InventDim::inventDimIdBlank();    this.updateRouteConstantRelease();    super();    ttscommit;}
  14. เปลี่ยนรหัสในวิธีการinitValueในตาราง ProdJournalRoute ดังนี้:รหัสที่มีอยู่

    void initValue(){    super();    this.TransDate= systemdateget();}

    รหัสแทน

    void initValue(){    super();    this.TransDate= systemdateget();    // Add the following line.    this.ProdInventDimId = InventDim::inventDimIdBlank();}

ข้อกำหนดเบื้องต้น

ข้อกำหนดเบื้องต้นไม่จำเป็นต้องใช้โปรแกรมแก้ไขด่วนนี้

ความต้องการในการเริ่มระบบใหม่

คุณไม่ต้องรีสตาร์ทคอมพิวเตอร์หลังจากใช้โปรแกรมแก้ไขด่วนนี้

สถานะ

Microsoft ยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วน "นำไปใช้กับ"

และ/หรือซัพพลายเออร์ของ MICROSOFT ทำให้ไม่ได้ยืนยันหรือรับประกันใด ๆ ในความเหมาะสม ความน่าเชื่อถือ หรือความถูกต้องของข้อมูลที่มีอยู่ในเอกสาร และรูปภาพที่เกี่ยวข้องที่เผยแพร่บนเว็บไซต์นี้ ("วัสดุ") เพื่อวัตถุประสงค์ใด ๆ วัตถุดิบอาจรวมทางเทคนิค INACCURACIES หรือข้อผิดพลาด TYPOGRAPHICAL และอาจแก้ไขได้ตลอดเวลาโดยไม่ต้องแจ้งให้ทราบ ระดับสูงสุดที่ได้รับอนุญาตตามกฎหมายที่เกี่ยวข้อง MICROSOFT และ/หรือซัพพลายเออร์ของ DISCLAIM และรวมทั้งหมดที่ใช้แทน รับประกัน และเงื่อนไขว่า EXPRESS ทั้งโดยนัย หรือตาม กฎหมาย รวมถึงแต่ไม่จำกัดเฉพาะการนำเสนอ การรับประกัน หรือ เงื่อนไขของชื่อเรื่อง เงื่อนไขที่ไม่ละเมิด น่าพอใจ หรือคุณภาพ ความสามารถเชิงพาณิชย์ และความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ โดยอ้างอิงวัตถุดิบ

ต้องการความช่วยเหลือเพิ่มเติมหรือไม่

ต้องการตัวเลือกเพิ่มเติมหรือไม่

สํารวจสิทธิประโยชน์ของการสมัครใช้งาน เรียกดูหลักสูตรการฝึกอบรม เรียนรู้วิธีการรักษาความปลอดภัยอุปกรณ์ของคุณ และอื่นๆ