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 Clength 1 ‘X’ or ‘ ’

例:

     DATA: FLG_TRUE(1)  TYPE C VALUE ‘X’,

        FLG_FALSE(1) TYPE C VALUE ‘ ’.

 

4.4 DATAInternal 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有相同的先用TYPESInternal 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 ProgramSTART-OF-SELECTIONEND-OF-SELECTION的部分。在Main Program中不要写详细的处理逻辑,主要使用简单的IFCASE分开的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,尽量变成CASECASE的内容复杂时,使用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的利用

为了使程序模块化,尽量避免嵌套的LOOPWHILE 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  阅读(346)  评论(0)    收藏  举报