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.

 

posted @ 2011-08-21 22:47  VerySky  阅读(393)  评论(0)    收藏  举报