Cấu hình một BOM không hiển thị đúng trong hộp thoại "Đường thẻ tạp chí" sau khi bạn thêm cột "Cấu hình" tab "Tổng quan" trong Microsoft Dynamics AX 2009

Áp dụng cho: Microsoft Dynamics AX 2009 Service Pack 1Microsoft Dynamics AX 2009

Nhanh chóng xuất bản bài viết này cung cấp thông tin trực tiếp từ Trung tâm hỗ trợ của Microsoft. Thông tin có trong tài liệu này được tạo ra để đáp ứng với các chủ đề mới xuất hiện hoặc duy nhất hoặc nhằm bổ sung thông tin cơ sở kiến thức khác.

Triệu chứng


Khi bạn bấm chuột phải vào hộp thoại đường thẻ Nhật ký trong Microsoft Dynamics AX 2009 và sau đó nhấp vào thiết lập để thêm cột cấu hình tab tổng quan về cấu hình một dự án tài liệu (BOM) không hiển thị chính xác trong hộp thoại đường thẻ Nhật ký .

Nguyên nhân


Sự cố này xảy ra do Microsoft Dynamics AX hỗ trợ bạn thêm một nguồn dữ liệu được liên kết chậm để điều khiển lưới.

Giải pháp


Thông tin hotfix

Microsoft hiện đã cung cấp bản cập nhật nóng được hỗ trợ. Tuy nhiên, nó chỉ được dùng để khắc phục sự cố được mô tả trong bài viết này. Áp dụng cho các hệ thống đang gặp sự cố cụ thể này. Hotfix này có thể được kiểm tra thêm. Vì vậy, nếu bạn không bị ảnh hưởng bởi sự cố này, chúng tôi khuyến nghị bạn đợi cho gói dịch vụ tiếp theo của Microsoft Dynamics AX 2009 hoặc phiên bản tiếp theo có chứa hotfix này. Lưu ý Trong trường hợp đặc biệt, chi phí thường phát sinh để hỗ trợ cuộc gọi có thể bị hủy bỏ nếu chuyên viên hỗ trợ kỹ thuật cho Microsoft Dynamics và sản phẩm liên quan xác định rằng một Cập Nhật cụ thể sẽ giải quyết vấn đề của bạn. Chi phí hỗ trợ thông thường sẽ áp dụng cho các vấn đề không phù hợp với bản Cập Nhật cụ thể trong câu hỏi và câu hỏi hỗ trợ bổ sung.Hotfix này dự kiến sẽ có gói dịch vụ 2 dành cho Microsoft Dynamics AX 2009.

Thông tin cài đặt

Trước khi cài đặt hotfix này, xác minh rằng người dùng máy khách Microsoft Dynamics AX đăng tắt hệ thống. Bạn nên khách hàng chỉ người được đăng nhập khi bạn áp dụng hotfix này. Để áp dụng hotfix này, bạn phải có giấy phép nhà phát triển.Chú ý Chúng tôi khuyên bạn nên tài khoản người dùng trong cửa sổ thông tin đăng nhập Windows hoặc cửa sổ cơ sở dữ liệu đăng nhập là thành viên của nhóm quản trị viên sử dụng trong Microsoft Dynamics AX.

Thay đổi mã

Microsoft chỉ cung cấp mô hình lập trình để minh hoạ mà không đảm bảo dưới bất kỳ hình thức nào dù có quy định rõ ràng hay ngụ ý. Điều này bao gồm nhưng không giới hạn trong các hình thức bảo hành đối với tính thương mại cũng như tính thích hợp cho một mục đích cụ thể. Bài viết này giả định rằng bạn đã quen với ngôn ngữ lập trình đang được giải thích, và công cụ được sử dụng để tạo và gỡ lỗi quy trình. Microsoft hỗ trợ các kỹ sư có thể giúp giải thích tính năng của một quy trình cụ thể. Tuy nhiên, họ sẽ không sửa đổi những mô hình này để cung cấp tính năng được bổ sung hoặc xây dựng quy trình nhằm đáp ứng các yêu cầu cụ thể của bạn. Luôn kiểm tra mã khắc phục trong một môi trường được kiểm soát trước khi bạn áp dụng bản vá để sản xuất máy tính của bạn.Để áp dụng hotfix này, hãy làm theo các bước sau:
  1. Thay đổi mã trong phương pháp datasourceWritePre lớp ProdJournalFormTransRoute như sau:hiện tại mã
    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();}
    Thay thế mã
    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. Thay đổi mã trong phương pháp fieldModifiedProdReportFinishedPost lớp ProdJournalFormTransRoute như sau:hiện tại mã
    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();}
    Thay thế mã
    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. Thay đổi mã trong phương pháp enableFieldsActive thành ProdJournalTransRoute như sau:hiện tại mã
    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());}
    Thay thế mã
    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. Thay đổi giá trị của thuộc tính của đối tượng nguồn dữ liệu InventDim thành ProdJournalTransRoute như sau:
    • Thay đổi giá trị của thuộc tính LinkTypeInnerJoin.
    • Thay đổi giá trị của thuộc tính DelayActivekhông.
  5. Thêm mã sau trong phần "\Forms\ProdJournalTransRoute\DataSources\InventDim\Methods\ validateWrite".
    public boolean validateWrite(){    boolean ret;    ;    if (inventDim.inventDimId == InventDim::inventDimIdBlank())        return true;    ret = super();        return ret;}
  6. Thay đổi mã trong đối tượng "\Forms\ProdJournalTransRoute\DataSources\InventDim\Methods\ ghi" như sau:hiện tại mã
    void write(){    ;    prodJournalRoute_ds.write();}
    Thay thế mã
    void write(){    ;    prodJournalRoute_ds.write();    // Add the following line.    element.enableFieldsActive();}
  7. Thay đổi mã trong "\Forms\ProdJournalTransRoute\DataSources\ProdJournalRoute\Methods\active" như sau:hiện tại mã
    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;}
    Thay thế mã
    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. Thay đổi mã trong phương pháp enableFieldsActive thành ProdJournalTransJob như sau:hiện tại mã
    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());}
    Thay thế mã
    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. Thay đổi giá trị của thuộc tính của đối tượng nguồn dữ liệu InventDim thành ProdJournalTransJob như sau:
    • Thay đổi giá trị của thuộc tính LinkTypeInnerJoin.
    • Thay đổi giá trị của thuộc tính DelayActivekhông.
  10. Thêm mã sau trong phần "\Forms\ProdJournalTransJob\DataSources\InventDim\Methods\ validateWrite".
    public boolean validateWrite(){    boolean ret;    ;    if (inventDim.inventDimId == InventDim::inventDimIdBlank())        return true;    ret = super();        return ret;}
  11. Thay đổi mã trong đối tượng "\Forms\ProdJournalTransJob\DataSources\InventDim\Methods\ ghi" như sau:hiện tại mã
    void write(){    ;    prodJournalRoute_ds.write();}
    Thay thế mã
    void write(){    ;    prodJournalRoute_ds.write();    // Add the following line.    element.enableFieldsActive();}
  12. Thay đổi mã trong "\Forms\ProdJournalTransJob\DataSources\ProdJournalRoute\Methods\active" như sau:hiện tại mã
    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;}
    Thay thế mã
    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. Thay đổi mã trong phương pháp chèn trong bảng ProdJournalRoute như sau:hiện tại mã
    void insert(){    ttsbegin;    if (! this.LineNum)        this.LineNum = ProdJournalRoute::lastLineNum(this.JournalId) + 1;    if (this.OprFinished)        this.JobFinished = NoYes::Yes;    this.updateRouteConstantRelease();    super();    ttscommit;}
    Thay thế mã
    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. Thay đổi mã trong phương pháp initValue trong bảng ProdJournalRoute như sau:hiện tại mã
    void initValue(){    super();    this.TransDate= systemdateget();}
    Thay thế mã
    void initValue(){    super();    this.TransDate= systemdateget();    // Add the following line.    this.ProdInventDimId = InventDim::inventDimIdBlank();}

Điều kiện tiên quyết

Không có điều kiện tiên quyết được yêu cầu để áp dụng hotfix này.

Yêu cầu khởi động lại

Bạn không phải khởi động lại máy tính sau khi bạn áp dụng hotfix này.

Trạng thái


Microsoft đã xác nhận đây là sự cố trong các sản phẩm của Microsoft được liệt kê trong phần "Áp dụng cho".
MICROSOFT VÀ/HOẶC CÁC NHÀ CUNG CẤP KHÔNG TUYÊN BỐ HOẶC BẢO ĐẢM VỀ TÍNH PHÙ HỢP, ĐỘ TIN CẬY HOẶC TÍNH CHÍNH XÁC CỦA THÔNG TIN CÓ TRONG TÀI LIỆU VÀ ĐỒ HOẠ LIÊN QUAN ĐƯỢC ĐĂNG TRÊN TRANG WEB NÀY ("TÀI LIỆU") CHO MỤC ĐÍCH NÀO. CÁC TÀI LIỆU CÓ THỂ BAO GỒM KỸ THUẬT KHÔNG CHÍNH XÁC HOẶC LỖI VÀ CÓ THỂ ĐƯỢC SỬA ĐỔI BẤT KỲ LÚC NÀO MÀ KHÔNG CẦN THÔNG BÁO. MỨC TỐI ĐA CHO PHÉP THEO LUẬT, MICROSOFT VÀ/HOẶC CÁC NHÀ CUNG CẤP TỪ CHỐI VÀ LOẠI TRỪ TẤT CẢ CÁC TUYÊN BỐ, BẢO ĐẢM VÀ ĐIỀU KIỆN CHO DÙ EXPRESS, NGỤ Ý HAY THEO LUẬT ĐỊNH, BAO GỒM NHƯNG KHÔNG GIỚI HẠN ĐỐI VỚI TUYÊN BỐ, BẢO HÀNH, HOẶC ĐIỀU KIỆN CỦA TIÊU ĐỀ, KHÔNG VI PHẠM, THOẢ MÃN ĐIỀU KIỆN HOẶC CHẤT LƯỢNG, BÁN VÀ CHO MỘT MỤC ĐÍCH CỤ THỂ, ĐỐI VỚI CÁC TÀI LIỆU.