2016-12-07 5 views
1

1つのオブジェクトに関する2つの情報(数量(PLAF-gsmng))を更新し、モジュール機能 'MD_SET_ACTION_PLAF'を使用して計画手配を更新する必要があります。 各データを個別に更新する方法を見つけることに成功しました。しかし、両方のソリューションを実行すると、第2の変更はデータベースに保存されません。計画手配の更新 - 2回のコミット済み変更の保存

数量を変更する方法を知っていますか& PLAF(計画済み)テーブルのアクションを設定しますか?

数量のみを更新する他のモジュールの機能をご存知ですか?

おそらくパラメータがありませんか?

2番目のオブジェクトがロックされている(sm12が空で、sy-subrc =ロックされていない)ようなものです。変更はコミットされていません。

私がしようとした:アルゴリズムの順序(リフレッシュ以降、PLAFを変更)

  • 変更
  • は、追加、削除、WORK &がCOMMIT WORKをコミットしDEQUEUE_ALLを追加
  • をWAIT移動するかをDEQUEUE_EMPLAFE

これは、現在のコードです:

1)リードデータ

lv_plannedorder = '00000000001' 

"Read PLAF data 
SELECT SINGLE * FROM PLAF INTO ls_plaf WHERE plnum = lv_plannedorder. 

2)を更新数量データ私はPLAFテーブルの上に行けば

" Standard configuration for FM MD_PLANNED_ORDER_CHANGE 
CLEAR ls_610. 
ls_610-nodia = 'X'.  " No dialog display 
ls_610-bapco = space. " BAPI type. Do not use mode 2 -> Action PLAF-MDACC will be autmatically set up to APCH by the FM 
ls_610-bapix = 'X'.  " Run BAPI 
ls_610-unlox = 'X'.  " Update PLAF 

" Customize values 
MOVE p_gsmng TO ls_plaf-gsmng. " Change quantity value 

MOVE sy-datlo TO ls_plaf-mdacd. " Change by/datetime, because ls_610-bapco <> 2. 
MOVE sy-uzeit TO ls_plaf-mdact. 

CALL FUNCTION 'MD_PLANNED_ORDER_CHANGE' 
    EXPORTING 
    ecm61o  = ls_610 
    eplaf   = ls_plaf 
    EXCEPTIONS 
    locked  = 1 
    locking_error = 2 
    OTHERS  = 3. 
" Already committed on the module function 
" sy-subrc = 0 

は、私は量が編集されていることがわかります。それは:)

3)リフレッシュBOM &変更アクション(MDACC)などのフィールドを働いて私はテーブル、修正なし(のみMODIFに行けば

CLEAR ls_imdcd. 
ls_imdcd-pafxl = 'X'. 

CALL FUNCTION 'MD_SET_ACTION_PLAF' 
    EXPORTING 
    iplnum   = lv_plannedorder 
    iaccto   = 'BOME' 
    iaenkz   = 'X' 
    imdcd    = ls_imdcd 
    EXCEPTIONS 
    illegal_interface = 1 
    system_failure = 2 
    error_message  = 3 
    OTHERS   = 4. 

IF sy-subrc = 0. 
    COMMIT WORK. 
ENDIF. 

。一部の2することができますそれに見つけることができます)。

おそらくls_610-bapco =スペースなのでしょうか?

+0

関数プール内に「init」モジュールがいくつか見つかりましたか?それらを使用する必要があります... – icbytes

+0

コミットの前後に、デバッグ中にSM13をチェックしましたか? – futu

答えて

1

計画入庫数量をMD_SET_ACTION_PLAFでも更新することができます。少なくともSAPヘルプtells usです。なぜあなたはそのように使用しないのですか?数量を変更するための

その呼び出しは、このようなおそらくになります。

DATA: lt_acct LIKE TABLE OF MDACCTO, 
     ls_acct LIKE LINE OF lt_acct. 

ls_acct-accto = 'BOME'. 
APPEND lt_acct. 
ls_acct-accto = 'CPOD'. 
APPEND lt_acct. 

is_mdcd-GSMNG = 'value'    "updated quantity value 

CALL FUNCTION 'MD_SET_ACTION_PLAF' 
EXPORTING 
    iplnum   = iv_plnum 
    iaenkz   = 'X' 
    IVBKZ    = 'X' 
    imdcd    = is_mdcd  "filled with your BOME-related data + new quantity 
TABLES 
TMDACCTO   = lt_accto 
EXCEPTIONS 
    illegal_interface = 1 
    system_failure = 2  
    error_message  = 3. 

だから、もうMD_PLANNED_ORDER_CHANGEの別々の呼び出しやアップデートでこれ以上の問題のためのより多くの必要はありません。

私はウェブでこのFMコールのいずれかの例を見つけることができませんでした(とSAPのドキュメンタリーが非常にあいまいである)ので、私はおそらく言葉を使用するので、私は、このソリューションがちょうどとして検証せずに、ある提案します。

P.S.可能なアクションはT46ASテーブルに記載されており、imdcdフィールドが注文に与える影響はMDACトランザクションで確認できます。これは、単一注文のためのこのFMと幾分GUI同等です。

関連する問題