ABAP 外销财务凭证与客户采购合同对应关系报表

目的:将运输部开具的“出口商品发票”匹配到确认销售收入的凭证后面。
说明:外销每月的销售收入凭证都要将对应的“出口商品发票”匹配到后面作为附件装订成册。
此类凭证每个月近600张,都要找到对应的“商品发票”,工作量单纯且耗费大量时间。
目前采用的方法是:将商品发票按客户分类排序,再分客户到SAP查询每个客户的收入确认凭证,根据金额找到对应的凭证号,放到对应的凭证后面。
此类简单耗时的工作希望可以借助系统更快的完成。

处理逻辑:通过会计凭证(表:BKPF)找到相应的发票号(表:VBRK)、再找到对应的销售订单(表:VBRP)取出客户采购订单编号(表:VBAK)

REPORT  YWFIR040.

TABLES:BKPF,"会计核算凭证抬头
       VBRK,"出具发票:抬头数据
       VBAK.

DATA:BEGIN OF ITAB OCCURS 0,
     BUKRS LIKE BKPF-BUKRS,   " 公司代码
     BELNR LIKE BKPF-BELNR,   "会计凭证号码
     GJAHR LIKE BKPF-GJAHR,   "会计年度
     BUDAT LIKE BKPF-BUDAT,   "记账日期
     BLDAT LIKE BKPF-BLDAT,   "凭证日期
     XBLNR LIKE BKPF-XBLNR,    "参照  BKPF-XBLNR ==VBRK-VBELN
     VBELN LIKE VBRK-VBELN,   "发票号码
     KUNRG LIKE VBRK-KUNRG,   "客户代码
     VKORG LIKE VBRK-VKORG,   "销售组织
     VTWEG LIKE VBRK-VTWEG,   "分销渠道
     NAME1 TYPE KNA1-NAME1,        "为合作伙伴显示文本 (姓名, 城市, 国家, 街道)
     AUBEL LIKE VBRP-AUBEL,
*     BSTKD LIKE VBKD-BSTKD,
     BSTNK LIKE VBAK-BSTNK,    "合同号码
     NETWR LIKE VBRK-NETWR,   "净价值
     WAERK LIKE VBRK-WAERK,    "货币
     SELFI,
  END OF ITAB.

*&--------------------画屏区域-----------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK FRAME1 WITH FRAME TITLE TEXT-000 .
SELECT-OPTIONS: R_BUKRS FOR BKPF-BUKRS OBLIGATORY DEFAULT '1010',   "公司代码
                R_VKORG FOR VBRK-VKORG,
                R_VTWEG FOR VBRK-VTWEG,
                R_BUDAT FOR BKPF-BUDAT.
SELECTION-SCREEN END OF BLOCK FRAME1.

*&-------------------------程序主区域-------------------------------------*
AT SELECTION-SCREEN OUTPUT.  "用户操作后屏幕输出事件
AT SELECTION-SCREEN.  "用户回车或单击后发生事件,不考滤屏幕输出
START-OF-SELECTION.  "正式程序运行到输出结果事件
  PERFORM GET_DATA.   "取数据
  PERFORM REPORT_DATA.  "显示数据


FORM GET_DATA.
  SELECT A~BUKRS A~BELNR A~GJAHR A~BUDAT A~BLDAT
         A~XBLNR B~VBELN B~VKORG B~VTWEG B~KUNRG B~NETWR B~WAERK
    INTO CORRESPONDING FIELDS OF TABLE ITAB
    FROM BKPF AS A JOIN VBRK AS B ON A~XBLNR = B~VBELN
    WHERE  A~BUKRS IN R_BUKRS
      AND  B~VKORG IN R_VKORG
      AND  B~VTWEG IN R_VTWEG
      AND  A~BUDAT IN R_BUDAT.

    LOOP AT ITAB.
     SELECT SINGLE AUBEL INTO ITAB-AUBEL FROM VBRP WHERE VBELN = ITAB-VBELN.  "取销售订单号
     SELECT SINGLE BSTNK INTO ITAB-BSTNK FROM VBAK WHERE VBELN = ITAB-AUBEL.  "通过销售订单号取PO号
     SELECT SINGLE NAME1 INTO ITAB-NAME1 FROM KNA1 WHERE KUNNR = ITAB-KUNRG.
    MODIFY ITAB.
ENDLOOP.
ENDFORM.

*&---------------------ALV变量声明区域---------------------------------*
TYPE-POOLS:SLIS.
DATA: FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE.
DATA: LAYOUT TYPE SLIS_LAYOUT_ALV .
DATA: S_VARIANT LIKE DISVARIANT.

*&-------------------------ALV数据展示区域----------------------------------*
FORM REPORT_DATA .
*  设置要显示的字段列表
  PERFORM SET_FIELDCAT.

* 给表格布局参数赋值
  LAYOUT-GET_SELINFOS    = 'X'.
  LAYOUT-COLWIDTH_OPTIMIZE = 'X'.  "列宽度自动根据内容优化
  LAYOUT-DETAIL_POPUP    = 'X'.
  LAYOUT-NO_KEYFIX       = 'X'.
  LAYOUT-BOX_FIELDNAME     = 'SELFI'.

  S_VARIANT-REPORT = SY-REPID.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'  "REUSE_ALV_LIST_DISPLAY
      EXPORTING
        I_CALLBACK_PROGRAM       = SY-REPID       "当前的程序名
        IS_LAYOUT                = LAYOUT       "表格样式 布局
        IT_FIELDCAT              = FIELDCAT[]  "要显示的列名,必填
        I_SAVE                   = 'A'
        IS_VARIANT               = S_VARIANT
      TABLES
         T_OUTTAB                 = ITAB "ALV数据输出使用的内表 必填
      EXCEPTIONS
         PROGRAM_ERROR            = 1
         OTHERS                   = 2.
ENDFORM.                    " ALV_REPORT_DATA
*&---------------------------------------------------------------------*

FORM SET_FIELDCAT .
  REFRESH FIELDCAT.
  PERFORM INPUT_FIELDCAT  USING 'BLDAT'  '记账日期'  ''  '' '' '' ''.
  PERFORM INPUT_FIELDCAT  USING 'BELNR'  '凭证号码'  ''  '' '' '' ''.
  PERFORM INPUT_FIELDCAT  USING 'VBELN'  '发票号码'  ''  '' '' '' ''.
  PERFORM INPUT_FIELDCAT  USING 'AUBEL'  '销售订单号码'  ''  '' '' '' ''.
  PERFORM INPUT_FIELDCAT  USING 'KUNRG'  '客户代码'  ''  '' '' '' ''.
  PERFORM INPUT_FIELDCAT  USING 'NAME1'  '客户全称' ''  '' '' '' ''.
  PERFORM INPUT_FIELDCAT  USING 'BSTNK'  '合同号码'  ''  '' '' '' ''.
  PERFORM INPUT_FIELDCAT  USING 'NETWR'  '凭证外币金额'  ''  '' '' '' ''.
  PERFORM INPUT_FIELDCAT  USING 'WAERK'  '货币'  ''  '' '' '' ''.
ENDFORM.                    " SET_FIELDCAT

*------------------------------------------------------------------------*
FORM INPUT_FIELDCAT USING ZID WENB KEYS GD COLOR REFTAB REFFILE.

  ADD 1 TO FIELDCAT-COL_POS.
  FIELDCAT-FIELDNAME =  ZID. " 对应的内表中的字段名称
  FIELDCAT-SELTEXT_M =  WENB. "ALV中显示的字段名称
  FIELDCAT-KEY = KEYS.
  FIELDCAT-FIX_COLUMN = GD .
  FIELDCAT-EMPHASIZE = COLOR.  "列颜色
  FIELDCAT-REF_TABNAME = REFTAB.
  FIELDCAT-REF_FIELDNAME = REFFILE.
  APPEND FIELDCAT.
  CLEAR FIELDCAT.

ENDFORM.                    "INPUT_FIELDCAT
*&---------------------------------------------------------------------*
*&      FORM  SET_PF_STATUS
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*      -->T_EXTAB    TEXT
*----------------------------------------------------------------------*
FORM SET_PF_STATUS USING T_EXTAB TYPE SLIS_T_EXTAB.
  DATA: S_EXTAB TYPE SLIS_EXTAB. "要被排除的按钮的列表
  SET PF-STATUS 'STANDARD_FULLSCREEN' EXCLUDING T_EXTAB.
ENDFORM.                    " SET_PF_STATUS
*--------------------------------------------------------------------------------


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值