*&----------------------------------------------------------------------*

REPORT  ZZ_CGBB_01.

*声明表
TABLES: EKKO,
        EKPO,
        KONV,
        MSEG,
        MKPF.

*内表声明
DATA:
      "表名
      BEGIN OF GIT_EKKO OCCURS 0,
        EBELN TYPE EKKO-EBELN,             "采购凭证号
        BUKRS TYPE EKKO-BUKRS,             "公司代码
        BSART TYPE EKKO-BSART,             "采购凭证类型
        KNUMV TYPE EKKO-KNUMV,             "单据条件数
      END OF GIT_EKKO,

BEGIN OF GIT_EKPO OCCURS 0,
        EBELN TYPE EKPO-EBELN,             "采购凭证号
        EBELP TYPE EKPO-EBELP,             "采购凭证的项目编号
        EMATN TYPE EKPO-EMATN,             "物料号
        BUKRS TYPE EKPO-BUKRS,             "公司代码
        TXZ01 TYPE EKPO-TXZ01,             "短文本
      END OF GIT_EKPO,

BEGIN OF GIT_KONV OCCURS 0,
        KNUMV TYPE KONV-KNUMV,             "单据条件数
        KPOSN TYPE KONV-KPOSN,             "条件项目号
        STUNR TYPE KONV-STUNR,             "步骤编号
        ZAEHK TYPE KONV-ZAEHK,             "条件计数器
        KSCHL TYPE KONV-KSCHL,             "条件类型
        KBETR TYPE KONV-KBETR,             "价格
      END OF GIT_KONV,

BEGIN OF GIT_MSEG OCCURS 0,
        MBLNR TYPE MSEG-MBLNR,             "物料凭证编号
        MJAHR TYPE MSEG-MJAHR,             "物料凭证年度
        ZEILE TYPE MSEG-ZEILE,             "物料凭证中的项目
        MENGE TYPE MSEG-MENGE,             "数量
        MEINS TYPE MSEG-MEINS,             "基本计量单位
        EBELN TYPE MSEG-EBELN,             "采购凭证号
        EBELP TYPE MSEG-EBELP,             "采购凭证的项目编号
      END OF GIT_MSEG,

BEGIN OF GIT_MKPF OCCURS 0,
        MBLNR TYPE MKPF-MBLNR,             "物料凭证编号
        MJAHR TYPE MKPF-MJAHR,             "物料凭证年度
        BUDAT TYPE MKPF-BUDAT,             "凭证中的过帐日期
      END OF GIT_MKPF,

BEGIN OF GIT_RESULT OCCURS 0,
        EBELN TYPE EKKO-EBELN,             "采购凭证号
        EBELP TYPE EKPO-EBELP,             "采购凭证的项目编号
        BSART TYPE EKKO-BSART,             "采购凭证类型
        EMATN TYPE EKPO-EMATN,             "物料号
        TXZ01 TYPE EKPO-TXZ01,             "短文本
        BUDAT TYPE MKPF-BUDAT,             "凭证中的过帐日期
        MENGE TYPE MSEG-MENGE,             "数量
        MEINS TYPE MSEG-MEINS,             "基本计量单位
        JIAGE01 TYPE MSEG-MENGE,                            "PB00价格
        JINE01 TYPE MSEG-MEINS,                             "PB00金额
        JIAGE02 TYPE MSEG-MENGE,           "折扣
        JINE02 TYPE MSEG-MEINS,            "折扣金额
      END OF GIT_RESULT.

*变量申明
*RANGES: r_hkont      FOR bseg-hkont.            "G/L Account

*常量申明
*CONSTANTS:
*c_awtyp_vbrr    TYPE bkpf-awtyp VALUE 'VBRR',      "Refer. Transaction

TYPE-POOLS: slis.       "引用ALV显示功能所需要的类型库

DATA: gt_fieldcat TYPE slis_t_fieldcat_alv,  "参考slis类型库中的t_fieldcat_alv定义变量。
      prg LIKE sy-repid.

*选择屏幕申明
************************************************************************
*                      选择屏幕申明                             *
************************************************************************
SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS:
   s_BUKRS for EKKO-BUKRS OBLIGATORY,         "Company code
   s_BUDAT FOR MKPF-BUDAT,
   s_EBELN FOR EKKO-EBELN,
   s_BSART FOR EKKO-BSART,
   s_EMATN FOR EKPO-EMATN.
SELECTION-SCREEN: END OF BLOCK b1.

*主程序
************************************************************************
*                      Start of selection                              *
************************************************************************
START-OF-SELECTION.

*   Main process
  PERFORM frm_main_process.

*&---------------------------------------------------------------------*
*&      Form  frm_main_process
*&---------------------------------------------------------------------*
*       main process
*----------------------------------------------------------------------*
FORM frm_main_process .
* 取数
  PERFORM frm_get_data.
* 整合数据
  PERFORM frm_merge_data.
* 显示数据
  PERFORM frm_display_data.
ENDFORM.                    " frm_main_process

*&---------------------------------------------------------------------*
*&      Form  FRM_GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_GET_DATA .
  SELECT
    EBELN  "采购凭证号
    BUKRS ""公司代码
    BSART  "采购凭证类型
    KNUMV  "单据条件数

INTO CORRESPONDING FIELDS OF TABLE GIT_EKKO
    FROM EKKO
   WHERE EBELN IN S_EBELN   "采购凭证号
     AND BUKRS IN S_BUKRS   "公司代码
     AND BSART IN S_BSART.  "采购凭证类型    屏幕选择里有的用in

IF GIT_EKKO[] IS NOT INITIAL.
     SELECT
      EBELN  "采购凭证号
      EBELP  "采购凭证的项目编号
      EMATN  "物料号
      TXZ01  "短文本

INTO CORRESPONDING FIELDS OF TABLE GIT_EKPO
      FROM EKPO
      FOR ALL ENTRIES IN GIT_EKKO
        WHERE EMATN IN S_EMATN
          AND EBELN = GIT_EKKO-EBELN.

IF GIT_EKPO[] IS NOT INITIAL.
        SELECT
           MBLNR  "物料凭证编号
           MJAHR  "物料凭证年度
           ZEILE  "物料凭证中的项目
           MENGE  "数量
           MEINS  "基本计量单位
           EBELN  "采购凭证号
           EBELP  "采购凭证的项目编号

INTO CORRESPONDING FIELDS OF TABLE GIT_MSEG
           FROM MSEG
           FOR ALL ENTRIES IN GIT_EKPO
             WHERE EBELP = GIT_EKPO-EBELP
               AND EBELN = GIT_EKPO-EBELN.
           IF GIT_EKPO[] IS NOT INITIAL.
             SELECT
              MBLNR  "物料凭证编号
              MJAHR  "物料凭证年度
              BUDAT  "凭证中的过帐日期

INTO CORRESPONDING FIELDS OF TABLE GIT_MKPF
              FROM MKPF
              FOR ALL ENTRIES IN GIT_MSEG
                WHERE MBLNR = GIT_MSEG-MBLNR
                  AND MJAHR = GIT_MSEG-MJAHR
                  and BUDAT in s_BUDAT.
           endif.

endif.

endif.

IF GIT_EKKO[] IS NOT INITIAL.
     SELECT
      KNUMV  "单据条件数
      KPOSN  "条件项目号
      STUNR  "步骤编号
      ZAEHK  "条件计数器
      KSCHL  "条件类型
      KBETR  "价格

INTO CORRESPONDING FIELDS OF TABLE GIT_KONV
      FROM KONV
      FOR ALL ENTRIES IN GIT_EKKO
        WHERE KNUMV = GIT_EKKO-KNUMV
          AND ( KSCHL = 'PB00' OR KSCHL = 'SKTO' ).
   endif.
ENDFORM.                    " FRM_GET_DATA

*&---------------------------------------------------------------------*
*&      Form  FRM_MERGE_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_MERGE_DATA .
 SORT GIT_MKPF BY MBLNR MJAHR.
 SORT GIT_EKPO BY EBELN EBELP.
 SORT GIT_EKKO BY EBELN.
 SORT GIT_KONV BY KNUMV.

LOOP AT GIT_MSEG INTO GIT_MSEG.
    READ TABLE GIT_MKPF INTO GIT_MKPF
      WITH KEY MBLNR = GIT_MSEG-MBLNR
               MJAHR = GIT_MSEG-MJAHR
               BINARY SEARCH.
    IF SY-SUBRC = 0.
      GIT_RESULT-EBELN = GIT_MSEG-EBELN.             "采购凭证号
      GIT_RESULT-EBELP = GIT_MSEG-EBELP.             "采购凭证的项目编号
      GIT_RESULT-BUDAT = GIT_MKPF-BUDAT.             "凭证中的过帐日期
      GIT_RESULT-MENGE = GIT_MSEG-MENGE.             "数量
      GIT_RESULT-MEINS = GIT_MSEG-MEINS.             "基本计量单位

READ TABLE GIT_EKPO INTO GIT_EKPO
        WITH KEY EBELN = GIT_MSEG-EBELN
                 EBELP = GIT_MSEG-EBELP
                 BINARY SEARCH.
      IF SY-SUBRC = 0.
        GIT_RESULT-TXZ01 = GIT_EKPO-TXZ01.             "短文本
        GIT_RESULT-EMATN = GIT_EKPO-EMATN.             "物料号

READ TABLE GIT_EKKO INTO GIT_EKKO
           WITH KEY EBELN = GIT_EKPO-EBELN
                   BINARY SEARCH.
         IF SY-SUBRC = 0.
           GIT_RESULT-BSART = GIT_EKKO-BSART.             "采购凭证类型

READ TABLE GIT_KONV INTO GIT_KONV
             WITH KEY KNUMV = GIT_EKKO-KNUMV
                      KSCHL = 'PB00'
                     BINARY SEARCH.
           IF SY-SUBRC = 0.
             GIT_RESULT-JIAGE01 = GIT_KONV-KBETR.             "PB00价格
             GIT_RESULT-JINE01 = GIT_KONV-KBETR * GIT_RESULT-MENGE.   "PB00金额
            clear GIT_KONV.
           endif.

READ TABLE GIT_KONV INTO GIT_KONV
             WITH KEY KNUMV = GIT_EKKO-KNUMV
                      KSCHL = 'SKTO'
                     BINARY SEARCH.
           IF SY-SUBRC = 0.
             GIT_RESULT-JIAGE01 = GIT_KONV-KBETR.             "PB00价格
             GIT_RESULT-JINE01 = GIT_KONV-KBETR * GIT_RESULT-MENGE.   "PB00金额
            clear GIT_KONV.
           endif.

clear GIT_EKKO.
         endif.

clear GIT_EKPO.
      endif.
      append git_result to git_result.
      clear git_result.
     clear GIT_MKPF.
    endif.

clear git_mseg.
  endLOOP.
ENDFORM.                    " FRM_MERGE_DATA

*&---------------------------------------------------------------------*
*&      Form  FRM_DISPLAY_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_DISPLAY_DATA .
DATA gs_fieldcat LIKE LINE OF gt_fieldcat.
  DEFINE fc.
    gs_fieldcat-fieldname  = &1.
    if not &2 is initial.
      gs_fieldcat-ref_tabname = &2.
      gs_fieldcat-ref_fieldname = &3.
    else.
      gs_fieldcat-outputlen = &4.
      gs_fieldcat-seltext_l = &5.
    endif.
    gs_fieldcat-lzero = &6.
    append gs_fieldcat to gt_fieldcat.
    clear gs_fieldcat.
  END-OF-DEFINITION.
  FC 'EBELN'     ''  ''  '30'      '采购凭证号'                       ''.
  FC 'EBELP'     ''  ''  '30'      '采购凭证的项目编号'                   ''.
  FC 'BSART'     ''  ''  '30'       '采购凭证类型'                      ''.
  FC 'EMATN'     ''  ''  '30'      '物料号'                       ''.
  FC 'TXZ01'     ''  ''  '30'       '短文本'                         ''.
  FC 'BUDAT'     ''  ''  '30'      '凭证中的过帐日期'                       ''.
  FC 'MENGE'     ''  ''  '30'      '数量'                  ''.
  FC 'MEINS'     ''  ''  '30'      '基本计量单位'                     ''.
  FC 'JIAGE01'     ''  ''  '30'      'PB00价格'                   ''.
  FC 'JINE01'     ''  ''  '30'       'PB00金额'               ''.
  FC 'JIAGE02'     ''  ''  '30'      '折扣'                     ''.
  FC 'JINE02'     ''  ''  '30'       '折扣金额'              ''.

prg = sy-repid.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       EXPORTING
            i_callback_program = prg
            it_fieldcat        = gt_fieldcat
*           is_layout          = ls_layout
*           i_save             = 'A'
       TABLES
            t_outtab           = git_result.
ENDFORM.                    " FRM_DISPLAY_DATA

SAP abap采购报表开发相关推荐

  1. SAP MM 采购报表中Delivery Date的显示

    SAP MM 采购报表中Delivery Date的显示 经反复研究与测试,得知ME2L/ME2N/ME2M等报表是无法很友好的显示Delivery Date. 以ME2L为例, Scope of l ...

  2. SAP ABAP 配置表开发常见问题总结与开发指南(SM30 SM34 SE54)

    SAP ABAP 配置表开发常见问题总结与开发指南(SM30 SM34 SE54) 引言: 需求开发时,我们经常会通过配置表实现配置/基础/主数据的维护,但企业实际应用中,开发的配置表经常存在种种问题 ...

  3. 如何在 SAP ABAP ALV 报表里以交通灯的方式显示某一列的值

    在本教程的这篇步骤里,我们介绍了 ALV 层次顺序表的输出实现明细. SAP ABAP ALV 层次顺序表如何使用双表头(Multiple Headers)进行数据输出 本文介绍如何在 ALV 层次顺 ...

  4. SAP abap alv报表实例

    这是一个sap alv报表实例 REPORT ztest005.*定义类型组 TYPE-POOLS: abap,slis.*定义ALV变量 DATA : lt_fieldcat TYPE slis_t ...

  5. SAP ABAP屏幕(Dialog)开发中,获取文本框的内容并且存到数据库中。

    续更SAP相关内容. 这次讲一下在ABAP屏幕开发中怎样获取文本框的值. 在C# Winform开发中,我们直接 textBox.Text就可以取到文本框的值,但在ABAP中要繁琐一些. 好了,操作. ...

  6. 具备自动刷新功能的 SAP ABAP ALV 报表

    该报表主要结构如下,完整代码见文末. f_call_rfc_wait: 发起异步调用,等待 1 秒钟,来模拟每隔 1 秒刷新屏幕的效果. f_display_data: ALV 常规操作,调用函数 R ...

  7. SAP MD04相关报表开发

    场景描述:MD04是MRP的运行结果,逻辑复杂,功能比较强大.平时可能会遇到业务人员想要将MD04里面某些字段取出来用ALV展示的需求,比如库存短缺报表等,可以用下面的方式来取MD04里面的数据,这个 ...

  8. 关于 SAP ABAP 报表的多语言显示问题试读版

    本专栏计划的文章数在 150 篇左右,到 2022年11月9日为止,目前已经更新了 63 篇,专栏完成度为 42% 笔者这套零基础快速学习 ABAP从 2021年4月10日写下第一篇文章以来,感谢广大 ...

  9. 视频教程-SAP ABAP 开发入门-其他

    SAP ABAP 开发入门 16年IT行业从业经验,本科学机械工程及自动化专业,毕业后转行IT行业至今:期间取得北航软件学院软件工程专业硕士学位:工作期间主要从事过项目实施,软件开发工作:擅长系统架构 ...

  10. SAP ABAP 查找更改文档对象(SCDO)和表关系的在线字典1/2(全)

    SAP ABAP 查找更改文档对象(SCDO)和表关系的在线字典1/2(全) 简介: 一个 SAP 更改文档对象(SCDO:SAP Change Document Object )由一组更改表和更改设 ...

最新文章

  1. (C++)字符数组初始化的两种方法
  2. mysql charindex_mysql中替代charindex的函数substring_index、find_in_set | 学步园
  3. java 中的 Scanner
  4. 自动部署 管道 ci cd_自动化测试在CI CD管道中的作用
  5. [面试题]事件循环经典面试题解析
  6. C#LeetCode刷题之#69-x 的平方根(Sqrt(x))
  7. tcs标准编写软件_tcs2010下载-tcs2010(中国标准编写模板) 免费版 - 河东下载站
  8. python合并相同内容单元格_快速合并单元格相同项的内容
  9. Spring Cloud微服务实战
  10. 手机如何测光照度_手机摄影,如何进行准确的测光?一篇文章教会你玩转“测光”...
  11. 程序员表白技巧:程序员木讷? 我反手就是一串代码
  12. rpm -e卸载mysql_rpm
  13. APP逆向案例之(三)sign 参数破解
  14. 关于PYTHON里SUPER使用时报的typeerror错误 - dongua的日志 - 网易博客
  15. 2018美团CodeM 题解
  16. 马太效应(Matthew effect) 强者愈强 弱者愈弱
  17. 2007年中国优秀无线互联网站点TOP50点评
  18. 【Pandas数据处理100例】(三十一):Pandas读取Excel(xlsx)表格文件
  19. Windows常用快捷键(提高您的工作效率轻松完成日常工作)
  20. 关闭windows安全警报_关闭 Windows 10 系统中自带 Defender 防病毒软件三种方法

热门文章

  1. 弱水三千的由来(转)
  2. 功率因数 matlab,基于Matlab的功率因数校正电路的仿真分析
  3. 手机黑圆点怎么打_输入法:外国人名字中间的点(实心小黑点)怎么打出来?...
  4. 在IE浏览器访问网址时显示证书错误,导航已阻止
  5. 河海大学计算机信息学院2013年考研录取名单,河海大学地学院2013年考研录取名单...
  6. 网易软件测试面试总结分享——送给正在找工作的你
  7. Dex.top新手使用教程
  8. Python基础数据类型:字符串,列表,元组,集合,字典用法总结
  9. 20205月6日服务器维护,国服12月6日维护公告:各大区服务器分时段维护
  10. 量化交易系统之python+mysql(二)