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

来源:互联网 发布:ubuntu vsftpd 根目录 编辑:程序博客网 时间:2024/04/29 02:45

目的:将运输部开具的“出口商品发票”匹配到确认销售收入的凭证后面。说明:外销每月的销售收入凭证都要将对应的“出口商品发票”匹配到后面作为附件装订成册。此类凭证每个月近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*--------------------------------------------------------------------------------