ABAP-会计凭证批导

*&---------------------------------------------------------------------*
*& Report ZFIR_023
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZFIR_023.

TABLES: SSCRFIELDS.
CONSTANTS: GC_OBJID TYPE W3OBJID VALUE 'ZFIR_023'.
*&---------------------------------------------------------------------*
*&  数据类型
*&---------------------------------------------------------------------*
TYPESBEGIN OF S_DATA,
         SEL   TYPE BOOLEAN,
         ZNUMC TYPE CHAR5,            "凭证标识
         BUZEI TYPE BSEG-BUZEI,       "行项目
         BELNR TYPE BSEG-BELNR,
         GJAHR TYPE BSEG-GJAHR,
         ITYPE TYPE C,                "导入类型(G,科目,D,客户,K供应商)
         BLDAT TYPE BKPF-BLDAT,       "凭证日期
         BLART TYPE BKPF-BLART,       "凭证类型
         BUKRS TYPE BKPF-BUKRS,       "公司代码
         BUDAT TYPE BKPF-BUDAT,       "过帐日期
         MONAT TYPE BKPF-MONAT,       "过帐期间
         WAERS TYPE BKPF-WAERS,       "货币
         XBLNR TYPE BKPF-XBLNR,       "参考
         BKTXT TYPE BKPF-BKTXT,       "抬头文本
         NUMPG TYPE BKPF-NUMPG,       "页数
         SHKZG TYPE BSEG-SHKZG,       "借贷方
         HKONT TYPE BSEG-HKONT,       "总账科目
         KUNNR TYPE BSEG-KUNNR,       "客户编号
         LIFNR TYPE BSEG-LIFNR,       "供应商编号
         ANLN1 TYPE BSEG-ANLN1,       "资产编号
         ANLN2 TYPE BSEG-ANLN2,       "资产子编号
         UMSKZ TYPE BSEG-UMSKZ,       "特别总帐标志
         BWASL TYPE BSEG-BWASL_PN,    "事务类型
         WRBTR TYPE BSEG-WRBTR,       "凭证金额
         DMBTR TYPE BSEG-DMBTR,       "本位币金额
         XNEGP TYPE BSEG-XNEGP,       "反记账标识
         ZTERM TYPE BSEG-ZTERM,       "付款条款
         ZFBDT TYPE BSEG-ZFBDT,       "到期日
         PRCTR TYPE BSEG-PRCTR,       "利润中心
         KOSTL TYPE BSEG-KOSTL,       "成本中心
         AUFNR TYPE BSEG-AUFNR,       "内部订单
         RSTGR TYPE BSEG-RSTGR,       "原因代码
         HBKID TYPE BSEG-HBKID,       "开户行
         HKTID TYPE BSEG-HKTID,       "账户标识
         KIDNO TYPE BSEG-KIDNO,
         XREF1 TYPE BSEG-XREF1,       "参考1
         XREF2 TYPE BSEG-XREF2,
         XREF3 TYPE BSEG-XREF3,
         ZUONR TYPE BSEG-ZUONR,       "分配
         SGTXT TYPE BSEG-SGTXT,       "项目文本
         BSCHL TYPE BSEG-BSCHL,       "记账码
         KKBER TYPE BSEG-KKBER,       "信贷范围
         ZLSPR TYPE BSEG-ZLSPR,       "冻结付款标识
         PROJK TYPE CHAR24,       "WBS
         TYPE  TYPE BAPI_MTYPE,
         ICON  TYPE ICON_D,
         MSG   TYPE BAPI_MSG,
       END OF S_DATA.
TYPES: T_DATA TYPE TABLE OF S_DATA.
TYPESBEGIN OF S_EXCEL,
         ZNUMC(5)   TYPE C,    "凭证标识
         BLDAT(8)   TYPE C,    "凭证日期
         BLART(2)   TYPE C,    "凭证类型
         BUKRS(4)   TYPE C,    "公司代码
         BUDAT(8)   TYPE C,    "过帐日期
         MONAT(2)   TYPE C,    "过帐期间
         WAERS(5)   TYPE C,    "货币
         XBLNR(32)  TYPE C,    "参考
         BKTXT(50)  TYPE C,    "抬头文本
         NUMPG(3)   TYPE C,    "页数
         SHKZG(1)   TYPE C,    "借贷方
         HKONT(10)  TYPE C,    "总账科目
         KUNNR(10)  TYPE C,    "客户编号
         LIFNR(10)  TYPE C,    "供应商编号
         ANLN1(12)  TYPE C,    "资产编号
         ANLN2(4)   TYPE C,    "资产子编号
         UMSKZ(1)   TYPE C,    "特别总帐标志
         BWASL(3)   TYPE C,    "事务类型
         WRBTR(20)  TYPE C,    "金额
         DMBTR(20)  TYPE C,    "本位币金额
         XNEGP(1)   TYPE C,    "反记账标识
         ZTERM(4)   TYPE C,    "付款条款
         ZFBDT(8)   TYPE C,    "到期日
         PRCTR(10)  TYPE C,    "利润中心
         KOSTL(10)  TYPE C,    "成本中心
         AUFNR(12)  TYPE C,    "内部订单
         RSTGR(3)   TYPE C,    "原因代码
         HBKID(5)   TYPE C,    "开户行
         HKTID(5)   TYPE C,    "账户标识
         KIDNO(60)  TYPE C,    "付款参考
         XREF1(24)  TYPE C,    "参考1
         XREF2(24)  TYPE C,    "参考1
         XREF3(40)  TYPE C,    "参考1
         ZUONR(36)  TYPE C,    "分配
         SGTXT(100TYPE C,    "项目文本
         KKBER(4)   TYPE C,    "信贷范围
         ZLSPR(1)   TYPE C,    "冻结付款标识
         PROJK(24)  TYPE C,    "WBS
       END OF S_EXCEL.
TYPES: T_EXCEL TYPE TABLE OF S_EXCEL.
*&---------------------------------------------------------------------*
*&  结构
*&---------------------------------------------------------------------*
DATA: GS_DATA TYPE S_DATA.

*&---------------------------------------------------------------------*
*&  内表
*&---------------------------------------------------------------------*
DATA: GT_DATA TYPE T_DATA.

*&---------------------------------------------------------------------*
*&  对象
*&---------------------------------------------------------------------*
CLASS LCL_ALV_EVENT_0100 DEFINITION DEFERRED.
DATA: GO_DOCK_100 TYPE REF TO CL_GUI_DOCKING_CONTAINER.
DATA: GO_GRID_100 TYPE REF TO CL_GUI_ALV_GRID.
DATA: GO_ALV_EVENT_100 TYPE REF TO LCL_ALV_EVENT_0100.

*&---------------------------------------------------------------------*
*&  变量
*&---------------------------------------------------------------------*
DATA: OK_CODE  TYPE SY-UCOMM,      GV_CODE  
TYPE SY-UCOMM,      GV_TITLE 
TYPE REPTI,      GV_LINE  
TYPE I.

*&---------------------------------------------------------------------*
*&  选择屏幕
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BL01 WITH FRAME TITLE TEXT-T01.

PARAMETERS: P_FILE TYPE RLGRAP-FILENAME.

SELECTION-SCREEN END OF BLOCK BL01.

*LOAD-OF-PROGRAM.
SELECTION-SCREEN FUNCTION KEY 1.

INITIALIZATION.  
PERFORM SET_BUTTON_TEXT.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.  
PERFORM SELECT_PC_FILENAME USING P_FILE.

AT SELECTION-SCREEN.  
PERFORM UCOMM_SCREEN_1000.

START-OF-SELECTION.  
PERFORM PROGRAM_MAIN.

*----------------------------------------------------------------------*
*       CLASS LCL_ALV_EVENT_0100 DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_ALV_EVENT_0100 DEFINITION.  
PUBLIC SECTION.    
" Toolbar事件    
METHODS HANDLE_TOOLBAR                  
FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID      
IMPORTING E_OBJECT E_INTERACTIVE.    
" USER-COMMAND 事件    
METHODS HANDLE_USER_COMMAND                  
FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID      
IMPORTING E_UCOMM.
ENDCLASS"LCL_ALV_EVENT_0100 DEFINITION

*----------------------------------------------------------------------*
*       CLASS LCL_ALV_EVENT_0100 IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_ALV_EVENT_0100 IMPLEMENTATION.  
" Toolbar事件  
METHOD HANDLE_TOOLBAR.    
PERFORM ALV_TOOLBAR CHANGING E_OBJECT->MT_TOOLBAR.  
ENDMETHOD.                    "handle_toolbar  
" USER_COMMAND 事件  
METHOD HANDLE_USER_COMMAND.    
PERFORM USER_COMMAND_EVENT USING E_UCOMM.  
ENDMETHOD.                    "HANDLE_USER_COMMAND
ENDCLASS"LCL_ALV_EVENT_0100 IMPLEMENTATION
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.  GV_TITLE 
TEXT-T02.  
SET PF-STATUS 'STATUS_BAR'.  
SET TITLEBAR 'TITLE_BAR' WITH GV_TITLE GV_LINE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module INIT_SCREEN_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE INIT_SCREEN_0100 OUTPUT.  
PERFORM INIT_ALV_100.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.  GV_CODE 
= OK_CODE.  
CLEAR OK_CODE.  
CASE GV_CODE.    
WHEN '&BACK'.      
LEAVE TO SCREEN 0.    
WHEN OTHERS.  
ENDCASE.
ENDMODULE.

*&---------------------------------------------------------------------*
*&      Form  PROGRAM_MAIN
*&---------------------------------------------------------------------*
*       text  程序入口
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PROGRAM_MAIN.  
PERFORM UPLOAD_DATA USING    P_FILE                      
CHANGING GT_DATA.  

PERFORM CHECK_DATA CHANGING GT_DATA.  

PERFORM DEAL_DATA CHANGING GT_DATA.  
IF GT_DATA[] IS INITIAL.    
" 无符合条件的数据!    
MESSAGE TEXT-M01 TYPE 'S' DISPLAY LIKE 'E'.    
EXIT.  
ENDIF.  

DESCRIBE TABLE GT_DATA LINES GV_LINE" 统计内表行数  

CALL SCREEN 100.

ENDFORM" PROGRAM_MAIN
*&---------------------------------------------------------------------*
*&      Form  SET_BUTTON_TEXT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM SET_BUTTON_TEXT .  
DATA: LS_SMP_DYNTXT TYPE SMP_DYNTXT.  LS_SMP_DYNTXT

-ICON_ID '@49@'.  LS_SMP_DYNTXT
-ICON_TEXT TEXT-T03.  " 下载模板  LS_SMP_DYNTXT
-QUICKINFO TEXT-T03.  " 下载模板  SSCRFIELDS
-FUNCTXT_01   = LS_SMP_DYNTXT.
ENDFORM"SET_BUTTON_TEXT
*&---------------------------------------------------------------------*
*&      Form  UCOMM_SCREEN_1000
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM UCOMM_SCREEN_1000 .  
CASE SSCRFIELDS-UCOMM.    
WHEN 'UC1'.    
WHEN 'FC01'.      
PERFORM SET_DOWNLOAD_EXCELTEMPLATE.    
WHEN OTHERS.  
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SELECT_PC_FILENAME
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->cv_file    text
*----------------------------------------------------------------------*
FORM SELECT_PC_FILENAME CHANGING CV_FILE TYPE RLGRAP-FILENAME.  
DATA: LS_FILETABLE TYPE FILE_TABLE.  
DATA: LT_FILETABLE TYPE FILETABLE.  

DATA: LV_RC           TYPE I,        LV_WINDOW_TITLE 
TYPE STRING,        LV_FILE_FILTER  
TYPE STRING.  LV_WINDOW_TITLE 

TEXT-T04" Select File " ####  LV_FILE_FILTER 
'Excel(*.xlsx)|*.xlsx|Excel(*.xls)|*.xls'.  

CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG    
EXPORTING      WINDOW_TITLE            
= LV_WINDOW_TITLE
*     default_extension       =
*     default_filename        =      FILE_FILTER             
= LV_FILE_FILTER
*     with_encoding           =
*     initial_directory       =
*     multiselection          =    
CHANGING      FILE_TABLE              
= LT_FILETABLE      RC                      
= LV_RC
*     user_action             =
*     file_encoding           =    
EXCEPTIONS      FILE_OPEN_DIALOG_FAILED 
1      CNTL_ERROR              
2      ERROR_NO_GUI            
3      NOT_SUPPORTED_BY_GUI    
4      
OTHERS                  5.  
IF SY-SUBRC <> 0.
*   Implement suitable error handling here  
ENDIF.  
READ TABLE LT_FILETABLE INTO LS_FILETABLE INDEX 1.  
IF SY-SUBRC EQ 0.    CV_FILE 
= LS_FILETABLE-FILENAME.  
ENDIF.

ENDFORM"SELECT_PC_FILENAME

*&---------------------------------------------------------------------*
*&      Form  set_DOWNLOAD_EXCELTEMPLATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM SET_DOWNLOAD_EXCELTEMPLATE.  
DATA: LV_FILE  TYPE RLGRAP-FILENAME,        LV_OBJID 
TYPE W3OBJID.  

PERFORM SAVE_FILE_PATH CHANGING LV_FILE.  

IF LV_FILE IS NOT INITIAL.    LV_OBJID 
= GC_OBJID.    
PERFORM DOWNLOAD_EXCEL_FROMSERVER USING LV_OBJID LV_FILE.  
ENDIF.

ENDFORM"set_DOWNLOAD_EXCELTEMPLATE

*&---------------------------------------------------------------------*
*&      Form  save_file_path
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->cv_file    text
*----------------------------------------------------------------------*
FORM SAVE_FILE_PATH CHANGING CV_FILE TYPE RLGRAP-FILENAME.  
DATA: LV_WINDOW_TITLE TYPE STRING,        LV_FILE_FILTER  
TYPE STRING,        LV_FILE_NAME    
TYPE STRING.  

DATA: LV_FILENAME TYPE STRING,        LV_PATH     
TYPE STRING,        LV_FULLPATH 
TYPE STRING.  

CLEAR CV_FILE.  LV_WINDOW_TITLE 
TEXT-T05.                      " 保存文件  LV_FILE_FILTER  
'Excel(*.xlsx)|*.xlsx|Excel(*.xls)|*.xls'.  
CONCATENATE TEXT-T06 SY-DATUM INTO LV_FILE_NAME.  

CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG    
EXPORTING      WINDOW_TITLE              
= LV_WINDOW_TITLE      DEFAULT_EXTENSION         
'xlsx'      DEFAULT_FILE_NAME         
= LV_FILE_NAME
*     with_encoding             =      FILE_FILTER               
= LV_FILE_FILTER
*     initial_directory         =
*     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      INVALID_DEFAULT_FILE_NAME 
4      
OTHERS                    5.  
IF SY-SUBRC <> 0.    
" 打开文件目录失败!    
MESSAGE TEXT-M02 TYPE 'S' DISPLAY LIKE 'E'.    
EXIT.  
ENDIF.  
IF LV_FULLPATH IS NOT INITIAL.    CV_FILE 
= LV_FULLPATH.  
ENDIF.

ENDFORM"save_file_path

*&---------------------------------------------------------------------*
*&      Form  DOWNLOAD_EXCEL_FROMSERVER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->pv_objid    text
*      -->pv_file     text
*----------------------------------------------------------------------*
FORM DOWNLOAD_EXCEL_FROMSERVER USING PV_OBJID TYPE WWWDATATAB-OBJID                                     PV_FILE  
TYPE  RLGRAP-FILENAME.  
DATA: LS_OBJDATA     TYPE WWWDATATAB.  

DATA: LV_DESTINATION TYPE RLGRAP-FILENAME,        LV_RC          
TYPE SY-SUBRC,        LV_MESSAGE     
TYPE BAPI_MSG.  

SELECT SINGLE RELID OBJID    
FROM WWWDATA    
INTO CORRESPONDING FIELDS OF LS_OBJDATA     
WHERE SRTF2 0     
AND RELID   'MI'     
AND OBJID   = PV_OBJID.  
IF SY-SUBRC NE OR LS_OBJDATA-OBJID EQ SPACE.    
" The template file &1 does not exist, Please upload with SMW0(TCODE)    LV_MESSAGE 
TEXT-M03.    
REPLACE '&1' WITH PV_OBJID INTO LV_MESSAGE.    
MESSAGE LV_MESSAGE TYPE 'S' DISPLAY LIKE 'E'.    
EXIT.  
ENDIF.  LV_DESTINATION   

= PV_FILE.  

CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'    
EXPORTING      
KEY         = LS_OBJDATA      DESTINATION 
= LV_DESTINATION    
IMPORTING      RC          
= LV_RC.  
IF LV_RC NE 0.    
" Template file &1 download failed !    LV_MESSAGE 
TEXT-M04.    
REPLACE '&1' WITH PV_OBJID INTO LV_MESSAGE.    
MESSAGE LV_MESSAGE TYPE 'S' DISPLAY LIKE 'E'.    
EXIT.  
ENDIF.
ENDFORM"DOWNLOAD_EXCEL_FROMSERVER

*&---------------------------------------------------------------------*
*&      Form  UPLOAD_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  pv_file        text
*  -->  ct_data        text
*----------------------------------------------------------------------*
FORM UPLOAD_DATA USING    PV_FILE TYPE RLGRAP-FILENAME                 
CHANGING CT_DATA TYPE T_DATA.  
DATA: LS_EXCEL     TYPE S_EXCEL,        LS_DATA      
TYPE S_DATA,        LS_EXCEL_TAB 
TYPE ALSMEX_TABLINE.  

DATA: LT_EXCEL     LIKE TABLE OF LS_EXCEL,        LT_EXCEL_TAB 
LIKE TABLE OF LS_EXCEL_TAB.  

DATA: LV_ROW      TYPE ALSMEX_TABLINE-ROW,        LV_TABIX    
TYPE SY-TABIX,        LV_FILENAME 
TYPE RLGRAP-FILENAME,        LV_BUZEI    
TYPE BSEG-BUZEI.  

FIELD-SYMBOLS: <FS_VALUE>.  

CHECK PV_FILE IS NOT INITIAL.  

CLEAR: CT_DATA[].  LV_FILENAME 
= PV_FILE.  

CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'    
EXPORTING      FILENAME                
= LV_FILENAME      I_BEGIN_COL             
1      I_BEGIN_ROW             
10      I_END_COL               
38      I_END_ROW               
10000    
TABLES      INTERN                  
= LT_EXCEL_TAB    
EXCEPTIONS      INCONSISTENT_PARAMETERS 
1      UPLOAD_OLE              
2      
OTHERS                  3.  
IF SY-SUBRC <> 0.    
MESSAGE TEXT-M05 TYPE 'S' DISPLAY LIKE 'E'.    
LEAVE LIST-PROCESSING.  
ENDIF.  

SORT LT_EXCEL_TAB BY ROW COL.  
LOOP AT LT_EXCEL_TAB INTO LS_EXCEL_TAB.    
AT NEW ROW.      
CLEAR: LS_EXCEL.      
IF LV_ROW NE LS_EXCEL_TAB-ROW AND LS_EXCEL_TAB-ROW NE 1.        
EXIT.      
ENDIF.    
ENDAT.    

ASSIGN COMPONENT LS_EXCEL_TAB-COL OF STRUCTURE LS_EXCEL TO <FS_VALUE>.    
IF SY-SUBRC EQ 0.      
CONDENSE LS_EXCEL_TAB-VALUE NO-GAPS.      
MOVE LS_EXCEL_TAB-VALUE TO <FS_VALUE>.    
ENDIF.    

AT END OF ROW.      
APPEND LS_EXCEL TO LT_EXCEL.      LV_ROW 
= LS_EXCEL_TAB-ROW + 1.    
ENDAT.    
CLEAR LS_EXCEL_TAB.  
ENDLOOP.  

LOOP AT LT_EXCEL INTO LS_EXCEL.    LV_BUZEI 
= LV_BUZEI + 1.    
CLEAR LS_DATA.    
MOVE-CORRESPONDING LS_EXCEL TO LS_DATA.    LS_DATA
-BUZEI = LV_BUZEI" 项目号    

"添加前导零    
PERFORM FRM_CONVERT_DATA USING '+' CHANGING LS_DATA-HKONT" 科目    
PERFORM FRM_CONVERT_DATA USING '+' CHANGING LS_DATA-AUFNR" 内部订单    
PERFORM FRM_CONVERT_DATA USING '+' CHANGING LS_DATA-KUNNR" 客户编号    
PERFORM FRM_CONVERT_DATA USING '+' CHANGING LS_DATA-LIFNR" 供应商编号    
PERFORM FRM_CONVERT_DATA USING '+' CHANGING LS_DATA-ANLN1" 资产编号    
PERFORM FRM_CONVERT_DATA USING '+' CHANGING LS_DATA-ANLN2" 资产子编号    
PERFORM FRM_CONVERT_DATA USING '+' CHANGING LS_DATA-PRCTR" 利润中心    
PERFORM FRM_CONVERT_DATA USING '+' CHANGING LS_DATA-KOSTL" 成本中心    
IF LS_EXCEL-ANLN2 IS INITIAL OR       LS_EXCEL
-ANLN2 '0'.      LS_DATA
-ANLN2 '0000'.    
ENDIF.    
APPEND LS_DATA TO CT_DATA.    

AT END OF ZNUMC.      
CLEAR LV_BUZEI.         " 项目号    
ENDAT.  
ENDLOOP.

ENDFORM" UPLOAD_DATA
*&---------------------------------------------------------------------*
*& Form CHECK_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> pt_data
*&---------------------------------------------------------------------*
FORM CHECK_DATA CHANGING CT_DATA TYPE T_DATA.  
DATABEGIN OF LS_CSKS,          KOKRS 
TYPE CSKS-KOKRS,          KOSTL 
TYPE CSKS-KOSTL,          DATBI 
TYPE CSKS-DATBI,          DATAB 
TYPE CSKS-DATAB,          BUKRS 
TYPE CSKS-BUKRS,        
END OF LS_CSKS.  
DATABEGIN OF LS_AUFK,          AUFNR 
TYPE AUFK-AUFNR,          BUKRS 
TYPE AUFK-BUKRS,        
END OF LS_AUFK.  

DATA: LS_DATA TYPE S_DATA.  

DATA: LT_CSKS LIKE TABLE OF LS_CSKS,        LT_AUFK 
LIKE TABLE OF LS_AUFK.  

DATA : LV_NUM   TYPE I,         LV_MSG   
TYPE STRING,         LV_TABIX 
TYPE SY-TABIX.  

IF CT_DATA[] IS NOT INITIAL.    
" 成本中心    
SELECT      KOKRS      KOSTL      DATBI      DATAB      BUKRS      





INTO CORRESPONDING FIELDS OF TABLE LT_CSKS      
FROM CSKS      
FOR ALL ENTRIES IN CT_DATA      
WHERE KOSTL = CT_DATA-KOSTL.

*    SELECT *
*      INTO CORRESPONDING FIELDS OF TABLE lt_aufk
*      FROM aufk
*      FOR ALL ENTRIES IN ct_data
*      WHERE aufnr = ct_data-aufnr.  

ENDIF.  

SORT LT_CSKS BY KOSTL BUKRS.
*    SORT lt_aufk BY aufnr bukrs.  
LOOP AT GT_DATA INTO LS_DATA.    LV_TABIX 
= SY-TABIX.    

CLEAR: LV_MSG, LV_NUM.    

IF LS_DATA-HKONT IS NOT INITIAL" 总账科目      LS_DATA
-ITYPE 'G'.      LV_NUM 
= LV_NUM + 1.    
ENDIF.    

IF LS_DATA-KUNNR IS NOT INITIAL" 客户编号      LS_DATA
-ITYPE 'D'.      LV_NUM 
= LV_NUM + 1.    
ENDIF.    

IF LS_DATA-LIFNR IS NOT INITIAL" 供应商编号      LS_DATA
-ITYPE 'K'.      LV_NUM 
= LV_NUM + 1.    
ENDIF.    

IF LS_DATA-ANLN1 IS NOT INITIAL" 资产编号      LS_DATA
-ITYPE 'F'.      LV_NUM 
= LV_NUM + 1.    
ENDIF.    

IF LS_DATA-ZNUMC IS INITIAL.      
IF LV_MSG IS INITIAL.        LV_MSG 
TEXT-M06.          " 凭证标识必输      
ELSE.        
CONCATENATE LV_MSG TEXT-M06 INTO LV_MSG SEPARATED BY '/'.      
ENDIF.    
ENDIF.    

IF LS_DATA-BLDAT IS INITIAL OR LS_DATA-BLDAT ''.      
IF LV_MSG IS INITIAL.        LV_MSG 
TEXT-M07.         " 凭证日期必输      
ELSE.        
CONCATENATE LV_MSG TEXT-M07 INTO LV_MSG SEPARATED BY '/'.      
ENDIF.    
ENDIF.    

IF LS_DATA-BLART IS INITIAL.      
IF LV_MSG IS INITIAL.        LV_MSG 
TEXT-M08.        " 凭证类型必输      
ELSE.        
CONCATENATE LV_MSG TEXT-M08 INTO LV_MSG SEPARATED BY '/'.      
ENDIF.    
ENDIF.    

IF LS_DATA-BUKRS IS INITIAL.      
IF LV_MSG IS INITIAL.        LV_MSG 
TEXT-M09.        " 公司代码必输      
ELSE.        
CONCATENATE LV_MSG TEXT-M09 INTO LV_MSG SEPARATED BY '/'.      
ENDIF.    

ELSE.      
IF LS_DATA-KOSTL IS NOT INITIAL.        
" 成本中心        
READ TABLE LT_CSKS TRANSPORTING NO FIELDS WITH KEY KOSTL = LS_DATA-KOSTL                                                           BUKRS 
= LS_DATA-BUKRS BINARY SEARCH.        
IF SY-SUBRC <> 0.          
IF LV_MSG IS INITIAL.            LV_MSG 
TEXT-M10.   " 成本中心与公司代码不匹配          
ELSE.            
CONCATENATE LV_MSG TEXT-M10 INTO LV_MSG SEPARATED BY '/'"成本中心与公司代码不匹配          
ENDIF.        
ENDIF.      
ENDIF.      

IF LS_DATA-AUFNR IS NOT INITIAL.  " 内部订单
*        READ TABLE lt_aufk TRANSPORTING NO FIELDS WITH KEY aufnr = ls_data-aufnr
*                                                           bukrs = ls_data-bukrs BINARY SEARCH.
*        IF sy-subrc NE 0.
*          IF lv_msg IS INITIAL.
*            lv_msg = TEXT-014.         " 内部订单与公司代码不匹配
*          ELSE.
*            CONCATENATE lv_msg TEXT-014 INTO lv_msg SEPARATED BY '/'.
*          ENDIF.
*        ENDIF.      
ENDIF.    
ENDIF.    

IF LS_DATA-BUDAT IS INITIAL OR LS_DATA-BUDAT ''.      
IF LV_MSG IS INITIAL.        LV_MSG 
TEXT-M11.            " 过账日期必输      
ELSE.        
CONCATENATE LV_MSG TEXT-M11 INTO LV_MSG SEPARATED BY '/'.      
ENDIF.    
ENDIF.    

IF LS_DATA-MONAT IS INITIAL OR LS_DATA-MONAT ''.      
IF LV_MSG IS INITIAL.        LV_MSG 
TEXT-M12.           " 过账期间必输      
ELSE.        
CONCATENATE LV_MSG TEXT-M12 INTO LV_MSG SEPARATED BY '/'.      
ENDIF.    
ENDIF.    

IF LS_DATA-WAERS IS INITIAL.      
IF LV_MSG IS INITIAL.        LV_MSG 
TEXT-M13.          " 货币必输      
ELSE.        
CONCATENATE LV_MSG TEXT-M13 INTO LV_MSG SEPARATED BY '/'.      
ENDIF.    
ENDIF.    

IF LS_DATA-SHKZG <> 'S' AND LS_DATA-SHKZG <> 'H'.      
IF LV_MSG IS INITIAL.        LV_MSG 
TEXT-M14.         " 借贷方必须为S或H      
ELSE.        
CONCATENATE LV_MSG TEXT-M14 INTO LV_MSG SEPARATED BY '/'.      
ENDIF.    
ENDIF.    

IF LV_NUM > 1.      
IF LV_MSG IS INITIAL.        LV_MSG 
TEXT-M15.         " 总账/客户/供应商/资产只能任输其一      
ELSE.        
CONCATENATE LV_MSG TEXT-010 INTO LV_MSG SEPARATED BY '/'.      
ENDIF.    
ENDIF.    

IF LS_DATA-ANLN1 IS NOT INITIAL.      
IF LS_DATA-BWASL IS INITIAL.        
IF LV_MSG IS INITIAL.          LV_MSG 
TEXT-M16.       " 输资产编号'事务类型'字段必输        
ELSE.          
CONCATENATE LV_MSG TEXT-M16 INTO LV_MSG SEPARATED BY '/'.        
ENDIF.      
ENDIF.      
IF LS_DATA-ANLN2 IS INITIAL.        
IF LV_MSG IS INITIAL.          LV_MSG 
TEXT-M17.        " 输资产编号,资产子编号必输        
ELSE.          
CONCATENATE LV_MSG TEXT-M17 INTO LV_MSG SEPARATED BY '/'.        
ENDIF.      
ENDIF.    
ENDIF.    

IF LV_MSG IS NOT INITIAL.      LS_DATA
-TYPE 'E'.      LS_DATA
-ICON '@0A@'.      LS_DATA
-MSG = LV_MSG.    
ENDIF.    

MODIFY GT_DATA FROM LS_DATA INDEX LV_TABIX.    
CLEAR LS_DATA.  
ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  deal_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  <--  ct_data        text
*----------------------------------------------------------------------*
FORM DEAL_DATA CHANGING CT_DATA TYPE T_DATA.
*  DATA: ls_data TYPE s_data.
*
*  DATA: lv_tabix TYPE sy-tabix.
*
*  LOOP AT ct_data INTO ls_data.
*    lv_tabix = sy-tabix.
*    MODIFY ct_data FROM ls_data INDEX lv_tabix TRANSPORTING anln1.
*  ENDLOOP.

ENDFORM"get_data

*&---------------------------------------------------------------------*
*&      Form  init_alv_100
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM INIT_ALV_100.  
DATA: LS_LAYOUT  TYPE LVC_S_LAYO,        LS_VARIANT 
TYPE DISVARIANT.  

DATA: LT_FIELDCATALOG TYPE LVC_T_FCAT,        LT_EXCLUDE      
TYPE UI_FUNCTIONS.  

IF GO_DOCK_100 IS INITIAL.    
" 容器    
CREATE OBJECT GO_DOCK_100      
EXPORTING        REPID                       
= SY-REPID  " 程序名        DYNNR                       
= SY-DYNNR  " 屏幕号
*       SIDE                        = DOCK_AT_LEFT        EXTENSION                   
1500      " ALV宽度      
EXCEPTIONS        CNTL_ERROR                  
1        CNTL_SYSTEM_ERROR           
2        CREATE_ERROR                
3        LIFETIME_ERROR              
4        LIFETIME_DYNPRO_DYNPRO_LINK 
5        
OTHERS                      6.    
IF SY-SUBRC <> 0.      
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO                 
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.    
ENDIF.    
" ALV    
CREATE OBJECT GO_GRID_100      
EXPORTING        I_PARENT          
= GO_DOCK_100      
EXCEPTIONS        ERROR_CNTL_CREATE 
1        ERROR_CNTL_INIT   
2        ERROR_CNTL_LINK   
3        ERROR_DP_CREATE   
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.    LS_VARIANT

-REPORT = SY-REPID.    
" ALV字段    
PERFORM SET_FIELDCATALOG TABLES LT_FIELDCATALOG.    
" ALV布局    
PERFORM SET_LAYOUT CHANGING LS_LAYOUT.    
" 隐藏工具条按钮    
PERFORM SET_TOOLBAR_EXCLUDING CHANGING LT_EXCLUDE.    

" 显示ALV    
CALL METHOD GO_GRID_100->SET_TABLE_FOR_FIRST_DISPLAY      
EXPORTING        IS_VARIANT                    
= LS_VARIANT        I_SAVE                        
'A'        I_DEFAULT                     
'X'        IS_LAYOUT                     
= LS_LAYOUT        IT_TOOLBAR_EXCLUDING          
= LT_EXCLUDE      
CHANGING        IT_OUTTAB                     
= GT_DATA[]        IT_FIELDCATALOG               
= LT_FIELDCATALOG[]      
EXCEPTIONS        INVALID_PARAMETER_COMBINATION 
1        PROGRAM_ERROR                 
2        TOO_MANY_LINES                
3        
OTHERS                        4.    
IF SY-SUBRC <> 0.
*     Implement suitable error handling here    
ENDIF.    
" ALV事件    
CREATE OBJECT GO_ALV_EVENT_100.    
SET HANDLER GO_ALV_EVENT_100->HANDLE_TOOLBAR       FOR GO_GRID_100" TOOLBAR    
SET HANDLER GO_ALV_EVENT_100->HANDLE_USER_COMMAND  FOR GO_GRID_100" USER COMMAND    
CALL METHOD GO_GRID_100->SET_TOOLBAR_INTERACTIVE" 响应工具条  
ELSE.    
PERFORM REFRESH_ALV USING GO_GRID_100.  
ENDIF.
ENDFORM"init_alv_100

*&---------------------------------------------------------------------*
*&      Form  SET_FIELDCATALOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->ct_fcat    text
*----------------------------------------------------------------------*
FORM SET_FIELDCATALOG TABLES CT_FCAT TYPE LVC_T_FCAT.  
DEFINE LM_ADD_FCAT.    
CLEAR ls_fcat.    ls_fcat
-fieldname       = &1.  " 字段名    ls_fcat
-coltext         = &2.  " 显示字段文本    ls_fcat
-no_zero         = &3.  " 隐藏前导零    ls_fcat
-checkbox        = &4.  " 复选框    ls_fcat
-edit            = &5.  " 可修改    ls_fcat
-outputlen       = &6.  " 输出长度    ls_fcat
-just            = &7.  " 对齐    ls_fcat
-ref_table       = &8.  " 参考表    ls_fcat
-ref_field       = &9.  " 参考字段    
APPEND ls_fcat TO ct_fcat.  
END-OF-DEFINITION.  

DATA: LS_FCAT TYPE LVC_S_FCAT.  

CLEAR: CT_FCAT[].
*  lm_add_fcat 'SEL'    TEXT-f01   ''  ''  ''  ''  ''  ''  ''.             " 选择  LM_ADD_FCAT 
'BELNR'  TEXT-F02   ''  ''  ''  ''  ''  'BKPF'  'BELNR'.    " 会计凭证  LM_ADD_FCAT 
'GJAHR'  TEXT-F03   ''  ''  ''  ''  ''  'BKPF'  'GJAHR'.    " 年度  LM_ADD_FCAT 
'ZNUMC'  TEXT-F04   ''  ''  ''  ''  ''  'BSEG'  'BUZEI'.    " 凭证标识  LM_ADD_FCAT 
'BUZEI'  TEXT-F05   ''  ''  ''  ''  ''  ''  ''.             " 行项目  LM_ADD_FCAT 
'ITYPE'  TEXT-F06   ''  ''  ''  ''  ''  ''  ''.             " 导入类型(g,科目,d,客户,k供应商)  LM_ADD_FCAT 
'BLDAT'  TEXT-F07   ''  ''  ''  ''  ''  'BKPF'  'BLDAT'.    " 凭证日期  LM_ADD_FCAT 
'BLART'  TEXT-F08   ''  ''  ''  ''  ''  'BKPF'  'BLART'.    " 凭证类型  LM_ADD_FCAT 
'BUKRS'  TEXT-F09   '' ''   ''  ''  ''  'BKPF'  'BUKRS'.    " 公司代码  LM_ADD_FCAT 
'BUDAT'  TEXT-F10   '' ''   ''  ''  ''  'BKPF'  'BUDAT'.    " 过账日期  LM_ADD_FCAT 
'MONAT'  TEXT-F11   '' ''   ''  ''  ''  'BKPF'  'MONAT'.    " 过帐期间  LM_ADD_FCAT 
'WAERS'  TEXT-F12   ''  ''  ''  ''  ''  'BKPF'  'WAERS'.    " 货币码  LM_ADD_FCAT 
'XBLNR'  TEXT-F13   ''  ''  ''  ''  ''  'BKPF'  'XBLNR'.    " 参考  LM_ADD_FCAT 
'BKTXT'  TEXT-F14   ''  ''  ''  ''  ''  'BKPF'  'BKTXT'.    " 抬头文本  LM_ADD_FCAT 
'NUMPG'  TEXT-F15   ''  ''  ''  ''  ''  'BKPF'  'NUMPG'.    " 页数  LM_ADD_FCAT 
'SHKZG'  TEXT-F16   ''  ''  ''  ''  ''  'BSEG'  'SHKZG'.    " 借贷方  LM_ADD_FCAT 
'HKONT'  TEXT-F17   ''  ''  ''  ''  ''  'BSEG'  'HKONT'.    " 总账科目  LM_ADD_FCAT 
'KUNNR'  TEXT-F18   ''  ''  ''  ''  ''  'BSEG'  'KUNNR'.    " 客户编号  LM_ADD_FCAT 
'LIFNR'  TEXT-F19   '' ''   ''  ''  ''  'BSEG'  'LIFNR'.    " 供应商编号  LM_ADD_FCAT 
'ANLN1'  TEXT-F20   '' ''   ''  ''  ''  'BSEG'  'ANLN1'.    " 资产编号  LM_ADD_FCAT 
'ANLN2'  TEXT-F21   '' ''   ''  ''  ''  'BSEG'  'ANLN2'.    " 资产子编号  LM_ADD_FCAT 
'UMSKZ'  TEXT-F22   ''  ''  ''  ''  ''  'BSEG'  'UMSKZ'.    " 特别总帐标志  LM_ADD_FCAT 
'BWASL'  TEXT-F23   ''  ''  ''  ''  ''  'BSEG'  'BWASL'.    " 事务类型  LM_ADD_FCAT 
'WRBTR'  TEXT-F24   ''  ''  ''  ''  ''  'BSEG'  'WRBTR'.    " 凭证金额  LM_ADD_FCAT 
'DMBTR'  TEXT-F25   ''  ''  ''  ''  ''  'BSEG'  'DMBTR'.    " 本位币金额  LM_ADD_FCAT 
'XNEGP'  TEXT-F26   ''  ''  ''  ''  ''  'BSEG'  'XNEGP'.    " 反记账标识  LM_ADD_FCAT 
'ZTERM'  TEXT-F27   ''  ''  ''  ''  ''  'BSEG'  'ZTERM'.    " 付款条款  LM_ADD_FCAT 
'ZFBDT'  TEXT-F28   ''  ''  ''  ''  ''  'BSEG'  'ZFBDT'.    " 到期日  LM_ADD_FCAT 
'PRCTR'  TEXT-F29   '' ''   ''  ''  ''  'BSEG'  'PRCTR'.    " 利润中心  LM_ADD_FCAT 
'KOSTL'  TEXT-F30   '' ''   ''  ''  ''  'BSEG'  'KOSTL'.    " 成本中心  LM_ADD_FCAT 
'AUFNR'  TEXT-F31   '' ''   ''  ''  ''  'BSEG'  'AUFNR'.    " 内部订单  LM_ADD_FCAT 
'RSTGR'  TEXT-F32   ''  ''  ''  ''  ''  'BSEG'  'RSTGR'.    " 原因代码  LM_ADD_FCAT 
'HBKID'  TEXT-F33   ''  ''  ''  ''  ''  'BSEG'  'HBKID'.    " 开户行  LM_ADD_FCAT 
'HKTID'  TEXT-F34   ''  ''  ''  ''  ''  'BSEG'  'HKTID'.    " 账户标识  LM_ADD_FCAT 
'KIDNO'  TEXT-F35   ''  ''  ''  ''  ''  'BSEG'  'KIDNO'.    " 付款参考  LM_ADD_FCAT 
'XREF1'  TEXT-F36   ''  ''  ''  ''  ''  'BSEG'  'XREF1'.    " 参考1  LM_ADD_FCAT 
'XREF2'  TEXT-F37   ''  ''  ''  ''  ''  'BSEG'  'XREF2'.    " 参考2  LM_ADD_FCAT 
'XREF3'  TEXT-F38   ''  ''  ''  ''  ''  'BSEG'  'XREF3'.    " 行项目的参考码  LM_ADD_FCAT 
'ZUONR'  TEXT-F39   '' ''   ''  ''  ''  'BSEG'  'ZUONR'.    " 分配  LM_ADD_FCAT 
'SGTXT'  TEXT-F40   '' ''   ''  ''  ''  'BSEG'  'SGTXT'.    " 项目文本  LM_ADD_FCAT 
'KKBER'  TEXT-F44   '' ''   ''  ''  ''  'BSEG'  'KKBER'.    " 信贷范围  LM_ADD_FCAT 
'ZLSPR'  TEXT-F45   '' ''   ''  ''  ''  'BSEG'  'ZLSPR'.    " 冻结付款标识  LM_ADD_FCAT 
'PROJK'  TEXT-F46   '' ''   ''  ''  ''  ''  ''.    " WBS
*  lm_add_fcat 'BSCHL'  TEXT-f41   '' ''   ''  ''  ''  'BSEG'  'BSCHL'.    " 记账码  LM_ADD_FCAT 
'ICON'   TEXT-F42   '' ''   ''  ''  ''  ''  ''.             " 状态  LM_ADD_FCAT 
'MSG'    TEXT-F43   '' ''   ''  ''  ''  ''  ''.             " 提示信息
ENDFORM"SET_FIELDCATALOG

*&---------------------------------------------------------------------*
*&      Form  SET_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->cs_layout  text
*----------------------------------------------------------------------*
FORM SET_LAYOUT CHANGING CS_LAYOUT TYPE LVC_S_LAYO.  
CLEAR: CS_LAYOUT.  CS_LAYOUT
-CWIDTH_OPT 'X'.  " 自动调节字段长度  CS_LAYOUT
-ZEBRA      'X'.  " 颜色交替显示  CS_LAYOUT
-SEL_MODE   'A'.  " A、B、C、D
*  CS_LAYOUT-STYLEFNAME = 'CELLTAB'.
*  CS_LAYOUT-EDIT_MODE = 'A'.  "
ENDFORM"SET_LAYOUT

*&---------------------------------------------------------------------*
*&      Form  SET_TOOLBAR_EXCLUDING
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->CT_FUNCTION  text
*----------------------------------------------------------------------*
FORM SET_TOOLBAR_EXCLUDING CHANGING CT_FUNCTION TYPE UI_FUNCTIONS.  
DATA: LS_FUNCTION TYPE UI_FUNC.  

CLEAR: CT_FUNCTION[].  LS_FUNCTION 
= CL_GUI_ALV_GRID=>MC_FC_PRINT.            " 打印  
APPEND LS_FUNCTION TO CT_FUNCTION.  LS_FUNCTION 
= CL_GUI_ALV_GRID=>MC_FC_GRAPH.            " 显示图形  
APPEND LS_FUNCTION TO CT_FUNCTION.  LS_FUNCTION 
= CL_GUI_ALV_GRID=>MC_MB_VIEW.             " 视图  
APPEND LS_FUNCTION TO CT_FUNCTION.  LS_FUNCTION 
= CL_GUI_ALV_GRID=>MC_FC_DETAIL.            " 明细  
APPEND LS_FUNCTION TO CT_FUNCTION.  LS_FUNCTION 
= CL_GUI_ALV_GRID=>MC_FC_INFO.              " 最终用户文档  
APPEND LS_FUNCTION TO CT_FUNCTION.  LS_FUNCTION 
= CL_GUI_ALV_GRID=>MC_FC_PRINT_BACK.        " 打印  
APPEND LS_FUNCTION TO CT_FUNCTION.  LS_FUNCTION 
= CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW.    " 插入行  
APPEND LS_FUNCTION TO CT_FUNCTION.  LS_FUNCTION 
= CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW.    " 删除行  
APPEND LS_FUNCTION TO CT_FUNCTION.  LS_FUNCTION 
= CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW.    " 附加行  
APPEND LS_FUNCTION TO CT_FUNCTION.  LS_FUNCTION 
= CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW.      " 复制行  
APPEND LS_FUNCTION TO CT_FUNCTION.  LS_FUNCTION 
= CL_GUI_ALV_GRID=>MC_FC_LOC_COPY.          " 复制  
APPEND LS_FUNCTION TO CT_FUNCTION.  LS_FUNCTION 
= CL_GUI_ALV_GRID=>MC_FC_LOC_CUT.           " 剪切  
APPEND LS_FUNCTION TO CT_FUNCTION.  LS_FUNCTION 
= CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE.         " 插入总览  
APPEND LS_FUNCTION TO CT_FUNCTION.  LS_FUNCTION 
= CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE_NEW_ROW" 插入新行  
APPEND LS_FUNCTION TO CT_FUNCTION.  LS_FUNCTION 
= CL_GUI_ALV_GRID=>MC_FC_LOC_UNDO.          " 撤销  
APPEND LS_FUNCTION TO CT_FUNCTION.
*  LS_FUNCTION = CL_GUI_ALV_GRID=>MC_MB_EXPORT.           " 导出
*  APPEND LS_FUNCTION TO CT_FUNCTION.
*  LS_FUNCTION = CL_GUI_ALV_GRID=>MC_FC_MAXIMUM.          " 最大值
*  APPEND LS_FUNCTION TO CT_FUNCTION.
*  LS_FUNCTION = CL_GUI_ALV_GRID=>MC_FC_MINIMUM.          " 最小值
*  APPEND LS_FUNCTION TO CT_FUNCTION.
*  LS_FUNCTION = CL_GUI_ALV_GRID=>MC_FC_SUM.              " 总计
*  APPEND LS_FUNCTION TO CT_FUNCTION.
*  LS_FUNCTION = CL_GUI_ALV_GRID=>MC_FC_AVERAGE.          " 平均值
*  APPEND LS_FUNCTION TO CT_FUNCTION.
*  LS_FUNCTION = CL_GUI_ALV_GRID=>MC_FC_REFRESH.          " 刷新
*  APPEND LS_FUNCTION TO CT_FUNCTION.

ENDFORM"SET_TOOLBAR_EXCLUDING

*&---------------------------------------------------------------------*
*&      Form  REFRESH_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PO_GRID    text
*----------------------------------------------------------------------*
FORM REFRESH_ALV USING PO_GRID TYPE REF TO CL_GUI_ALV_GRID.  
DATA: LS_SCROLL TYPE LVC_S_STBL.  LS_SCROLL
-ROW 'X'.  LS_SCROLL
-COL 'X'.  
CALL METHOD PO_GRID->REFRESH_TABLE_DISPLAY    
EXPORTING      IS_STABLE      
= LS_SCROLL      I_SOFT_REFRESH 
'X'    
EXCEPTIONS      FINISHED       
1      
OTHERS         2.

ENDFORM"REFRESH_ALV
*&---------------------------------------------------------------------*
*&      Form  ALV_TOOLBAR
*&---------------------------------------------------------------------*
*       text  ALV 工具条按钮
*----------------------------------------------------------------------*
*      -->CT_TOOLBAR text
*----------------------------------------------------------------------*
FORM ALV_TOOLBAR CHANGING CT_TOOLBAR TYPE TTB_BUTTON.  
DATA: LS_TOOLBAR TYPE STB_BUTTON.

*  ls_toolbar-butn_type = 3.
*  APPEND ls_toolbar TO ct_toolbar.
*
*  CLEAR: ls_toolbar.
*  ls_toolbar-function  = '&ZSALL'.
*  ls_toolbar-icon      = '@4B@'.
*  ls_toolbar-quickinfo = TEXT-b01.     " 全选
*  ls_toolbar-butn_type = 0.
*  ls_toolbar-disabled  = ''.
*  ls_toolbar-text      = TEXT-b01.     " 全选
*  APPEND ls_toolbar TO ct_toolbar.
*
*  CLEAR: ls_toolbar.
*  ls_toolbar-function  = '&ZDALL'.
*  ls_toolbar-icon      = '@4D@'.
*  ls_toolbar-quickinfo = TEXT-b02.       " 取消全选
*  ls_toolbar-butn_type = 0.
*  ls_toolbar-disabled  = ''.
*  ls_toolbar-text      = TEXT-b02.       " 取消全选
*  APPEND ls_toolbar TO ct_toolbar.  

CLEAR: LS_TOOLBAR.  LS_TOOLBAR
-BUTN_TYPE 3.  
APPEND LS_TOOLBAR TO CT_TOOLBAR.  

CLEAR: LS_TOOLBAR.  LS_TOOLBAR
-FUNCTION  '&ZIMPORT'.  LS_TOOLBAR
-ICON      '@U3@'.  LS_TOOLBAR
-QUICKINFO TEXT-B03.     " 导入  LS_TOOLBAR
-BUTN_TYPE 0.  LS_TOOLBAR
-DISABLED  ''.  LS_TOOLBAR
-TEXT      TEXT-B03.     " 导入  
APPEND LS_TOOLBAR TO CT_TOOLBAR.
ENDFORM" ALV_TOOLBAR
*&---------------------------------------------------------------------*
*& Form USER_COMMAND_EVENT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM USER_COMMAND_EVENT USING PV_UCOMM TYPE SY-UCOMM.  
CASE  PV_UCOMM.    
WHEN '&ZSALL'.      
PERFORM SELECT_ALL USING 'X'.    
WHEN '&ZDALL'.      
PERFORM SELECT_ALL USING ''.    
WHEN '&ZIMPORT'.      
PERFORM CALL_BAPI_TO_IMPORT.    
WHEN OTHERS.  
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SELECT_ALL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> pv_flag
*&---------------------------------------------------------------------*
FORM SELECT_ALL USING VALUE(PV_FLAGTYPE CHAR1.  
DATA: LS_DATA  TYPE S_DATA.  

DATA: LV_TABIX TYPE SY-TABIX.  

IF PV_FLAG 'X'.    
LOOP AT GT_DATA INTO LS_DATA WHERE SEL ''.      LV_TABIX 
= SY-TABIX.      LS_DATA
-SEL 'X'.      
MODIFY GT_DATA FROM LS_DATA INDEX LV_TABIX TRANSPORTING SEL.    
ENDLOOP.  
ELSE.    
LOOP AT GT_DATA INTO LS_DATA WHERE SEL 'X'.      LV_TABIX 
= SY-TABIX.      
CLEAR LS_DATA-SEL.      
MODIFY GT_DATA FROM LS_DATA INDEX LV_TABIX TRANSPORTING SEL.    
ENDLOOP.  
ENDIF.  
PERFORM REFRESH_ALV USING GO_GRID_100.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CALL_BAPI_TO_IMPORT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM CALL_BAPI_TO_IMPORT .  
DATA: LV_OBJ_TYPE TYPE BAPIACHE09-OBJ_TYPE,        LV_OBJ_KEY  
TYPE BAPIACHE09-OBJ_KEY,        LV_OBJ_SYS  
TYPE BAPIACHE09-OBJ_SYS,        LV_POSNR    
TYPE POSNR_ACC.  

DATA: LS_DATA              TYPE S_DATA,        LS_DATA1             
TYPE S_DATA,        LS_HEADER            
TYPE BAPIACHE09,        LT_ACCOUNTGL         
TYPE STANDARD TABLE OF BAPIACGL09"总账科目        LS_ACCOUNTGL         
TYPE BAPIACGL09,        LT_ACCOUNTRECEIVABLE 
TYPE TABLE OF BAPIACAR09,          " 客户        LS_ACCOUNTRECEIVABLE 
TYPE BAPIACAR09,        LT_ACCOUNTPAYABLE    
TYPE TABLE OF BAPIACAP09,          " 供应商        LS_ACCOUNTPAYABLE    
TYPE BAPIACAP09,        LT_CURRENCYAMOUNT    
TYPE STANDARD TABLE OF BAPIACCR09" 货币结构        LS_CURRENCYAMOUNT    
TYPE BAPIACCR09,        LT_CRITERIA          
TYPE STANDARD TABLE OF BAPIACKEC9,        LS_CRITERIA          
TYPE BAPIACKEC9,        LT_RETURN            
TYPE STANDARD TABLE OF BAPIRET2,   " 返回结构        LS_RETURN            
TYPE BAPIRET2,        LT_EXTENSION2        
TYPE STANDARD TABLE OF BAPIPAREX,  " 扩充结构        LS_EXTENSION2        
TYPE BAPIPAREX,        LS_ACC_DOCUMENT2     
TYPE ZSFI_ACC_DOCUMENT2.
*        ls_zexten            TYPE zsexten.  

DATA: LS_MESSAGE TYPE BAPIRET2,
*        lt_message TYPE STANDARD TABLE OF ty_message,        LT_TBSL    
TYPE TABLE OF TBSL,        LS_TBSL    
TYPE TBSL..  

DATA : L_IS_ASSET TYPE C.  

DATA: LV_SUBRC          TYPE SY-SUBRC,        LV_VALUEPART
(960TYPE C.  

CHECK GT_DATA[] IS NOT INITIAL.  

READ TABLE GT_DATA INTO LS_DATA WITH KEY TYPE 'E'.  
IF SY-SUBRC EQ 0.    
MESSAGE TEXT-M18 TYPE 'S' DISPLAY LIKE 'E'.    
EXIT.  
ENDIF.  

SORT GT_DATA BY ZNUMC BUZEI.  
LOOP AT GT_DATA INTO LS_DATA1 WHERE BELNR ''.    
CLEAR: LS_DATA, LV_POSNR.    
MOVE-CORRESPONDING LS_DATA1 TO LS_DATA.    LV_POSNR 

= LS_DATA-BUZEI.    

IF LS_DATA-ITYPE 'G'.      
"总账科目      
CLEAR LS_ACCOUNTGL.      LS_ACCOUNTGL
-ITEMNO_ACC      = LV_POSNR.      LS_ACCOUNTGL
-GL_ACCOUNT      = LS_DATA-HKONT.   " 科目      LS_ACCOUNTGL
-COSTCENTER      = LS_DATA-KOSTL.   " 成本中心      LS_ACCOUNTGL
-ORDERID         = LS_DATA-AUFNR.   " 内部订单      LS_ACCOUNTGL
-ALLOC_NMBR      = LS_DATA-ZUONR.   " 分配号      LS_ACCOUNTGL
-ITEM_TEXT       = LS_DATA-SGTXT.   " 摘要      LS_ACCOUNTGL
-PROFIT_CTR      = LS_DATA-PRCTR.   " 利润中心      LS_ACCOUNTGL
-HOUSEBANKID     = LS_DATA-HBKID.   " 开户行      LS_ACCOUNTGL
-HOUSEBANKACCTID = LS_DATA-HKTID.   " 账户标识      LS_ACCOUNTGL
-REF_KEY_1       = LS_DATA-XREF1.   " 参考1      LS_ACCOUNTGL
-REF_KEY_2       = LS_DATA-XREF2.   " 参考2      LS_ACCOUNTGL
-REF_KEY_3       = LS_DATA-XREF3.   " 参考3      LS_ACCOUNTGL
-ALLOC_NMBR      = LS_DATA-ZUONR.   " 分配号      LS_ACCOUNTGL
-ITEM_TEXT       = LS_DATA-SGTXT.   " 行项目文本      LS_ACCOUNTGL
-WBS_ELEMENT     = LS_DATA-PROJK.   " WBS      
" ls_accountgl-bus_area = ls_data-gsber.        " 业务范围      
APPEND LS_ACCOUNTGL TO LT_ACCOUNTGL.    

ELSEIF LS_DATA-ITYPE 'D'.      
"客户      
CLEAR LS_ACCOUNTRECEIVABLE.      LS_ACCOUNTRECEIVABLE
-ITEMNO_ACC      = LV_POSNR.      LS_ACCOUNTRECEIVABLE
-CUSTOMER        = LS_DATA-KUNNR" 客户编号      LS_ACCOUNTRECEIVABLE
-COMP_CODE       = LS_DATA-BUKRS.      LS_ACCOUNTRECEIVABLE
-PMNTTRMS        = LS_DATA-ZTERM.      LS_ACCOUNTRECEIVABLE
-BLINE_DATE      = LS_DATA-ZFBDT.      LS_ACCOUNTRECEIVABLE
-BANK_ID         = LS_DATA-HBKID.      LS_ACCOUNTRECEIVABLE
-HOUSEBANKACCTID = LS_DATA-HKTID.      LS_ACCOUNTRECEIVABLE
-PROFIT_CTR      = LS_DATA-PRCTR.      LS_ACCOUNTRECEIVABLE
-REF_KEY_1       = LS_DATA-XREF1.      LS_ACCOUNTRECEIVABLE
-REF_KEY_2       = LS_DATA-XREF2.      LS_ACCOUNTRECEIVABLE
-REF_KEY_3       = LS_DATA-XREF3.      LS_ACCOUNTRECEIVABLE
-PAYMT_REF       = LS_DATA-KIDNO.      LS_ACCOUNTRECEIVABLE
-ALLOC_NMBR      = LS_DATA-ZUONR.      LS_ACCOUNTRECEIVABLE
-ITEM_TEXT       = LS_DATA-SGTXT.      LS_ACCOUNTRECEIVABLE
-SP_GL_IND       = LS_DATA-UMSKZ" 特别总账标识      LS_ACCOUNTRECEIVABLE
-C_CTR_AREA      = LS_DATA-KKBER" 特别总账标识      LS_ACCOUNTRECEIVABLE
-PMNT_BLOCK      = LS_DATA-ZLSPR.      
APPEND LS_ACCOUNTRECEIVABLE TO LT_ACCOUNTRECEIVABLE.    

ELSEIF LS_DATA-ITYPE 'K' "      
"供应商      
CLEAR LS_ACCOUNTPAYABLE.      LS_ACCOUNTPAYABLE
-ITEMNO_ACC      = LV_POSNR.      LS_ACCOUNTPAYABLE
-VENDOR_NO       = LS_DATA-LIFNR.      LS_ACCOUNTPAYABLE
-COMP_CODE       = LS_DATA-BUKRS.      LS_ACCOUNTPAYABLE
-PMNTTRMS        = LS_DATA-ZTERM.      LS_ACCOUNTPAYABLE
-BLINE_DATE      = LS_DATA-ZFBDT.      LS_ACCOUNTPAYABLE
-BANK_ID         = LS_DATA-HBKID.      LS_ACCOUNTPAYABLE
-HOUSEBANKACCTID = LS_DATA-HKTID.      LS_ACCOUNTPAYABLE
-PAYMT_REF       = LS_DATA-KIDNO.      LS_ACCOUNTPAYABLE
-PROFIT_CTR      = LS_DATA-PRCTR.      LS_ACCOUNTPAYABLE
-REF_KEY_1       = LS_DATA-XREF1.      LS_ACCOUNTPAYABLE
-REF_KEY_2       = LS_DATA-XREF2.      LS_ACCOUNTPAYABLE
-REF_KEY_3       = LS_DATA-XREF3.      LS_ACCOUNTPAYABLE
-ALLOC_NMBR      = LS_DATA-ZUONR.      LS_ACCOUNTPAYABLE
-ITEM_TEXT       = LS_DATA-SGTXT.      LS_ACCOUNTPAYABLE
-SP_GL_IND       = LS_DATA-UMSKZ" 特别总账标识      LS_ACCOUNTPAYABLE
-PMNT_BLOCK      = LS_DATA-ZLSPR.      
APPEND LS_ACCOUNTPAYABLE TO LT_ACCOUNTPAYABLE.    

ELSEIF LS_DATA-ITYPE 'F'.      
"资产类      
CLEAR LS_ACCOUNTGL.      LS_ACCOUNTGL
-ITEMNO_ACC = LV_POSNR.      LS_ACCOUNTGL
-COMP_CODE  = LS_DATA-BUKRS.      LS_ACCOUNTGL
-GL_ACCOUNT '1601999999'.   " 科目      LS_ACCOUNTGL
-ASSET_NO = LS_DATA-ANLN1.      LS_ACCOUNTGL
-SUB_NUMBER = LS_DATA-ANLN2.      LS_ACCOUNTGL
-COSTCENTER = LS_DATA-KOSTL.  " 成本中心      LS_ACCOUNTGL
-ORDERID = LS_DATA-AUFNR.     " 内部订单
*     ls_accountgl-bus_area = ls_data-gsber.    " 业务范围      LS_ACCOUNTGL
-ALLOC_NMBR = LS_DATA-ZUONR.  " 分配号      LS_ACCOUNTGL
-ITEM_TEXT = LS_DATA-SGTXT.   " 摘要      LS_ACCOUNTGL
-PROFIT_CTR = LS_DATA-PRCTR.  " 利润中心      LS_ACCOUNTGL
-REF_KEY_1 = LS_DATA-XREF1.      LS_ACCOUNTGL
-REF_KEY_2 = LS_DATA-XREF2.      LS_ACCOUNTGL
-REF_KEY_3 = LS_DATA-XREF3.      LS_ACCOUNTGL
-ALLOC_NMBR = LS_DATA-ZUONR.  "分配号      LS_ACCOUNTGL
-ITEM_TEXT = LS_DATA-SGTXT.
*     ls_accountgl-cs_trans_t = ls_data-bwasl.      LS_ACCOUNTGL
-ACCT_TYPE 'A'.      
APPEND LS_ACCOUNTGL TO LT_ACCOUNTGL.    
ENDIF.    

"金额    
CLEAR LS_CURRENCYAMOUNT.    LS_CURRENCYAMOUNT
-ITEMNO_ACC = LV_POSNR.    LS_CURRENCYAMOUNT
-CURR_TYPE  '00'.           " 凭证货币    LS_CURRENCYAMOUNT
-AMT_DOCCUR = LS_DATA-WRBTR.    LS_CURRENCYAMOUNT
-CURRENCY   = LS_DATA-WAERS.  " 凭证货币    
APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT.    
CLEAR:LS_CURRENCYAMOUNT.    

IF LS_DATA-WAERS <> 'CNY'.         " 外币时:赋值本位币金额行      
CLEAR LS_CURRENCYAMOUNT.      LS_CURRENCYAMOUNT
-ITEMNO_ACC = LV_POSNR.      LS_CURRENCYAMOUNT
-CURR_TYPE '10'.           " 公司代码货币:本位币      LS_CURRENCYAMOUNT
-AMT_DOCCUR = LS_DATA-DMBTR" 本位币金额
*        ls_currencyamount-currency = ls_data-waers.      LS_CURRENCYAMOUNT
-CURRENCY 'CNY'.      
APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT.    
ENDIF.    

"增强字段    
CLEAR LS_ACC_DOCUMENT2.    LS_ACC_DOCUMENT2
-POSNR = LV_POSNR.         " 凭证行项目    LS_ACC_DOCUMENT2
-XNEGP    = LS_DATA-XNEGP" 反记账标识    LS_ACC_DOCUMENT2
-NUMPG    = LS_DATA-NUMPG" 页数    LS_ACC_DOCUMENT2
-RSTGR    = LS_DATA-RSTGR" 原因代码    LS_ACC_DOCUMENT2
-BWASL_PN = LS_DATA-BWASL" 资产业务类型    

CLEAR: LS_EXTENSION2, LV_VALUEPART.    
MOVE LS_ACC_DOCUMENT2 TO LV_VALUEPART.    LS_EXTENSION2
-STRUCTURE  'ZSFI_ACC_DOCUMENT2'.    LS_EXTENSION2
-VALUEPART1 = LV_VALUEPART(240).    LS_EXTENSION2
-VALUEPART2 = LV_VALUEPART+240(240).    LS_EXTENSION2
-VALUEPART3 = LV_VALUEPART+480(240).    LS_EXTENSION2
-VALUEPART4 = LV_VALUEPART+720(240).    
APPEND LS_EXTENSION2 TO LT_EXTENSION2.    

AT END OF ZNUMC.      
CLEAR LS_HEADER.      LS_HEADER
-DOC_DATE   = LS_DATA-BLDAT.   " 凭证日期      LS_HEADER
-PSTNG_DATE = LS_DATA-BUDAT.   " 过账日期      LS_HEADER
-COMP_CODE  = LS_DATA-BUKRS.   " 公司代码      LS_HEADER
-DOC_TYPE   = LS_DATA-BLART.   " 凭证类型      LS_HEADER
-FIS_PERIOD = LS_DATA-MONAT.   " 期间      LS_HEADER
-REF_DOC_NO = LS_DATA-XBLNR.   " 参考凭证      LS_HEADER
-HEADER_TXT = LS_DATA-BKTXT.   " 抬头文本      LS_HEADER
-USERNAME   = SY-UNAME.      

CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'        
EXPORTING          DOCUMENTHEADER    
= LS_HEADER        
IMPORTING          OBJ_TYPE          
= LV_OBJ_TYPE          OBJ_KEY           
= LV_OBJ_KEY          OBJ_SYS           
= LV_OBJ_SYS        
TABLES          ACCOUNTGL         
= LT_ACCOUNTGL          ACCOUNTRECEIVABLE 
= LT_ACCOUNTRECEIVABLE          ACCOUNTPAYABLE    
= LT_ACCOUNTPAYABLE          CURRENCYAMOUNT    
= LT_CURRENCYAMOUNT          CRITERIA          
= LT_CRITERIA          
RETURN            = LT_RETURN          EXTENSION2        
= LT_EXTENSION2.      

CLEAR LV_SUBRC.      
LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE 'E'                                       
OR    TYPE 'A'.        
CONCATENATE LS_DATA-MSG ';' LS_RETURN-MESSAGE INTO LS_DATA-MSG.        LV_SUBRC 
1.      
ENDLOOP.      
IF LV_SUBRC 0.        
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'          
EXPORTING            
WAIT 'X'.        LS_DATA

-TYPE 'S'.        LS_DATA
-ICON '@08@'.        LS_DATA
-MSG  TEXT-M19" 凭证&1过账成功        
REPLACE '&1' IN LS_DATA-MSG WITH LV_OBJ_KEY.        LS_DATA
-BELNR = LV_OBJ_KEY(10).        LS_DATA
-GJAHR = LV_OBJ_KEY+14(4).        
MODIFY GT_DATA FROM LS_DATA TRANSPORTING TYPE ICON MSG BELNR GJAHR WHERE ZNUMC = LS_DATA-ZNUMC.      
ELSE.        
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.        LS_DATA
-TYPE 'E'.        LS_DATA
-ICON '@0A@'.        
MODIFY GT_DATA FROM LS_DATA TRANSPORTING TYPE ICON MSG WHERE ZNUMC = LS_DATA-ZNUMC.      
ENDIF.      
CLEAR: LT_ACCOUNTGL[], LT_ACCOUNTRECEIVABLE[], LT_ACCOUNTPAYABLE[],             LT_CURRENCYAMOUNT[]
,LT_CRITERIA[],LT_RETURN[],LT_EXTENSION2[].      
CLEAR: LS_HEADER, LV_OBJ_TYPE, LV_OBJ_KEY, LV_OBJ_SYS.    
ENDAT.    

CLEAR:LS_DATA,LS_DATA.  
ENDLOOP.  

PERFORM REFRESH_ALV USING GO_GRID_100.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CONVERT_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> pv_flag
*&      <-- cs_value
*&---------------------------------------------------------------------*
FORM FRM_CONVERT_DATA USING    PV_FLAG                      
CHANGING CS_VALUE.  

CHECK CS_VALUE IS NOT INITIAL.  

CASE PV_FLAG.    
WHEN '+'" 添加前导零      
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'        
EXPORTING          
INPUT  = CS_VALUE        
IMPORTING          
OUTPUT = CS_VALUE.    
WHEN '-'" 删除前导零      
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'        
EXPORTING          
INPUT  = CS_VALUE        
IMPORTING          
OUTPUT = CS_VALUE.    

WHEN 'M+'" 添加前导零:物料号      
"物料转换格式      
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'        
EXPORTING          
INPUT        = CS_VALUE        
IMPORTING          
OUTPUT       = CS_VALUE        
EXCEPTIONS          LENGTH_ERROR 
1          
OTHERS       2.      
IF SY-SUBRC <> 0.
*       Implement suitable error handling here      
ENDIF.    
WHEN 'M-'" 删除前导零:物料号      
CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'        
EXPORTING          
INPUT  = CS_VALUE        
IMPORTING          
OUTPUT = CS_VALUE.    
WHEN OTHERS.  
ENDCASE.
ENDFORM.

posted @ 2021-12-17 11:40  東東東東  阅读(402)  评论(0编辑  收藏  举报