技术实现

实现步骤

思路:先实现视图和结构这类基础组件,再向上建立函数

  • 对整理好的数据块构建视图和结构,视图以ZV_、结构以ZST_命名
  • 视图用于查询,结构用于输出,之间是一对一关系
  • 保证视图结果可以装载到结构中
  • 视图有的字段结构中都有,结构可以增加字段用于统计和额外信息的装载
  • 构建视图
    se11点击创建ZV_EKHO采购订单数据块

    EKKO\EKPO两表关联,左边输入表名,右边输入表名和关联字段

    选择需要的字段

    选择表及字段

    得到最终结果并激活

  • 构建结构
    se11点击创建ZST_EKHO采购订单结构

    由于结构继承视图的字段,所以有两种快速的构建方法,其一是直接先调用ZV_EKHO的结构,再增加统计字段

    其二是不调用结构,适用于需要自定义结构字段的顺序,则需要从ZV_EKHO中COPY字段(时间太多想体验一下手写也可以直接手写),首先打开ZV_EKHO视图

    然后进入结构ZST_EKHO的修改界面,点击对应的COMPONENT列,CTRL+V粘贴

    再到ZV_EKHO中复制元素列,复制相同的列和行

    粘贴到结构ZST_EKHO中

    点击货币/数量页签,找到有空白行的参考表,用se11到该字段对应的数据表,选同样的页签,找到对应的字段行,复制参考表和参考字段,然后激活结构即可。如出现不能激活的情况一般都是没有填好参考表和参考字段。

    结构构建成功,以此类推,构建所有的视图和结构

    共创建一对一数据块视图结构如下:

    • ZV_EKHO、ZST_EKHO:采购订单主体
    • ZV_EKET、ZST_EKET:交货计划
    • ZV_EKET、ZST_EKET:交货计划
    • ZV_MSEG、ZST_MSEG:物料凭证
    • ZV_EKKN、ZST_EKKN:账户分配
    • ZV_EKBE、ZST_EKBE:订单历史
    • ZV_LIKP、ZST_LIKP:交货单抬头
    • ZV_LIPS、ZST_LIPS:交货单项目
    • ZV_QALS、ZST_QALS:检验批记录
    • ZV_QAVE、ZST_QAVE:检验批使用决策
    • ZV_QAMV、ZST_QAMV:定性检验
      .
      另单独创建使用结构如下:
    • ZST_CONDITION:查询条件输入结构
    • ZST_COND_SAP:SAP查询条件输入结构
    • ZST_EKPO2:采购订单项目号输入结构
  • 构建接口
    使用SE37,命名为ZF_MM_01

    定义为为RFC函数

    定义IMPORT参数

    IMPORT参数说明:

    • I_WHERE:
      直接SQL条件,where后面的查询条件,需符合abap opensql语法,I_WHERE<>’’时,所有其他查询条件均不生效
    • I_HEAD:
      输出采购订单数据块标识,默认输出’X’,可以输出ZST_EKHO内表
    • I_PLAN:
      输出采购交货计划数据块标识,默认不输出’’,可以输出ZST_EKET内表
    • I_MSEG:
      输出物料凭证数据块标识,默认不输出’’,可以输出ZST_MSEG内表
    • I_EKKN:
      输出账户分配数据块标识,默认不输出’’,可以输出ZST_EKKN内表,工序外协专属
    • I_LIKP:
      输出交货单数据块标识,默认不输出’’,可以输出ZST_LIKP、ZST_LIPS内表,调拨单、事业部间转储单、公司间转储单专属
    • I_HISTORY:
      输出采购订单历史数据块标识,默认不输出’’,可以输出ZST_EKEB内表
    • I_QUALITY:
      输出质检数据块标识,默认不输出’’,可以输出ZST_QALS、ZST_QAVE、ZST_QAMV内表,标准采购订单、分包发料专属

    定义EXPORT参数

    ERPORT参数说明:

    • ES_RETURN:
      ES_RETURN是ZST_FM_EXPMSG结构,由EXFLAG、EXMSG、RVAL1-RVAL9组成,全部执行成功EXFLAG返回Y,否则N;EXMSG返回消息文字描述,RVAL1-RVAL9记录其他自定义消息

    定义TABLES

    TABLES参数说明:

    • T_COND:
      第三方系统简单条件内表,只能使用=、>、<、>=、<=、<>、between,用法参照例子
    • T_COND_SAP:
      第二优先级查询条件内表,用于SAP系统报表条件写入,调用时把ranges的内表数据写入,把parameters参数按ranges单个条件的格式写入,用法参照例子
    • T_EKPO:
      订单单号、项目号条件输入表,适用于查询条件不在订单主体,调用方需先查询出单号、项目号的情况,再把信息传给接口,实现变通查询方法。只要T_EKPO表里有数据,就会自动在查询时启动订单表头和表体的匹配查询条件,与其他的输入查询条件是and的关系
    • T_EKHO:
      订单主体数据块,由输入参数I_HEAD控制输出
    • T_EKET:
      交货计划数据块,由输入参数I_PLAN控制输出
    • T_MSEG:
      物料凭证数据块,由输入参数I_MSEG控制输出,分包发料供应商分包库存存储地
    • T_EKKN:
      工序外协账户分配数据块,由输入参数I_EKKN控制输出
    • T_EKBE
      采购订单历史数据块,由输入参数I_HISTORY控制输出
    • T_LIKP:
      交货单表头数据块,由输入参数I_LIKP控制输出
    • T_LIPS:
      交货单表体数据块,由输入参数I_LIKP控制输出
    • T_QALS:
      QALS检验批记录数据块,由输入参数I_QUALITY控制输出
    • T_QAVE:
      QAVE检验批使用决策数据块,由输入参数I_QUALITY控制输出
    • T_QAMV:
      QAMV定性检验数据块,由输入参数I_QUALITY控制输出

    使用函数ZF_CONVERT_SQL接受查询条件,该函数可解析3种条件输入,分别是直接SQL where 条件、SAP报表查询内部条件、及常用条件,使用方法见ZF_CONVERT_SQL技术说明文档。

      CALL FUNCTION 'ZF_CONVERT_SQL'
        EXPORTING
          I_TABNAME  = I_TABNAME  "查询字段参考表
          I_WHERE    = I_WHERE    "直接SQL where 后面的条件
        IMPORTING
          ES_MSG     = ES_MSG
        TABLES
          T_COND_SAP = T_COND_SAP  "sap查询条件内表
          T_COND     = T_COND      "常用查询内表
          T_WHERE    = V_WHE.           "输出的条件结构

    接口以采购订单为源头,根据输入条件查询到订单主体数据块:T_EKHO,后续数据块根据业务流程和参数选择逐一输出,以关键字或索引作为for all entrance in 的条件,力求快速查询。

        SELECT EBELN EBELP ETENR RSNUM
          FROM EKET
          INTO CORRESPONDING FIELDS OF TABLE IT_EKET
           FOR ALL ENTRIES IN T_EKHO
         WHERE EBELN = T_EKHO-EBELN  AND   "采购订单编号
               EBELP = T_EKHO-EBELP.         "采购订单行项目

    接口分为 数据定义区、函数日志记录区、输入条件预处理区、SQL条件转化区、数据查询区,程序结构清晰易读,让后续实现者尽可能减少代码实现,从而把精力放在业务数据的梳理上,主要修改区域是数据查询区。在查询等容易出错地方,增加TRY数据捕获,避免出现崩溃的情况。详见代码

文档更新时间: 2018-10-16 04:04   作者:kuangben1