Microsoft Dynamics AX 2009 の [概要] タブに [構成] 列を追加した後、[ルート カード仕訳帳] ダイアログ ボックスに BOM の構成が正しく表示されない

適用先
Dynamics AX 2009 Service Pack 1 Microsoft Dynamics AX 2009

迅速に公開された記事は、Microsoft サポート組織内から直接情報を提供します。 ここに含まれる情報は、新しいトピックまたは一意のトピックに応答して作成されるか、または他のナレッジ ベース情報を補完することを目的としています。

現象

Microsoft Dynamics AX 2009 の [ルート カード仕訳帳 ] ダイアログ ボックスを右クリックし、[ セットアップ ] をクリックして [構成 ] 列を [ 概要 ] タブに追加すると、[ ルート カード仕訳帳 ] ダイアログ ボックスに部品表 (BOM) の構成が正しく表示されません。

原因

この問題は、Microsoft Dynamics AX では、遅延リンク データ ソースをグリッド コントロールに追加することがサポートされていないために発生します。

解決策

修正プログラム情報

サポートされている修正プログラムが Microsoft から入手できるようになりました。 ただし、この記事で説明されている問題を修正することのみを目的としています。 この特定の問題が発生しているシステムにのみ適用します。 この修正プログラムは、追加のテストを受け取る場合があります。 したがって、この問題の影響を大きく受けない場合は、次の Microsoft Dynamics AX 2009 Service Pack またはこの修正プログラムを含む次のバージョンを待つことをおすすめします。

注 特別なケースでは、Microsoft Dynamics および関連製品のテクニカル サポート プロフェッショナルが特定の更新プログラムによって問題が解決されると判断した場合、通常はサポート呼び出しに対して発生する料金が取り消されることがあります。 ただし、特定の更新プログラムの対象とならない追加の質問および問題については、通常のサポート料金が適用されます。

この修正プログラムは、Microsoft Dynamics AX 2009 用 Service Pack 2 に含まれる予定です。

インストール情報

この修正プログラムをインストールする前に、Microsoft Dynamics AX クライアント ユーザーがシステムからログオフされていることを確認します。 この修正プログラムを実装するときにログオンする唯一のクライアント ユーザーである必要があります。

この修正プログラムを実装するには、開発者ライセンスが必要です。

注: [Windows ログイン] ウィンドウまたは [データベース ログイン] ウィンドウのユーザー アカウントは、Microsoft Dynamics AX の Administrators ユーザー グループのメンバーにすることをお勧めします。

コードの変更

Microsoft は、明示または黙示の保証なしで、説明のみを目的としてプログラミング例を提供しています。 これには、商品性または特定の目的への適合性に関する暗黙の保証が含まれますが、これらに限定されません。 この記事では、デモンストレーションされているプログラミング言語と、プロシージャの作成とデバッグに使用されるツールについてよく理解していることを前提としています。 Microsoft サポート エンジニアは、特定のプロシージャの機能の説明を支援できます。 ただし、これらの例を変更して、特定の要件を満たすために追加の機能を提供したりプロシージャを構築したりすることはできません。 運用環境のコンピューターに修正プログラムを適用する前に、常に制御された環境でコード修正プログラムをテストします。

この修正プログラムを適用するには、次の手順に従います。

  1. ProdJournalFormTransRoute クラスの datasourceWritePre メソッドのコードを次のように変更します。
    既存のコード

    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. ProdJournalFormTransRoute クラスの fieldModifiedProdReportFinishedPost メソッドのコードを次のように変更します。
    既存のコード

    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. ProdJournalTransRoute フォームの enableFieldsActive メソッドのコードを次のように変更します。
    既存のコード

    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. ProdJournalTransRoute フォームの InventDim データ ソース オブジェクトのプロパティの値を次のように変更します。

    • 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\ write" オブジェクトのコードを次のように変更します。
    既存のコード

    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. ProdJournalTransJob フォームの enableFieldsActive メソッドのコードを次のように変更します。
    既存のコード

    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. ProdJournalTransJob フォームの InventDim データ ソース オブジェクトのプロパティの値を次のように変更します。

    • 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\ write" オブジェクトのコードを次のように変更します。
    既存のコード

    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 テーブルの insert メソッドのコードを次のように変更します。
    既存のコード

    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. ProdJournalRoute テーブルの initValue メソッドのコードを次のように変更します。
    既存のコード

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

    置換コード

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

前提条件

この修正プログラムを適用するために前提条件は必要ありません。

再起動の必要性

この修正プログラムの適用後にコンピューターを再起動する必要はありません。

状態

Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。

MICROSOFT および/またはそのサプライヤーは、この WEB サイト (「素材」) に掲載されているドキュメントおよび関連するグラフィックスに含まれる情報の適合性、信頼性、正確性について、いかなる目的でも表明または保証しません。

THE MATERIALS MAY INCLUDE TECHNICAL INACCURACIES OR TYPOGRAPHICAL ERRORS AND MAY BE REVISED AT ANY TIME WITHOUT NOTICE. 適用法によって許容される最大限の範囲において、MICROSOFT および/またはそのサプライヤーは、明示、黙示、または法令に基づくすべての表明、保証、および条件 (タイトルの表明、保証、または条件、非侵害、満足のいく条件または品質、商品性および特定の目的への適合性を含むがこれに限定されない)を、素材に関して否認し、除外します。