⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zfir0020.html

📁 SAP中的金税发票下载程序参考(ABAP) 程序写的比较详细,大家请指正
💻 HTML
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<title>ZFIR0020</title>
</head>
<body bgcolor="#FFFFE0">
<font size="3" face = "Arial" color="#000000"><b>Code listing for: ZFIR0020</b></font>
<br>
<font size="3" face = "Arial" color="#000000"><b>Description:  金税发票下载</b></font>
<hr>
<pre width="100">
<font color ="#0000FF">*&---------------------------------------------------------------------*</font>
<font color ="#0000FF">*& Report  ZFIR0020</font>
<font color ="#0000FF">*&</font>
<font color ="#0000FF">*&---------------------------------------------------------------------*</font>
<font color ="#0000FF">*&</font>
<font color ="#0000FF">*&</font>
<font color ="#0000FF">*&---------------------------------------------------------------------*</font>

REPORT  ZFIR0020.
include <a href ="zfir0020_top.html">ZFIR0020_TOP</a>.
include <a href ="zfir0020_forms.html">ZFIR0020_FORMS</a>.
include <a href ="zfir0020_alv_class.html">ZFIR0020_ALV_CLASS</a>.

SELECTION-SCREEN:BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
  PARAMETERS:P_VKORG TYPE VBRK-VKORG DEFAULT '1000' OBLIGATORY,
             P_WERKS TYPE VBRP-WERKS DEFAULT '1000' OBLIGATORY,
             P_ZFKART LIKE ZFI01-ZFKART DEFAULT 'A1' OBLIGATORY.
  SELECT-OPTIONS:S_VTWEG FOR VBRK-VTWEG NO INTERVALS,
                 S_SPART FOR VBRK-SPART NO INTERVALS,
                 S_FKART FOR VBRK-FKART NO INTERVALS,
                 S_VBELN FOR VBRK-VBELN,
                 S_KUNRG FOR VBRK-KUNRG,
                 S_ERDAT FOR VBRK-ERDAT,
                 S_FKDAT FOR VBRK-FKDAT.
SELECTION-SCREEN:END OF BLOCK BLK1.

SELECTION-SCREEN: BEGIN OF BLOCK BLK4 WITH FRAME TITLE TEXT-004.
  PARAMETERS:P_PICK AS CHECKBOX,
             P_RICK AS CHECKBOX.
SELECTION-SCREEN: END OF BLOCK BLK4.

SELECTION-SCREEN: BEGIN OF BLOCK BLK2 WITH FRAME TITLE TEXT-002.
  PARAMETERS:P_REDL AS CHECKBOX,
             P_FLAG AS CHECKBOX.
  SELECT-OPTIONS:S_ZVBELN FOR ZFI02-ZVBELN.
SELECTION-SCREEN: END OF BLOCK BLK2.

SELECTION-SCREEN: BEGIN OF BLOCK BLK3 WITH FRAME TITLE TEXT-003.
  PARAMETERS:VAT_FILE LIKE RLGRAP-FILENAME DEFAULT 'C:\SAPDATA\INVOICE_EXPORT.TXT' OBLIGATORY,
             CAN_FILE LIKE RLGRAP-FILENAME DEFAULT 'C:\SAPDATA\CANCELLATION.TXT' OBLIGATORY.
SELECTION-SCREEN: END OF BLOCK BLK3.

INITIALIZATION.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR VAT_FILE.
  PERFORM GET_FILENAME CHANGING  VAT_FILE.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR CAN_FILE.
  PERFORM GET_FILENAME CHANGING CAN_FILE.

AT SELECTION-SCREEN ON VAT_FILE.
  IF VAT_FILE IS INITIAL.
    MESSAGE '请选择一个下载路径,下载发票数据!' TYPE 'E'.
  ENDIF.

AT SELECTION-SCREEN.
  IF P_REDL = 'X' AND P_FLAG = 'X'.
    IF S_ZVBELN IS INITIAL.
      MESSAGE '重新下载时,查找已回传发票的数据时,必须输入金税发票号!' TYPE 'E'.
    ENDIF.
  ENDIF.
  PERFORM GET_FKART USING P_ZFKART.
  PERFORM GET_DATA.

START-OF-SELECTION.
  IF P_REDL = 'X'.
    PERFORM OUTPUT_DATA.
  ELSE.
    CALL SCREEN 100.
  ENDIF.
END-OF-SELECTION.
<font color ="#0000FF">*&---------------------------------------------------------------------*</font>
<font color ="#0000FF">*&      Form  GET_DATA.</font>
<font color ="#0000FF">*&---------------------------------------------------------------------*</font>
FORM GET_DATA.
  DATA:L_MRNKZ TYPE VBRK-MRNKZ,
       L_FKDAT TYPE VBRK-FKDAT,
       L_FKMON(6) TYPE C,
       L_FKMON2(6) TYPE C.
  IF P_ZFKART = 'A2'.
    L_MRNKZ = 'X'.
  ELSE.
    L_MRNKZ = ''.
  ENDIF.
  IF P_REDL = 'X'.  "重新下载
    SELECT A~ZSERNR A~ZSTATU A~ZVBELN B~ZPOSNR B~VBELN B~POSNR D~MATNR B~FKLMG
      B~NETWR C~VKORG D~WERKS C~KUNRG C~ERDAT C~SPART C~FKDAT C~VKORG C~VTWEG
      C~FKART E~NAME1 F~MAKTX
      INTO CORRESPONDING FIELDS OF TABLE IT_DOWN
      FROM ZFI02 AS A
        INNER JOIN ZFI03 AS B ON A~ZSERNR = B~ZSERNR
        INNER JOIN VBRK AS C ON B~VBELN = C~VBELN
        INNER JOIN VBRP AS D ON B~VBELN = D~VBELN AND B~POSNR = D~POSNR
        INNER JOIN KNA1 AS E ON E~KUNNR = C~KUNRG
        INNER JOIN MAKT AS F ON F~MATNR = D~MATNR AND F~SPRAS = '1'
      WHERE C~FKART IN S_FKART AND C~VKORG = P_VKORG AND C~VTWEG IN S_VTWEG
        AND C~ERDAT IN S_ERDAT AND C~SPART IN S_SPART AND C~FKDAT IN S_FKDAT
        AND C~VBELN IN S_VBELN AND C~KUNRG IN S_KUNRG AND D~WERKS = P_WERKS
        AND A~ZSTATU &lt;&gt; '2' AND A~ZVBELN IN S_ZVBELN AND C~MRNKZ = L_MRNKZ
        ORDER BY A~ZVBELN.
  ELSE.             "第一次下载
    SELECT DISTINCT vbrk~kunrg vbrk~vbeln vbrk~fkart vbrk~vkorg vbrk~vtweg
          vbrp~werks vbrk~erdat vbrk~erzet vbrk~fkdat KNA1~NAME1 VBRK~SFAKN
      INTO CORRESPONDING FIELDS OF TABLE IT_DATA
      FROM  vbrk INNER JOIN vbrp ON vbrk~vbeln = vbrp~vbeln AND
                                    vbrp~werks = P_WERKS
                 INNER JOIN KNA1 ON KNA1~KUNNR =  vbrk~kunrg
      WHERE   vbrk~vbeln IN S_vbeln
        AND   vbrk~fkart IN S_fkart
        AND   vbrk~spart IN S_spart
        AND   vbrk~kunrg IN S_kunrg
        AND   vbrk~vkorg = P_vkorg
        AND   vbrk~vtweg IN S_vtweg
        AND   vbrk~erdat IN S_erdat
        AND   vbrk~fkdat IN S_fkdat
        AND   vbrk~fksto &lt;&gt; 'X'
        AND   vbrk~waerk = 'RMB'
        AND   vbrk~rfbsk = 'C'
        AND   VBRK~MRNKZ = L_MRNKZ
        AND   ( vbrk~fkart IN R_FKART OR vbrk~fkart IN R_FKARTC )
        AND   vbrk~vbeln NOT IN ( SELECT VBELN FROM ZFI03 )
      ORDER BY vbrk~kunrg vbrk~vbeln.
    LOOP AT IT_DATA.
      SELECT SUM( FKIMG ) SUM( NETWR ) SUM( MWSBP )
        INTO (IT_DATA-FKIMG,IT_DATA-NETWR,IT_DATA-MWSBP)
        FROM VBRP WHERE VBELN = IT_DATA-VBELN.
      IF IT_DATA-FKART IN R_FKARTH.
        IT_DATA-FKIMG = IT_DATA-FKIMG * -1.
        IT_DATA-NETWR = IT_DATA-NETWR * -1.
        IT_DATA-MWSBP = IT_DATA-MWSBP * -1.
      ENDIF.
      IF IT_DATA-FKART IN R_FKARTC.
        SELECT SINGLE VBELN INTO IT_DATA-SFAKN FROM ZFI03 WHERE VBELN = IT_DATA-SFAKN.
        IF SY-SUBRC = 0.
          IT_DATA-FLAG = '1'.
        ELSE.
          SELECT SINGLE FKDAT INTO L_FKDAT FROM VBRK WHERE VBELN = IT_DATA-SFAKN.
          IF SY-SUBRC = 0.
            L_FKMON = IT_DATA-FKDAT(6).
            L_FKMON2 = L_FKDAT(6).
            IF L_FKMON EQ L_FKMON2.
              IT_DATA-FLAG = '1'.
            ENDIF.
          ENDIF.
        ENDIF.
      ENDIF.
      SELECT SINGLE AUBEL INTO IT_DATA-AUBEL FROM VBRP WHERE VBELN = IT_DATA-VBELN.
      SELECT SINGLE BSTNK INTO IT_DATA-BSTNK FROM VBAK WHERE VBELN = IT_DATA-AUBEL.
      MODIFY IT_DATA.
    ENDLOOP.
    DELETE IT_DATA WHERE FLAG = '1'.
  ENDIF.
ENDFORM.                    " GET_DATA

<font color ="#0000FF">*&-------------------------------------------------------------</font>
<font color ="#0000FF">*&      Form   OUTPUT_DATA</font>
<font color ="#0000FF">*&-------------------------------------------------------------</font>
FORM OUTPUT_DATA.
  type-pools slis.
  data: allfields type slis_t_fieldcat_alv.
  data: wa_allfields type line of slis_t_fieldcat_alv.
<font color ="#0000FF">*    myrepid = sy-repid.</font>
  clear wa_allfields.
    wa_allfields-fieldname  = 'ZSERNR'."必须是大写
    wa_allfields-seltext_l = '税票关联号'.
    wa_allfields-outputlen = 10.
    append wa_allfields to allfields.
  clear wa_allfields.
    wa_allfields-fieldname  = 'ZVBELN'.
    wa_allfields-seltext_l = '金税发票号'.
    append wa_allfields to allfields.
  clear wa_allfields.
    wa_allfields-fieldname  = 'ZPOSNR'.
    wa_allfields-seltext_l = '行号'.
    wa_allfields-outputlen = 6.
    append wa_allfields to allfields.
  clear wa_allfields.
    wa_allfields-fieldname  = 'KUNRG'.
    wa_allfields-seltext_l = '付款方'.
    append wa_allfields to allfields.
  clear wa_allfields.
    wa_allfields-fieldname  = 'NAME1'.
    wa_allfields-seltext_l = '付款方名称'.
    wa_allfields-outputlen = 20.
    append wa_allfields to allfields.
  clear wa_allfields.
    wa_allfields-fieldname  = 'WERKS'.
    wa_allfields-seltext_l = '工厂'.
    wa_allfields-outputlen = 4.
    append wa_allfields to allfields.
  clear wa_allfields.
    wa_allfields-fieldname  = 'VKORG'.
    wa_allfields-seltext_l = '销售组织'.
    wa_allfields-outputlen = 7.
    append wa_allfields to allfields.
  clear wa_allfields.
    wa_allfields-fieldname  = 'VTWEG'.
    wa_allfields-seltext_l = '分销渠道'.
    wa_allfields-outputlen = 7.
    append wa_allfields to allfields.
  clear wa_allfields.
    wa_allfields-fieldname  = 'SPART'.
    wa_allfields-seltext_l = '产品组'.
    wa_allfields-outputlen = 5.
    append wa_allfields to allfields.
  clear wa_allfields.
    wa_allfields-fieldname  = 'FKART'.
    wa_allfields-seltext_l = '开票类型'.
    wa_allfields-outputlen = 7.
    append wa_allfields to allfields.
  clear wa_allfields.
    wa_allfields-fieldname  = 'VBELN'.
    wa_allfields-seltext_l = '发票号'.
    append wa_allfields to allfields.
  clear wa_allfields.
    wa_allfields-fieldname  = 'ERDAT'.
    wa_allfields-seltext_l = '发票创建日期'.
    append wa_allfields to allfields.
  clear wa_allfields.
    wa_allfields-fieldname  = 'FKDAT'.
    wa_allfields-seltext_l = '出具发票日期'.
    append wa_allfields to allfields.
  clear wa_allfields.
    wa_allfields-fieldname  = 'POSNR'.
    wa_allfields-seltext_l = '发票行号'.
    append wa_allfields to allfields.
  clear wa_allfields.
    wa_allfields-fieldname  = 'MATNR'.
    wa_allfields-seltext_l = '物料号'.
    append wa_allfields to allfields.
  clear wa_allfields.
    wa_allfields-fieldname  = 'MAKTX'.
    wa_allfields-seltext_l = '物料描述'.
    append wa_allfields to allfields.
  clear wa_allfields.
    wa_allfields-fieldname  = 'FKLMG'.
    wa_allfields-seltext_l = '开票数量'.
    append wa_allfields to allfields.
  clear wa_allfields.
    wa_allfields-fieldname  = 'NETWR'.
    wa_allfields-seltext_l = '开票金额'.
    append wa_allfields to allfields.
  clear wa_allfields.
    wa_allfields-fieldname  = 'MWSBP'.
    wa_allfields-seltext_l = '税额'.
    append wa_allfields to allfields.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
   EXPORTING
     I_CALLBACK_PROGRAM                = sy-repid
     i_callback_pf_status_set          = 'SET_PF'
     i_callback_user_command           = 'USER_COM'
     I_GRID_TITLE                      = '金税下载数据ALV显示'
     IT_FIELDCAT                       = allfields
     I_SAVE                            = 'X'
    TABLES
      T_OUTTAB                          = IT_DOWN
   EXCEPTIONS
     PROGRAM_ERROR                     = 1
     OTHERS                            = 2.
<font color ="#0000FF">*    IF SY-SUBRC &lt;&gt; 0.</font>
<font color ="#0000FF">*    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO</font>
<font color ="#0000FF">*    *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.</font>
<font color ="#0000FF">*    ENDIF.</font>
ENDFORM. "output_data

<font color ="#0000FF">*&--------------------------------------------------------------------*</font>
<font color ="#0000FF">*&      Form  set_pf_client</font>
<font color ="#0000FF">*&--------------------------------------------------------------------*</font>
<font color ="#0000FF">*       text</font>
<font color ="#0000FF">*---------------------------------------------------------------------*</font>
<font color ="#0000FF">*      --&gt;EXTAB      text</font>
<font color ="#0000FF">*---------------------------------------------------------------------*</font>
FORM set_pf USING  extab TYPE slis_t_extab.
<font color ="#0000FF">*通过SE41,拷贝程序SAPLSLVC_FULLSCREEN的状态STANDARD_FULLSCREEN过来</font>
  SET PF-STATUS 'ZFIR0020'.
ENDFORM.                    "SET_PF

<font color ="#0000FF">*&--------------------------------------------------------------------*</font>
<font color ="#0000FF">*&      Form  user_com</font>
<font color ="#0000FF">*&--------------------------------------------------------------------*</font>
<font color ="#0000FF">*       text</font>
<font color ="#0000FF">*---------------------------------------------------------------------*</font>
<font color ="#0000FF">*      --&gt;R_UCOMM    text</font>
<font color ="#0000FF">*      --&gt;RS_SELFIELDtext</font>
<font color ="#0000FF">*---------------------------------------------------------------------*</font>
FORM user_com USING r_ucomm LIKE sy-ucomm
              rs_selfield TYPE slis_selfield .
  CASE r_ucomm.
    WHEN: 'BACK' OR 'EXIT' OR 'CANCEL'.
      LEAVE TO SCREEN 0.
    WHEN: '&DATA_SAVE'.                    "
      IF P_REDL = 'X' AND P_FLAG = 'X'.
        ."只显示
      ELSEIF P_REDL = 'X' AND P_FLAG &lt;&gt; 'X'.
        ."保存
      ELSE.
        ."下载并保存
      ENDIF.
    LEAVE TO SCREEN 0.
  ENDCASE.
ENDFORM.                    " CALL_ALV

<font color ="#0000FF">*GUI Texts</font>
<font color ="#0000FF">*----------------------------------------------------------</font>
<font color ="#0000FF">* 100 --&gt; 金税下载ALV</font>
<font color ="#0000FF">* MAIN --&gt; 金税下载</font>

<font color ="#0000FF">*Text elements</font>
<font color ="#0000FF">*----------------------------------------------------------</font>
<font color ="#0000FF">* 001 发票条件</font>
<font color ="#0000FF">* 002 重新下载</font>
<font color ="#0000FF">* 003 下载路径</font>
<font color ="#0000FF">* 004 第一次下载</font>


<font color ="#0000FF">*Selection texts</font>
<font color ="#0000FF">*----------------------------------------------------------</font>
<font color ="#0000FF">* CAN_FILE         作废发票下载文件路径</font>
<font color ="#0000FF">* P_FLAG         金税发票票已回传</font>
<font color ="#0000FF">* P_PICK         拆分标识</font>
<font color ="#0000FF">* P_REDL         重新下载</font>
<font color ="#0000FF">* P_RICK         合并标识</font>
<font color ="#0000FF">* P_VKORG         销售组织</font>
<font color ="#0000FF">* P_WERKS         工厂</font>
<font color ="#0000FF">* P_ZFKART         发票类型</font>
<font color ="#0000FF">* S_ERDAT         发票创建日期</font>
<font color ="#0000FF">* S_FKART         开票类型</font>
<font color ="#0000FF">* S_FKDAT         出具发票日期</font>
<font color ="#0000FF">* S_KUNRG         付款方</font>
<font color ="#0000FF">* S_SPART         产品组</font>
<font color ="#0000FF">* S_VBELN         开票凭证</font>
<font color ="#0000FF">* S_VTWEG         分销渠道</font>
<font color ="#0000FF">* S_ZVBELN         金税发票号</font>
<font color ="#0000FF">* VAT_FILE         正常发票下载文件路径</font>


<font color ="#0000FF">*Messages</font>
<font color ="#0000FF">*----------------------------------------------------------</font>
<font color ="#0000FF">*</font>
<font color ="#0000FF">* Message class: Hard coded</font>
<font color ="#0000FF">*   文件路径不存在!</font>
</pre>
<hr>
<font size="2" face = "Sans Serif">Extracted by Direct Download Enterprise version 1.3.1 - E.G.Mellodew. 1998-2005 UK. Sap Release 700
</font>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -