BAPI_GOODSMVT_CREATE And BAPI_GOODSMVT_Cancel

Error rendering macro 'code': Invalid value specified for parameter 'lang'TABLES: ZTPP0371.      " インターフェース指図ヘッダ

* データ
TYPES: BEGIN OF TYP_DATA ,
        AUFNR_N       TYPE ZTPP0371-AUFNR_N,    "指図番号
        BUDAT         TYPE ZTPP0372-BUDAT,      "伝票の転記日付
        SEQ           TYPE ZTPP0371-SEQ,        "カウンタ
        ZDELKB        TYPE ZTPP0371-ZDELKB,     "取消区分
        AUFNR_W       TYPE ZTPP0371-AUFNR_W,    "指図番号
        ZSTATUS       TYPE ZTPP0371-ZSTATUS,    "処理ステータス
        WERKS         TYPE ZTPP0371-WERKS,      "プラント
        MATNR         TYPE ZTPP0371-MATNR,      "品目コード
        MAKTX         TYPE ZTPP0371-MAKTX,      "品目テキスト
        BMENGE        TYPE ZTPP0371-BMENGE,     "基本数量
        BMEINS        TYPE ZTPP0371-BMEINS,     "基本数量単位
        GSTRP         TYPE ZTPP0371-GSTRP,      "基準開始日
        ERTXT         TYPE ZTPP0371-ERTXT,      "エラーテキスト
        ZNETQTY1      TYPE ZTPP0372-ZNETQTY1,   "ネット数量
        MEINS         TYPE ZTPP0372-MEINS,      "基本数量単位
        LGORT         TYPE ZTPP0372-LGORT,      "保管場所
        MBLNR1        TYPE MBLNR,               "入出庫伝票番号
        MJAHR1        TYPE MJAHR,               "入出庫伝票年
        ZSECNO        TYPE CONSECNO,            "連続番号
        ERROR         TYPE CHAR100,             "ERROR
        BLOCK         TYPE ZTPP0003-ZZCHARG,    "ロット
        ZZBWTAR       TYPE ZTPP0003-ZZBWTAR,    "評価タイプ
    END OF TYP_DATA.
* BDCDATA作成用内部テーブル
DATA: BEGIN OF T_BDCDATA OCCURS 0.
        INCLUDE STRUCTURE BDCDATA.
DATA: END OF T_BDCDATA.
* BAPI実行後結果格納内部テーブル
DATA: BEGIN OF T_RET OCCURS 0.
        INCLUDE STRUCTURE BAPIRET2.
DATA: END OF T_RET.
*--- 内部テーブル定義 ---*
*CCNBC指図ヘッダテーブル
DATA: T_ZTPP0371      TYPE STANDARD TABLE OF ZTPP0371,
      W_ZTPP0371      TYPE ZTPP0371,
*共通PF生産実績テーブル
      T_ZTPP0372      TYPE STANDARD TABLE OF ZTPP0372,
      W_ZTPP0372      TYPE ZTPP0372,
*RESULT TABLE 共通PF生産実績テーブル & 共通PF生産実績テーブル
      T_DATA          TYPE STANDARD TABLE OF TYP_DATA,
      W_DATA          TYPE TYP_DATA,
*BAPI 通信構造: 入出庫伝票明細登録
      T_ITEM          TYPE TABLE OF BAPI2017_GM_ITEM_CREATE,
      W_ITEM          TYPE  BAPI2017_GM_ITEM_CREATE,
*リターンパラメータ
      T_RETURN        TYPE TABLE OF  BAPIRET2,
      W_RETURN        TYPE BAPIRET2,
*BAPI コミュニケーションストラクチャ: 入出庫伝票ヘッダデータ
      W_HEADER        TYPE  BAPI2017_GM_HEAD_01,
*  MMIM: 在庫管理トランザクションへの GM_CODE 新規キー割当
      W_CODE          TYPE  BAPI2017_GM_CODE,
*--- 変数定義 ---*
      W_COUNT         TYPE  I,                       "COUNT
      W_ELIKZ         TYPE  MSEG-ELIKZ,              "納入完了" 区分
      W_UPDATE        TYPE  CHAR1 VALUE 'S',         "UPDATE
      W_ZSTATUS       TYPE  CHAR1,                   "納入完了" 区分
      W_MODE          TYPE  CHAR1 VALUE 'A',          "納入完了" 区分n
      W_MBLNR         TYPE  MSEG-MBLNR,              "入出庫伝票番号
      W_GJAHR         TYPE  MKPF-MJAHR.              "年度 ADD 2001.09.18
CONSTANTS:
    CNS_ZSTATUS_OK_BF TYPE ZTPP0371-ZSTATUS VALUE '1',    "納入完了" 区分
    CNS_ZSTATUS_ER    TYPE ZTPP0371-ZSTATUS VALUE '4',    "納入完了" 区分
    CNS_ZSTATUS_OK    TYPE ZTPP0371-ZSTATUS VALUE '5',    "納入完了" 区分
    CNS_0001          TYPE CHAR4            VALUE '0001', "明細番号 (販売管理伝票)
    CNS_BWART         TYPE CHAR5            VALUE 'BWART',"移動タイプ (在庫管理)
    CNS_02            TYPE CHAR2            VALUE '02',   "BAPI 在庫移動トランザクションのコード割当
    CNS_X             TYPE CHAR1            VALUE 'X',
    CNS_0             TYPE CHAR1            VALUE '0',
    CNS_1             TYPE CHAR1            VALUE '1',
    CNS_2             TYPE CHAR1            VALUE '2',
    CNS_4             TYPE CHAR1            VALUE '4',
    CNS_5             TYPE CHAR1            VALUE '5',
    CNS_S             TYPE CHAR1            VALUE 'S'.
*=======================================================================
*   選択画面用パラメータ定義
*=======================================================================
** 選択項目 ------------------------------------------------
**-デイフォルトはテスト実行OFF-スレッシュ-2004/10/21*
PARAMETERS: P_TEST AS CHECKBOX DEFAULT ''.
SELECTION-SCREEN BEGIN OF BLOCK SENTAKU WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:
  S_AUFNR  FOR  ZTPP0371-AUFNR_N.
**-製造日付の追加-2004/11/01-スレッシュ*
SELECT-OPTIONS:
  S_BUDAT  FOR  ZTPP0371-BUDAT.
*  処理ステータス
SELECT-OPTIONS:
  S_STATUS FOR  ZTPP0371-ZSTATUS OBLIGATORY .
SELECTION-SCREEN END OF BLOCK SENTAKU.
PARAMETERS: P_CHARG TYPE AFPO-CHARG DEFAULT '受託生産品' NO-DISPLAY.
*=======================================================================
*** INITIALIZATION
*=======================================================================
*-<<< 初期処理(選択画面初期処理) >>>-------------------------------*
INITIALIZATION.
*  SET TITLEBAR 'T01' WITH TEXT-023.  "タイトルバーの設定
* P_STATUS 初期値を設定
  S_STATUS-SIGN   = 'I'.
  S_STATUS-OPTION = 'EQ'.
  S_STATUS-LOW    = CNS_ZSTATUS_OK_BF.
  APPEND S_STATUS.
  S_STATUS-SIGN   = 'I'.
  S_STATUS-OPTION = 'EQ'.
  S_STATUS-LOW    = CNS_ZSTATUS_ER.
  APPEND S_STATUS.
*=======================================================================
*** START OF SELECTION
*=======================================================================
START-OF-SELECTION.
*   ZTPP0271からデータ取得
  PERFORM FRM_GET_DATA_ZTPP0371.
*   総有効期間、転記日付の設定、T_DATAデータ移動
  PERFORM FRM_DATA_FIX.
  CHECK P_TEST = SPACE.
* Post goods movements with MB_CREATE_GOODS_MOVEMENT
  PERFORM F_BAPI_GOODSMOVEMENT.
  WRITE:/01     TEXT-003.
*=======================================================================
*** END OF SELECTION
*=======================================================================
END-OF-SELECTION.
  DATA: L_CNT TYPE I, "データカウンタ用ローカル変数
        L_OKCODDE_CNT TYPE I,
        L_ERCODE_CNT  TYPE I.
  WRITE:
      /110 TEXT-004.
*データ件数カウント
  CLEAR: W_COUNT.
  DESCRIBE TABLE T_DATA LINES W_COUNT.
  WRITE: /1(18) TEXT-005,
          20(8) W_COUNT.
  WRITE:  228(05) TEXT-006,
          234(010) SY-DATUM.
**実行日追加-スレッシュ-2005/02/15-end*
  DESCRIBE TABLE T_DATA LINES L_CNT.
*実行データ一覧表示
  LOOP AT T_DATA INTO W_DATA.
    IF W_DATA-ZSTATUS = CNS_ZSTATUS_OK.
      L_OKCODDE_CNT  = L_OKCODDE_CNT + 1.
    ELSEIF W_DATA-ZSTATUS = CNS_ZSTATUS_ER.
      L_ERCODE_CNT = L_ERCODE_CNT + 1.
    ENDIF.
  ENDLOOP.
  WRITE: /1(18) TEXT-007,
          20(8) L_OKCODDE_CNT.
  WRITE: /1(18) TEXT-008,
          20(8) L_ERCODE_CNT.
  ULINE /1(245).
  WRITE: /1 SY-VLINE,
          2(14) TEXT-009,
          16(1) SY-VLINE,
          17(10) TEXT-010,
          27(1) SY-VLINE,
          28(4) TEXT-011,
          32(1) SY-VLINE,
          33(4) TEXT-012,
          37(1) SY-VLINE,
          38(18) TEXT-013,
          56(1) SY-VLINE,
          57(7) TEXT-014,
          64(1) SY-VLINE,
          65(8) TEXT-015,
          73(1) SY-VLINE,
          74(12) TEXT-016,
          86(1) SY-VLINE,
          87(40) TEXT-017,
          127(1) SY-VLINE,
          128(15) TEXT-018,
          143(1) SY-VLINE,
          144(12) TEXT-019,
          156(1) SY-VLINE,
          157(10) TEXT-020,
          167(1) SY-VLINE,
          168(80) TEXT-021,
          248(1) SY-VLINE.
  ULINE /1(247).
  DATA: LW_FLAG TYPE CHAR1,
        LW_ZSTATUS TYPE CHAR1 VALUE '4'.
  LOOP AT T_DATA INTO W_DATA.
    AT NEW AUFNR_N .
      LW_FLAG = CNS_X.
    ENDAT.
    IF  LW_FLAG = CNS_X.
      PERFORM WRITE_OUTPUT_DATA.
    ELSE.
      IF   W_DATA-ZSTATUS =   LW_ZSTATUS .
        CLEAR:W_DATA-ZSTATUS,
              W_DATA-ERROR.
        PERFORM WRITE_OUTPUT_DATA.
      ELSE.
        PERFORM WRITE_OUTPUT_DATA.
      ENDIF.
    ENDIF.
  ENDLOOP.
*&---------------------------------------------------------------------*
*&      FORM  FRM_GET_DATA_ZTPP0271
*&---------------------------------------------------------------------*
*       ZTPP0271 指図ヘッダデータ取得
*----------------------------------------------------------------------*
FORM FRM_GET_DATA_ZTPP0371.
  SELECT *  INTO TABLE T_ZTPP0371 FROM ZTPP0371
                        WHERE AUFNR_N IN S_AUFNR   "指図番号
                          AND BUDAT   IN S_BUDAT   "伝票の転記日付
                          AND ZSTATUS IN S_STATUS. "処理ステータス
**-対象レコードの抽出-スレッシュ-2004/10/14-START*
  SORT T_ZTPP0371 BY AUFNR_N  "指図番号
                     BUDAT    "伝票の転記日付
                     SEQ      "カウンタ
              DESCENDING.
**削除フラグあれば対象外にする
  DELETE T_ZTPP0371 WHERE DELFLG = CNS_X.
  CLEAR W_ZTPP0371.
**内部テーブルにデータがない場合
  IF T_ZTPP0371 IS INITIAL.
    MESSAGE I143(ZREP01) WITH
            TEXT-022.
  ENDIF.
**-対象レコードの抽出-スレッシュ-2004/10/14-END*
ENDFORM.                               " FRM_GET_DATA_ZTPP0271
*&---------------------------------------------------------------------*
*&      FORM  FRM_DATA_FIX
*&---------------------------------------------------------------------*
*       総有効期間、転記日付の設定、T_DATAデータ移動
*----------------------------------------------------------------------*
FORM FRM_DATA_FIX.
  SORT T_ZTPP0371 BY AUFNR_N    "指図番号
                     BUDAT      "伝票の転記日付
                     SEQ        "カウンタ
                     ZSECNO     "連続番号
                     ZDELKB.    "取消区分
  IF T_ZTPP0371 IS NOT INITIAL.
*  GET DB FROM  T_ZTPP0372  FOR ALL ENTRIES T_ZTPP0371
    SELECT * INTO TABLE  T_ZTPP0372 FROM ZTPP0372
     FOR ALL ENTRIES IN T_ZTPP0371
                           WHERE AUFNR_N = T_ZTPP0371-AUFNR_N  "指図番号
                            AND  BUDAT   = T_ZTPP0371-BUDAT    "伝票の転記日付
                            AND  SEQ     = T_ZTPP0371-SEQ      "カウンタ
                            AND  ZSECNO  = T_ZTPP0371-ZSECNO   "連続番号
                            AND  ZDELKB  = T_ZTPP0371-ZDELKB.  "取消区分
    LOOP AT T_ZTPP0371 INTO W_ZTPP0371.
*  GET DB FROM  T_ZTPP0372
      DATA: ZZCHARG TYPE  ZTPP0003-ZZCHARG,
            ZZBWTAR TYPE  ZTPP0003-ZZBWTAR.
      CLEAR: ZZCHARG, ZZBWTAR.
      SELECT SINGLE ZZCHARG ZZBWTAR FROM ZTPP0003 INTO (ZZCHARG,ZZBWTAR)
      WHERE ZZBCAUART = W_ZTPP0371-AUART  "指図番号
                                           AND ZZBCAUART  < SY-DATUM         "DATE
                                           AND ZZDATBI    > SY-DATUM.        "DATE
      LOOP AT T_ZTPP0372  INTO W_ZTPP0372
                                          WHERE AUFNR_N = W_ZTPP0371-AUFNR_N  "指図番号
                                            AND BUDAT   = W_ZTPP0371-BUDAT    "伝票の転記日付
                                            AND SEQ     = W_ZTPP0371-SEQ      "カウンタ
                                            AND ZSECNO  = W_ZTPP0371-ZSECNO   "連続番号
                                            AND ZDELKB  = W_ZTPP0371-ZDELKB.  "取消区分
        W_DATA-AUFNR_N    = W_ZTPP0371-AUFNR_N.   "指図番号
        W_DATA-BUDAT      = W_ZTPP0371-BUDAT.     "伝票の転記日付
        W_DATA-SEQ        = W_ZTPP0371-SEQ.       "カウンタ
        W_DATA-ZDELKB     = W_ZTPP0371-ZDELKB.    "取消区分
        W_DATA-AUFNR_W    = W_ZTPP0371-AUFNR_W.   "指図番号
        W_DATA-ZSTATUS    = W_ZTPP0371-ZSTATUS.   "処理ステータス
        W_DATA-WERKS      = W_ZTPP0371-WERKS.     "プラント
        W_DATA-MATNR      = W_ZTPP0371-MATNR.     "品目コード
        W_DATA-MAKTX      = W_ZTPP0371-MAKTX.     "品目テキスト
        W_DATA-BMENGE     = W_ZTPP0371-BMENGE.    "基本数量
        W_DATA-BMEINS     = W_ZTPP0371-BMEINS.    "基本数量単位
        W_DATA-GSTRP      = W_ZTPP0371-GSTRP.     "基準開始日
        W_DATA-ERTXT      = W_ZTPP0371-ERTXT.     "エラーテキスト
        W_DATA-ZNETQTY1   = W_ZTPP0372-ZNETQTY1.  "ネット数量
        W_DATA-MEINS      = W_ZTPP0372-MEINS.     "基本数量単位
        W_DATA-MBLNR1     = W_ZTPP0372-MBLNR1.    "基本数量単位
        W_DATA-MJAHR1     = W_ZTPP0372-MJAHR1.    "入出庫伝票年
        W_DATA-ZSECNO     = W_ZTPP0371-ZSECNO.    "連続番号
        W_DATA-LGORT      = W_ZTPP0372-LGORT.     "保管場所
        W_DATA-BLOCK      = ZZCHARG.              "ロット
        W_DATA-ZZBWTAR    = ZZBWTAR.
        APPEND  W_DATA TO  T_DATA.
        CLEAR: W_DATA,W_ZTPP0372.
      ENDLOOP.
      CLEAR W_ZTPP0371.
    ENDLOOP.
  ENDIF.
ENDFORM.                               " FRM_DATA_FIX
*&---------------------------------------------------------------------*
*&      Form  F_OUTPUT_WRITE
*&---------------------------------------------------------------------*
*       OUTPUT_WRITE ERROR AND SUCCESS COUNT
*----------------------------------------------------------------------*
FORM F_BAPI_GOODSMOVEMENT .
  LOOP AT T_DATA INTO W_DATA.
    IF W_DATA-ZNETQTY1 <> CNS_0.
      IF W_DATA-ZDELKB = CNS_0.
**      製造指図登録
        PERFORM BDC_CO02_CHANGE_FLAG.
      ELSE.
*    CANCEL BAPI_GOODSMVT_CANCEL
        PERFORM CANCEL_GOODSMOVEMENT.
      ENDIF.
    ELSE.
      W_ZSTATUS  = CNS_5.
      PERFORM F_UPDATE_ZTPP0371 USING  W_DATA-AUFNR_N  "指図番号
                                       W_DATA-BUDAT    "伝票の転記日付
                                       W_DATA-SEQ      "カウンタ
                                       W_DATA-ZSECNO   "連続番号
                                       W_DATA-ZDELKB   "取消区分
                                CHANGING  W_ZSTATUS .  "処理ステータス
      W_ZSTATUS  = CNS_5.
      PERFORM F_UPDATE_ZTPP0372 USING  W_DATA-AUFNR_N  "指図番号
                                       W_DATA-BUDAT    "伝票の転記日付
                                       W_DATA-SEQ      "カウンタ
                                       W_DATA-ZSECNO   "連続番号
                                       W_DATA-ZDELKB   "取消区分
                             CHANGING  W_ZSTATUS .     "処理ステータス
    ENDIF.
  ENDLOOP.
  CLEAR   W_DATA.
ENDFORM.                    " F_BAPI_GOODSMOVEMENT
*&---------------------------------------------------------------------*
*&      Form  BDC_CO02_CHANGE_FLAG
*&---------------------------------------------------------------------*
*     Get DB from 指図明細
*----------------------------------------------------------------------*
FORM BDC_CO02_CHANGE_FLAG .
**指図明細
  CLEAR W_ELIKZ.
  SELECT SINGLE ELIKZ INTO W_ELIKZ FROM AFPO
                     WHERE AUFNR = W_DATA-AUFNR_N "指図番号
                     AND   POSNR = CNS_0001       "明細番号 (販売管理伝票)
                     AND   ELIKZ = SPACE.         "納入完了" 区分
  IF  SY-SUBRC <> 0.
*    RUN BDC C002
*    --- (変更 第一画面) ---*
    PERFORM BDC_DYNPRO USING 'SAPLCOKO1'    '0110'.
*         指図番号
    PERFORM BDC_FIELD  USING 'CAUFVD-AUFNR' W_DATA-AUFNR_N.  "指図番号
*         ボタン:エンタ
    PERFORM BDC_FIELD  USING 'BDC_OKCODE'   '/00'.
*    --- (指図変更 ヘッダ) ---*
    PERFORM BDC_DYNPRO USING 'SAPLCOKO1'    '0115'.
*         タグ:入庫
    PERFORM BDC_FIELD  USING 'BDC_OKCODE'   '=KOWE'.
*    --- (指図登録 ヘッダ(入庫タグ)) ---*
    PERFORM BDC_DYNPRO USING 'SAPLCOKO1'    '0115'.
*         納入完了区分
    PERFORM BDC_FIELD  USING 'AFPOD-ELIKZ'  ' '.
*         ボタン:保存
    PERFORM BDC_FIELD  USING 'BDC_OKCODE'   '=BU'.
*        トランザクションコール(CO02)
    CALL TRANSACTION 'CO02' USING T_BDCDATA
                            MODE   W_MODE
                            UPDATE W_UPDATE.
    IF SY-SUBRC = 0.
*  Post goods movements with MB_CREATE_GOODS_MOVEMENT
      PERFORM BAPI_GOODSMVT_CREATE.
    ENDIF.
  ELSE.
*  Post goods movements with MB_CREATE_GOODS_MOVEMENT
    PERFORM BAPI_GOODSMVT_CREATE.
  ENDIF.
  CLEAR:  T_BDCDATA.
  REFRESH T_BDCDATA.
ENDFORM.                    " BDC_CO02_CHANGE_FLAG
*&---------------------------------------------------------------------*
*&      Form  BAPI_GOODSMVT_CREATE
*&---------------------------------------------------------------------*
*     共通テーブル
*----------------------------------------------------------------------*
FORM BAPI_GOODSMVT_CREATE .
*共通テーブル
  DATA: W_ZZDATA1 TYPE ZNN0001-ZZDATA1,                     "文字項目長 = 10
        WL_DATSTR  TYPE CHAR10.                             " 日付入力用テキスト項目
** GET DB 共通テーブル
  SELECT SINGLE ZZDATA1 INTO W_ZZDATA1   FROM ZNN0001
                     WHERE ZZKEY1 = SY-REPID                "長さ 16 の項目
                     AND   ZZKEY2 = CNS_BWART               "移動タイプ (在庫管理)
                     AND   ZZKEY3 = CNS_1.                  "文字項目長 = 10
  WRITE: W_DATA-BUDAT TO WL_DATSTR. "伝票の転記日付
  W_HEADER-PSTNG_DATE = WL_DATSTR.  "伝票の転記日付
  W_HEADER-DOC_DATE   = WL_DATSTR.  "伝票の伝票日
*        GOODSMVT_HEADER
  W_CODE-GM_CODE    =  CNS_02. "BAPI 在庫移動トランザクションのコード割当
*** T_ITEM
  CONSTANTS: LCNS_0004 TYPE CHAR4 VALUE  '0004',  "移動理由
             LCNS_F      TYPE CHAR1 VALUE  'F'.   "移動区分
  W_ITEM-MOVE_TYPE  =  W_ZZDATA1.            "転送ロットの評価タイプ
  W_ITEM-MOVE_REAS  =  LCNS_0004.            "移動理由
  W_ITEM-MVT_IND    =  LCNS_F.               "移動区分
  W_ITEM-ORDERID    =  W_DATA-AUFNR_W.       "指図番号
  W_ITEM-STGE_LOC   =  W_DATA-LGORT.         "保管場所
  W_ITEM-BATCH      =  W_DATA-BLOCK.         "ロット番号
  W_ITEM-ENTRY_QNT  =  W_DATA-ZNETQTY1.      "入力単位での数量
  W_ITEM-ENTRY_UOM  =  W_DATA-MEINS.         "入力単位
  W_ITEM-VAL_TYPE   =  W_DATA-ZZBWTAR.       " 評価タイプ
  APPEND W_ITEM TO T_ITEM.
  CLEAR:W_ITEM.
*  Post goods movements with MB_CREATE_GOODS_MOVEMENT
  CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
        EXPORTING
          GOODSMVT_HEADER               = W_HEADER "入出庫伝票ヘッダデータ
          GOODSMVT_CODE                 = W_CODE   "在庫移動に対するコードのトランザクションへの割当
          TESTRUN                       = SPACE    "在庫移動シミュレーション
*           GOODSMVT_REF_EWM            =
       IMPORTING
*           GOODSMVT_HEADRET            =
         MATERIALDOCUMENT               = W_MBLNR    "出庫伝票番号
         MATDOCUMENTYEAR                = W_GJAHR
        TABLES
          GOODSMVT_ITEM                 = T_ITEM     "通信構造: 入出庫伝票明細登録
*           GOODSMVT_SERIALNUMBER       =
          RETURN                        =  T_RETURN  "リターンメッセージ
*           GOODSMVT_SERV_PART_DATA     =
*           EXTENSIONIN                 =
.
  READ TABLE T_RETURN INTO W_RETURN INDEX 1.
  IF  W_RETURN-TYPE = CNS_S.
*BAPI で外部 COMMIT 実行
    PERFORM BAPI_TRANSACTION_COMMIT.
    W_ZSTATUS = CNS_5.
    PERFORM F_UPDATE_ZTPP0371 USING  W_DATA-AUFNR_N  "指図番号
                                     W_DATA-BUDAT    "伝票の転記日付
                                     W_DATA-SEQ      "カウンタ
                                     W_DATA-ZSECNO   "カウンタ
                                     W_DATA-ZDELKB   "連続番号
                           CHANGING  W_ZSTATUS.      "処理ステータス
    W_ZSTATUS = CNS_5.
    UPDATE ZTPP0372 SET ZSTATUS = W_ZSTATUS                    "処理ステータス
                        MBLNR1  = W_MBLNR                      "入出庫伝票年
                        MJAHR1  = W_GJAHR                      "入出庫伝票年
                        ZEILE1  = CNS_0001                     "入出庫伝票の明細
                             WHERE  AUFNR_N  = W_DATA-AUFNR_N  "指図番号
                               AND  BUDAT    = W_DATA-BUDAT    "伝票の転記日付
                               AND  SEQ      = W_DATA-SEQ      "カウンタ
                               AND  ZSECNO   = W_DATA-ZSECNO   "カウンタ
                               AND  ZDELKB   = W_DATA-ZDELKB.  "連続番号
    COMMIT WORK.
    W_DATA-ZSTATUS = CNS_5.
    W_DATA-ERROR  =  W_RETURN-MESSAGE.                         "処理ステータス
    MODIFY T_DATA FROM W_DATA TRANSPORTING ZSTATUS ERROR .
    CLEAR T_RETURN.
  ELSE.
* ****BAPI ERROR LOG
    W_ZSTATUS  = CNS_4.
    PERFORM F_BAPIERROR_LOG_ZTPP0371
                          USING   W_DATA-AUFNR_N   "指図番号
                                  W_DATA-BUDAT     "伝票の転記日付
                                  W_DATA-SEQ       "カウンタ
                                  W_DATA-ZSECNO    "カウンタ
                                  W_DATA-ZDELKB    "連続番号
                                  W_RETURN-MESSAGE "メッセージ変数
                          CHANGING  W_ZSTATUS.     "処理ステータス
    W_ZSTATUS  = CNS_2.
    PERFORM F_BAPIERROR_LOG_ZTPP0372
                          USING   W_DATA-AUFNR_N   "指図番号
                                  W_DATA-BUDAT     "伝票の転記日付
                                  W_DATA-SEQ       "カウンタ
                                  W_DATA-ZSECNO    "カウンタ
                                  W_DATA-ZDELKB    "連続番号
                                  W_RETURN-MESSAGE "メッセージ変数
                           CHANGING  W_ZSTATUS.    "処理ステータス
    W_DATA-ZSTATUS = CNS_4.
    W_DATA-ERROR  =  W_RETURN-MESSAGE.             "処理ステータス
    MODIFY T_DATA FROM W_DATA TRANSPORTING ZSTATUS ERROR .
    CLEAR T_RETURN.
  ENDIF.
ENDFORM.                    " BAPI_GOODSMVT_CREATE
*  &---------------------------------------------------------------------*
*  &      Form  BDC_DYNPRO
*  &---------------------------------------------------------------------*
*         プログラム名&画面番号セット
*  ----------------------------------------------------------------------*
*        --> PROGRAM  プログラム名
*        --> DYNPRO   画面番号
*  ----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM    TYPE ANY            " プログラム名
                      DYNPRO     TYPE ANY.           " 画面番号
  CLEAR T_BDCDATA.
  T_BDCDATA-PROGRAM  = PROGRAM.                      "BDC モジュールプール
  T_BDCDATA-DYNPRO   = DYNPRO.                       "BDC Dynpro 番号
  T_BDCDATA-DYNBEGIN = CNS_X.                        "BDC Dynpro 開始
  APPEND T_BDCDATA.
ENDFORM.                               " BDC_DYNPRO
*  &---------------------------------------------------------------------*
*  &      Form  BDC_FIELD
*  &---------------------------------------------------------------------*
*         項目値セット
*  ----------------------------------------------------------------------*
*        --> FNAM  Dynpro 項目
*        --> FVAL  登録値
*  ----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM  TYPE ANY                  " Dynpro 項目
                     FVAL  TYPE ANY.                 " 登録値
  CLEAR T_BDCDATA.
  T_BDCDATA-FNAM = FNAM.                             "項目名
  T_BDCDATA-FVAL = FVAL.                             "BDC 項目値
  APPEND T_BDCDATA.
ENDFORM.                               " BDC_FIELD
*&---------------------------------------------------------------------*
*&      Form  CANCEL_GOODSMOVEMENT
*&---------------------------------------------------------------------*
*        CANCEL_GOODSMOVEMENT
*----------------------------------------------------------------------*
FORM CANCEL_GOODSMOVEMENT .
  DATA: LW_MBLNR   TYPE BAPI2017_GM_HEAD_02-MAT_DOC,    "入出庫伝票番号
        LW_MJAHR   TYPE BAPI2017_GM_HEAD_02-DOC_YEAR,   "入出庫伝票年
        LW_DATE    TYPE BAPI2017_GM_HEAD_02-PSTNG_DATE, "伝票の転記日付
*MMIM: 入出庫転記用の一般 FM 出力構造
        LW_EXPORT  TYPE BAPI2017_GM_HEAD_RET.
  LW_MBLNR      = W_DATA-MBLNR1.                        "入出庫伝票番号
  LW_MJAHR      = W_DATA-MJAHR1.                        "入出庫伝票年
  LW_DATE       = W_DATA-BUDAT.                         "伝票の転記日付
*Reverse Goods Movements with MB_CANCEL_GOODS_MOVEMENT
  CALL FUNCTION 'BAPI_GOODSMVT_CANCEL'
     EXPORTING
       MATERIALDOCUMENT          = LW_MBLNR             "入出庫伝票番号
       MATDOCUMENTYEAR           = LW_MJAHR             "入出庫伝票年
       GOODSMVT_PSTNG_DATE       = LW_DATE              "伝票の転記日付
*         GOODSMVT_PR_UNAME      =
     IMPORTING
       GOODSMVT_HEADRET          = LW_EXPORT           " 入出庫転記用の一般 FM 出力構造
     TABLES
       RETURN                    = T_RETURN            "リターンメッセージ
*         GOODSMVT_MATDOCITEM    =
             .
*  Read リターンメッセージ
  READ TABLE T_RETURN INTO W_RETURN INDEX 1.
  IF  W_RETURN-TYPE = CNS_S.
*BAPI で外部 COMMIT 実行
    PERFORM BAPI_TRANSACTION_COMMIT.
    W_ZSTATUS = CNS_5.
    PERFORM F_UPDATE_ZTPP0371 USING  W_DATA-AUFNR_N   "指図番号
                                     W_DATA-BUDAT     "伝票の転記日付
                                     W_DATA-SEQ       "カウンタ
                                     W_DATA-ZSECNO    "カウンタ
                                     W_DATA-ZDELKB    "連続番号
                           CHANGING  W_ZSTATUS.       "処理ステータス
    W_ZSTATUS = CNS_5.
    UPDATE ZTPP0372 SET ZSTATUS = W_ZSTATUS            "処理ステータス
                        MBLNR2  = LW_EXPORT-MAT_DOC    "入出庫伝票番号
                        MJAHR2  = LW_EXPORT-DOC_YEAR   "入出庫伝票年
                        ZEILE2  = CNS_0001
                             WHERE  AUFNR_N  = W_DATA-AUFNR_N  "指図番号
                               AND  BUDAT    = W_DATA-BUDAT    "伝票の転記日付
                               AND  SEQ      = W_DATA-SEQ      "カウンタ
                               AND  ZSECNO   = W_DATA-ZSECNO   "カウンタ
                               AND  ZDELKB   = W_DATA-ZDELKB.  "連続番号
    IF SY-SUBRC = 0.
      COMMIT WORK.
    ENDIF.
    W_DATA-ZSTATUS = CNS_5.
    W_DATA-ERROR  =  W_RETURN-MESSAGE. "メッセージ変数
    MODIFY T_DATA FROM W_DATA TRANSPORTING ZSTATUS ERROR .
  ELSE.
***   ERROR LOG
    W_ZSTATUS  = CNS_2.
    PERFORM F_BAPIERROR_LOG_ZTPP0371
                          USING   W_DATA-AUFNR_N               "指図番号
                                  W_DATA-BUDAT                 "伝票の転記日付
                                  W_DATA-SEQ                   "カウンタ
                                  W_DATA-ZSECNO                "カウンタ
                                  W_DATA-ZDELKB                "連続番号
                                  W_RETURN-MESSAGE             "メッセージ変数
                           CHANGING  W_ZSTATUS .               "処理ステータス
    W_ZSTATUS  = CNS_2.
    PERFORM F_BAPIERROR_LOG_ZTPP0372
                          USING   W_DATA-AUFNR_N              "指図番号
                                  W_DATA-BUDAT                "伝票の転記日付
                                  W_DATA-SEQ                  "カウンタ
                                  W_DATA-ZSECNO               "カウンタ
                                  W_DATA-ZDELKB               "処理ステータス
                                  W_RETURN-MESSAGE            "メッセージ変数
                           CHANGING  W_ZSTATUS .              "処理ステータス
    W_DATA-ZSTATUS = CNS_4.
    W_DATA-ERROR  =  W_RETURN-MESSAGE. "メッセージ変数
    MODIFY T_DATA FROM W_DATA TRANSPORTING ZSTATUS ERROR .
  ENDIF.
ENDFORM.                    " CANCEL_GOODSMOVEMENT
*&---------------------------------------------------------------------*
*&      Form  F_UPDATE_ZTPP0371
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_W_DATA_AUFNR_N        "指図番号
*      -->P_W_DATA_BUDAT          "伝票の転記日付
*      -->P_W_DATA_SEQ            "カウンタ
*      -->P_W_DATA_ZSECNO         "カウンタ
*      -->P_W_DATA_ZDELKB         "処理ステータス
*----------------------------------------------------------------------*
FORM F_UPDATE_ZTPP0371  USING    P_AUFNR_N TYPE ANY    "指図番号
                                 P_BUDAT   TYPE ANY    "伝票の転記日付
                                 P_SEQ     TYPE ANY    "カウンタ
                                 P_ZSECNO  TYPE ANY    "カウンタ
                                 P_ZDELKB  TYPE ANY    "処理ステータス
                        CHANGING P_ZSTATUS TYPE ANY.   "処理ステータス
  UPDATE ZTPP0371 SET ZSTATUS = P_ZSTATUS              "処理ステータス
               WHERE   AUFNR_N   = P_AUFNR_N           "指図番号
                 AND     BUDAT   = P_BUDAT             "伝票の転記日付
                 AND     SEQ     = P_SEQ               "カウンタ
                 AND     ZSECNO  = P_ZSECNO            "カウンタ
                 AND     ZDELKB  = P_ZDELKB.           "処理ステータス
  IF SY-SUBRC = 0.
    COMMIT WORK.
  ENDIF.
ENDFORM.                    " F_UPDATE_ZTPP0371
*&---------------------------------------------------------------------*
*&      Form  F_UPDATE_ZTPP0372
*----------------------------------------------------------------------*
*      -->P_W_DATA_AUFNR_N        "指図番号
*      -->P_W_DATA_BUDAT          "伝票の転記日付
*      -->P_W_DATA_SEQ            "カウンタ
*      -->P_W_DATA_ZSECNO         "カウンタ
*      -->P_W_DATA_ZDELKB         "処理ステータス
*----------------------------------------------------------------------*
FORM F_UPDATE_ZTPP0372     USING    P_AUFNR_N TYPE ANY   "指図番号
                                    P_BUDAT   TYPE ANY   "伝票の転記日付
                                    P_SEQ     TYPE ANY   "カウンタ
                                    P_ZSECNO  TYPE ANY   "カウンタ
                                    P_ZDELKB  TYPE ANY   "処理ステータス
                           CHANGING P_ZSTATUS TYPE ANY.  "処理ステータス
  UPDATE ZTPP0372 SET ZSTATUS = P_ZSTATUS                "処理ステータス
               WHERE     AUFNR_N = P_AUFNR_N             "指図番号
                 AND     BUDAT   = P_BUDAT               "伝票の転記日付
                 AND     SEQ     = P_SEQ                 "カウンタ
                 AND     ZSECNO  = P_ZSECNO              "カウンタ
                 AND     ZDELKB  = P_ZDELKB.             "処理ステータス
  IF SY-SUBRC = 0.
    COMMIT WORK.
  ENDIF.
ENDFORM.                    " F_UPDATE_ZTPP0372
*&---------------------------------------------------------------------*
*&      Form  F_BAPIERROR_LOG_ZTPP0371
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_W_DATA_AUFNR_N         "指図番号
*      -->P_W_DATA_BUDAT           "伝票の転記日付
*      -->P_W_DATA_SEQ             "カウンタ
*      -->P_W_DATA_ZSECNO          "カウンタ
*      -->P_W_DATA_ZDELKB          "処理ステータス
*      -->P_W_RETURN_MESSAGE       "メッセージ変数
*      <--P_W_ZSTATUS              "処理ステータス
*----------------------------------------------------------------------*
FORM F_BAPIERROR_LOG_ZTPP0371  USING    P_AUFNR_N TYPE ANY  "指図番号
                                        P_BUDAT   TYPE ANY  "伝票の転記日付
                                        P_SEQ     TYPE ANY  "カウンタ
                                        P_ZSECNO  TYPE ANY  "カウンタ
                                        P_ZDELKB  TYPE ANY   "処理ステータス
                                        P_MESSAGE TYPE ANY   "メッセージ変数
                               CHANGING P_ZSTATUS TYPE ANY.  "処理ステータス
  UPDATE ZTPP0371 SET ZSTATUS =  P_ZSTATUS                   "処理ステータス
                      ERTXT   =  P_MESSAGE                   "メッセージ変数
            WHERE   AUFNR_N   =  P_AUFNR_N                    "指図番号
              AND     BUDAT   =  P_BUDAT                      "伝票の転記日付
              AND     SEQ     =  P_SEQ                        "カウンタ
              AND     ZSECNO  =  P_ZSECNO                     "処理ステータス
              AND     ZDELKB  =  P_ZDELKB.                    "処理ステータス
  IF SY-SUBRC = 0.
    COMMIT WORK.
  ENDIF.
ENDFORM.                    " F_BAPIERROR_LOG_ZTPP0371
*&---------------------------------------------------------------------*
*&      Form  F_BAPIERROR_LOG_ZTPP0372
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_W_DATA_AUFNR_N  text   "指図番号
*      -->P_W_DATA_BUDAT  text     "伝票の転記日付
*      -->P_W_DATA_SEQ  text       "カウンタ
*      -->P_W_DATA_ZSECNO  text    "カウンタ
*      -->P_W_DATA_ZDELKB  text    "処理ステータス
*      -->P_W_RETURN_MESSAGE  text "メッセージ変数
*      <--P_W_ZSTATUS  text        "処理ステータス
*----------------------------------------------------------------------*
FORM F_BAPIERROR_LOG_ZTPP0372  USING    P_AUFNR_N TYPE ANY    "指図番号
                                        P_BUDAT   TYPE ANY    "伝票の転記日付
                                        P_SEQ     TYPE ANY    "カウンタ
                                        P_ZSECNO  TYPE ANY    "カウンタ
                                        P_ZDELKB  TYPE ANY    "処理ステータス
                                        P_MESSAGE TYPE ANY    "メッセージ変数
                               CHANGING P_ZSTATUS TYPE ANY.   "処理ステータ
  UPDATE ZTPP0372 SET ZSTATUS =  P_ZSTATUS                    "処理ステータ
                      ERTXT   =  P_MESSAGE                    "メッセージ変数
                 WHERE   AUFNR_N   = P_AUFNR_N                "指図番号
                   AND     BUDAT   = P_BUDAT                  "伝票の転記日付
                   AND     SEQ     = P_SEQ                    "カウンタ
                   AND     ZSECNO  = P_ZSECNO                 "カウンタ
                   AND     ZDELKB  = P_ZDELKB.                "処理ステータス
  IF SY-SUBRC = 0.
    COMMIT WORK.
  ENDIF.
ENDFORM.                    " F_BAPIERROR_LOG_ZTPP0372
*&---------------------------------------------------------------------*
*&      Form  WRITE_OUTPUT_DATA
*&---------------------------------------------------------------------*
*       WRITE_OUTPUT_DATA
*----------------------------------------------------------------------*
FORM WRITE_OUTPUT_DATA .
  WRITE: /1 SY-VLINE,
          2(14) W_DATA-AUFNR_N,   "指図番号(CCNBC)
          16(1) SY-VLINE,
          17(10) W_DATA-BUDAT,    "製造日付(CCWJ)
          27(1) SY-VLINE,
          28(4) W_DATA-AUFNR_W,   "指図番号(CCWJ)
          32(1) SY-VLINE,
          33(4) W_DATA-ZSECNO,    "カウンタ
          37(1) SY-VLINE,
          38(18) W_DATA-AUFNR_W,  "指図番号
          56(1) SY-VLINE,
          57(7) W_DATA-ZSTATUS,   "処理STS
          64(1) SY-VLINE,
          65(8) W_DATA-WERKS,     "プラント
          73(1) SY-VLINE,
          74(12) W_DATA-MATNR,    "品目コード
          86(1) SY-VLINE,
          87(40) W_DATA-MAKTX,    "品目テキスト
          127(1) SY-VLINE,
          128(15) W_DATA-BMENGE UNIT W_DATA-BMEINS,  "基本数量
          143(1) SY-VLINE,
          144(12) W_DATA-BMEINS,  "基本数量単位
          156(1) SY-VLINE,
          157(10) W_DATA-GSTRP,  "指図開始日
          167(1) SY-VLINE,
          168(80) W_DATA-ERROR,  "ERROR RECORD
          248(1) SY-VLINE.
  ULINE /1(247).
  CLEAR LW_FLAG.
ENDFORM.                    " WRITE_OUTPUT_DATA
*&---------------------------------------------------------------------*
*&      Form  BAPI_TRANSACTION_COMMIT
*&---------------------------------------------------------------------*
*       TRANSACTION_COMMIT
*----------------------------------------------------------------------*
FORM BAPI_TRANSACTION_COMMIT .
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
       EXPORTING
         WAIT          = CNS_X
*          IMPORTING
*            RETURN        =
            .
ENDFORM.                    " BAPI_TRANSACTION_COMMIT

 

posted @ 2019-05-07 11:19  Park_SAP  阅读(741)  评论(0编辑  收藏  举报