sap abap销售报表开发代码

*-----------------------------------------------------------------------*

REPORT  Z_XIAOSHOU_01. "根据自己的程序名修改

TABLESVBAK,
        VBAP,
        KONV,
        MSEG,
        VBFA,
        MKPF.


DATA:
      "表名
      BEGIN OF GIT_VBAK OCCURS 0,
        VBELN TYPE VBAK-VBELN,             "销售和分销凭证号
        VKORG TYPE VBAK-VKORG,             "销售组织
        AUART TYPE VBAK-AUART,             "销售凭证类型
        WAERK TYPE VBAK-WAERK,             "货币单位
        KNUMV TYPE VBAK-KNUMV,             "单据条件数
      END OF GIT_VBAK,

      BEGIN OF GIT_VBAP OCCURS 0,
        VBELN TYPE VBAP-VBELN,             "销售和分销凭证号
        POSNR TYPE VBAP-POSNR,             "销售凭证行项目
        MATNR TYPE VBAP-MATNR,             "物料号
        ARKTX TYPE VBAP-ARKTX,             "短文本
      END OF GIT_VBAP,

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

      BEGIN OF GIT_VBFA OCCURS 0,
        VBELV TYPE VBFA-VBELV,             "先前的销售和分销凭证
        POSNV TYPE VBFA-POSNV,             "SD凭证的先前项目
        VBELN TYPE VBFA-VBELN,             "后续销售和分销凭证号
        POSNN TYPE VBFA-POSNN,             "SD凭证的后续项目
        VBTYP_N TYPE VBFA-VBTYP_N,         "后继凭证的凭证类别
        RFMNG TYPE VBFA-RFMNG,             "参考数量以基本计量单位计
      END OF GIT_VBFA,

      BEGIN OF GIT_MKPF OCCURS 0,
        MBLNR TYPE MKPF-MBLNR,             "物料凭证编号
        MJAHR TYPE MKPF-MJAHR,             "物料凭证年度
        CPUDT TYPE MKPF-CPUDT,             "会计凭证输入日期
      END OF GIT_MKPF,

      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,             "基本计量单位
      END OF GIT_MSEG,

      BEGIN OF GIT_RESULT OCCURS 0,
        VKORG TYPE VBAK-VKORG,             "销售组织
        VBELN TYPE VBAP-VBELN,             "销售订单号
        POSNR TYPE VBAP-POSNR,             "销售凭证项目
        AUART TYPE VBAK-AUART,             "销售凭证类型
        MATNR TYPE VBAP-MATNR,             "物料号
        ARKTX TYPE VBAP-ARKTX,             "短文本
        CPUDT TYPE MKPF-CPUDT,             "发货日期
        MENGE TYPE MSEG-MENGE,             "数量
        MEINS TYPE MSEG-MEINS,             "基本计量单位
        WAERK TYPE VBAK-WAERK,             "货币单位
        JIAGE01 TYPE MSEG-MENGE,           "列表价格(PR00)
        JINE01 TYPE MSEG-MEINS,            "列表金额
        JIAGE02 TYPE MSEG-MENGE,           "成本价(VPRS)
        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-POOLSslis.       "引用ALV显示功能所需要的类型库

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

*选择屏幕申明
************************************************************************
*                      选择屏幕申明                             *
************************************************************************
SELECTION-SCREENBEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS:
   s_VKORG for VBAK-VKORG OBLIGATORY,         "销售组织
   s_VBELN FOR VBAK-VBELN,         "销售订单号
   s_CPUDT FOR MKPF-CPUDT,         "凭证中的过帐日期
   s_MATNR FOR VBAP-MATNR.         "物料号

SELECTION-SCREENEND 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
    VBELN  "销售和分销凭证号
    VKORG  "销售组织
    AUART  "销售凭证类型
    WAERK  "货币单位
    KNUMV  "单据条件数

    INTO CORRESPONDING FIELDS OF TABLE GIT_VBAK
    FROM VBAK
   WHERE VBELN IN S_VBELN   "销售订单
     AND VKORG IN S_VKORG.   "销售组织

  IF GIT_VBAK[] IS NOT INITIAL.

    SELECT
        VBELN  "销售和分销凭证号
        POSNR  "销售凭证行项目
        MATNR  "物料号
        ARKTX  "销售订单项目短文本

        INTO CORRESPONDING FIELDS OF TABLE GIT_VBAP
        FROM VBAP
        FOR ALL ENTRIES IN GIT_VBAK
           WHERE VBELN GIT_VBAK-VBELN   "销售订单
           AND MATNR IN S_MATNR.   "物料号

    IF GIT_VBAP[] IS NOT INITIAL.

      SELECT
          VBELV  "先前的销售和分销凭证
          POSNV  "SD凭证的先前项目
          VBELN  "后续销售和分销凭证号
          POSNN  "SD凭证的后续项目
          VBTYP_N  "后继凭证的凭证类别
          RFMNG  "参考数量以基本计量单位计算

          INTO CORRESPONDING FIELDS OF TABLE GIT_VBFA
          FROM VBFA
          FOR ALL ENTRIES IN GIT_VBAP
             WHERE VBELN GIT_VBAP-VBELN   "销售订单
             AND POSNV GIT_VBAP-POSNR.   "销售凭证行项目

      IF GIT_VBFA[] IS NOT INITIAL.

        SELECT
           MBLNR  "物料凭证编号
           MJAHR  "物料凭证年度
           ZEILE  "物料凭证中的项目
           MENGE  "数量
           MEINS  "基本计量单位

           INTO CORRESPONDING FIELDS OF TABLE GIT_MSEG
           FROM MSEG
           FOR ALL ENTRIES IN GIT_VBFA
              WHERE MBLNR GIT_VBFA-VBELN.   "物料凭证编号

        IF GIT_MSEG[] IS NOT INITIAL.

          SELECT
           MBLNR  "物料凭证编号
           MJAHR  "物料凭证年度
           CPUDT  "会计凭证输入日期

           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 CPUDT in S_CPUDT.   "会计凭证输入
        endif.

      endif.

    endif.

  endif.

  IF GIT_VBAK[] IS NOT INITIAL.

    SELECT
        KNUMV  "单据条件数
        KPOSN  "条件项目号
        STUNR  "步骤编号
        ZAEHK  "条件计数器
        KBETR  "价格( 条件金额或百分数 )
        KSCHL  "条件类型

        INTO CORRESPONDING FIELDS OF TABLE GIT_KONV
        FROM KONV
        FOR ALL ENTRIES IN GIT_VBAK
           WHERE KNUMV GIT_VBAK-KNUMV.   "单据条件数
  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_VBFA BY VBELV POSNV.
 SORT GIT_VBAP BY VBELN POSNR.
 SORT GIT_VBAK BY VBELN.
 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-CPUDT GIT_MKPF-CPUDT.             "发货日期
      GIT_RESULT-MENGE GIT_MSEG-MENGE.             "数量
      GIT_RESULT-MEINS GIT_MSEG-MEINS.             "基本计量单位

      READ TABLE GIT_VBFA INTO GIT_VBFA
        WITH KEY VBELN GIT_MSEG-MBLNR
                 BINARY SEARCH.

      IF SY-SUBRC 0.

        READ TABLE GIT_VBAP INTO GIT_VBAP
         WITH KEY VBELN GIT_VBFA-VBELN
                  POSNR GIT_VBFA-POSNV
                  BINARY SEARCH.
        IF SY-SUBRC 0.
          GIT_RESULT-VBELN GIT_VBAP-VBELN.             "销售订单号
          GIT_RESULT-POSNR GIT_VBAP-POSNR.             "销售凭证项目
          GIT_RESULT-MATNR GIT_VBAP-MATNR.             "物料号
          GIT_RESULT-ARKTX GIT_VBAP-ARKTX.             "短文本

          READ TABLE GIT_VBAK INTO GIT_VBAK
            WITH KEY VBELN GIT_VBAP-VBELN
                  BINARY SEARCH.
          IF SY-SUBRC 0.
            GIT_RESULT-VKORG GIT_VBAK-VKORG.             "销售组织
            GIT_RESULT-AUART GIT_VBAK-AUART.             "销售凭证类
            GIT_RESULT-WAERK GIT_VBAK-WAERK.             "货币单位

              READ TABLE GIT_KONV INTO GIT_KONV
                WITH KEY KNUMV GIT_VBAK-KNUMV
                         KSCHL ' PB00 '
                      BINARY SEARCH.
              IF SY-SUBRC 0.
                GIT_RESULT-JIAGE01 GIT_KONV-KBETR.             "价格
                GIT_RESULT-JINE01 GIT_KONV-KBETR * GIT_RESULT-MENGE.             "列表金
                clear git_KONV"清理结果工作区
              endif.

              READ TABLE GIT_KONV INTO GIT_KONV
                WITH KEY KNUMV GIT_VBAK-KNUMV
                         KSCHL ' VPRS'
                      BINARY SEARCH.
              IF SY-SUBRC 0.
                GIT_RESULT-JIAGE01 GIT_KONV-KBETR.             "价格
                GIT_RESULT-JINE01 GIT_KONV-KBETR * GIT_RESULT-MENGE.             "列表金
                clear git_KONV"清理结果工作区
              endif.

            clear git_VBAK"清理结果工作区
          endif.

          clear git_VBAP"清理结果工作区
        endif.

        clear git_VBFA"清理结果工作区
      endif.

      append git_result to git_result."输出结果
      clear git_result"清理结果工作区
    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 'VKORG'     ''  ''  '30'      '销售组织'                       ''.
  FC 'VBELN'     ''  ''  '30'      '销售订单号'                   ''.
  FC 'POSNR'     ''  ''  '30'       '销售凭证项目'                      ''.
  FC 'AUART'     ''  ''  '30'      '凭证中的过帐日期'                       ''.
  FC 'MATNR'     ''  ''  '30'      '物料号'                       ''.
  FC 'ARKTX'     ''  ''  '30'       '短文本'                         ''.
  FC 'CPUDT'     ''  ''  '30'      '凭证中的过帐日期'                       ''.
  FC 'MENGE'     ''  ''  '30'      '数量'                  ''.
  FC 'MEINS'     ''  ''  '30'      '基本计量单位'                     ''.
  FC 'WAERK'     ''  ''  '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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值