บทความที่เผยแพร่อย่างรวดเร็วให้ข้อมูลโดยตรงจากภายในองค์กรสนับสนุนของ Microsoft ข้อมูลที่อยู่ในที่นี้จะถูกสร้างขึ้นเพื่อตอบสนองต่อหัวข้อที่เกิดขึ้นใหม่หรือเฉพาะ หรือมีวัตถุประสงค์เพื่อเพิ่มเติมข้อมูลฐานความรู้อื่นๆ
อาการ
เมื่อคุณคลิกขวาในกล่องโต้ตอบ สมุดรายวันบัตรกระบวนการผลิต ใน Microsoft Dynamics AX 2009 แล้วคลิก ตั้งค่า เพื่อเพิ่มคอลัมน์ การตั้งค่าคอนฟิก ในแท็บ ภาพรวม การตั้งค่าคอนฟิกของรายการวัสดุและส่วนประกอบ (BOM) จะไม่แสดงอย่างถูกต้องในกล่องโต้ตอบ สมุดรายวันบัตรกระบวนการผลิต
สาเหตุ
ปัญหานี้เกิดขึ้นเนื่องจาก Microsoft Dynamics AX ไม่สนับสนุนให้คุณเพิ่มแหล่งข้อมูลเชื่อมโยงล่าช้าไปยังตัวควบคุมเส้นตาราง
การแก้ปัญหา
ข้อมูลโปรแกรมแก้ไขด่วน
โปรแกรมแก้ไขด่วนที่ได้รับการสนับสนุนจาก Microsoft พร้อมใช้งานแล้ว อย่างไรก็ตาม มีไว้เพื่อแก้ไขปัญหาที่อธิบายไว้ในบทความนี้เท่านั้น นําไปใช้กับระบบที่พบปัญหานี้โดยเฉพาะเท่านั้น โปรแกรมแก้ไขด่วนนี้อาจได้รับการทดสอบเพิ่มเติม ดังนั้น ถ้าคุณไม่ได้รับผลกระทบอย่างร้ายแรงจากปัญหานี้ เราขอแนะนําให้คุณรอ Service Pack 2009 ของ Microsoft Dynamics AX 2009 ถัดไป หรือเวอร์ชันถัดไปที่มีโปรแกรมแก้ไขด่วนนี้
หมายเหตุ ในกรณีพิเศษ ค่าธรรมเนียมสําหรับการโทรติดต่อฝ่ายสนับสนุนตามปกติอาจถูกยกเลิกถ้าผู้เชี่ยวชาญฝ่ายสนับสนุนทางเทคนิคสําหรับ Microsoft Dynamics และผลิตภัณฑ์ที่เกี่ยวข้องระบุว่าการอัปเดตเฉพาะจะแก้ไขปัญหาของคุณได้ ค่าใช้จ่ายในการสนับสนุนปกติจะใช้กับคําถามและปัญหาการสนับสนุนเพิ่มเติมที่ไม่มีคุณสมบัติสําหรับการอัปเดตเฉพาะที่สงสัย
โปรแกรมแก้ไขด่วนนี้ถูกกําหนดเวลาให้รวมอยู่กับ Service Pack 2 สําหรับ 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(); }เปลี่ยนรหัสในฟิลด์วิธี ModifiedProdReportFinishedPost ในคลาส 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 Data Source ในแบบฟอร์ม ProdJournalTransRoute ดังนี้:
- เปลี่ยนค่าของคุณสมบัติ LinkType เป็น InnerJoin
- เปลี่ยนค่าของคุณสมบัติ DelayActive เป็น ไม่ใช่
เพิ่มรหัสต่อไปนี้ในวัตถุ "\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\ write" ดังนี้:
รหัสที่มีอยู่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 Data Source ในฟอร์ม ProdJournalTransJob ดังนี้:
- เปลี่ยนค่าของคุณสมบัติ LinkType เป็น InnerJoin
- เปลี่ยนค่าของคุณสมบัติ DelayActive เป็น ไม่ใช่
เพิ่มรหัสต่อไปนี้ในวัตถุ " \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\ write" ดังนี้:
รหัสที่มีอยู่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 และ/หรือผู้จําหน่ายของ MICROSOFT ไม่ได้รับรองหรือรับประกันเกี่ยวกับความเหมาะสม ความน่าเชื่อถือ หรือความถูกต้องของข้อมูลที่มีอยู่ในเอกสารและกราฟิกที่เกี่ยวข้องที่เผยแพร่บนเว็บไซต์นี้ ("เนื้อหา") เพื่อวัตถุประสงค์ใดๆ
วัสดุอาจรวมถึงความไม่ถูกต้องทางเทคนิคหรือข้อผิดพลาดในการพิมพ์ และอาจมีการแก้ไขได้ตลอดเวลาโดยไม่ต้องแจ้งให้ทราบ ภายใต้ขอบเขตสูงสุดที่กฎหมายที่บังคับใช้อนุญาต MICROSOFT และ/หรือผู้จําหน่ายของไมโครซอฟท์จะปฏิเสธความรับผิดชอบและแยกการรับรอง การรับประกัน และเงื่อนไขทั้งหมดไม่ว่าจะโดยชัดแจ้ง โดยนัย หรือโดยกฎหมาย รวมถึงแต่ไม่จํากัดเพียงการแสดง การรับประกัน หรือเงื่อนไขของชื่อเรื่อง การไม่ละเมิด เงื่อนไขหรือคุณภาพที่น่าพอใจ ความสามารถในเชิงพาณิชย์และความเหมาะสมสําหรับวัตถุประสงค์เฉพาะ ที่เกี่ยวข้องกับวัสดุ