ABAP4 Coding Rule-Part 2-DATA 定义
4. DATA 定义
4.1 DATA 定义comment
数据定义好后一定要加上注释,简单描述此数据的意义,而且尽量将注释与此数据的定义放在同一行。
例:DATA SMAKTX LIKE YITEM-SMAKTX. "中文品名
4.2 CONSTANT
当一个常数在你的程序里被反复利用时,请使用静态变量,如果这个常数需要修改,只需要修改此常数的定义即可,静态变量统一以“CNS_”开头。
例: CONSTANTS: CNS_MAX_LENGTH TYPE I VALUE 99.
4.3变量定义
全局变量的前2个字符使用‘G_’
例:  DATA: G_WERKS        LIKE T001W-WEKRS,
G_MATNR(11)     TYPE C.
局部变量的前2个字符使用 ‘L_’
例: DATA: L_QTY LIKE VBAP-KWMENG,
L_CODE(4) TYPE C.
Flag 的前4个字符使用‘FLG_’、always type C、length 1、值是 ‘X’ or ‘ ’。
例:
DATA: FLG_TRUE(1) TYPE C VALUE ‘X’,
FLG_FALSE(1) TYPE C VALUE ‘ ’.
4.4 DATA(Internal table)
Internal table的定义统一以“I_”开头:
例: DATA : BEGIN OF I_COMP OCCURS 0,
MATNR LIKE VBAP-MATNR, "material number
IDNRK LIKE STPOX-IDNRK, "Componet material number
MENGE LIKE STPOX-MENGE, "单位用量
END OF I_COMP.
当你定义的两个或两个以上的Internal Table有相同的结构时,请先用TYPES定义Internal Table的结构,然后再定义Internal Table。
例:
TYPES : BEGIN OF I_KNA1,
KUNNR LIKE KNA1-KUNNR, "Customer code
NAME1 LIKE KNA1-NAME1, "Customer address1
END OF I_KNA1.
DATA : I_TAB TYPE I_KNA1 OCCURS 0 WITH HEADER LINE.
DATA : I_TAB2 TYPE I_KNA1 OCCURS 0 WITH HEADER LINE.
4.5 PARAMETERS
最长8个字符,定义PARAMERTES时,前两个字符使用“P_”。必需输入的 parameter 要指定OBLIGATORY、用于flag 或 switch的时候指定AS CHECKBOX。
例:
PARAMETERS: P_PLANT LIKE MARC-WERKS DEFAULT‘CS12’ OBLIGATORY,
P_FLG AS CHECKBOX DEFAULT ‘X’.
4.6 SELECT-OPTIONS
最长8个字符,前两个字符使用“S_”。 必输的栏位需指定OBLIGATORY。
例:
SELECT-OPTIONS: S_MATNR FOR MARC-MATNR, "Material Number
S_ERSDA FOR MARA-ERSDA DEFAULT SY-DATUM OBLIGATORY. "Created On
Ø 5. Main Program Process
Main Program即START-OF-SELECTION与END-OF-SELECTION的部分。在Main Program中不要写详细的处理逻辑,主要使用简单的IF或CASE分开的Subroutine描述程序的主要逻辑,而详细的处理逻辑在Subroutine中处理。
5.1缩进
相同的语句,尽量放的让别人容易看:
例: 修正前
WK_A = 5200 + 3500.
WK_BCD = 35 - 2.
WK_B = 1 + 2.
例:修正后(‘=’号在相同的位置)
WK_A = 5200 + 3500.
WK_BCD = 35 - 2.
WK_B = 1 + 2.
5.2CASE的利用
2层以上嵌套的IF,尽量变成CASE。CASE的内容复杂时,使用subroutine。
例:修正前
IF OK_CODE = ‘BACK’.
PERFORM DP_1000_PAI_BACK.
ELSEIF OK_CODE = ‘EDIT’.
PERFORM DP_1000_PAI_EDIT.
ELSEIF OK_CODE = ‘SAVE’.
PERFORM DP_1000_PAI_SAVE.
ELSE.
....
ENDIF.
例:修正后
CASE OK_CODE.
WHEN ‘BACK’.
PERFORM DP_1000_PAI_BACK.
WHEN ‘EDIT’.
PERFORM DP_1000_PAI_EDIT.
WHEN ‘SAVE’.
PERFORM DP_1000_PAI_SAVE.
WHEN OTHERS.
....
ENDCASE.
5.3Loop的利用
为了使程序模块化,尽量避免嵌套的LOOP、WHILE。 LOOP内,用CHECK除去対象外的记录,用EXIT中止。
例:修正前
LOOP AT ITAB_TAB1.
CHECK <condition>
........
LOOP AT ITAB_TAB2.
IF <condition>
EXIT.
ENDIF.
........
ENDLOOP.
ENDLOOP.
例:修正后
LOOP AT ITAB_TAB1.
CHECK <condition>
........
PERFORM PROCESS_TAB2.
ENDLOOP.
FORM PROCESS_TAB2.
LOOP AT ITAB_TAB2.
IF <condition>
EXIT.
ENDIF.
........
ENDLOOP.
ENDFORM.
5.4使用限制
ü 赋值时尽量使用“=”。
ü 比较运算符“EQ, NE, GT, LT, GE, LE” 不推荐使用,而使用“=, <>, >,<”。
5.5CONTINUE的使用
CONTINUE这类的跳转语句尽量少使用。
5.6同种文字的合并
把同样的key word 连续的内容进行合并。Key word的后面加冒号、剩下的部分分别用逗号分隔。
例:修正前
WRITE LFA1_LIFNR.
WRITE LFA1_NAME1.
WRITE LFA1_ORT01.
例:修正后
WRITE: LFA1_LIFNR,
LFA1_NAME1,
LFA1_ORT01.
 
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号