FUNCTION Y_GL_M_GOODS_ISSUE_AND_CANCEL.
*"----------------------------------------------------------------------
*"*"ローカルインタフェース:
*" IMPORTING
*" VALUE(IS_ISSUE_CONF) TYPE YSGL2024
*" EXPORTING
*" VALUE(RETURN) TYPE BAPIRET2
*"----------------------------------------------------------------------
*-----------------------------------------------------------------------
* DATA
*-----------------------------------------------------------------------
* 変数
DATA:
L_H_TBL_LIPS TYPE TYP_LIPS,
L_MSG(17) TYPE C,
L_NUM(03) TYPE C,
*-> 出庫汎用モジュールWS_DELIVERY_UPDATE_2使用変数
L_H_TBL_VBKOK TYPE VBKOK,
L_H_TBL_VBPOK TYPE VBPOK,
L_TBL_VBPOK TYPE TYP_TBL_VBPOK,
L_ERFLG TYPE XFELD,
L_TBL_PROT TYPE TYP_TBL_PROT,
*-> 出庫取消汎用モジュールWS_REVERSE_GOODS_ISSUE使用変数
L_ERFLG2 TYPE EMKPF,
L_TBL_MESG TYPE TYP_TBL_MESG,
*-> BAPI_TRANSACTION_COMMIT使用変数
L_H_TBL_RETURN TYPE BAPIRET2.
*----------------------------------------------------------------------*
* インポートパラメータチェック
*----------------------------------------------------------------------*
*->出庫日付の設定
IF IS_ISSUE_CONF-WADAT IS INITIAL.
MOVE SY-DATUM TO IS_ISSUE_CONF-WADAT.
ENDIF.
*->処理区分のチェック
IF IS_ISSUE_CONF-DBEKZ <> CNS_DBEKZ_1 AND
IS_ISSUE_CONF-DBEKZ <> CNS_DBEKZ_2.
PERFORM RETURN_MSG USING 'E' 'DMC_RT_MSG' '010' 'DBEKZ' IS_ISSUE_CONF-DBEKZ '' '' RETURN.
RETURN.
ENDIF.
*->出荷伝票番号の入力
IF IS_ISSUE_CONF-VBELN IS INITIAL.
PERFORM RETURN_MSG USING 'E' 'CLAIM' '205' '' '' '' '' RETURN.
RETURN.
ENDIF.
*->出荷明細番号の入力
IF IS_ISSUE_CONF-POSNR IS INITIAL.
PERFORM RETURN_MSG USING 'E' 'VK' '002' '' '' '' '' RETURN.
RETURN.
ENDIF.
*->品目コードの入力
IF IS_ISSUE_CONF-MATNR IS INITIAL.
PERFORM RETURN_MSG USING 'E' 'VZ' '007' '' '' '' '' RETURN.
RETURN.
ENDIF.
*->プラントの入力
IF IS_ISSUE_CONF-WERKS IS INITIAL.
PERFORM RETURN_MSG USING 'E' 'VELO' '453' '' '' '' '' RETURN.
RETURN.
ENDIF.
*->数量の入力
IF IS_ISSUE_CONF-LFIMG IS INITIAL.
PERFORM RETURN_MSG USING 'E' '06' '070' '' '' '' '' RETURN.
RETURN.
ENDIF.
*----------------------------------------------------------------------*
* 出庫確認・取消処理 開始
*----------------------------------------------------------------------*
CLEAR:L_H_TBL_LIPS.
*->出荷伝票検索
SELECT A~MATNR
A~LFIMG
A~WERKS
A~VRKME
A~VGBEL
B~WBSTA
INTO L_H_TBL_LIPS
FROM LIPS AS A
INNER JOIN VBUP AS B
ON A~VBELN = B~VBELN AND
A~POSNR = B~POSNR
UP TO 1 ROWS
WHERE A~VBELN = IS_ISSUE_CONF-VBELN AND
A~POSNR = IS_ISSUE_CONF-POSNR.
ENDSELECT.
IF SY-SUBRC <> 0.
CONCATENATE IS_ISSUE_CONF-VBELN '-' IS_ISSUE_CONF-POSNR INTO L_MSG.
PERFORM RETURN_MSG USING 'E' 'L3' '123'
L_MSG '' '' '' RETURN.
RETURN.
ENDIF.
IF IS_ISSUE_CONF-WERKS <> L_H_TBL_LIPS-WERKS.
PERFORM RETURN_MSG USING 'E' 'YGL01' '017'
IS_ISSUE_CONF-WERKS L_H_TBL_LIPS-WERKS '' '' RETURN.
RETURN.
ENDIF.
IF IS_ISSUE_CONF-MATNR <> L_H_TBL_LIPS-MATNR.
CONCATENATE IS_ISSUE_CONF-VBELN '-' IS_ISSUE_CONF-POSNR INTO L_MSG.
PERFORM RETURN_MSG USING 'E' 'IS' '147'
IS_ISSUE_CONF-MATNR L_MSG '' '' RETURN.
RETURN.
ENDIF.
IF IS_ISSUE_CONF-VRKME IS INITIAL.
MOVE L_H_TBL_LIPS-VRKME TO IS_ISSUE_CONF-VRKME.
ELSE.
IF IS_ISSUE_CONF-VRKME <> L_H_TBL_LIPS-VRKME.
PERFORM RETURN_MSG USING 'E' 'IPPECIF' '180' '' '' '' '' RETURN.
RETURN.
ENDIF.
ENDIF.
*- VBAK ロック
DO CNS_RETRY TIMES.
CALL FUNCTION 'ENQUEUE_EVVBAKE'
EXPORTING
MODE_VBAK = 'E'
MANDT = SY-MANDT
VBELN = L_H_TBL_LIPS-VGBEL
_SCOPE = '1'
* _WAIT = 'X'
EXCEPTIONS:
FOREIGN_LOCK = 1
SYSTEM_FAILURE = 2.
IF SY-SUBRC <> 0.
IF SY-INDEX = CNS_RETRY.
PERFORM RETURN_MSG USING 'E' '5B' '051' 'VBAK' '' '' '' RETURN.
RETURN.
ELSE.
WAIT UP TO 1 SECONDS.
ENDIF.
ELSE.
EXIT.
ENDIF.
ENDDO.
*- LIKP ロック
DO CNS_RETRY TIMES.
CALL FUNCTION 'ENQUEUE_EVVBLKE'
EXPORTING
MODE_LIKP = 'E'
MANDT = SY-MANDT
VBELN = IS_ISSUE_CONF-VBELN
_SCOPE = '1'
* _WAIT = 'X'
EXCEPTIONS:
FOREIGN_LOCK = 1
SYSTEM_FAILURE = 2.
IF SY-SUBRC <> 0.
IF SY-INDEX = CNS_RETRY.
PERFORM RETURN_MSG USING 'E' '5B' '051' 'LIKP' '' '' '' RETURN.
PERFORM F_DEQUEUE_VBAK USING L_H_TBL_LIPS-VGBEL.
RETURN.
ELSE.
WAIT UP TO 1 SECONDS.
ENDIF.
ELSE.
EXIT.
ENDIF.
ENDDO.
*-> 出庫確認・取消処理
CASE IS_ISSUE_CONF-DBEKZ.
WHEN CNS_DBEKZ_1. "出庫確認
IF L_H_TBL_LIPS-WBSTA = 'C'.
PERFORM RETURN_MSG USING 'E' 'VL' '602' '' '' '' '' RETURN.
PERFORM F_DEQUEUE_VBAK USING L_H_TBL_LIPS-VGBEL.
PERFORM F_DEQUEUE_LIKP USING IS_ISSUE_CONF-VBELN.
RETURN.
ENDIF.
IF IS_ISSUE_CONF-LFIMG > L_H_TBL_LIPS-LFIMG.
PERFORM RETURN_MSG USING 'E' 'VLA' '201' '' '' '' '' RETURN.
PERFORM F_DEQUEUE_VBAK USING L_H_TBL_LIPS-VGBEL.
PERFORM F_DEQUEUE_LIKP USING IS_ISSUE_CONF-VBELN.
RETURN.
ELSEIF IS_ISSUE_CONF-LFIMG < L_H_TBL_LIPS-LFIMG.
PERFORM RETURN_MSG USING 'E' 'VL' '019' '' '' '' '' RETURN.
PERFORM F_DEQUEUE_VBAK USING L_H_TBL_LIPS-VGBEL.
PERFORM F_DEQUEUE_LIKP USING IS_ISSUE_CONF-VBELN.
RETURN.
ENDIF.
CLEAR L_H_TBL_VBKOK.
MOVE IS_ISSUE_CONF-VBELN TO L_H_TBL_VBKOK-VBELN_VL.
MOVE 'X' TO L_H_TBL_VBKOK-WABUC.
MOVE IS_ISSUE_CONF-WADAT TO L_H_TBL_VBKOK-WADAT_IST.
CLEAR: L_H_TBL_VBPOK,
L_TBL_VBPOK.
MOVE IS_ISSUE_CONF-VBELN TO L_H_TBL_VBPOK-VBELN_VL.
MOVE IS_ISSUE_CONF-POSNR TO L_H_TBL_VBPOK-POSNR_VL.
MOVE 'X' TO L_H_TBL_VBPOK-LIANP.
MOVE IS_ISSUE_CONF-LFIMG TO L_H_TBL_VBPOK-LFIMG.
MOVE '1' TO L_H_TBL_VBPOK-UMVKZ.
MOVE '1' TO L_H_TBL_VBPOK-UMVKN.
MOVE IS_ISSUE_CONF-VRKME TO L_H_TBL_VBPOK-VRKME.
APPEND L_H_TBL_VBPOK TO L_TBL_VBPOK.
CALL FUNCTION 'WS_DELIVERY_UPDATE_2'
EXPORTING
VBKOK_WA = L_H_TBL_VBKOK
SYNCHRON = 'X'
COMMIT = ' '
DELIVERY = IS_ISSUE_CONF-VBELN
NICHT_SPERREN_1 = 'X'
IF_DATABASE_UPDATE_1 = '1'
IF_ERROR_MESSAGES_SEND = ' '
IMPORTING
EF_ERROR_ANY = L_ERFLG
TABLES
VBPOK_TAB = L_TBL_VBPOK
PROT = L_TBL_PROT.
IF L_ERFLG = 'X'.
MOVE SY-MSGNO TO L_NUM.
PERFORM RETURN_MSG
USING 'E'
SY-MSGID L_NUM
SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
RETURN.
PERFORM FN_ROLLBACK.
PERFORM F_DEQUEUE_VBAK USING L_H_TBL_LIPS-VGBEL.
PERFORM F_DEQUEUE_LIKP USING IS_ISSUE_CONF-VBELN.
RETURN.
ENDIF.
WHEN CNS_DBEKZ_2. "出庫確認取消
IF L_H_TBL_LIPS-WBSTA <> 'C'.
CONCATENATE IS_ISSUE_CONF-VBELN '-' IS_ISSUE_CONF-POSNR INTO L_MSG.
PERFORM RETURN_MSG USING 'E' 'VL' '623' L_MSG '' '' '' RETURN.
PERFORM F_DEQUEUE_VBAK USING L_H_TBL_LIPS-VGBEL.
PERFORM F_DEQUEUE_LIKP USING IS_ISSUE_CONF-VBELN.
RETURN.
ENDIF.
IF IS_ISSUE_CONF-LFIMG <> L_H_TBL_LIPS-LFIMG.
PERFORM RETURN_MSG USING 'E' 'YGL01' '015' '' '' '' '' RETURN.
PERFORM F_DEQUEUE_VBAK USING L_H_TBL_LIPS-VGBEL.
PERFORM F_DEQUEUE_LIKP USING IS_ISSUE_CONF-VBELN.
RETURN.
ENDIF.
CALL FUNCTION 'WS_REVERSE_GOODS_ISSUE'
EXPORTING
I_VBELN = IS_ISSUE_CONF-VBELN
I_BUDAT = IS_ISSUE_CONF-WADAT
I_TCODE = 'VL09'
I_VBTYP = 'J'
IMPORTING
ES_EMKPF = L_ERFLG2
TABLES
T_MESG = L_TBL_MESG
EXCEPTIONS
ERROR_REVERSE_GOODS_ISSUE = 1
ERROR_MESSAGE = 2
OTHERS = 9.
IF SY-SUBRC <> 0.
MOVE SY-MSGNO TO L_NUM.
PERFORM RETURN_MSG USING
SY-MSGTY SY-MSGID L_NUM
SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4 RETURN.
PERFORM FN_ROLLBACK.
PERFORM F_DEQUEUE_VBAK USING L_H_TBL_LIPS-VGBEL.
PERFORM F_DEQUEUE_LIKP USING IS_ISSUE_CONF-VBELN.
RETURN.
ENDIF.
ENDCASE.
*-> COMMIT.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'
IMPORTING
RETURN = L_H_TBL_RETURN.
IF L_H_TBL_RETURN-TYPE = 'E'.
MOVE L_H_TBL_RETURN-NUMBER TO L_NUM.
PERFORM RETURN_MSG USING
L_H_TBL_RETURN-TYPE L_H_TBL_RETURN-ID L_NUM
L_H_TBL_RETURN-MESSAGE_V1 L_H_TBL_RETURN-MESSAGE_V2
L_H_TBL_RETURN-MESSAGE_V3 L_H_TBL_RETURN-MESSAGE_V4
RETURN.
PERFORM FN_ROLLBACK.
PERFORM F_DEQUEUE_VBAK USING L_H_TBL_LIPS-VGBEL.
PERFORM F_DEQUEUE_LIKP USING IS_ISSUE_CONF-VBELN.
RETURN.
ENDIF.
*-> テーブルアンロック
PERFORM F_DEQUEUE_VBAK USING L_H_TBL_LIPS-VGBEL.
PERFORM F_DEQUEUE_LIKP USING IS_ISSUE_CONF-VBELN.
*-> 終了メッセージ
PERFORM RETURN_MSG USING 'S' 'KD' '207' '' '' '' '' RETURN.
ENDFUNCTION.
*&---------------------------------------------------------------------*
*& Form FN_ROLLBACK
*&---------------------------------------------------------------------*
* ロールバック
*----------------------------------------------------------------------*
FORM FN_ROLLBACK.
*----------------------------------------------------------------------*
DATA FU_RETURN TYPE BAPIRET2. "処理結果テーブル
*----------------------------------------------------------------------*
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
IMPORTING
RETURN = FU_RETURN.
ENDFORM. "FN_ROLLBACK
*&---------------------------------------------------------------------*
*& Form RETURN_MSG
*&---------------------------------------------------------------------*
* メッセージ編集
*----------------------------------------------------------------------*
FORM RETURN_MSG USING
FU_TYPE TYPE BAPIRETURN-TYPE "メッセージタイプ
FU_CL TYPE SY-MSGID "メッセージID
FU_NUMBER TYPE C "メッセージ番号
FU_PAR1 TYPE C "TEXT
FU_PAR2 TYPE C "TEXT
FU_PAR3 TYPE C "TEXT
FU_PAR4 TYPE C "TEXT
FU_RESULT TYPE BAPIRET2. "処理結果
*----------------------------------------------------------------------*
DATA:L_MSGV1 TYPE SY-MSGV1,
L_MSGV2 TYPE SY-MSGV2,
L_MSGV3 TYPE SY-MSGV3,
L_MSGV4 TYPE SY-MSGV4,
L_NUMBER TYPE SY-MSGNO.
*----------------------------------------------------------------------*
MOVE:FU_PAR1 TO L_MSGV1,
FU_PAR2 TO L_MSGV2,
FU_PAR3 TO L_MSGV3,
FU_PAR4 TO L_MSGV4,
FU_NUMBER TO L_NUMBER.
CALL FUNCTION 'BALW_BAPIRETURN_GET2'
EXPORTING
TYPE = FU_TYPE
CL = FU_CL
NUMBER = L_NUMBER
PAR1 = L_MSGV1
PAR2 = L_MSGV2
PAR3 = L_MSGV3
PAR4 = L_MSGV4
IMPORTING
RETURN = FU_RESULT.
ENDFORM. "RETURN_MSG
*&---------------------------------------------------------------------*
*& Form F_DEQUEUE_VBAK
*&---------------------------------------------------------------------*
* VBAK アンロック
*----------------------------------------------------------------------*
FORM F_DEQUEUE_VBAK USING FU_VBELN TYPE VBELN_VA.
CALL FUNCTION 'DEQUEUE_EVVBAKE'
EXPORTING
MODE_VBAK = 'E'
MANDT = SY-MANDT
VBELN = FU_VBELN
_SCOPE = '1'.
ENDFORM. "F_DEQUEUE_VBAK
*&---------------------------------------------------------------------*
*& Form F_DEQUEUE_LIKP
*&---------------------------------------------------------------------*
* LIKP アンロック
*----------------------------------------------------------------------*
FORM F_DEQUEUE_LIKP USING FU_VBELN TYPE VBELN_VL.
CALL FUNCTION 'DEQUEUE_EVVBLKE'
EXPORTING
MODE_LIKP = 'E'
MANDT = SY-MANDT
VBELN = FU_VBELN
_SCOPE = '1'.
ENDFORM. "F_DEQUEUE_LIKP
2019年9月4日星期三
2019年8月13日星期二
WBS NETWORK ACTIVITY
FORM F_INS_WBS USING" AI_W_SALESORDER TYPE ZDWGG02
AI_V_PSPID TYPE PROJ-PSPID
AI_W_WBSELEMENT_LV2 TYPE PRPS-POSID
AI_W_WBSELEMENT_LV3 TYPE PRPS-POSID
AI_W_WBSELEMENT2 TYPE BAPI_BUS2054_DETAIL
AI_W_WBSELEMENT3 TYPE BAPI_BUS2054_DETAIL
AI_W_NETWORK TYPE BAPI_NETWORK_EXP
AI_W_ACTIVITY TYPE BAPI_NETWORK_ACTIVITY_EXP
CHANGING AO_V_NETWORK TYPE BAPI_NETWORK_EXP-NETWORK
AO_V_ACTIVITY_NO TYPE BAPI_NETWORK_ACTIVITY_EXP-ACTIVITY
AO_T_RETURN TYPE BAPIRET2_T
AO_V_ERRFLG TYPE CHAR01.
DATA:
LT_WBS TYPE STANDARD TABLE OF BAPI_BUS2054_NEW,
LS_WBS TYPE BAPI_BUS2054_NEW,
LT_EXT_IN TYPE STANDARD TABLE OF BAPIPAREX,
LS_EXT_IN TYPE BAPIPAREX,
LS_WBS_EXT TYPE BAPI_TE_WBS_ELEMENT,
LT_EXT_OUT TYPE STANDARD TABLE OF BAPIPAREX,
LT_RETURN TYPE STANDARD TABLE OF BAPIRET2,
LS_RETURN_STATUS TYPE BAPIRETURN1,
LS_STATUS TYPE BAPI_WBS_MNT_SYSTEM_STATUS,
LT_STATUS TYPE STANDARD TABLE OF BAPI_WBS_MNT_SYSTEM_STATUS,
LS_NETWORK_STATUS TYPE BAPI_SYSTEM_STATUS-SYSTEM_STATUS,
LS_NETWORK TYPE BAPI_BUS2002_NEW,
LV_NETWORK TYPE BAPI_NETWORK_LIST-NETWORK,
LS_ACTIVITY TYPE BAPI_BUS2002_ACT_NEW,
LT_ACTIVITY TYPE STANDARD TABLE OF BAPI_BUS2002_ACT_NEW,
LS_NETWORK_INFO TYPE BAPI_NETWORK_EXP,
LS_ACTIVITY_INFO TYPE BAPI_NETWORK_ACTIVITY_EXP,
LV_MRP_ERR TYPE CHAR01.
* LW_WBSNETWORK_DATE TYPE TYP_WBS_NETWORK_DATE.
CLEAR:
LT_WBS,
LS_WBS,
LT_EXT_IN,
LS_EXT_IN,
LT_EXT_OUT,
LS_NETWORK,
LV_NETWORK,
LS_ACTIVITY,
LT_ACTIVITY,
LS_WBS_EXT,
LS_NETWORK_INFO,
LS_ACTIVITY_INFO.
IF AI_W_WBSELEMENT2 IS INITIAL.
LS_WBS-WBS_ELEMENT = AI_W_WBSELEMENT_LV2.
LS_WBS-DESCRIPTION = 'XXXX'. "AI_W_SALESWORDER-ZWORKTXT.
CLEAR LS_WBS-WBS_PLANNING_ELEMENT.
LS_WBS-WBS_ACCOUNT_ASSIGNMENT_ELEMENT = 'X'.
CLEAR LS_WBS-WBS_BILLING_ELEMENT.
LS_WBS-COMPANY_CODE = '1000'. "AI_W_SALESWORDER-BUKRS.
LS_WBS-PLANT = '1000'. "AI_W_SALESWORDER-WERKS.
* 利益センタ
LS_WBS-PROFIT_CTR = '1000'."AI_W_SALESWORDER-PRCTR.
* WBS要素:基本開始日付 (受注伝票日付)
LS_WBS-WBS_BASIC_START_DATE = '20190801'. "AI_W_SALESWORDER-AUDAT.
* WBS要素:基本終了日付 (納入日)
LS_WBS-WBS_BASIC_FINISH_DATE = '20190830'. "AI_W_SALESWORDER-EDATU.
LS_WBS-WBS_UP = AI_V_PSPID.
APPEND LS_WBS TO LT_WBS.
LS_EXT_IN-STRUCTURE = 'BAPI_TE_WBS_ELEMENT'.
LS_WBS_EXT-WBS_ELEMENT = AI_W_WBSELEMENT2.
* 見積管理No
* LS_WBS_EXT-ZZXXXX = AI_W_SALESWORDER-ZESTNO.
LS_EXT_IN-VALUEPART1 = LS_WBS_EXT.
APPEND LS_EXT_IN TO LT_EXT_IN.
ENDIF.
IF AI_W_WBSELEMENT3 IS INITIAL.
LS_WBS-WBS_ELEMENT = AI_W_WBSELEMENT_LV3.
* WBS名称 受注明細のテキスト
LS_WBS-DESCRIPTION = 'XXXX'. "AI_W_SALESWORDER-ZWORKTXT.
* 区分:計画要素
LS_WBS-WBS_PLANNING_ELEMENT = 'X'.
* 区分:勘定設定要素
LS_WBS-WBS_ACCOUNT_ASSIGNMENT_ELEMENT = 'X'.
* 区分:請求要素
LS_WBS-WBS_BILLING_ELEMENT = 'X'.
LS_WBS-COMPANY_CODE = '1000'. "AI_W_SALESWORDER-BUKRS.
LS_WBS-PLANT = '1000'. "AI_W_SALESWORDER-WERKS.
* 利益センタ
LS_WBS-PROFIT_CTR = '1000'."AI_W_SALESWORDER-PRCTR.
* WBS要素:基本開始日付 (受注伝票日付)
LS_WBS-WBS_BASIC_START_DATE = '20190801'. "AI_W_SALESWORDER-AUDAT.
* WBS要素:基本終了日付 (納入日)
LS_WBS-WBS_BASIC_FINISH_DATE = '20190830'. "AI_W_SALESWORDER-EDATU.
APPEND LS_WBS TO LT_WBS.
ENDIF.
IF LT_WBS IS NOT INITIAL.
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
* Level2 Level3のWBS登録
CALL FUNCTION 'BAPI_BUS2054_CREATE_MULTI'
EXPORTING
I_PROJECT_DEFINITION = AI_V_PSPID
TABLES
IT_WBS_ELEMENT = LT_WBS
ET_RETURN = LT_RETURN
EXTENSIONIN = LT_EXT_IN
EXTENSIONOUT = LT_EXT_OUT.
PERFORM F_ERROR_UNLOCK
USING
LT_RETURN
'X'
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
IF AO_V_ERRFLG IS NOT INITIAL.
RETURN.
ENDIF.
CLEAR:
LS_STATUS,
LT_STATUS,
LS_RETURN_STATUS.
LS_STATUS-WBS_ELEMENT = AI_W_WBSELEMENT_LV2.
LS_STATUS-SET_SYSTEM_STATUS = 'REL'.
APPEND LS_STATUS TO LT_STATUS.
CALL FUNCTION 'BAPI_BUS2054_SET_STATUS'
IMPORTING
RETURN = LS_RETURN_STATUS
TABLES
I_WBS_SYSTEM_STATUS = LT_STATUS.
PERFORM F_ERROR_UNLOCK
USING
LT_RETURN
'X'
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
IF AO_V_ERRFLG IS NOT INITIAL.
RETURN.
ENDIF.
CALL FUNCTION 'BAPI_PS_PRECOMMIT'
TABLES
ET_RETURN = LT_RETURN.
PERFORM F_ERROR_UNLOCK
USING
LT_RETURN
'X'
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
IF AO_V_ERRFLG IS NOT INITIAL.
RETURN.
ENDIF.
PERFORM F_UPDATE_GUID.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ENDIF.
IF AI_W_NETWORK IS INITIAL.
LS_NETWORK-WBS_ELEMENT = AI_W_WBSELEMENT_LV2.
LS_NETWORK-PROJECT_DEFINITION = AI_V_PSPID.
LS_NETWORK-SHORT_TEXT = 'AAAA'. "AI_W_SALESORDER-ZWORKTXT.
* MRP CONTROLLERは受注伝票のPSTYVよりADDONテーブルより取得
LS_NETWORK-MRP_CONTROLLER = 'ZZZ'.
* 開始日
LS_NETWORK-START_DATE = '20190801'. "AI_W_SALESORDER-AUDAT.
* 終了日(工場出荷予定日)
LS_NETWORK-FINISH_DATE = '20190830'. "AI_W_SALESORDER-MBDAT.
* プラント
LS_NETWORK-PLANT = '1000'. "AI_W_SALESORDER-WERKS
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
CALL FUNCTION 'BAPI_BUS2002_CREATE'
EXPORTING
I_NETWORK = LS_NETWORK
TABLES
ET_RETURN = LT_RETURN.
PERFORM F_ERROR_UNLOCK
USING
LT_RETURN
'X'
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
IF AO_V_ERRFLG IS NOT INITIAL.
RETURN.
ENDIF.
CALL FUNCTION 'BAPI_PS_PRECOMMIT'
TABLES
ET_RETURN = LT_RETURN.
PERFORM F_ERROR_UNLOCK
USING
LT_RETURN
'X'
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
IF AO_V_ERRFLG IS NOT INITIAL.
RETURN.
ENDIF.
PERFORM F_UPDATE_GUID.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ENDIF.
IF AI_W_NETWORK IS INITIAL.
* Network新規作成した場合、作成したNetwork番号取得
PERFORM F_GET_NETWORK
USING
AI_W_WBSELEMENT_LV2
AI_W_WBSELEMENT_LV3
CHANGING
LS_NETWORK_INFO
LS_ACTIVITY_INFO
AO_V_ACTIVITY_NO.
LV_NETWORK = LS_NETWORK_INFO-NETWORK.
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
CLEAR LS_RETURN_STATUS.
LS_NETWORK_STATUS = 'REL'.
CALL FUNCTION 'BAPI_BUS2002_SET_STATUS'
EXPORTING
NUMBER = LV_NETWORK
SET_SYSTEM_STATUS = LS_NETWORK_STATUS
IMPORTING
RETURN = LS_RETURN_STATUS.
* エラーが発生した場合、ステータスのエラーロック解除する
PERFORM F_STATUS_ERROR_UNLOCK
USING LS_RETURN_STATUS
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
CALL FUNCTION 'BAPI_PS_PRECOMMIT'
TABLES
ET_RETURN = LT_RETURN.
PERFORM F_ERROR_UNLOCK
USING
LT_RETURN
'X'
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
IF AO_V_ERRFLG IS NOT INITIAL.
RETURN.
ENDIF.
PERFORM F_UPDATE_GUID.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ELSE.
LV_NETWORK = AI_W_NETWORK-NETWORK.
ENDIF.
AO_V_NETWORK = LV_NETWORK.
IF AI_W_ACTIVITY IS INITIAL.
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
CLEAR: LT_ACTIVITY,
LS_ACTIVITY.
LS_ACTIVITY-PLANT = '1000'. "AI_W_SALESORDER-WERKS.
LS_ACTIVITY-DESCRIPTION = 'AAAAA'. "AI_W_SALESORDER-ARKTX.
LS_ACTIVITY-WBS_ELEMENT = AI_W_WBSELEMENT_LV3.
LS_ACTIVITY-ACTIVITY = AO_V_ACTIVITY_NO.
APPEND LS_ACTIVITY TO LT_ACTIVITY.
CALL FUNCTION 'BAPI_BUS2002_ACT_CREATE_MULTI'
EXPORTING
I_NUMBER = LV_NETWORK
TABLES
IT_ACTIVITY = LT_ACTIVITY
ET_RETURN = LT_RETURN.
PERFORM F_ERROR_UNLOCK
USING
LT_RETURN
'X'
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
IF AO_V_ERRFLG IS NOT INITIAL.
RETURN.
ENDIF.
CALL FUNCTION 'BAPI_PS_PRECOMMIT'
TABLES
ET_RETURN = LT_RETURN.
PERFORM F_ERROR_UNLOCK
USING
LT_RETURN
'X'
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
IF AO_V_ERRFLG IS NOT INITIAL.
RETURN.
ENDIF.
PERFORM F_UPDATE_GUID.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ENDIF.
ENDFORM.
FORM F_DEL_WBS USING AI_V_PSPID TYPE PROJ-PSPID
AI_W_WBSELEMENT2 TYPE BAPI_BUS2054_DETAIL
AI_W_WBSELEMENT3 TYPE BAPI_BUS2054_DETAIL
AI_W_NETWORK TYPE BAPI_NETWORK_EXP
AI_W_ACTIVITY TYPE BAPI_NETWORK_ACTIVITY_EXP
CHANGING AO_T_RETURN TYPE BAPIRET2_T
AO_V_ERRFLG TYPE CHAR01.
DATA:
LT_ACTIVITY_STATUS TYPE STANDARD TABLE OF BAPI_ACT_MNT_SYSTEM_STATUS,
LS_ACTIVITY_STATUS TYPE BAPI_ACT_MNT_SYSTEM_STATUS,
LS_RETURN_STATUS TYPE BAPIRETURN1,
LT_WBS_STATUS TYPE STANDARD TABLE OF BAPI_WBS_MNT_SYSTEM_STATUS,
LS_WBS_STATUS TYPE BAPI_WBS_MNT_SYSTEM_STATUS,
LS_NETWORK_STATUS TYPE BAPI_SYSTEM_STATUS-SYSTEM_STATUS,
LT_RETURN TYPE STANDARD TABLE OF BAPIRET2,
LV_WHERE TYPE STRING.
* LT_WBS_3 TYPE STANDARD TABLE OF TYP_PRPS,
* LS_WBS_3 TYPE TYP_PRPS,
* LW_WBSNETWORK_DATE TYPE TYP_WBS_NETWORK_DATE.
CLEAR: LT_RETURN.
IF AI_W_ACTIVITY IS NOT INITIAL.
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
LS_ACTIVITY_STATUS-ACTIVITY = AI_W_ACTIVITY-ACTIVITY.
LS_ACTIVITY_STATUS-SET_SYSTEM_STATUS = 'DEL'.
APPEND LS_ACTIVITY_STATUS TO LT_ACTIVITY_STATUS.
CALL FUNCTION 'BAPI_BUS2002_SET_STATUS'
EXPORTING
NUMBER = AI_W_NETWORK-NETWORK
IMPORTING
RETURN = LS_RETURN_STATUS
TABLES
I_ACTIVITY_SYSTEM_STATUS = LT_ACTIVITY_STATUS.
PERFORM F_STATUS_ERROR_UNLOCK
USING LS_RETURN_STATUS
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
IF AO_V_ERRFLG IS NOT INITIAL.
RETURN.
ELSE.
CALL FUNCTION 'BAPI_PS_PRECOMMIT'
TABLES
ET_RETURN = LT_RETURN.
PERFORM F_ERROR_UNLOCK
USING
LT_RETURN
'X'
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
IF AO_V_ERRFLG IS NOT INITIAL.
RETURN.
ENDIF.
PERFORM F_UPDATE_GUID.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ENDIF.
ENDIF.
IF AI_W_WBSELEMENT3 IS NOT INITIAL.
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
CLEAR:
LT_WBS_STATUS,
LS_WBS_STATUS,
LS_RETURN_STATUS.
LS_WBS_STATUS-WBS_ELEMENT = AI_W_WBSELEMENT3-WBS_ELEMENT.
LS_WBS_STATUS-SET_SYSTEM_STATUS = 'DEL'.
APPEND LS_WBS_STATUS TO LT_WBS_STATUS.
CALL FUNCTION 'BAPI_BUS2054_SET_STATUS'
IMPORTING
RETURN = LS_RETURN_STATUS
TABLES
I_WBS_SYSTEM_STATUS = LT_WBS_STATUS.
PERFORM F_STATUS_ERROR_UNLOCK
USING LS_RETURN_STATUS
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
IF AO_V_ERRFLG IS NOT INITIAL.
RETURN.
ELSE.
CALL FUNCTION 'BAPI_PS_PRECOMMIT'
TABLES
ET_RETURN = LT_RETURN.
PERFORM F_ERROR_UNLOCK
USING
LT_RETURN
'X'
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
IF AO_V_ERRFLG IS NOT INITIAL.
RETURN.
ENDIF.
PERFORM F_UPDATE_GUID.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ENDIF.
ENDIF.
IF AI_W_WBSELEMENT2 IS NOT INITIAL.
CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
CLEAR:
LT_WBS_STATUS,
LS_WBS_STATUS,
LS_RETURN_STATUS.
LS_WBS_STATUS-WBS_ELEMENT = AI_W_WBSELEMENT2-WBS_ELEMENT.
LS_WBS_STATUS-SET_SYSTEM_STATUS = 'DEL'.
APPEND LS_WBS_STATUS TO LT_WBS_STATUS.
CALL FUNCTION 'BAPI_BUS2054_SET_STATUS'
IMPORTING
RETURN = LS_RETURN_STATUS
TABLES
I_WBS_SYSTEM_STATUS = LT_WBS_STATUS.
PERFORM F_STATUS_ERROR_UNLOCK
USING LS_RETURN_STATUS
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
IF AO_V_ERRFLG IS NOT INITIAL.
RETURN.
ELSE.
CALL FUNCTION 'BAPI_PS_PRECOMMIT'
TABLES
ET_RETURN = LT_RETURN.
PERFORM F_ERROR_UNLOCK
USING
LT_RETURN
'X'
CHANGING
AO_T_RETURN
AO_V_ERRFLG.
IF AO_V_ERRFLG IS NOT INITIAL.
RETURN.
ENDIF.
PERFORM F_UPDATE_GUID.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ENDIF.
ENDIF.
ENDFORM.
FORM F_STATUS_ERROR_UNLOCK USING AI_W_ERROR TYPE BAPIRETURN1
CHANGING AO_T_ERROR TYPE BAPIRET2_T
AO_V_ERRFLG TYPE CHAR01.
DATA:LS_ERROR TYPE BAPIRET2.
IF AI_W_ERROR-TYPE = 'E' OR
AI_W_ERROR-TYPE ='A'.
AO_V_ERRFLG = 'X'.
MOVE-CORRESPONDING AI_W_ERROR TO LS_ERROR.
APPEND LS_ERROR TO AO_T_ERROR.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .
ENDIF.
ENDFORM.
FORM F_GET_NETWORK USING AI_W_WBS_LV2 TYPE PRPS-POSID
AI_W_WBS_LV3 TYPE PRPS-POSID
CHANGING
AO_W_NETWORK TYPE BAPI_NETWORK_EXP
AO_W_ACTIVITY TYPE BAPI_NETWORK_ACTIVITY_EXP
AO_V_ACTIVITY_NO TYPE BAPI_NETWORK_ACTIVITY_EXP-ACTIVITY.
ENDFORM.
FORM F_ERROR_UNLOCK USING AI_T_ERROR TYPE BAPIRET2_T
AI_V_UNLOCK TYPE CHAR01
CHANGING AO_T_ERROR TYPE BAPIRET2_T
AO_V_ERRFLG TYPE CHAR01.
FIELD-SYMBOLS:<FS_ERROR> TYPE BAPIRET2.
CLEAR AO_V_ERRFLG.
LOOP AT AI_T_ERROR ASSIGNING <FS_ERROR>
WHERE TYPE = 'E' AND
TYPE = 'A'.
AO_V_ERRFLG = 'X'.
APPEND <FS_ERROR> TO AO_T_ERROR.
ENDLOOP.
IF AO_V_ERRFLG IS NOT INITIAL AND
AI_V_UNLOCK IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
ENDFORM.
*&-----------------------------------------------------------------------*
*& FORM F_UPDATE_GUID
*&-----------------------------------------------------------------------*
* GUIDの更新処理
*&-----------------------------------------------------------------------*
FORM F_UPDATE_GUID.
DATA:
LI_VBMOD_ALL TYPE STANDARD TABLE OF VBMOD,
LV_ENQDONE TYPE CHAR01,
LV_ENQKEY TYPE EQEUSEVB,
TH_OPCODE(1) TYPE X,
LV_VBKEY TYPE VBMOD-VBKEY,
LV_FUNCNM TYPE TFDIR-FUNCNAME,
LV_PNAME TYPE CHAR40,
BEGIN OF VBID,
TIMESTAMP LIKE VBMOD-VBKEY,
ID LIKE VBMOD-VBMODCNT,
END OF VBID.
FIELD-SYMBOLS:<FS_VBMOD> TYPE VBMOD.
CONSTANTS:C_GET_VB_KEY LIKE TH_OPCODE VALUE 2.
CALL 'ThVBCall' ID 'OPCODE' FIELD C_GET_VB_KEY
ID 'VBKEY' FIELD LV_VBKEY
ID 'ENQKEY' FIELD LV_ENQKEY
ID 'ENQDONE' FIELD LV_ENQDONE.
SELECT * FROM VBMOD INTO TABLE LI_VBMOD_ALL
WHERE VBKEY = LV_VBKEY.
SORT LI_VBMOD_ALL BY VBMODCNT ASCENDING.
LOOP AT LI_VBMOD_ALL ASSIGNING <FS_VBMOD>.
SELECT SINGLE PNAME INTO LV_PNAME FROM TFDIR WHERE FUNCNAME = <FS_VBMOD>-VBFUNC.
VBID-TIMESTAMP = <FS_VBMOD>-VBKEY.
VBID-ID = <FS_VBMOD>-VBMODCNT.
PERFORM (<FS_VBMOD>-VBFUNC) IN PROGRAM (LV_PNAME) USING VBID.
DELETE FROM VBMOD WHERE VBKEY = <FS_VBMOD>-VBKEY AND
VBMODCNT = <FS_VBMOD>-VBMODCNT.
DELETE FROM VBDATA WHERE VBKEY = <FS_VBMOD>-VBKEY AND
VBMODCNT = <FS_VBMOD>-VBMODCNT.
ENDLOOP.
ENDFORM.
2019年5月6日星期一
Add append fields to bapi BAPI_OUTB_DELIVERY_CHANGE
1.add apend fields to structure vbkok and vbpok
2.implement badi:SMOD_V50B0001 method EXIT_SAPLV50I_010
METHOD IF_EX_SMOD_V50B0001~EXIT_SAPLV50I_010.
CONSTANTS:
LC_VBKOK TYPE CHAR5 VALUE 'VBKOK', "出荷ヘッダ(拡張項目ZXX含まれる)
LC_VBPOK TYPE CHAR5 VALUE 'VBPOK', "出荷明細(拡張項目ZXX含まれる)
LC_CS_VBKOK TYPE CHAR8 VALUE 'CS_VBKOK'.
DATA:
LV_ITEM TYPE POSNR_VL,
LW_EXTENSION2 TYPE BAPIEXT.
FIELD-SYMBOLS:
<LFS_FIELDNAME> TYPE ANY,
<LFS_VBKOK> TYPE ANY,
<LFS_VBPOK> TYPE ANY.
LOOP AT EXTENSION2 INTO LW_EXTENSION2.
CASE LW_EXTENSION2-PARAM.
WHEN LC_VBKOK. "LIKPの拡張項目
ASSIGN (LC_CS_VBKOK) TO <LFS_VBKOK>.
IF <LFS_VBKOK> IS ASSIGNED.
ASSIGN COMPONENT LW_EXTENSION2-FIELD OF STRUCTURE <LFS_VBKOK> TO <LFS_FIELDNAME>.
IF <LFS_FIELDNAME> IS ASSIGNED.
<LFS_FIELDNAME> = LW_EXTENSION2-VALUE.
ENDIF.
ENDIF.
WHEN LC_VBPOK. "LIPSの拡張項目
MOVE LW_EXTENSION2-ROW TO LV_ITEM.
READ TABLE CT_VBPOK ASSIGNING <LFS_VBPOK> WITH KEY POSNR_VL = LV_ITEM.
IF SY-SUBRC = 0.
ASSIGN COMPONENT LW_EXTENSION2-FIELD OF STRUCTURE <LFS_VBPOK> TO <LFS_FIELDNAME>.
IF <LFS_FIELDNAME> IS ASSIGNED.
<LFS_FIELDNAME> = LW_EXTENSION2-VALUE.
ENDIF.
ENDIF.
ENDCASE.
2.implement badi:SMOD_V50B0001 method EXIT_SAPLV50I_010
METHOD IF_EX_SMOD_V50B0001~EXIT_SAPLV50I_010.
CONSTANTS:
LC_VBKOK TYPE CHAR5 VALUE 'VBKOK', "出荷ヘッダ(拡張項目ZXX含まれる)
LC_VBPOK TYPE CHAR5 VALUE 'VBPOK', "出荷明細(拡張項目ZXX含まれる)
LC_CS_VBKOK TYPE CHAR8 VALUE 'CS_VBKOK'.
DATA:
LV_ITEM TYPE POSNR_VL,
LW_EXTENSION2 TYPE BAPIEXT.
FIELD-SYMBOLS:
<LFS_FIELDNAME> TYPE ANY,
<LFS_VBKOK> TYPE ANY,
<LFS_VBPOK> TYPE ANY.
LOOP AT EXTENSION2 INTO LW_EXTENSION2.
CASE LW_EXTENSION2-PARAM.
WHEN LC_VBKOK. "LIKPの拡張項目
ASSIGN (LC_CS_VBKOK) TO <LFS_VBKOK>.
IF <LFS_VBKOK> IS ASSIGNED.
ASSIGN COMPONENT LW_EXTENSION2-FIELD OF STRUCTURE <LFS_VBKOK> TO <LFS_FIELDNAME>.
IF <LFS_FIELDNAME> IS ASSIGNED.
<LFS_FIELDNAME> = LW_EXTENSION2-VALUE.
ENDIF.
ENDIF.
WHEN LC_VBPOK. "LIPSの拡張項目
MOVE LW_EXTENSION2-ROW TO LV_ITEM.
READ TABLE CT_VBPOK ASSIGNING <LFS_VBPOK> WITH KEY POSNR_VL = LV_ITEM.
IF SY-SUBRC = 0.
ASSIGN COMPONENT LW_EXTENSION2-FIELD OF STRUCTURE <LFS_VBPOK> TO <LFS_FIELDNAME>.
IF <LFS_FIELDNAME> IS ASSIGNED.
<LFS_FIELDNAME> = LW_EXTENSION2-VALUE.
ENDIF.
ENDIF.
ENDCASE.
ENDLOOP.
3. implement badi (enhancement spot) LE_SHP_DELIVERY_UPDATE
method IF_EX_LE_SHP_DELIVERY_UPDATE~UPDATE_HEADER.
CS_LIKP-ZZ1_TEST_TOSS_NO_DLH = IS_VBKOK-ZZ2_TEST_TOSS_NO_DLH.
endmethod.
CS_LIKP-ZZ1_TEST_TOSS_NO_DLH = IS_VBKOK-ZZ2_TEST_TOSS_NO_DLH.
endmethod.
method IF_EX_LE_SHP_DELIVERY_UPDATE~UPDATE_ITEM.
endmethod.
endmethod.
订阅:
博文 (Atom)
Customer Characteristic
Characteristic Descriptions are stored in the table - CABNT - Language - SPRAS - Characteristic description - ATBEZ Characteristic Values ...
-
REPORT ZBPADD2 . DATA : L_PARTN_CAT TYPE BAPIBUS1006_HEAD - PARTN_CAT , LS_CENTRAL TYPE BAPIBUS1006_CENTRAL , ...
-
HEADER: ADD Customer Fields to structure of IMKPF and BAPI_TE_XMKPF. Items: ADD Customer Fields to structure of IMSEG and BAPI_TE_XMSEG....
-
FUNCTION:SD_SALESDOCUMENT_CREATE Append fiels to Structure below. BAPE_VBAP BAPE_VBAPX VBAPKOZ VBAPKOZX No need to append fields to Struc...
