[SAP ABAP] 고수 같아 보이는 비법 (TIP)
1. TOP에 알파벳, 숫자, 주로 사용하는 변수에 대하여 상수변수화 한다.
*************************************************
* CONSTANTS
*************************************************
CONSTANTS : c_bukrs LIKE bkpf-bukrs VALUE '2100', "회사코드
c_waers LIKE bkpf-waers VALUE 'KRW', "CURRENCY KEY
c_land1 LIKE t001-land1 VALUE 'KR', "COUNTRY KEY
c_ktopl LIKE skat-ktopl VALUE '1000', "CHART OF ACCOUNTS
c_kokrs LIKE cskt-kokrs VALUE '1000', "관리회계영역
c_kalsm LIKE t007s-kalsm VALUE 'TAX??',"PROCEDURE
c_kurst LIKE tcurr-kurst VALUE 'M'. "EXCHANGE RATE TYPE
CONSTANTS : c_0(1) VALUE '0',
c_1(1) VALUE '1',
c_2(1) VALUE '2',
c_3(1) VALUE '3',
c_4(1) VALUE '4',
c_5(1) VALUE '5',
c_6(1) VALUE '6',
c_7(1) VALUE '7',
c_8(1) VALUE '8',
c_9(1) VALUE '9',
c_10(2) VALUE '10',
c_20(2) VALUE '20',
c_30(2) VALUE '30',
c_40(2) VALUE '40',
c_50(2) VALUE '50',
c_60(2) VALUE '60',
c_70(2) VALUE '70',
c_80(2) VALUE '80',
c_90(2) VALUE '90',
c_100(3) VALUE '100',
c_00(2) VALUE '00',
c_000(3) VALUE '000',
c_a(1) VALUE 'A',
c_b(1) VALUE 'B',
c_c(1) VALUE 'C',
c_d(1) VALUE 'D',
c_e(1) VALUE 'E',
c_f(1) VALUE 'F',
c_g(1) VALUE 'G',
c_h(1) VALUE 'H',
c_i(1) VALUE 'I',
c_j(1) VALUE 'J',
c_k(1) VALUE 'K',
c_l(1) VALUE 'L',
c_m(1) VALUE 'M',
c_n(1) VALUE 'N',
c_o(1) VALUE 'O',
c_p(1) VALUE 'P',
c_q(1) VALUE 'Q',
c_r(1) VALUE 'R',
c_s(1) VALUE 'S',
c_t(1) VALUE 'T',
c_u(1) VALUE 'U',
c_v(1) VALUE 'V',
c_w(1) VALUE 'W',
c_x(1) VALUE 'X',
c_y(1) VALUE 'Y',
c_z(1) VALUE 'Z',
c_jpy(3) VALUE 'JPY',
c_usd(3) VALUE 'USD',
c_krw(3) VALUE 'KRW',
c_send TYPE ui_func VALUE 'SEND',
c_block TYPE ui_func VALUE 'BLOC',
c_change TYPE ui_func VALUE 'CHANGE',
c_display TYPE ui_func VALUE 'DISPLAY',
c_icon TYPE iconname VALUE '@0Z@',
c_info TYPE iconquick VALUE 'CHANGE DATA',
c_add TYPE ui_func VALUE 'ADD',
c_icon_add TYPE iconname VALUE '@17@',
c_info_add TYPE iconquick VALUE 'ADD DATA',
c_del TYPE ui_func VALUE 'DELETE',
c_icon_del TYPE iconname VALUE '@18@',
c_info_del TYPE iconquick VALUE 'DELETE DATA',
c_koart_d TYPE koart VALUE 'D', "고객
c_koart_k TYPE koart VALUE 'K', "거래처
c_ztrkey(2) VALUE '30',
c_land_kr TYPE land1 VALUE 'KR',
c_suc(1) VALUE 'S',
c_err(1) VALUE 'E',
C_ICON_GREEN(4) VALUE '@08@',
C_ICON_YELLOW(4) VALUE '@09@',
C_ICON_RED(4) VALUE '@0A@',
C_ICON_LED_GREEN(4) VALUE '@5B@',
C_ICON_LED_RED(4) VALUE '@5C@',
C_ICON_LED_YELLOW(4) VALUE '@5D@'.
DATA : gv_execute_mode TYPE ui_func.
CONSTANTS : gc_create TYPE ui_func VALUE 'CREATE'.
CONSTANTS : gc_change TYPE ui_func VALUE 'CHANGE'.
CONSTANTS : gc_display TYPE ui_func VALUE 'DISPLAY'.
CONSTANTS : gc_delete TYPE ui_func VALUE 'DELETE'.
CONSTANTS : gc_modify TYPE ui_func VALUE 'MODIFY'.
CONSTANTS : gc_insert TYPE ui_func VALUE 'INSERT'.
CONSTANTS : gc_append TYPE ui_func VALUE 'APPEND'.
CONSTANTS : gc_upload TYPE ui_func VALUE 'UPLOAD'.
CONSTANTS : gc_download TYPE ui_func VALUE 'DOWNLOAD'.
*=======================================================================
* Field-Symbol
*=======================================================================
FIELD-SYMBOLS : <FS_FIELD>,
<FS_FIELD1>,
<FS_FIELD2>,
<FS_FIELD3>,
<FS_FIELDX>.
*=======================================================================
* Macro
*=======================================================================
DEFINE __SET_ER_TIMESTAMP.
&1-ERDAT = SY-DATUM.
&1-ERZET = SY-UZEIT.
&1-ERNAM = SY-UNAME.
END-OF-DEFINITION.
DEFINE __SET_AE_TIMESTAMP.
&1-AEDAT = SY-DATUM.
&1-AEZET = SY-UZEIT.
&1-AENAM = SY-UNAME.
END-OF-DEFINITION.
DEFINE __CONV_EXIT_INPUT.
GV_FNAME = |{ 'CONVERSION_EXIT_' }{ &1 }{ '_INPUT' }|.
CALL FUNCTION GV_FNAME
EXPORTING
INPUT = &2
IMPORTING
OUTPUT = &3
EXCEPTIONS
OTHERS = 1.
END-OF-DEFINITION.
DEFINE __CONV_EXIT_OUTPUT.
GV_FNAME = |{ 'CONVERSION_EXIT_' }{ &1 }{ '_OUTPUT' }|.
CALL FUNCTION GV_FNAME
EXPORTING
INPUT = &2
IMPORTING
OUTPUT = &3
EXCEPTIONS
OTHERS = 1.
END-OF-DEFINITION.
DEFINE __APPEND_RANGES.
CLEAR : &1.
&1-SIGN = &2.
&1-OPTION = &3.
&1-LOW = &4.
&1-HIGH = &5.
APPEND &1.
END-OF-DEFINITION.
DEFINE __SET_ER_TIMESTAMP.
&1-ERDAT = SY-DATUM.
&1-ERZET = SY-UZEIT.
&1-ERNAM = SY-UNAME.
END-OF-DEFINITION.
DEFINE __SET_AE_TIMESTAMP.
&1-AEDAT = SY-DATUM.
&1-AEZET = SY-UZEIT.
&1-AENAM = SY-UNAME.
END-OF-DEFINITION.
DEFINE __CONVERT_INTERNAL_WGT.
CLEAR : &2.
CALL FUNCTION 'CATS_NUMERIC_INPUT_CHECK'
EXPORTING
INPUT = &1
IMPORTING
OUTPUT = &2
EXCEPTIONS
NO_NUMERIC = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
&2 = &1.
ENDIF.
CONDENSE &2 NO-GAPS.
END-OF-DEFINITION.
DEFINE __MODIFY_CELL.
CALL METHOD &1->MODIFY_CELL
EXPORTING
I_ROW_ID = &2
I_FIELDNAME = &3
I_VALUE = &4.
END-OF-DEFINITION.
DEFINE __POPUP_CONFIRM_MSG.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = &1
text_question = &2
* text_button_1 = lv_text_button_1
* text_button_2 = lv_text_button_2
default_button = '1'
display_cancel_button = 'X'
IMPORTING
answer = &3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
END-OF-DEFINITION.
2. X 대신 ABAP_TRUE 사용
3. 조건에 따라 필드 바꿔야 할 경우, 조건 문 대신 structure에 값 넣고 modify --- where 조건----
gs_bseg-icon = icon_message_warning_small.
MODIFY gt_bseg FROM gs_bseg TRANSPORTING icon
WHERE bukrs = <ls_bseg>-bukrs
AND belnr = <ls_bseg>-belnr
AND gjahr = <ls_bseg>-gjahr
AND hkont = <ls_bseg>-hkont
AND kunnr = <ls_bseg>-kunnr
AND lifnr = <ls_bseg>-lifnr
AND augdt IS INITIAL
AND ( ( stored = space AND bdiff <> 0 )
OR ( stored = abap_true AND bdiff2 <> 0 ) ).
gs_bseg-icon = icon_yellow_light.
MODIFY gt_bseg FROM gs_bseg TRANSPORTING icon
WHERE bukrs = <ls_bseg>-bukrs
AND belnr = <ls_bseg>-belnr
AND gjahr = <ls_bseg>-gjahr
AND icon <> icon_message_warning_small
AND icon <> icon_red_light
AND augdt IS INITIAL
AND ( ( stored = space AND bdiff <> 0 )
OR ( stored = abap_true AND bdiff2 <> 0 ) ).
<ls_bseg>-icon = icon_red_light.