美文网首页
03ABAP语法,A3-显示物料记录的表字段值和属性

03ABAP语法,A3-显示物料记录的表字段值和属性

作者: 真言真语SAP | 来源:发表于2018-01-07 13:33 被阅读0次
    图3-A3 物料表字段属性界面

    需求分析:

    1、具体需求

    本实践有如下需求:

    1. 初始界面输入物料编号,执行后从物料表中获得对应物料编号的记录;
    2. 获得记录中指定字段(集团、物料编号、物料名称、计量单位、类型、制造商、标准价格、价格单位、库存)的字段说明、字段值、字段类型、长度、小数位数;
    3. 格式化输出信息。
    2、开发分析

    要达成本实践目标,需要综合ABAP的数据输出实现方式:

    1. 可以通过定义结构,以存储和处理要获得和输出的数据;
    2. 通过使用OpenSQL语句可以根据输入的物料编号,在对应物料表(ztmaterial)表中读取数据并存储于结构中;
    3. 使用DESCRIBE FIELD关键字可以获得各字段类型、长度、小数位数等属性;
    4. 通过Write语句可以将数据输出到屏幕,而在输出时需要考虑每列数据输出起始位置及所占字符长度。

    实践步骤:

    本实践通过程序编辑器(SE38)即可完成,编写的代码将有如下几部分组成,按开发人员风格不同,其组成部分并非强制一致。

    No 部分 说明
    1 程序声明 声明本程序执行后是否包含标准标题,数据输出宽度和每页的行数量为多少
    2 对象定义 通过定义变量或常量或要使用的表结构等,以在程序执行过程中计算和存储临时值
    3 页眉输出 如不指定标准标题,则可以通过代码设置输出的页眉
    4 获取数据 从表中获得要输出的数据数据,并存储到内表中以待后续输出
    5 输出数据 将内表中的数据按要求输出
    1、程序声明

    程序声明部分代码如下:

    REPORT  zu0303_mat_stru_data.
    

    REPORT 程序名称:是对程序的定义,表明此程序代码不是FUNCTION MODULE(功能函数),不是CLASS(类),而是可以执行的可以输出数据的此程序;这是对程序最基本的声明,且必须存在的部分。

    2、对象定义

    对象定义部分代码如下:

    *****对象定义
    DATA: BEGIN OF mat_stru,                               " MAT_STRU-结构体名称
            mandt        TYPE ztmaterial-mandt,             "通过已有表字段定义类型
            materialid   TYPE ztmaterial-materialid,
            materialname TYPE ztmaterial-materialname,
            sunit        TYPE ztmaterial-bunit,
            materialtype TYPE ztmaterial-materialtype,
            supplier     TYPE ztmaterial-supplier,
            sprice       TYPE ztmaterial-sprice,
            scurrency    TYPE ztmaterial-scurrency,
            inventory    TYPE ztmaterial-inventory,
          END OF mat_stru.
    *DATA: MAT_STRU TYKE ZU02_MAT_STRU.                   "通过字典对象定义结构体
    
    DATA: typ(1) TYPE c,
          len    TYPE i,
          olen   TYPE i,
          deci   TYPE i,
          compo  TYPE i.
    PARAMETERS: matnr TYPE ztmaterial-materialid DEFAULT '1017'.
    

    如上代码对程序中要使用的对象进行定义,首先定义了1个结构mat_stru,此结构包含如下字段:mandt(集团)、materialid(物料编号)、materialname(物料名称)、sunit(计量单位)、materialtype(物料类型)、supplier(制造商)、sprice(标准价格)、scurrency(价格单位)、inventory(库存)。
    然后定义了如下变量以存储和输出字段的各种属性:typ(字段名)、len(字段说明)、 olen(字段类型)、deci(长度)、compo(小数位数)。
    同时通过PARAMETERS定义初始界面中要输入的物料编号,以作为获取记录的条件,默认为“1017”。

    3、页眉输出

    页眉部分代码,要通过TOP-OF-PAGE定义,在此部分可以定义每一页上方输出的标题行。

    *****输出页眉
    TOP-OF-PAGE.                                           "页眉事件
      WRITE:/5(75) sy-uline,
            /5 '字段', 20 '字段说明', 35(15) '字段值', 50 '字段类型', 60 '长度' , 70 '小数位数',
            /5(75) sy-uline.
    
    4、获得数据

    获得数据部分代码如下:

    *&----------------------------------------------------------------------*
    *& START-OF-SELECTION
    *&----------------------------------------------------------------------*
    START-OF-SELECTION.                                    "数据处理事件
      SELECT SINGLE                                              "通过SELECT 语句从表ZTMETERIAL中获得数据并赋值到结构体
        mandt materialid materialname sunit materialtype supplier sprice scurrency inventory
        INTO mat_stru
        FROM ztmaterial
        WHERE materialid = matnr.
    

    如上SELECT代码为ABAP的Open SQL语句,通过其可以将数据从ztmaterial表中,获得所需的各个字段的数据并插入到mat_stru结构中,WHERE条件以筛选数据物料编号。

    5、变量赋值和输出

    赋值和输出数据部分代码如下:

    *****获得字段属性并输出
    *****客户端
      DESCRIBE FIELD  mat_stru-mandt TYPE typ.                       "获得字段的类型
      IF typ = 'C' OR typ = 'D' OR typ = 'N' OR typ = 'T'.            "获得字段的长度,不同类型对象的长度方式有差异
        DESCRIBE FIELD mat_stru-mandt LENGTH len IN CHARACTER MODE.
      ELSE.
        DESCRIBE FIELD mat_stru-mandt LENGTH len IN BYTE MODE.
      ENDIF.
    
      deci = 0.
      IF typ = 'F' OR typ = 'P'.
        DESCRIBE FIELD mat_stru-mandt DECIMALS deci.                 "对类型为F和P的对象获得小数位数
      ENDIF.
    
      WRITE:/5 'MANDT', 20 '集团', 35(15) mat_stru-mandt, 50 typ, 60 len , 70 deci.
    
    *****物料编号
      DESCRIBE FIELD  mat_stru-materialid TYPE typ.
      IF typ = 'C' OR typ = 'D' OR typ = 'N' OR typ = 'T'.
        DESCRIBE FIELD mat_stru-materialid LENGTH len IN CHARACTER MODE.
      ELSE.
        DESCRIBE FIELD mat_stru-materialid LENGTH len IN BYTE MODE.
      ENDIF.
    
      deci = 0.
      IF typ = 'F' OR typ = 'P'.
        DESCRIBE FIELD mat_stru-materialid DECIMALS deci.
      ENDIF.
    
      WRITE:/5 'MATERIALID', 20 '物料编号', 35(15) mat_stru-materialid, 50 typ, 60 len , 70 deci.
    
    *****物料名称
      DESCRIBE FIELD  mat_stru-materialname TYPE typ.
      IF typ = 'C' OR typ = 'D' OR typ = 'N' OR typ = 'T'.
        DESCRIBE FIELD mat_stru-materialname LENGTH len IN CHARACTER MODE.
      ELSE.
        DESCRIBE FIELD mat_stru-materialname LENGTH len IN BYTE MODE.
      ENDIF.
    
      deci = 0.
      IF typ = 'F' OR typ = 'P'.
        DESCRIBE FIELD mat_stru-materialname DECIMALS deci.
      ENDIF.
    
      WRITE:/5 'MATERIALNAME', 20 '物料名称', 35(15) mat_stru-materialname, 50 typ, 60 len , 70 deci.
    
    *****销售计量单位
      DESCRIBE FIELD  mat_stru-sunit TYPE typ.
      IF typ = 'C' OR typ = 'D' OR typ = 'N' OR typ = 'T'.
        DESCRIBE FIELD mat_stru-sunit LENGTH len IN CHARACTER MODE.
      ELSE.
        DESCRIBE FIELD mat_stru-sunit LENGTH len IN BYTE MODE.
      ENDIF.
    
      deci = 0.
      IF typ = 'F' OR typ = 'P'.
        DESCRIBE FIELD mat_stru-sunit DECIMALS deci.
      ENDIF.
    
      WRITE:/5 'SUNIT', 20 '销售计量单位', 35(15) mat_stru-sunit, 50 typ, 60 len , 70 deci.
    
    *****物料类型
      DESCRIBE FIELD  mat_stru-materialtype TYPE typ.
      IF typ = 'C' OR typ = 'D' OR typ = 'N' OR typ = 'T'.
        DESCRIBE FIELD mat_stru-materialtype LENGTH len IN CHARACTER MODE.
      ELSE.
        DESCRIBE FIELD mat_stru-materialtype LENGTH len IN BYTE MODE.
      ENDIF.
    
      deci = 0.
      IF typ = 'F' OR typ = 'P'.
        DESCRIBE FIELD mat_stru-materialtype DECIMALS deci.
      ENDIF.
    
      WRITE:/5 'MATERIALTYPE', 20 '物料类型', 35(15) mat_stru-materialtype, 50 typ, 60 len , 70 deci.
    
    *****制造商
      DESCRIBE FIELD  mat_stru-supplier TYPE typ.
      IF typ = 'C' OR typ = 'D' OR typ = 'N' OR typ = 'T'.
        DESCRIBE FIELD mat_stru-supplier LENGTH len IN CHARACTER MODE.
      ELSE.
        DESCRIBE FIELD mat_stru-supplier LENGTH len IN BYTE MODE.
      ENDIF.
    
      deci = 0.
      IF typ = 'F' OR typ = 'P'.
        DESCRIBE FIELD mat_stru-supplier DECIMALS deci.
      ENDIF.
    
      WRITE:/5 'SUPPLIER', 20 '制造商', 35(15) mat_stru-supplier, 50 typ, 60 len , 70 deci.
    
    *****标准价格
      DESCRIBE FIELD  mat_stru-sprice TYPE typ.
      IF typ = 'C' OR typ = 'D' OR typ = 'N' OR typ = 'T'.
    * DESCRIBE FIELD MAT_STRU-SPRICE LENGTH LEN IN CHARACTER MODE.    "对于类型为P的对象,不得通过CHARACTER语句
      ELSE.
        DESCRIBE FIELD mat_stru-sprice LENGTH len IN BYTE MODE.
      ENDIF.
    
      deci = 0.
      IF typ = 'F' OR typ = 'P'.
        DESCRIBE FIELD mat_stru-sprice DECIMALS deci.
      ENDIF.
    
      WRITE:/5 'SPRICE', 20 '标准价格', 35(15) mat_stru-sprice, 50 typ, 60 len , 70 deci.
    
    *****价格单位
      DESCRIBE FIELD  mat_stru-scurrency TYPE typ.
      IF typ = 'C' OR typ = 'D' OR typ = 'N' OR typ = 'T'.
        DESCRIBE FIELD mat_stru-scurrency LENGTH len IN CHARACTER MODE.
      ELSE.
        DESCRIBE FIELD mat_stru-scurrency LENGTH len IN BYTE MODE.
      ENDIF.
    
      deci = 0.
      IF typ = 'F' OR typ = 'P'.
        DESCRIBE FIELD mat_stru-scurrency DECIMALS deci. " 字段小数位数
      ENDIF.
    
      WRITE:/5 'SCURRENCY', 20 '价格单位', 35(15) mat_stru-scurrency, 50 typ, 60 len , 70 deci.
    
    *****库存
      DESCRIBE FIELD  mat_stru-inventory TYPE typ.
      IF typ = 'C' OR typ = 'D' OR typ = 'N' OR typ = 'T'.
    * DESCRIBE FIELD MAT_STRU-INVENTORY LENGTH LEN IN CHARACTER MODE.
      ELSE.
        DESCRIBE FIELD mat_stru-inventory LENGTH len IN BYTE MODE.
      ENDIF.
    
      deci = 0.
      IF typ = 'F' OR typ = 'P'.
        DESCRIBE FIELD mat_stru-inventory DECIMALS deci. " 字段小数位数
      ENDIF.
    
      WRITE:/5 'INVENTORY', 20 '库存', 35(15) mat_stru-inventory, 50 typ, 60 len , 70 deci.
    

    如上代码,通过DESCRIBE FIELD取得字段类型、长度、小数位数,并结合内表里的数量逐条赋值给变量输出。
    WRITE输出格式:字段名称(字符)、字段说明(字符)、字段值(结构)、字段类型(typ)、长度(len)、小数位数(deci)。
    如上5部分代码按顺序组合在一起,则是此开发实践的完整实现代码。

    本实践小结:

    1、控制语句
    2、DESCRIBE FIELD关键字

    相关文章

      网友评论

          本文标题:03ABAP语法,A3-显示物料记录的表字段值和属性

          本文链接:https://www.haomeiwen.com/subject/hgvpnxtx.html