|
<< Click to Display Table of Contents >> Navigation: All About ABAP Technique > English > ABAP Tutorial > ABAP Workbench Tools > Enhancement > Business Add-Ins (BADI) > Business Add-Ins (BADI) Examples > ZMB_RESERVATION_BADI > DATA_CHECK |
METHOD IF_EX_MB_RESERVATION_BADI~DATA_CHECK .
DATA: LV_WERKS TYPE RESB-WERKS,
LV_LGORT TYPE RESB-LGORT,
LV_COUNT TYPE I VALUE 0,
LV_RSPOS TYPE RESB-RSPOS.
*->Prevent addition of new item after goods movement posted for any item.
DATA: LV_MVTPOSTED TYPE C.
DATA: IT_RESB TYPE RESB.
DATA : LV_ISADD(1). "ini untuk menandakan apakah item baru ditambah
* Cek Reservation apakah sudah Expired ato blm dari Table ZTA_WM_DEL_RSNUM
DATA: LV_RSNUM LIKE IS_RESB-RSNUM.
SELECT SINGLE RSNUM INTO LV_RSNUM
FROM ZTA_WM_DEL_RSNUM
WHERE
RSNUM EQ IS_RESB-RSNUM
AND EDATE <= SY-DATUM
.
*****************************************************************
IF SY-TCODE = 'MB22'.
SELECT * FROM RESB INTO CORRESPONDING FIELDS OF IT_RESB
WHERE RSNUM = IS_RKPF-RSNUM AND RSPOS = IS_RESB-RSPOS.
ENDSELECT.
IF SY-SUBRC <> 0.
LV_ISADD = 'X'.
ELSE.
LV_ISADD = ''.
DATA : LW_RESB TYPE RESB.
*jika item bukan item baru, cek apakah reservasi tersebut sudah pernah diposting sebelumnya
SELECT SINGLE *
FROM RESB
INTO CORRESPONDING FIELDS OF LW_RESB
WHERE RSNUM = IS_RKPF-RSNUM AND ENMNG > 0.
IF SY-SUBRC = 0.
LV_MVTPOSTED = 'X'.
ELSE.
CLEAR LV_MVTPOSTED.
ENDIF.
ENDIF.
* Cek Reservation apakah sudah Expired ato blm dari Table ZTA_WM_DEL_RSNUM
IF LV_MVTPOSTED = 'X' AND I_NEW_ITEM = 'X' AND LV_RSNUM NE IS_RESB-RSNUM.
MESSAGE ID 'M7' TYPE 'E' NUMBER '901' WITH IS_RESB-RSNUM .
ENDIF.
** Original
* IF lv_mvtposted = 'X' AND i_new_item = 'X' and lv_rsnum ne is_resb-rsnum.
* MESSAGE ID 'M7' TYPE 'E' NUMBER '901' WITH is_resb-rsnum .
* ENDIF.
*--------------------------------------------------------------------*
* Ketika buat Item Reservasi baru, cek apakah sudah pernah digunakan di MSEG
* Jika sudah digunakan maka keluar pesan 901
IF I_NEW_ITEM = 'X'.
DATA: LV_COUNTER2 TYPE I.
SELECT COUNT(*) INTO LV_COUNTER2
FROM MSEG
WHERE
RSNUM = IS_RKPF-RSNUM.
IF LV_COUNTER2 > 0.
MESSAGE ID 'M7' TYPE 'E' NUMBER '901' WITH IS_RESB-RSNUM .
ENDIF.
ENDIF.
*--------------------------------------------------------------------*
ENDIF.
IF SY-TCODE = 'MB22'.
* IF is_resb-enmng > 0 AND lv_rsnum NE is_resb-rsnum.
* MESSAGE ID 'M7' TYPE 'E' NUMBER '901' WITH is_resb-rsnum .
* ENDIF.
IF IS_RESB-ENMNG > 0 AND LV_RSNUM NE IS_RESB-RSNUM.
IF IS_RESB-ERFMG <> IT_RESB-ERFMG.
MESSAGE ID 'M7' TYPE 'E' NUMBER '901' WITH IS_RESB-RSNUM .
ENDIF.
ELSEIF LV_MVTPOSTED = 'X' AND IS_RESB-ERFMG <> IT_RESB-ERFMG.
MESSAGE ID 'M7' TYPE 'E' NUMBER '901' WITH IS_RESB-RSNUM .
ELSEIF LV_MVTPOSTED = 'X' AND LV_ISADD = 'X'.
MESSAGE ID 'M7' TYPE 'E' NUMBER '901' WITH IS_RESB-RSNUM .
ELSEIF LV_MVTPOSTED = 'X' AND IS_RESB-LGORT <> IT_RESB-LGORT.
MESSAGE ID 'M7' TYPE 'E' NUMBER '901' WITH IS_RESB-RSNUM .
ENDIF.
*****************************************************************
* Original
* IF is_resb-enmng > 0 .
* MESSAGE ID 'M7' TYPE 'E' NUMBER '901' WITH is_resb-rsnum .
* ENDIF.
ENDIF.
CASE SY-TCODE.
WHEN 'MB21'.
IMPORT RSPOS TO LV_RSPOS FROM MEMORY ID 'RSP'.
IMPORT WERKS TO LV_WERKS FROM MEMORY ID 'WRK'.
IMPORT LGORT TO LV_LGORT FROM MEMORY ID 'LGA'.
WHEN 'MB22'.
SELECT SINGLE WERKS LGORT RSPOS
INTO (LV_WERKS, LV_LGORT, LV_RSPOS)
FROM RESB
WHERE RSNUM EQ IS_RKPF-RSNUM
AND RSPOS EQ '1'.
IF IS_RESB-RSPOS = '1'.
IF LV_RSPOS IS INITIAL.
IMPORT RSPOS TO LV_RSPOS FROM MEMORY ID 'RSP'. "
ENDIF.
IF LV_WERKS IS INITIAL.
IMPORT WERKS TO LV_WERKS FROM MEMORY ID 'WRK'.
ENDIF.
IF LV_LGORT IS INITIAL.
IMPORT LGORT TO LV_LGORT FROM MEMORY ID 'LGA'.
ENDIF.
ENDIF.
ENDCASE.
** Cek dalam 1 Reservation Werks harus sama
* IF IS_RESB-WERKS NE LV_WERKS AND LV_WERKS IS NOT INITIAL.
* MESSAGE E398(00) WITH 'You Should Fill With Plant' LV_WERKS.
* ELSE.
* EXPORT WERKS FROM IS_RESB-WERKS TO MEMORY ID 'WRK'.
* ENDIF.
*
** Cek dalam 1 Reservation Sloc harus sama
* IF IS_RESB-LGORT NE LV_LGORT AND LV_LGORT IS NOT INITIAL.
* MESSAGE E398(00) WITH 'You Should Fill With Storage Location' LV_LGORT.
* ELSE.
* EXPORT LGORT FROM IS_RESB-LGORT TO MEMORY ID 'LGA'.
* ENDIF.
IF IS_RESB-RSPOS > '1'. " Added by Albertus Reinandang 02-10-2006
* Cek dalam 1 Reservation Werks harus sama
IF IS_RESB-WERKS NE LV_WERKS AND LV_WERKS IS NOT INITIAL.
MESSAGE E398(00) WITH 'You Should Fill With Plant' LV_WERKS.
ENDIF.
* Cek dalam 1 Reservation Sloc harus sama
IF IS_RESB-LGORT NE LV_LGORT AND LV_LGORT IS NOT INITIAL.
MESSAGE E398(00) WITH 'You Should Fill With Storage Location' LV_LGORT.
ENDIF.
ELSEIF IS_RESB-RSPOS = '1'.
EXPORT RSPOS FROM IS_RESB-RSPOS TO MEMORY ID 'RSP'.
EXPORT WERKS FROM IS_RESB-WERKS TO MEMORY ID 'WRK'.
EXPORT LGORT FROM IS_RESB-LGORT TO MEMORY ID 'LGA'.
ENDIF.
* Sloc Must Be Fill
IF IS_RESB-LGORT IS INITIAL.
MESSAGE E398(00) WITH 'Storage Location must be filled'.
ENDIF.
****** Periksa Otorisasi berdasarkan SLOC
IF SY-TCODE = 'MB21' OR SY-TCODE = 'MB22' OR SY-TCODE = 'MB23'.
DATA: GW_ACTVT(2).
IF SY-TCODE = 'MB21'.
GW_ACTVT = '01'.
ENDIF.
IF SY-TCODE = 'MB22'.
GW_ACTVT = '02'.
ENDIF.
IF SY-TCODE = 'MB23'.
GW_ACTVT = '03'.
ENDIF.
AUTHORITY-CHECK OBJECT 'Z_LGORT'
ID 'WERKS' FIELD IS_RESB-WERKS
ID 'LGORT' FIELD IS_RESB-LGORT
ID 'ACTVT' FIELD GW_ACTVT.
IF SY-SUBRC NE 0.
MESSAGE E398(00) WITH 'You have no authorization for Issuing Sloc' IS_RESB-LGORT.
ENDIF.
IF IS_RKPF-BWART = '311'.
AUTHORITY-CHECK OBJECT 'Z_UMLGO'
ID 'ACTVT' FIELD GW_ACTVT
ID 'UMLGO' FIELD IS_RKPF-UMLGO.
IF SY-SUBRC NE 0.
MESSAGE E398(00) WITH 'You have no authorization for Receiving Sloc' IS_RKPF-UMLGO.
ENDIF.
ENDIF.
ENDIF.
ENDMETHOD.