ABAP学习笔记 (一)

ABAP学习笔记  

  一、 对操作一内表,取出数据存于此,然后排序  SORT TABLE  BY 字段。执行  DELETE ADJACENT DUPLICATES FROM SHOW_TAB.
      此语句是对排序后的表如果有相同的数据则删除。


二、对于多表操作,分别对每张表的要用到的字段声明到一个STRUCTURE中然后据该结构声明同等性质的内表,用于此其数据库中表的转贮要用到的数据字段,
      最后:定义一张综合每一张表要用到的数据字段结构STRUCTRUE,用此结构声明一张内表(为便于操作最好声明成标准内表)
三、取数据
    为增加数据取出的效率。程序中不用JOIN ON 关键段作表与表的内联结,全此方法在有两个到三个表之间可用,如果记录非常大时,会严重影响其程序运行速度,
较之此方法在程序优化及其速度方面用下面的语句,
    执行第一张表的选择语句存于其对应的内表中 后用检查语言验证是否操作成功,
   
        DESCRIBE TABLE HT_AFKO LINES G_LINES.
  IF G_LINES > 0 .
    此语句字段G_LINES 中记录了一共从数据库表中取出了多少条记录。
    如能取数据成功
    则执行第二张表,据选择条件选出相应数据存于对应的内表中,然后在SELET语句中加一条语句,
        SELECT RSNUM MATNR LGORT BDMNG MEINS XWAOK RSPOS AUFNR
      INTO TABLE HT_RESB
      FROM RESB
          FOR ALL ENTRIES IN HT_AFKO
          WHERE RSNUM = HT_AFKO-RSNUM
                AND XWAOK = 'X'.
   
      此语句用于把两张内表的数据对应起来,进而可以用筛选条件选出对应的数据,
  第三步:
  操作定义的总内表 把从两张表中取出的数据入到总定义的总内表中
        REFRESH HT_LST.(总内表用于存贮选出的数据)
取出上两步操作中的任一内表,循环此内表,
  LOOP AT HT_RESB.
  此语句的意思是,一条条的从HT—RESB中取出记录,
    READ TABLE HT_AFKO WITH TABLE KEY AUFNR = HT_RESB-AUFNR.
  用第二条READ语句根据READ语句后的,WITH TABLE KEY AUFNR = HT_RESB-AUFNR.筛选出与LOOP AT语句有相同条件的记录,
数据入总内表:
  MOVE-CORRESPONDING HT_AFKO TO HT_LST.
MOVE-CORRESPONDING HT_RESB TO HT_LST.
此两条语语把前面表中的数据传给了后面表中数据。
为什么要用到MOVE-CORRESPONDING此语句关键字的作用:
  当后面的内表字段很多,而前面的表中字段少的情况下,此传入语句自动寻找与之相对应的字段空间,不会引起字段值的空间乱存。在数据一致性中起重作用,
两个MOVE语句组成了一条记录,
    最后用,INSERT TABLE HT_LST.语句完成一条语句的在总内表中的插入工作;
至此:数据从库中取出放入对应自己的内表中,再从两张内表中把数据存入一张内表的操作完成,

程序后期维护及功能的扩充:
  后期如果增加了需求:比如,增加了某张表中的一些字段,
 
  首先:增加此表有用字段中结构定义,及内表声明,
        在总内表定义加入此增加表中的字段,
  其此:增加一循环语句,LOOP AT HT_LST.此语句的意思是一条条取出总内表的数据,
          与增加的那张表中的数据据某种条件筛选出所要的记录,此表的
        SELET语句只能单选,
                MOVE HT_AFPO-KDPOS TO HT_LST-KDPOS.
    SELECT SINGLE PSMNG WEMNG AUFNR
                        INTO HT_AFPO
                        FROM AFPO
                        WHERE AUFNR = HT_LST-AUFNR.
  WHERE条件是增加的新表与总内表中某字段中数据的比较;
  对选出的字段数据传到总内表相应的内表结构中去,
 
  MOVE HT_AFPO-PSMNG TO HT_LST-PSMNG.
  MOVE HT_AFPO-WEMNG TO HT_LST-WEMNG.
此为字段间的传递;

  最后:modify ht_lst;
  为什么此处要用modify ? 因为内表中的记录已存在,后增加的字段增加了先前记录的长度,(减小也同样使用) 用modify修改后再插入到内表中去,
完:




读项目中遇到的新知识点

SELECT-OPTIONS : SO_UDATE FOR  CDHDR-UDATE OBLIGATORY.

PARAMETER      : PA_BUKRS LIKE EKKO-BUKRS DEFAULT 'MCN1' OBLIGATORY.
注:default 系统自定义为后面的值,
一、
AT SELECTION-SCREEN ON BLOCK BLOCK2.
  IF CB_PO NE 'X' AND CB_SCPO NE 'X' AND CB_IV NE 'X' AND CB_SCIV NE 'X'.
    MESSAGE E000(8I) WITH 'Please select at least one file'.
  ENDIF.

此语句在程序中,定义消息处理,
当,条件中四项都 NE 'X' 就是不等于X时,在页面的最下面显示处理信息。
屏幕在应用中,被划分为若干BLOCK 加入at selection-screen on block bllock2在程序运行的初期检验本区域中的条件是否满足,弹出相应的消息处理,

二、向内表中传入值
INTO CORRESPONDING FIELDS OF TABLE I_EKKO
注:用select语句选择某张表中的部分数据,如要传进一张总表中,用此关键字,系统会自动匹配表结构中的字段,放到合适位置;
三、在准备向一张表中传入数据前,对这张表的操作
CLEAR : I_CDHDR. REFRESH : I_CDHDR.
此操作只是保证表中没有其它数据,不为引起程序中运行中的异常;

1表 IF NOT I_CDHDR[] IS INITIAL.
  注:此条语句正于验正表I_CDHDR[]中是否有值

 

posted @ 2013-01-29 10:25  shigs-smile  阅读(467)  评论(0编辑  收藏  举报