FICO 會(huì)計(jì)憑證批量導(dǎo)入

REPORT ZFINR_084.
 TABLES:SSCRFIELDS.

 TYPES:BEGIN OF TY_TAB,
         ZIDX(4),
         BUKRS(4),"  公司代碼
        BLART(2),"  憑證類(lèi)型
        BLDAT(8),"  憑證日期
        BUDAT(8),"  記帳日期
        WAERS(5),"  交易貨幣
        XBLNR(16)," 參考憑證號(hào)
        BKTXT(25)," 憑證抬頭文本
        KURSF(9),"(5位小數(shù))  匯率
        BSCHL(2),"  記帳碼
        UMSKZ(2)  ,"特別總帳標(biāo)志
        ANBWA(3),"  交易類(lèi)型
        HKONT(10)," 總賬科目
        KUNNR(10)," 客戶(hù)
        LIFNR(10)," 供應(yīng)商
        ANLN1(12)," 資產(chǎn)
        WRBTR(13),"(2位小數(shù)) 交易貨幣金額
        DMBTR(13),"(2位小數(shù)) 本位幣金額
        MWSKZ(2),"  稅碼
        WMWST(13),"(2位小數(shù)) 憑證貨幣稅額
        RSTGR(3),"  原因代碼
        ZZBY01(10),"  輔助核算
        VBUND(6),"  貿(mào)易伙伴
        VALUT(8),"  起息日
        ZUONR(18)," 分配
        SGTXT(50)," 項(xiàng)目文本
        ZLSCH(1),"  付款方式
        ZTERM(4),"  付款條件
        ZFBDT(8),"  付款基準(zhǔn)日期
        XREF3(20)," 參考碼3
         HBKID(5),"  開(kāi)戶(hù)銀行
        HKTID(5),"  帳戶(hù)標(biāo)識(shí)
        ZZBY11(22),"  票號(hào)/合同號(hào)1
         ZZBY12(22),"  票號(hào)/合同號(hào)2
         ZZBY1(8)  ,"票據(jù)/合同號(hào)到期日
        KOSTL(10)," 成本中心
        PROJK(8)  ,"項(xiàng)目WBS
         AUFNR(12)," 內(nèi)部訂單
        PAOBJNR(10)," 獲利能力分析
        ZINFOR(100),
         BELNR       TYPE BSEG-BELNR,
       END OF TY_TAB.

 TYPES:BEGIN OF TY_TABA,
         ZIDX(4),
         BUKRS       TYPE BKPF-BUKRS , "  公司代碼
        BLART       TYPE BKPF-BLART , "  憑證類(lèi)型
        BLDAT       TYPE BKPF-BLDAT , "  憑證日期
        BUDAT       TYPE BKPF-BUDAT , "  記帳日期
        WAERS       TYPE BKPF-WAERS , "  交易貨幣
        XBLNR       TYPE BKPF-XBLNR , "  參考憑證號(hào)
        BKTXT       TYPE BKPF-BKTXT , "  憑證抬頭文本
        KURSF       TYPE BKPF-KURSF , "  匯率
        BSCHL       TYPE BSEG-BSCHL , "  記帳碼
        UMSKZ       TYPE BSEG-UMSKZ , "  特別總帳標(biāo)志
        HKONT       TYPE BSEG-HKONT , "  總賬科目
        KUNNR       TYPE BSEG-KUNNR , "  客戶(hù)
        LIFNR       TYPE BSEG-LIFNR , "  供應(yīng)商
        WRBTR       TYPE BSEG-WRBTR , "  交易貨幣金額
        DMBTR       TYPE BSEG-DMBTR , "  本位幣金額
        MWSKZ       TYPE BSEG-MWSKZ , "  稅碼
        WMWST       TYPE BSEG-WMWST , "  憑證貨幣稅額
        RSTGR       TYPE BSEG-RSTGR , "  原因代碼
        ZZBY01      TYPE BSEG-ZZBY01 , "  輔助核算
        VBUND       TYPE BSEG-VBUND , "  貿(mào)易伙伴
        VALUT       TYPE BSEG-VALUT , "  起息日
        ZUONR       TYPE BSEG-ZUONR , "  分配
        SGTXT       TYPE BSEG-SGTXT , "  項(xiàng)目文本
        ZLSCH       TYPE BSEG-ZLSCH , "  付款方式
        ZTERM       TYPE BSEG-ZTERM, "   付款條件
        ZFBDT       TYPE BSEG-ZFBDT, "   付款基準(zhǔn)日期
        XREF3       TYPE BSEG-XREF3, "   參考碼3
         HBKID       TYPE BSEG-HBKID, "   開(kāi)戶(hù)銀行
        HKTID       TYPE BSEG-HKTID, "   帳戶(hù)標(biāo)識(shí)
        ZZBY11      TYPE BSEG-ZZBY11 , "  票號(hào)/合同號(hào)1
         ZZBY12      TYPE BSEG-ZZBY12 , "  票號(hào)/合同號(hào)2
         ZZBY1       TYPE BSEG-ZZBY1, "   票據(jù)/合同號(hào)到期日
        KOSTL       TYPE BSEG-KOSTL, "   成本中心
        PROJK       TYPE BSEG-PROJK, "   項(xiàng)目WBS
         AUFNR       TYPE BSEG-AUFNR, "   內(nèi)部訂單
        PAOBJNR     TYPE BSEG-PAOBJNR , "  獲利能力分析
        ZINFOR(100),
         BELNR       TYPE BSEG-BELNR,
       END OF TY_TABA.



*&---根據(jù)記賬碼判斷金額正負(fù)


TYPES: BEGIN OF TY_TBSL ,
          BSCHL TYPE TBSL-BSCHL,
          SHKZG TYPE TBSL-SHKZG,
          KOART TYPE TBSL-KOART,
        END OF TY_TBSL .


 DATA: GT_TBSL TYPE TABLE OF TY_TBSL,
       GS_TBSL TYPE TY_TBSL.



*&---取出對(duì)應(yīng)公司代碼下的本位幣


TYPES: BEGIN OF TY_T001 ,
          BUKRS TYPE T001-BUKRS,
          WAERS TYPE T001-WAERS,
        END OF TY_T001 .
 DATA: GT_T001 TYPE TABLE OF TY_T001,
       GS_T001 TYPE TY_T001.


 DATA:GT_TABA TYPE TABLE OF TY_TAB,
      GS_TABA TYPE TY_TAB.
 FIELD-SYMBOLS: <FS_TAB> TYPE TY_TABA.
 DATA:GT_TAB TYPE STANDARD TABLE OF TY_TABA,
      GS_TAB TYPE TY_TABA.
 DATA:GT_TAB1 TYPE TABLE OF TY_TABA,
      GS_TAB1 TYPE TY_TABA.
 DATA:GT_TAB2 TYPE TABLE OF TY_TABA,
      GS_TAB2 TYPE TY_TABA.
 DATA:GT_TAB3 TYPE TABLE OF TY_TABA,
      GS_TAB3 TYPE TY_TABA.
 DATA:GT_TAB4 TYPE STANDARD TABLE OF TY_TABA,
      GS_TAB4 TYPE TY_TABA.
 DATA:GT_DATA TYPE STANDARD TABLE OF ZSEXCEL WITH HEADER LINE .


* 全局變量 上傳文件


DATA: GV_FULLPATH TYPE STRING, "路徑文件
      GV_PATH     TYPE STRING,  "路徑
      GV_NAME     TYPE STRING.  "文件名字


* 上傳數(shù)據(jù)


DATA: LT_FILENAME TYPE RLGRAP-FILENAME,
       LT_DATA     TYPE TRUXS_T_TEXT_DATA.
 FIELD-SYMBOLS: <FS>.


*&幣別吉捶,匯率行項(xiàng)目


DATA :LV_WAERS TYPE BKPF-WAERS , " 交易貨幣
      LV_KURSF TYPE BKPF-KURSF . "  匯率


*&是否執(zhí)行過(guò)賬


DATA LV_CHECK(1).


*&生成會(huì)計(jì)憑證
*---------------------------------------------------------------------*
 * ALV                                                                 *
 *                                                                     *
 *---------------------------------------------------------------------*


DATA: GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
       GS_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
       GS_LAYOUT   TYPE SLIS_LAYOUT_ALV.

 DATA : DOCUMENTHEADER TYPE BAPIACHE09,
        GT_CURRENCYAMOUNT    TYPE TABLE OF BAPIACCR09 , "貨幣行項(xiàng)目
       GS_CURRENCYAMOUNT    TYPE  BAPIACCR09 , "貨幣行項(xiàng)目
       GT_ACCOUNTGL         TYPE TABLE OF BAPIACGL09, "總賬科目項(xiàng)
       GS_ACCOUNTGL         TYPE  BAPIACGL09, "總賬科目項(xiàng)
       GT_ACCOUNTPAYABLE    TYPE TABLE OF BAPIACAP09, "供應(yīng)商
       GS_ACCOUNTPAYABLE    TYPE BAPIACAP09, "供應(yīng)商
       GT_ACCOUNTRECEIVABLE TYPE TABLE OF BAPIACAR09,
        GS_ACCOUNTRECEIVABLE TYPE BAPIACAR09,
        GT_ACCOUNTTAX        LIKE TABLE OF BAPIACTX09, "稅
       GS_ACCOUNTTAX        LIKE  BAPIACTX09,
        GT_EXTENSION2        TYPE TABLE OF BAPIPAREX, "增強(qiáng)
       GS_EXTENSION2        TYPE  BAPIPAREX, "增強(qiáng)
       ZACC_DOCUMENT        TYPE ZSFIN_ZACC_DOCUMENT,
        GT_RETURN            TYPE TABLE OF BAPIRET2,
        GS_RETURN            TYPE  BAPIRET2.
 DATA LV_NUM TYPE I VALUE 0. " 憑證行項(xiàng)目編號(hào)

DATA: GS_FUNX TYPE SMP_DYNTXT. "選擇屏幕按鈕

"宏定義
DEFINE INIT_FIELDCAT.
   CLEAR GS_FIELDCAT.
    &1 = &1 + 1 .
   GS_FIELDCAT-COL_POS          = &1.
   GS_FIELDCAT-FIELDNAME        = &2.
   GS_FIELDCAT-SELTEXT_L        = &3.
   APPEND GS_FIELDCAT TO GT_FIELDCAT.
 END-OF-DEFINITION.
 DATA:L_COLPOS TYPE LVC_S_FCAT-COL_POS VALUE 0.



*---------------------------------------------------------------------*
 * Selection-screen                                                    *
 *     選擇屏幕                                                         *
 *---------------------------------------------------------------------*


SELECTION-SCREEN: FUNCTION KEY 1,BEGIN OF BLOCK BLK0.


*SELECTION-SCREEN BEGIN OF BLOCK BLK0 WITH FRAME .     "設(shè)置一個(gè)標(biāo)題


PARAMETERS:P_PATH LIKE RLGRAP-FILENAME." MEMORY ID M1 MODIF ID M1. "文件上載

SELECTION-SCREEN END OF BLOCK BLK0.


*-----------------------------------------------------------------------
 *初始化
*-----------------------------------------------------------------------
****************************激活下載模板***************************************




INITIALIZATION.
   GS_FUNX-ICON_ID = ICON_NEXT_PAGE.
   GS_FUNX-ICON_TEXT =  '下載模板'.
   SSCRFIELDS-FUNCTXT_01 = GS_FUNX.  "定義按鈕



*---------------------------------------------------------------------*
 * At selection-screen                                                 *
 *                                                                     *
 *---------------------------------------------------------------------*


AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_PATH.
   PERFORM FRM_BROWSER_FILE.  "上傳文件地址索引

AT SELECTION-SCREEN.
   CASE SSCRFIELDS-UCOMM.          "處理按鈕命令
    WHEN 'FC01'.
       PERFORM FRM_GET_FULLPATH CHANGING GV_FULLPATH GV_PATH GV_NAME.


*路徑為空則退出


      IF GV_FULLPATH IS INITIAL.
         MESSAGE S009(ZFIN01) .   "用戶(hù)取消操作
        RETURN.
       ENDIF.
       PERFORM FRM_DOWNLOAD_TEMPLATE_CREATE USING GV_FULLPATH.  "下載導(dǎo)入文件模板

  ENDCASE.


*---------------------------------------------------------------------*
 * Start-of-selection                                                  *
 *                                                                     *
 *---------------------------------------------------------------------*


START-OF-SELECTION.

   "提示選擇導(dǎo)入文件
  IF P_PATH IS INITIAL .
     MESSAGE  E010(ZFIN01).   "請(qǐng)選擇導(dǎo)入文件
  ENDIF.
   "判斷文件路徑不為空
  IF  P_PATH IS NOT INITIAL.
     PERFORM FRM_UPLOAD_DATA  . "上傳數(shù)據(jù)
    IF GT_DATA IS INITIAL.
       MESSAGE E011(ZFIN01).  "上傳數(shù)據(jù)不能為空

    ENDIF.

     IF GT_TAB IS NOT INITIAL.
       PERFORM FRM_GET_DATA.


*alv數(shù)據(jù)導(dǎo)入


      PERFORM FRM_ALV_LAYOUT.
       PERFORM FRM_ALV_FIELDCAT.
       PERFORM FRM_ALV_DISPLAY .
     ENDIF.
   ENDIF.


*&---------------------------------------------------------------------*
 *& Form FRM_BROWSER_FILE
 *&---------------------------------------------------------------------*
 *& text
 *&---------------------------------------------------------------------*
 *& -->  p1        text
 *& <--  p2        text
 *&---------------------------------------------------------------------*


FORM FRM_BROWSER_FILE .

   CALL FUNCTION 'TB_LIMIT_WS_FILENAME_GET'
     IMPORTING
       FILENAME         = P_PATH
     EXCEPTIONS
       SELECTION_CANCEL = 1
       SELECTION_ERROR  = 2
       OTHERS           = 3.
   IF SY-SUBRC <> 0.


* Implement suitable error handling here


  ENDIF.
 ENDFORM.


*&---------------------------------------------------------------------*
 *& Form FRM_UPLOAD_DATA
 *&---------------------------------------------------------------------*
 *& text
 *&---------------------------------------------------------------------*
 *& -->  p1        text
 *& <--  p2        text
 *&---------------------------------------------------------------------*


FORM FRM_UPLOAD_DATA .

   LT_FILENAME = P_PATH.   "路徑
  call function 'ZALSM_EXCEL_TO_INTERNAL_TABLE'
     EXPORTING
       FILENAME                = LT_FILENAME
       I_BEGIN_COL             = '2'
       I_BEGIN_ROW             = '8'
       I_END_COL               = '50'
       I_END_ROW               = '1100'
     TABLES
       INTERN                  = GT_DATA
     EXCEPTIONS
       INCONSISTENT_PARAMETERS = 1
       UPLOAD_OLE              = 2
       OTHERS                  = 3.

   IF GT_DATA[] IS INITIAL.
     MESSAGE E361(ZFIN01)."  '清單中無(wú)數(shù)據(jù)'.
   ENDIF.

   LOOP AT GT_DATA .                    "添加至內(nèi)表

    AT NEW ROW.
       CLEAR GS_TAB.
     ENDAT .

     ASSIGN COMPONENT GT_DATA-COL OF STRUCTURE  GS_TAB TO <FS>."分配
    <FS> =  GT_DATA-VALUE."賦值

    AT END OF ROW.
       APPEND GS_TAB TO GT_TAB.
     ENDAT.

   ENDLOOP.
 ENDFORM.


*&---------------------------------------------------------------------*
 *& Form FRM_GET_FULLPATH
 *&---------------------------------------------------------------------*
 *& text
 *&---------------------------------------------------------------------*
 *      <--P_GV_FULLPATH  text
 *      <--P_GV_PATH  text
 *      <--P_GV_NAME  text   下載模版
*&---------------------------------------------------------------------*


FORM FRM_GET_FULLPATH CHANGING PV_FULLPATH TYPE STRING
                                  PV_PATH     TYPE STRING
                                  PV_NAME     TYPE STRING.
   DATA: LV_INIT_PATH  TYPE STRING,
         LV_INIT_FNAME TYPE STRING,
         LV_PATH       TYPE STRING,
         LV_FILENAME   TYPE STRING,
         LV_FULLPATH   TYPE STRING.



* 初始名稱(chēng)(輸出的文件名稱(chēng))


  LV_INIT_FNAME = TEXT-040.



* 獲取桌面路徑


  CALL METHOD CL_GUI_FRONTEND_SERVICES=>GET_DESKTOP_DIRECTORY
     CHANGING
       DESKTOP_DIRECTORY    = LV_INIT_PATH
     EXCEPTIONS
       CNTL_ERROR           = 1
       ERROR_NO_GUI         = 2
       NOT_SUPPORTED_BY_GUI = 3
       OTHERS               = 4.
   IF SY-SUBRC <> 0.
     EXIT.
   ENDIF.



* 用戶(hù)選擇名稱(chēng)金闽、路徑


  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
     EXPORTING


*     WINDOW_TITLE         = '指定保存文件名'
 *     DEFAULT_EXTENSION    = 'DOC'


      DEFAULT_FILE_NAME    = LV_INIT_FNAME


*     FILE_FILTER          = CL_GUI_FRONTEND_SERVICES=>FILETYPE_EXCEL
 *     FILE_FILTER          = CL_GUI_FRONTEND_SERVICES=>FILETYPE_WORD


      INITIAL_DIRECTORY    = LV_INIT_PATH
       PROMPT_ON_OVERWRITE  = 'X'
     CHANGING
       FILENAME             = LV_FILENAME
       PATH                 = LV_PATH
       FULLPATH             = LV_FULLPATH


*     USER_ACTION          =
 *     FILE_ENCODING        =


    EXCEPTIONS
       CNTL_ERROR           = 1
       ERROR_NO_GUI         = 2
       NOT_SUPPORTED_BY_GUI = 3
       OTHERS               = 4.
   IF SY-SUBRC = 0.
     PV_FULLPATH = LV_FULLPATH.
     PV_PATH     = LV_PATH.
   ENDIF.

 ENDFORM.


*&---------------------------------------------------------------------*
 *& Form FRM_DOWNLOAD_TEMPLATE_CREATE
 *&---------------------------------------------------------------------*
 *& text
 *&---------------------------------------------------------------------*
 *      -->P_GV_FULLPATH  下載導(dǎo)入文件模板
*&---------------------------------------------------------------------*


FORM FRM_DOWNLOAD_TEMPLATE_CREATE USING PV_FILENAME.

   DATA: LV_OBJDATA     LIKE WWWDATATAB,
         LV_MIME        LIKE W3MIME,
         LV_DESTINATION LIKE RLGRAP-FILENAME,
         LV_OBJNAM      TYPE STRING,
         LV_RC          LIKE SY-SUBRC,
         LV_ERRTXT      TYPE STRING.

   DATA: LV_FILENAME TYPE STRING,
         LV_RESULT,
         LV_SUBRC    TYPE SY-SUBRC.

   DATA: LV_OBJID TYPE WWWDATATAB-OBJID .

   LV_OBJID = 'ZFINR_084'.   "上傳的模版名稱(chēng)

  "查找文件是否存在袭异。
  SELECT SINGLE
     RELID             "IMPORT/EXPORT 記錄中的區(qū)域
    OBJID            "SAP WWW 網(wǎng)關(guān)對(duì)象名
    FROM WWWDATA     "存儲(chǔ) WWW 對(duì)象的 INDX 類(lèi)型表
    INTO CORRESPONDING FIELDS OF LV_OBJDATA
     WHERE SRTF2 = 0       "EXPORT/IMPORT 數(shù)據(jù)表中的下個(gè)記錄計(jì)數(shù)器
    AND   RELID = 'MI'
   AND   OBJID = LV_OBJID.

   "判斷模版不存在則報(bào)錯(cuò) 檢查表wwwdata中是否存在所指定的模板文件
  IF SY-SUBRC <> 0 OR LV_OBJDATA-OBJID = SPACE.
     CONCATENATE '模板文件:' LV_OBJID '不存在,請(qǐng)用TCODE:SMW0進(jìn)行加載'
     INTO LV_ERRTXT.
     MESSAGE E000(ZFIN01) WITH LV_ERRTXT.
   ENDIF.

   LV_FILENAME = PV_FILENAME.  "保存路徑

  "判斷本地地址是否已經(jīng)存在此文件差购。
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_EXIST
     EXPORTING
       FILE                 = LV_FILENAME
     RECEIVING
       RESULT               = LV_RESULT
     EXCEPTIONS
       CNTL_ERROR           = 1
       ERROR_NO_GUI         = 2
       WRONG_PARAMETER      = 3
       NOT_SUPPORTED_BY_GUI = 4
       OTHERS               = 5.
   IF SY-SUBRC <> 0.
     MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
   ENDIF.
   IF LV_RESULT = 'X'.  "如果存在則刪除原始文件,重新覆蓋
    CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_DELETE
       EXPORTING
         FILENAME = LV_FILENAME
       CHANGING
         RC       = LV_SUBRC


*      EXCEPTIONS
 *       FILE_DELETE_FAILED   = 1
 *       CNTL_ERROR           = 2
 *       ERROR_NO_GUI         = 3
 *       FILE_NOT_FOUND       = 4
 *       ACCESS_DENIED        = 5
 *       UNKNOWN_ERROR        = 6
 *       NOT_SUPPORTED_BY_GUI = 7
 *       WRONG_PARAMETER      = 8
 *       OTHERS   = 9


      .
     IF LV_SUBRC <> 0. "如果刪除失敗贬墩,則報(bào)錯(cuò)精肃。
      CONCATENATE '同名EXCEL文件已打開(kāi)' '請(qǐng)關(guān)閉該EXCEL后重試。'
       INTO LV_ERRTXT.
       MESSAGE E000(ZFIN01) WITH LV_ERRTXT.


*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
 *              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.


    ENDIF.
   ENDIF.

   LV_DESTINATION   = PV_FILENAME.

   "下載模版 如果存在潜慎,調(diào)用DOWNLOAD_WEB_OBJECT 函數(shù)下載模板到路徑下
  CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
     EXPORTING
       KEY         = LV_OBJDATA
       DESTINATION = LV_DESTINATION
     IMPORTING
       RC          = LV_RC


*    CHANGING
 *     TEMP        =


    .
   IF LV_RC NE 0.
     CONCATENATE '模板文件' '下載失敗' INTO LV_ERRTXT.
     MESSAGE E000(ZFIN01) WITH LV_ERRTXT.
   ENDIF.
 ENDFORM.


*&---------------------------------------------------------------------*
 *& Form FRM_GET_DATA
 *&---------------------------------------------------------------------*
 *& text
 *&---------------------------------------------------------------------*
 *& -->  p1        text
 *& <--  p2        text
 *&---------------------------------------------------------------------*


FORM FRM_GET_DATA .
   DATA LV_ID(4).
   SELECT BUKRS
          WAERS
     INTO CORRESPONDING FIELDS OF TABLE GT_T001
     FROM T001
     FOR ALL ENTRIES IN GT_TAB
   WHERE BUKRS = GT_TAB-BUKRS .
   SORT GT_T001 BY BUKRS .
   DELETE ADJACENT DUPLICATES FROM GT_T001 COMPARING BUKRS .


   SELECT BSCHL
          SHKZG
          KOART
     INTO CORRESPONDING FIELDS OF TABLE GT_TBSL
     FROM TBSL
      FOR ALL ENTRIES IN GT_TAB
   WHERE BSCHL = GT_TAB-BSCHL .
   SORT GT_TBSL BY BSCHL .


*&---憑證數(shù)據(jù)整理


  APPEND LINES OF GT_TAB TO GT_TAB1.
   " SORT GT_TAB1 BY ZIDX bukrs .
   SORT GT_TAB1 BY  ZIDX ASCENDING  BUKRS DESCENDING.
   DELETE ADJACENT DUPLICATES FROM GT_TAB1 COMPARING ZIDX.

   LOOP AT GT_TAB1 ASSIGNING <FS_TAB>.
     CLEAR LV_ID.
     CLEAR LV_WAERS.
     CLEAR LV_KURSF.
     AT NEW ZIDX.
       CLEAR: DOCUMENTHEADER.
       REFRESH: GT_CURRENCYAMOUNT,
                GT_ACCOUNTGL,
                GT_ACCOUNTPAYABLE,
                GT_ACCOUNTRECEIVABLE,
                GT_ACCOUNTTAX,
                GT_EXTENSION2,
                GT_RETURN.

       DOCUMENTHEADER-COMP_CODE  = <FS_TAB>-BUKRS.        " 公司代碼
      DOCUMENTHEADER-DOC_DATE   = <FS_TAB>-BLDAT.        " 憑證日期
      DOCUMENTHEADER-PSTNG_DATE = <FS_TAB>-BUDAT.        " 記賬日期
      DOCUMENTHEADER-FISC_YEAR = <FS_TAB>-BUDAT+0(4).        " 財(cái)年
      DOCUMENTHEADER-DOC_TYPE   = <FS_TAB>-BLART.        " 憑證類(lèi)型
      DOCUMENTHEADER-REF_DOC_NO = <FS_TAB>-XBLNR.        " 參照
      DOCUMENTHEADER-HEADER_TXT = <FS_TAB>-BKTXT.        " 憑證抬頭文本
      DOCUMENTHEADER-USERNAME   = SY-UNAME.                 " 創(chuàng)建人


*&將index傳給變量


      LV_ID = <FS_TAB>-ZIDX.
       LV_WAERS = <FS_TAB>-WAERS.
       LV_KURSF = <FS_TAB>-KURSF.
     ENDAT.

     CLEAR: GS_CURRENCYAMOUNT,
            GS_ACCOUNTGL,
            GS_ACCOUNTPAYABLE,
            GS_ACCOUNTRECEIVABLE,
            GS_EXTENSION2,
            GS_ACCOUNTTAX.



*行項(xiàng)目


    CLEAR <FS_TAB>.
     LOOP AT GT_TAB INTO <FS_TAB> WHERE ZIDX = LV_ID.

       LV_NUM = LV_NUM + 1.



*&-------總賬添加前導(dǎo) 0


      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
         EXPORTING
           INPUT  = <FS_TAB>-HKONT
         IMPORTING
           OUTPUT = <FS_TAB>-HKONT.



*&-------成本中心添加前導(dǎo) 0


      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
         EXPORTING
           INPUT  = <FS_TAB>-KOSTL
         IMPORTING
           OUTPUT = <FS_TAB>-KOSTL.


*&-------供應(yīng)商添加前導(dǎo) 0


      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
         EXPORTING
           INPUT  = <FS_TAB>-LIFNR
         IMPORTING
           OUTPUT = <FS_TAB>-LIFNR.


*&-------客戶(hù)添加前導(dǎo) 0


      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
         EXPORTING
           INPUT  = <FS_TAB>-KUNNR
         IMPORTING
           OUTPUT = <FS_TAB>-KUNNR.


*&-------內(nèi)部訂單添加前導(dǎo) 0


      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
         EXPORTING
           INPUT  = <FS_TAB>-AUFNR
         IMPORTING
           OUTPUT = <FS_TAB>-AUFNR.


*&-------項(xiàng)目WBS添加前導(dǎo) 0


      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
         EXPORTING
           INPUT  = <FS_TAB>-PROJK
         IMPORTING
           OUTPUT = <FS_TAB>-PROJK.

       IF <FS_TAB>-HKONT IS NOT INITIAL
                                         AND <FS_TAB>-KUNNR IS   INITIAL
                                         AND <FS_TAB>-LIFNR IS INITIAL
                                         AND <FS_TAB>-MWSKZ IS  INITIAL.



         GS_ACCOUNTGL-ITEMNO_ACC = LV_NUM.                          " 行項(xiàng)目編號(hào)
        IF <FS_TAB>-KOSTL IS NOT INITIAL.
           GS_ACCOUNTGL-COSTCENTER = <FS_TAB>-KOSTL.                  " 成本中心
        ENDIF.
         IF <FS_TAB>-HKONT IS NOT INITIAL.
           GS_ACCOUNTGL-GL_ACCOUNT = <FS_TAB>-HKONT.                 "總分類(lèi)帳帳目
        ENDIF.
         IF <FS_TAB>-PROJK NE '00000000'.
           GS_ACCOUNTGL-WBS_ELEMENT = <FS_TAB>-PROJK.                  " 項(xiàng)目WBS
         ENDIF.
         IF <FS_TAB>-AUFNR IS NOT INITIAL.
           GS_ACCOUNTGL-ORDERID  = <FS_TAB>-AUFNR.                  " 內(nèi)部訂單
        ENDIF.
         IF <FS_TAB>-ZUONR IS NOT INITIAL.
           GS_ACCOUNTGL-ALLOC_NMBR = <FS_TAB>-ZUONR.               " 分配
        ENDIF.

         GS_ACCOUNTGL-ITEM_TEXT = <FS_TAB>-SGTXT.            "項(xiàng)目文本

        LOOP AT GT_TAB INTO GS_TAB4 WHERE ZIDX = LV_ID and MWSKZ <> ''.

           GS_ACCOUNTGL-TAX_CODE = GS_TAB4-MWSKZ.                  " 稅碼
        ENDLOOP.


         APPEND GS_ACCOUNTGL TO GT_ACCOUNTGL.
         CLEAR GS_ACCOUNTGL .
       ENDIF.

       IF <FS_TAB>-KUNNR IS NOT INITIAL.
         GS_ACCOUNTRECEIVABLE-ITEMNO_ACC = LV_NUM.                   " 行項(xiàng)目編號(hào)
        IF <FS_TAB>-KUNNR IS NOT INITIAL.
           GS_ACCOUNTRECEIVABLE-CUSTOMER = <FS_TAB>-KUNNR.          " 客戶(hù)
        ENDIF.
         IF <FS_TAB>-UMSKZ IS NOT INITIAL.
           GS_ACCOUNTRECEIVABLE-SP_GL_IND = <FS_TAB>-UMSKZ.         " 特別總賬標(biāo)識(shí)
        ENDIF.
         IF <FS_TAB>-HKONT IS NOT INITIAL.
           GS_ACCOUNTRECEIVABLE-GL_ACCOUNT = <FS_TAB>-HKONT .        " 總賬科目
        ENDIF.
         IF <FS_TAB>-VALUT NE '00000000'.
           GS_ACCOUNTRECEIVABLE-BLINE_DATE = <FS_TAB>-VALUT.         " 起息日期
        ENDIF.
         IF <FS_TAB>-ZTERM IS NOT INITIAL.
           GS_ACCOUNTRECEIVABLE-PMNTTRMS = <FS_TAB>-ZTERM   .        " 付款條件
        ENDIF.
         IF <FS_TAB>-ZLSCH IS NOT INITIAL.
           GS_ACCOUNTRECEIVABLE-PYMT_METH = <FS_TAB>-ZLSCH   .        " 付款方式
        ENDIF.
         IF <FS_TAB>-ZFBDT NE '00000000'.
           GS_ACCOUNTRECEIVABLE-BLINE_DATE = <FS_TAB>-ZFBDT.         " 付款基準(zhǔn)日期
        ENDIF.
         IF <FS_TAB>-XREF3 IS NOT INITIAL.
           GS_ACCOUNTRECEIVABLE-REF_KEY_3 = <FS_TAB>-XREF3.        " 參考碼3
         ENDIF.
         IF <FS_TAB>-HBKID IS NOT INITIAL.
           GS_ACCOUNTRECEIVABLE-BANK_ID = <FS_TAB>-HBKID.         " 開(kāi)戶(hù)銀行
        ENDIF.
         IF <FS_TAB>-HKTID IS NOT INITIAL.
           GS_ACCOUNTRECEIVABLE-HOUSEBANKACCTID = <FS_TAB>-HKTID.        " 帳戶(hù)標(biāo)識(shí)
        ENDIF.
         IF <FS_TAB>-ZUONR IS NOT INITIAL.
           GS_ACCOUNTRECEIVABLE-ALLOC_NMBR = <FS_TAB>-ZUONR.               " 分配
        ENDIF.
         GS_ACCOUNTRECEIVABLE-ITEM_TEXT = <FS_TAB>-SGTXT.            "項(xiàng)目文本
        APPEND GS_ACCOUNTRECEIVABLE TO GT_ACCOUNTRECEIVABLE.
         CLEAR GS_ACCOUNTRECEIVABLE .
       ENDIF.


       IF <FS_TAB>-LIFNR IS NOT INITIAL.
         GS_ACCOUNTPAYABLE-ITEMNO_ACC = LV_NUM.                   " 行項(xiàng)目編號(hào)
        GS_ACCOUNTPAYABLE-VENDOR_NO = <FS_TAB>-LIFNR.      " 供應(yīng)商
        IF <FS_TAB>-SGTXT IS NOT INITIAL.
           GS_ACCOUNTPAYABLE-ITEM_TEXT = <FS_TAB>-SGTXT.        " 項(xiàng)目文本
        ENDIF.
         IF <FS_TAB>-UMSKZ IS NOT INITIAL.
           GS_ACCOUNTPAYABLE-SP_GL_IND = <FS_TAB>-UMSKZ.         " 特別總賬標(biāo)識(shí)
        ENDIF.
         IF <FS_TAB>-HKONT IS NOT INITIAL.
           GS_ACCOUNTPAYABLE-GL_ACCOUNT = <FS_TAB>-HKONT." '2202010000'." <FS_TAB>-HKONT .        " 總賬科目
        ENDIF.
         IF <FS_TAB>-VALUT NE '00000000'.
           GS_ACCOUNTPAYABLE-BLINE_DATE = <FS_TAB>-VALUT.         " 起息日期
        ENDIF.
         IF <FS_TAB>-ZTERM IS NOT INITIAL.
           GS_ACCOUNTPAYABLE-PMNTTRMS = <FS_TAB>-ZTERM   .        " 付款條件
        ENDIF.
         IF <FS_TAB>-ZLSCH IS NOT INITIAL.
           GS_ACCOUNTPAYABLE-PYMT_METH = <FS_TAB>-ZLSCH   .        " 付款方式
        ENDIF.
         IF <FS_TAB>-ZFBDT NE '00000000'.
           GS_ACCOUNTPAYABLE-BLINE_DATE = <FS_TAB>-ZFBDT.         " 付款基準(zhǔn)日期
        ENDIF.
         IF <FS_TAB>-XREF3 IS NOT INITIAL.
           GS_ACCOUNTPAYABLE-REF_KEY_3 = <FS_TAB>-XREF3.        " 參考碼3
         ENDIF.
         IF <FS_TAB>-HBKID IS NOT INITIAL.
           GS_ACCOUNTPAYABLE-BANK_ID = <FS_TAB>-HBKID.         " 開(kāi)戶(hù)銀行
        ENDIF.
         IF <FS_TAB>-HKTID IS NOT INITIAL.
           GS_ACCOUNTPAYABLE-HOUSEBANKACCTID = <FS_TAB>-HKTID.        " 帳戶(hù)標(biāo)識(shí)
        ENDIF.
         IF <FS_TAB>-ZUONR IS NOT INITIAL.
           GS_ACCOUNTPAYABLE-ALLOC_NMBR = <FS_TAB>-ZUONR.               " 分配
        ENDIF.

         APPEND GS_ACCOUNTPAYABLE TO GT_ACCOUNTPAYABLE.
         CLEAR GS_ACCOUNTPAYABLE .
       ENDIF.



*&---貨幣金額


      IF <FS_TAB>-MWSKZ IS  INITIAL.
         IF <FS_TAB>-DMBTR NE '0.00' .
           CLEAR GS_TBSL.
           READ TABLE GT_TBSL INTO GS_TBSL WITH  KEY BSCHL = <FS_TAB>-BSCHL.
           IF SY-SUBRC = 0.
             GS_CURRENCYAMOUNT-ITEMNO_ACC  = LV_NUM.               " 行項(xiàng)目編號(hào)
            IF <FS_TAB>-DMBTR NE '0.00' .
               IF GS_TBSL-SHKZG = 'H'.
                 GS_CURRENCYAMOUNT-AMT_DOCCUR  = <FS_TAB>-DMBTR * ( -1 ).    " 本位幣貨幣金額
              ELSE.
                 GS_CURRENCYAMOUNT-AMT_DOCCUR  = <FS_TAB>-DMBTR .    " 本位幣貨幣金額
              ENDIF.
               GS_CURRENCYAMOUNT-CURR_TYPE   = '10'.
               CLEAR GS_T001.
               READ TABLE GT_T001 INTO GS_T001 INDEX 1.
               IF SY-SUBRC = 0.
                 GS_CURRENCYAMOUNT-CURRENCY    = GS_T001-WAERS .        " 本位幣貨幣
              ENDIF.
             ENDIF.
             APPEND GS_CURRENCYAMOUNT TO GT_CURRENCYAMOUNT .
             CLEAR GS_CURRENCYAMOUNT .
           ENDIF.
         ENDIF.

         GS_CURRENCYAMOUNT-ITEMNO_ACC  = LV_NUM.                " 行項(xiàng)目編號(hào)
        IF <FS_TAB>-WRBTR NE '0.00'.
           CLEAR GS_TBSL.
           READ TABLE GT_TBSL INTO GS_TBSL WITH  KEY BSCHL = <FS_TAB>-BSCHL.
           IF SY-SUBRC = 0.
             IF GS_TBSL-SHKZG = 'H'.
               GS_CURRENCYAMOUNT-AMT_DOCCUR  = <FS_TAB>-WRBTR * ( -1 ).    " 本位幣貨幣金額
            ELSE.
               GS_CURRENCYAMOUNT-AMT_DOCCUR  = <FS_TAB>-WRBTR .    " 本位幣貨幣金額
            ENDIF.
           ENDIF.
           GS_CURRENCYAMOUNT-CURR_TYPE   = '00'.
         ENDIF.
         IF LV_WAERS IS NOT INITIAL.
           GS_CURRENCYAMOUNT-CURRENCY    = LV_WAERS .    " 憑證貨幣
        ENDIF.
         IF LV_KURSF NE '0.00000'.
           GS_CURRENCYAMOUNT-EXCH_RATE    = LV_KURSF .    " 匯率
        ENDIF.

         APPEND GS_CURRENCYAMOUNT TO GT_CURRENCYAMOUNT .
         CLEAR GS_CURRENCYAMOUNT .





*&增加字段


        ZACC_DOCUMENT-POSNR = LV_NUM.
         ZACC_DOCUMENT-BSCHL = <FS_TAB>-BSCHL.                 "過(guò)賬碼
        ZACC_DOCUMENT-ZZBY01 = <FS_TAB>-ZZBY01.               " 輔助核算
        ZACC_DOCUMENT-RSTGR = <FS_TAB>-RSTGR.                 "付款原因代碼
        ZACC_DOCUMENT-VBUND = <FS_TAB>-VBUND.                 "公司標(biāo)識(shí)
        ZACC_DOCUMENT-ZZBY11 = <FS_TAB>-ZZBY11.               " 票號(hào)/合同號(hào)1
         ZACC_DOCUMENT-ZZBY12 = <FS_TAB>-ZZBY12.                 "票號(hào)/合同號(hào)2
         ZACC_DOCUMENT-ZZBY1 = <FS_TAB>-ZZBY1.               " 票據(jù)/合同號(hào)到期日
        ZACC_DOCUMENT-KOSTL = <FS_TAB>-KOSTL.               " 成本中心

        IF <FS_TAB>-PAOBJNR NE '0000000000'.
           ZACC_DOCUMENT-PAOBJNR = <FS_TAB>-PAOBJNR.               " 獲利能力
        ENDIF.
         GS_EXTENSION2-STRUCTURE = 'ZSFIN_ZACC_DOCUMENT'.
         GS_EXTENSION2-VALUEPART1 = ZACC_DOCUMENT  .


         APPEND GS_EXTENSION2 TO GT_EXTENSION2.
         CLEAR GS_EXTENSION2.
       ENDIF.



**     *稅額



      IF <FS_TAB>-MWSKZ IS NOT INITIAL.
         " LV_NUM = LV_NUM + 1.
         CLEAR GS_ACCOUNTTAX. "稅務(wù)項(xiàng)目
        GS_ACCOUNTTAX-ITEMNO_ACC = LV_NUM. "會(huì)計(jì)憑證行項(xiàng)目編號(hào)(有稅的會(huì)自動(dòng)新增一行行項(xiàng)目)
         GS_ACCOUNTTAX-TAX_CODE = <FS_TAB>-MWSKZ.                  " 稅碼
        GS_ACCOUNTTAX-GL_ACCOUNT = <FS_TAB>-HKONT.                 "總分類(lèi)帳帳目
        APPEND GS_ACCOUNTTAX TO GT_ACCOUNTTAX. "稅務(wù)項(xiàng)目
        CLEAR GS_ACCOUNTTAX.



         "貨幣
        GS_CURRENCYAMOUNT-ITEMNO_ACC  = LV_NUM.                " 行項(xiàng)目編號(hào)
        IF <FS_TAB>-WMWST NE '0.00' .
           GS_CURRENCYAMOUNT-AMT_DOCCUR  =  <FS_TAB>-WMWST.    " 稅額
          GS_CURRENCYAMOUNT-AMT_BASE    = <FS_TAB>-WMWST.    " 稅基
        ENDIF.
         IF LV_WAERS IS NOT INITIAL.
           GS_CURRENCYAMOUNT-CURRENCY    = LV_WAERS .    " 憑證貨幣
        ENDIF.
         IF LV_KURSF IS NOT INITIAL.
           GS_CURRENCYAMOUNT-EXCH_RATE    = LV_KURSF .    " 匯率
        ENDIF.

         APPEND GS_CURRENCYAMOUNT TO GT_CURRENCYAMOUNT .
         CLEAR GS_CURRENCYAMOUNT .



*&增加字段


        ZACC_DOCUMENT-POSNR = LV_NUM.
         ZACC_DOCUMENT-BSCHL = <FS_TAB>-BSCHL.                 "過(guò)賬碼
        ZACC_DOCUMENT-ZZBY01 = <FS_TAB>-ZZBY01.               " 輔助核算
        ZACC_DOCUMENT-RSTGR = <FS_TAB>-RSTGR.                 "付款原因代碼
        ZACC_DOCUMENT-VBUND = <FS_TAB>-VBUND.                 "公司標(biāo)識(shí)
        ZACC_DOCUMENT-ZZBY11 = <FS_TAB>-ZZBY11.               " 票號(hào)/合同號(hào)1
         ZACC_DOCUMENT-ZZBY12 = <FS_TAB>-ZZBY12.                 "票號(hào)/合同號(hào)2
         ZACC_DOCUMENT-ZZBY1 = <FS_TAB>-ZZBY1.               " 票據(jù)/合同號(hào)到期日
        ZACC_DOCUMENT-KOSTL = <FS_TAB>-KOSTL.               " 成本中心
        IF <FS_TAB>-PAOBJNR NE '0000000000'.
           ZACC_DOCUMENT-PAOBJNR = <FS_TAB>-PAOBJNR.               " 獲利能力
        ENDIF.
         GS_EXTENSION2-STRUCTURE = 'ZSFIN_ZACC_DOCUMENT'.
         GS_EXTENSION2-VALUEPART1 = ZACC_DOCUMENT  .


         APPEND GS_EXTENSION2 TO GT_EXTENSION2.
         CLEAR GS_EXTENSION2.





*        loop  at GT_ACCOUNTGL INTO GS_ACCOUNTGL .
 *          GS_ACCOUNTGL-TAX_CODE = <FS_TAB>-MWSKZ.                  " 稅碼
*         MODIFY GT_ACCOUNTGL FROM  GS_ACCOUNTGL TRANSPORTING TAX_CODE
 *         COSTCENTER
 *         GL_ACCOUNT
 *         WBS_ELEMENT
 *         ORDERID
 *                 WHERE GL_ACCOUNT = GS_ACCOUNTGL-GL_ACCOUNT .
 *          ENDLOOP.


      ENDIF.
       CLEAR <FS_TAB>.
     ENDLOOP.
     CLEAR LV_NUM.
     IF  LV_CHECK = ''.
       CALL FUNCTION 'BAPI_ACC_DOCUMENT_CHECK'
         EXPORTING
           DOCUMENTHEADER    = DOCUMENTHEADER


*         CUSTOMERCPD       =
 *         CONTRACTHEADER    =


        TABLES
           ACCOUNTGL         = GT_ACCOUNTGL
           ACCOUNTRECEIVABLE = GT_ACCOUNTRECEIVABLE
           ACCOUNTPAYABLE    = GT_ACCOUNTPAYABLE
           ACCOUNTTAX        = GT_ACCOUNTTAX
           CURRENCYAMOUNT    = GT_CURRENCYAMOUNT
           RETURN            = GT_RETURN


*         PAYMENTCARD       =
 *         CONTRACTITEM      =


          EXTENSION2        = GT_EXTENSION2


*         REALESTATE        =
 *         ACCOUNTWT         =


        .

       LOOP AT  GT_TAB INTO <FS_TAB> WHERE ZIDX = LV_ID.
         CLEAR GS_RETURN.
         READ TABLE GT_RETURN INTO GS_RETURN WITH KEY TYPE = 'S'.
         "獲得消息
        IF SY-SUBRC = 0.
           <FS_TAB>-ZINFOR = '成功'.
           MODIFY GT_TAB FROM <FS_TAB> .
         ELSE.
           READ TABLE GT_RETURN INTO GS_RETURN INDEX 2.
           IF SY-SUBRC = 0.
             <FS_TAB>-ZINFOR = GS_RETURN-MESSAGE+0(100).
             MODIFY GT_TAB FROM <FS_TAB> .
           ENDIF.
         ENDIF.
       ENDLOOP.


     ELSE.

       CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
         EXPORTING
           DOCUMENTHEADER    = DOCUMENTHEADER


*         CUSTOMERCPD       =
 *         CONTRACTHEADER    =


        TABLES
           ACCOUNTGL         = GT_ACCOUNTGL
           ACCOUNTRECEIVABLE = GT_ACCOUNTRECEIVABLE
           ACCOUNTPAYABLE    = GT_ACCOUNTPAYABLE
           ACCOUNTTAX        = GT_ACCOUNTTAX
           CURRENCYAMOUNT    = GT_CURRENCYAMOUNT
           RETURN            = GT_RETURN


*         PAYMENTCARD       =
 *         CONTRACTITEM      =


          EXTENSION2        = GT_EXTENSION2


*         REALESTATE        =
 *         ACCOUNTWT         =


        .
       CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
         EXPORTING
           WAIT = 'X'.

       READ TABLE GT_RETURN INTO GS_RETURN WITH KEY TYPE = 'E'.
       IF SY-SUBRC <> 0.
         "獲得當(dāng)憑證號(hào)
        READ TABLE GT_RETURN INTO GS_RETURN INDEX 1.
         IF SY-SUBRC = 0.
           LOOP AT  GT_TAB INTO <FS_TAB> WHERE ZIDX = LV_ID.
             <FS_TAB>-BELNR = GS_RETURN-MESSAGE_V2+0(10).
             MODIFY GT_TAB FROM <FS_TAB> .
           ENDLOOP.
         ENDIF.
       ENDIF.
     ENDIF.
   ENDLOOP.


*&判斷內(nèi)表中是否有不可以生成會(huì)計(jì)憑證的數(shù)據(jù)


  LOOP AT GT_TAB INTO GS_TAB WHERE ZINFOR NE '成功'.
     MOVE-CORRESPONDING GS_TAB TO GS_TAB3.
     APPEND GS_TAB3 TO GT_TAB3.
   ENDLOOP.
 ENDFORM.


*&---------------------------------------------------------------------*
 *& Form FRM_ALV_LAYOUT
 *&---------------------------------------------------------------------*
 *& text
 *&---------------------------------------------------------------------*
 *& -->  p1        text
 *& <--  p2        text
 *&---------------------------------------------------------------------*


FORM FRM_ALV_LAYOUT .

   GS_LAYOUT-ZEBRA = 'X'.
   GS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.

 ENDFORM.


*&---------------------------------------------------------------------*
 *& Form FRM_ALV_FIELDCAT
 *&---------------------------------------------------------------------*
 *& text
 *&---------------------------------------------------------------------*
 *& -->  p1        text
 *& <--  p2        text
 *&---------------------------------------------------------------------*


FORM FRM_ALV_FIELDCAT .


   INIT_FIELDCAT:
   L_COLPOS 'ZIDX'   TEXT-001  ," 'INDEX',
   L_COLPOS 'ZINFOR'  TEXT-038  ,"   '消息',
   L_COLPOS 'BELNR'   TEXT-039  ," '憑證編號(hào)   '.
   L_COLPOS 'BUKRS'  TEXT-002  ," '公司代碼',
   L_COLPOS 'BLART'  TEXT-003  ," '憑證類(lèi)型',
   L_COLPOS 'BLDAT'  TEXT-004  ," '憑證日期',
   L_COLPOS 'BUDAT'  TEXT-005  ," '記帳日期',
   L_COLPOS 'WAERS'  TEXT-006  ," '交易貨幣',
   L_COLPOS 'XBLNR'  TEXT-007  ," '參考憑證號(hào)',
   L_COLPOS 'BKTXT'  TEXT-008  ," '憑證抬頭文本',
   L_COLPOS 'KURSF'  TEXT-009  ," '匯率',
   L_COLPOS 'BSCHL'  TEXT-010  ," '記帳碼',
   L_COLPOS 'UMSKZ'  TEXT-011  ," '特別總帳標(biāo)志',
   L_COLPOS 'HKONT'  TEXT-012  ," '總賬科目',
   L_COLPOS 'KUNNR'  TEXT-013  ," '客戶(hù)',
   L_COLPOS 'LIFNR'  TEXT-014  ," '供應(yīng)商',
   L_COLPOS 'WRBTR'  TEXT-015  ," '交易貨幣金額',
   L_COLPOS 'DMBTR'  TEXT-016  ," '本位幣金額',
   L_COLPOS 'MWSKZ'  TEXT-017 ," '稅碼',
   L_COLPOS 'WMWST'  TEXT-018 ," '憑證貨幣稅額',
   L_COLPOS 'RSTGR'  TEXT-019 ," '原因代碼',
   L_COLPOS 'ZZBY01' TEXT-020 ,"  '輔助核算',
   L_COLPOS 'VBUND'  TEXT-021 ," '貿(mào)易伙伴',
   L_COLPOS 'VALUT'  TEXT-022   ," '起息日',
   L_COLPOS 'ZUONR'  TEXT-023   ," '分配',
   L_COLPOS 'SGTXT'  TEXT-024   ," '項(xiàng)目文本',
   L_COLPOS 'ZLSCH'  TEXT-025   ," '付款方式',
   L_COLPOS 'ZTERM'  TEXT-026   ," '付款條件',
   L_COLPOS 'ZFBDT'  TEXT-027   ," '付款基準(zhǔn)日期',
   L_COLPOS 'XREF3'  TEXT-028   ," '參考碼3',
   L_COLPOS 'HBKID'  TEXT-029   ," '開(kāi)戶(hù)銀行',
   L_COLPOS 'HKTID'  TEXT-030    ," '帳戶(hù)標(biāo)識(shí)',
   L_COLPOS 'ZZBY11' TEXT-031    ," '票號(hào)/合同號(hào)1',
   L_COLPOS 'ZZBY12' TEXT-032    ," '票號(hào)/合同號(hào)2',
   L_COLPOS 'ZZBY1'  TEXT-033  ," '票據(jù)/合同號(hào)到期日',
   L_COLPOS 'KOSTL'   TEXT-034  ," '成本中心',
   L_COLPOS 'PROJK'   TEXT-035  ," '項(xiàng)目WBS',
   L_COLPOS 'AUFNR'   TEXT-036  ," '內(nèi)部訂單',
   L_COLPOS 'PAOBJNR' TEXT-037  ." '獲利能力分析',

ENDFORM.


*&---------------------------------------------------------------------*
 *& Form FRM_ALV_DISPLAY
 *&---------------------------------------------------------------------*
 *& text
 *&---------------------------------------------------------------------*
 *& -->  p1        text
 *& <--  p2        text
 *&---------------------------------------------------------------------*


FORM FRM_ALV_DISPLAY .
   DATA:  RS_SELFIELD TYPE SLIS_SELFIELD.
   "刷新
  RS_SELFIELD-REFRESH = 'X'.

   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
     EXPORTING
       I_CALLBACK_PROGRAM       = SY-REPID
       I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
       I_CALLBACK_USER_COMMAND  = 'USER_COMMAND'
       IS_LAYOUT                = GS_LAYOUT
       IT_FIELDCAT              = GT_FIELDCAT
       I_SAVE                   = 'A'
     TABLES
       T_OUTTAB                 = GT_TAB
     EXCEPTIONS
       PROGRAM_ERROR            = 1
       OTHERS                   = 2.
   IF SY-SUBRC <> 0.


* Implement suitable error handling here


  ENDIF.
 ENDFORM.



*&---------------------------------------------------------------------*
 *&      Form  SET_PF_STATUS
 *&---------------------------------------------------------------------*
 *       定義狀態(tài)條捡多,包括菜單,工具條按鈕铐炫,系統(tǒng)按鈕等
*----------------------------------------------------------------------*
 *      -->RT_EXTAB   text
 *----------------------------------------------------------------------*


FORM SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.

   SET PF-STATUS 'STATUS'.
 ENDFORM. "SET_PF_STATUS


*&--------------------------------------------------------------------*
 *&      Form  user_command
 *&--------------------------------------------------------------------*
 *       text
 *---------------------------------------------------------------------*


FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
                     RS_SELFIELD TYPE SLIS_SELFIELD.


   CASE R_UCOMM.      "PAI發(fā)出的功能代碼
    WHEN 'EXIT'.
       LEAVE TO SCREEN 0.
     WHEN 'BACK'.
       LEAVE TO SCREEN 0.

     WHEN 'POST'.
       DATA ANSWER TYPE STRING.  " 應(yīng)答返回值
      CLEAR ANSWER.
       CLEAR GS_TAB.
       READ TABLE GT_TAB INTO GS_TAB INDEX 1.
       IF SY-SUBRC = 0.
         IF GS_TAB-BELNR IS INITIAL.

           IF GT_TAB3 IS NOT INITIAL .
             CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE'
               EXPORTING
                 DEFAULTOPTION = 'Y'
                 DIAGNOSETEXT1 = '憑證有錯(cuò)誤行項(xiàng)目'  " 標(biāo)題名


*               DIAGNOSETEXT2 = ' '
 *               DIAGNOSETEXT3 = ' '


                TEXTLINE1     = '是否繼續(xù)垒手?'  " 內(nèi)容


*               TEXTLINE2     = ' '


                TITEL         = '警告' " 菜單
                START_COLUMN  = 45
                 START_ROW     = 6


*               CANCEL_DISPLAY       = 'X'


              IMPORTING
                 ANSWER        = ANSWER. " J 是 ,N 否 倒信,A 取消


*             MESSAGE W384(ZFIN01) .
 *         "  MESSAGE '憑證有錯(cuò)誤行項(xiàng)目' type 'S'  DISPLAY LIKE 'E'.


          ENDIF.
           IF ANSWER = 'J' OR ANSWER = ''.
             LV_CHECK = 'X'.
             CLEAR GT_TAB1.
             PERFORM FRM_GET_DATA.

             RS_SELFIELD-COL_STABLE  = 'X'.
             RS_SELFIELD-ROW_STABLE  = 'X'.
             RS_SELFIELD-REFRESH  = 'X'.
           ENDIF.
         ELSE.
           MESSAGE E383(ZFIN01).  "請(qǐng)勿重復(fù)過(guò)賬
        ENDIF.
       ENDIF.
     WHEN '&IC1'.




*跳轉(zhuǎn)事務(wù)代碼


      READ TABLE GT_TAB INTO GS_TAB INDEX RS_SELFIELD-TABINDEX.
       IF SY-SUBRC = 0.
         IF GS_TAB-BELNR = ''.
           MESSAGE E337(ZFIN01).
         ELSE.

           LOOP AT GT_TAB INTO GS_TAB WHERE ZIDX = GS_TAB-ZIDX.
             GS_TAB2-BUKRS = GS_TAB-BUKRS.
             GS_TAB2-BLDAT = GS_TAB-BLDAT.
             GS_TAB2-BELNR = GS_TAB-BELNR.
             APPEND GS_TAB2 TO GT_TAB2.
           ENDLOOP.
           READ TABLE GT_TAB2 INTO GS_TAB2 INDEX 1.
           IF SY-SUBRC = 0.
             SET PARAMETER ID: 'BUK' FIELD GS_TAB2-BUKRS.
             SET PARAMETER ID: 'BLN' FIELD GS_TAB2-BELNR.
             SET PARAMETER ID: 'GJR' FIELD GS_TAB2-BLDAT+0(4).
           ENDIF.

         ENDIF.
       ENDIF.
       CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN .
       CLEAR GT_TAB2.
   ENDCASE.

   "刷新
  RS_SELFIELD-REFRESH = 'X'.

 ENDFORM. "user_command



*Text elements
 *----------------------------------------------------------
 * 001 INDEX
 * 002 公司代碼
* 003 憑證類(lèi)型
* 004 憑證日期
* 005 記帳日期
* 006 交易貨幣
* 007 參考憑證號(hào)
* 008 憑證抬頭文本
* 009 匯率
* 010 記帳碼
* 011 特別總帳標(biāo)志
* 012 總賬科目
* 013 客戶(hù)
* 014 供應(yīng)商
* 015 交易貨幣金額
* 016 本位幣金額
* 017 稅碼
* 018 憑證貨幣稅額
* 019 原因代碼
* 020 輔助核算
* 021 貿(mào)易伙伴
* 022 起息日
* 023 分配
* 024 項(xiàng)目文本
* 025 付款方式
* 026 付款條件
* 027 付款基準(zhǔn)日期
* 028 參考碼3
 * 029 開(kāi)戶(hù)銀行
* 030 帳戶(hù)標(biāo)識(shí)
* 031 票號(hào)/合同號(hào)1
 * 032 票號(hào)/合同號(hào)2
 * 033 票據(jù)/合同號(hào)到期日
* 034 成本中心
* 035 項(xiàng)目WBS
 * 036 內(nèi)部訂單
* 037 獲利能力分析
* 038 消息
* 039 憑證編號(hào)   
* 040 會(huì)記憑證批量打印模板.xlsx


 *Selection texts
 *----------------------------------------------------------
 * P_PATH         上傳文件


*Messages
 *----------------------------------------------------------
 *
 * Message class: ZFIN01
 *000   &
 *009   用戶(hù)取消操作
*010   請(qǐng)選擇導(dǎo)入文件
*011   上傳模板數(shù)據(jù)不能為空
*337   請(qǐng)先過(guò)賬淫奔!
*361   清單中無(wú)數(shù)據(jù)!
 *383   請(qǐng)勿重復(fù)過(guò)賬!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末堤结,一起剝皮案震驚了整個(gè)濱河市唆迁,隨后出現(xiàn)的幾起案子鸭丛,更是在濱河造成了極大的恐慌,老刑警劉巖唐责,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鳞溉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡鼠哥,警方通過(guò)查閱死者的電腦和手機(jī)熟菲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)朴恳,“玉大人抄罕,你說(shuō)我怎么就攤上這事∮谟保” “怎么了呆贿?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)森渐。 經(jīng)常有香客問(wèn)我做入,道長(zhǎng),這世上最難降的妖魔是什么同衣? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任竟块,我火速辦了婚禮,結(jié)果婚禮上耐齐,老公的妹妹穿的比我還像新娘浪秘。我一直安慰自己,他們只是感情好埠况,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布耸携。 她就那樣靜靜地躺著,像睡著了一般询枚。 火紅的嫁衣襯著肌膚如雪违帆。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,737評(píng)論 1 305
  • 那天金蜀,我揣著相機(jī)與錄音刷后,去河邊找鬼。 笑死渊抄,一個(gè)胖子當(dāng)著我的面吹牛尝胆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播护桦,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼含衔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起贪染,我...
    開(kāi)封第一講書(shū)人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤缓呛,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后杭隙,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體哟绊,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年痰憎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了票髓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡铣耘,死狀恐怖洽沟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蜗细,我是刑警寧澤裆操,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站鳄乏,受9級(jí)特大地震影響跷车,放射性物質(zhì)發(fā)生泄漏棘利。R本人自食惡果不足惜橱野,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望善玫。 院中可真熱鬧水援,春花似錦、人聲如沸茅郎。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)系冗。三九已至奕扣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掌敬,已是汗流浹背惯豆。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奔害,地道東北人楷兽。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像华临,于是被迫代替她去往敵國(guó)和親芯杀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355