อย่างรวดเร็วบทความที่เผยแพร่ให้ข้อมูลโดยตรงจากภายใน 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 สามารถช่วยอธิบายเกี่ยวกับการทำงานของกระบวนการเฉพาะได้ อย่างไรก็ตาม จะไม่มีการปรับเปลี่ยนตัวอย่างเหล่านี้เพื่อให้มีฟังก์ชันการทำงานที่เพิ่มขึ้น หรือสร้างกระบวนการใดๆ เพื่อตอบสนองความต้องการอย่างใดอย่างหนึ่งของคุณโดยเฉพาะ เสมอทดสอบรหัสแก้ไขในสภาพแวดล้อมการควบคุมก่อนที่คุณนำไปใช้แก้ไขปัญหากับคอมพิวเตอร์ของคุณผลิตเมื่อต้องการใช้โปรแกรมแก้ไขด่วนนี้ ให้ทำตามขั้นตอนเหล่านี้:
-
เปลี่ยนแปลงรหัสนี้ในวิธีการ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();} -
เปลี่ยนแปลงรหัสนี้ในวิธีการ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();} -
เปลี่ยนรหัสในวิธีการ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); } } }} -
เปลี่ยนค่าของคุณสมบัติของออบเจ็กต์ InventDim ข้อมูลแหล่งที่มาในรูปแบบ ProdJournalTransRoute เป็นดังนี้:
-
เปลี่ยนแปลงค่าของคุณสมบัติLinkTypeถึงInnerJoin
-
เปลี่ยนแปลงค่าของคุณสมบัติDelayActiveเป็นNo
-
-
เพิ่มรหัสต่อไปนี้ในวัตถุ "\Forms\ProdJournalTransRoute\DataSources\InventDim\Methods\ validateWrite"
public boolean validateWrite(){ boolean ret; ; if (inventDim.inventDimId == InventDim::inventDimIdBlank()) return true; ret = super(); return ret;} -
การเปลี่ยนแปลงรหัสนี้ในวัตถุ "\Forms\ProdJournalTransRoute\DataSources\InventDim\Methods\ เขียน" ดังนี้:รหัสที่มีอยู่
void write(){ ; prodJournalRoute_ds.write();}รหัสแทน
void write(){ ; prodJournalRoute_ds.write(); // Add the following line. element.enableFieldsActive();} -
การเปลี่ยนแปลงรหัสนี้ใน "\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;} -
เปลี่ยนรหัสในวิธีการ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); } } }} -
เปลี่ยนค่าของคุณสมบัติของออบเจ็กต์ InventDim ข้อมูลแหล่งที่มาในรูปแบบ ProdJournalTransJob เป็นดังนี้:
-
เปลี่ยนแปลงค่าของคุณสมบัติLinkTypeถึงInnerJoin
-
เปลี่ยนแปลงค่าของคุณสมบัติDelayActiveเป็นNo
-
-
เพิ่มรหัสต่อไปนี้ในวัตถุ "\Forms\ProdJournalTransJob\DataSources\InventDim\Methods\ validateWrite"
public boolean validateWrite(){ boolean ret; ; if (inventDim.inventDimId == InventDim::inventDimIdBlank()) return true; ret = super(); return ret;} -
การเปลี่ยนแปลงรหัสนี้ในวัตถุ "\Forms\ProdJournalTransJob\DataSources\InventDim\Methods\ เขียน" ดังนี้:รหัสที่มีอยู่
void write(){ ; prodJournalRoute_ds.write();}รหัสแทน
void write(){ ; prodJournalRoute_ds.write(); // Add the following line. element.enableFieldsActive();} -
การเปลี่ยนแปลงรหัสนี้ใน "\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;} -
เปลี่ยนรหัสในวิธีการแทรกในตาราง 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;} -
เปลี่ยนรหัสในวิธีการ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 ทั้งโดยนัย หรือตาม กฎหมาย รวมถึงแต่ไม่จำกัดเฉพาะการนำเสนอ การรับประกัน หรือ เงื่อนไขของชื่อเรื่อง เงื่อนไขที่ไม่ละเมิด น่าพอใจ หรือคุณภาพ ความสามารถเชิงพาณิชย์ และความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ โดยอ้างอิงวัตถุดิบ