Re: CALL TRANSACTION のリターンコード
ishikawa
投稿数: 10
返事が遅れてすみません。
ojojojojojoj 様 ご教示頂きありがとうございました。
現在、事象の再発は発生しておらず、次回発生するまで様子見・・の状態となっており
解決そのものには至っていない状況です。
やはり 「message into itab」でメッセージを拾わないと、
予期せぬことが起こる可能性があるのですね。
オンラインプログラムでログ採取もしておらず
メッセージ表示そのものはされていないのでわかりませんが、
同期更新(UPDATE "S")のため、伝票番号採番にてメッセージ返却後、
処理遅延のワーニングメッセージが実は出力されたりしているのかもしれないと考えていました。
ソースは以下の通りで、サブルーチンにて未転記伝票発伝を行い、
その未転記伝票の伝票番号をアドオンテーブルに追加更新するという処理です。
この処理にて伝票番号が取得出来ない状態("")でアドオンテーブルが更新される不具合が発生しました。
CALL TRANSACTION直後にSY-MSGV1の伝票番号を変数に格納しているので問題ないと考えていました。
伝票番号なしですが、アドオンテーブルの更新自体はされているため、
SY-SUBRCとしては"0”ですが、伝票番号が返却されていない(または変数が上書きされた)という
状況になったという事になります。
なお、何故 FLG_SUBRC が"USING"なのか等、突っ込みどころはあるかもしれませんが
通常は何の問題もなくこのプログラムにて稼働しています。
急ぎではありませんが、もしお分かりの点があればご教示頂ければと思います。
■■■■■■■■
■サブルーチン■
■■■■■■■■
FORM BATCH_INPUT USING FLG_SUBRC
〜略〜
* トランザクション呼出し
CALL TRANSACTION 'FBV1' USING IT_BDCDATA " FBV1
MODE W_BDC_MODE
UPDATE 'S'.
* 結果判定
IF SY-SUBRC <> 0.
ELSE.
MOVE SY-MSGV1 TO ZSK0010-BELNR. " 伝票番号
ENDIF.
MOVE SY-SUBRC TO FLG_SUBRC.
ENDFORM
■■■■■■
■呼出元 ■
■■■■■■
PERFORM BATCH_INPUT USING FLG_SUBRC. " バッチインプット
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
IF FLG_SUBRC <> 0. " エラーあり
IF FLG_LOCK = C_ON. " ロックされてる?
PERFORM DEQ_ZTK0010 USING ZSK0010-BUKRS
ZSK0010-BELNR
ZSK0010-GJAHR.
ENDIF.
ELSE.
MOVE ZSK0010-BELNR TO ZSK0010-XBLNR.
PERFORM BELNR_ZTK0010. " 内部テーブルへ伝票番号を反映
PERFORM UPDATE_ZTK0010 USING FLG_SUBRC.
IF FLG_SUBRC = 0.
MESSAGE S000(ZK01) WITH TEXT-005 ZSK0010-BELNR ')'. " 更新OK
MOVE C_XOFF TO W_INIT. " 初期化する
MOVE C_XOFF TO FLG_SL_INIT.
CLEAR W_SELLINE.
ENDIF.
ENDIF.
ojojojojojoj 様 ご教示頂きありがとうございました。
現在、事象の再発は発生しておらず、次回発生するまで様子見・・の状態となっており
解決そのものには至っていない状況です。
やはり 「message into itab」でメッセージを拾わないと、
予期せぬことが起こる可能性があるのですね。
オンラインプログラムでログ採取もしておらず
メッセージ表示そのものはされていないのでわかりませんが、
同期更新(UPDATE "S")のため、伝票番号採番にてメッセージ返却後、
処理遅延のワーニングメッセージが実は出力されたりしているのかもしれないと考えていました。
ソースは以下の通りで、サブルーチンにて未転記伝票発伝を行い、
その未転記伝票の伝票番号をアドオンテーブルに追加更新するという処理です。
この処理にて伝票番号が取得出来ない状態("")でアドオンテーブルが更新される不具合が発生しました。
CALL TRANSACTION直後にSY-MSGV1の伝票番号を変数に格納しているので問題ないと考えていました。
伝票番号なしですが、アドオンテーブルの更新自体はされているため、
SY-SUBRCとしては"0”ですが、伝票番号が返却されていない(または変数が上書きされた)という
状況になったという事になります。
なお、何故 FLG_SUBRC が"USING"なのか等、突っ込みどころはあるかもしれませんが
通常は何の問題もなくこのプログラムにて稼働しています。
急ぎではありませんが、もしお分かりの点があればご教示頂ければと思います。
■■■■■■■■
■サブルーチン■
■■■■■■■■
FORM BATCH_INPUT USING FLG_SUBRC
〜略〜
* トランザクション呼出し
CALL TRANSACTION 'FBV1' USING IT_BDCDATA " FBV1
MODE W_BDC_MODE
UPDATE 'S'.
* 結果判定
IF SY-SUBRC <> 0.
ELSE.
MOVE SY-MSGV1 TO ZSK0010-BELNR. " 伝票番号
ENDIF.
MOVE SY-SUBRC TO FLG_SUBRC.
ENDFORM
■■■■■■
■呼出元 ■
■■■■■■
PERFORM BATCH_INPUT USING FLG_SUBRC. " バッチインプット
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
IF FLG_SUBRC <> 0. " エラーあり
IF FLG_LOCK = C_ON. " ロックされてる?
PERFORM DEQ_ZTK0010 USING ZSK0010-BUKRS
ZSK0010-BELNR
ZSK0010-GJAHR.
ENDIF.
ELSE.
MOVE ZSK0010-BELNR TO ZSK0010-XBLNR.
PERFORM BELNR_ZTK0010. " 内部テーブルへ伝票番号を反映
PERFORM UPDATE_ZTK0010 USING FLG_SUBRC.
IF FLG_SUBRC = 0.
MESSAGE S000(ZK01) WITH TEXT-005 ZSK0010-BELNR ')'. " 更新OK
MOVE C_XOFF TO W_INIT. " 初期化する
MOVE C_XOFF TO FLG_SL_INIT.
CLEAR W_SELLINE.
ENDIF.
ENDIF.
投票数:261
平均点:2.68
投稿ツリー
-
CALL TRANSACTION のリターンコード
(ishikawa, 2013-7-14 0:54)
-
Re: CALL TRANSACTION のリターンコード
(ojojojojojoj, 2014-4-30 1:24)
- Re: CALL TRANSACTION のリターンコード (ishikawa, 2014-6-12 17:48)
-
Re: CALL TRANSACTION のリターンコード
(ojojojojojoj, 2014-4-30 1:24)