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

  • 相关阅读:
    android数据恢复
    UVA 690 Pipeline Scheduling
    2017 国庆湖南 Day4
    2017 国庆湖南 Day5
    2017 国庆湖南 Day6
    2017国庆 清北学堂 北京综合强化班 Day1
    2017 国庆湖南Day2
    bzoj 2962 序列操作
    UVA 818 Cutting Chains
    UVA 211 The Domino Effect
  • 原文地址:https://www.cnblogs.com/shigs/p/2880963.html
Copyright © 2011-2022 走看看