zoukankan      html  css  js  c++  java
  • ABAP学习笔记 (一) shigs

    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[]中是否有值

  • 相关阅读:
    《淘宝技术这十年》读书总结
    广告:互联网公司的纽带
    广告:互联网公司的纽带
    定期存款要及时
    定期存款要及时
    Java实现蓝桥杯VIP算法训练 自行车停放
    Java实现蓝桥杯VIP算法训练 自行车停放
    Java实现蓝桥杯VIP算法训练 自行车停放
    Java实现蓝桥杯VIP算法训练 数组逆序排列
    Java实现蓝桥杯VIP算法训练 数组逆序排列
  • 原文地址:https://www.cnblogs.com/shigs/p/2880963.html
Copyright © 2011-2022 走看看