HR薪酬批导程序

REPORT zynh_hr_bi001.

TABLES:sscrfields.
DATA:ls_functxt TYPE smp_dyntxt.

*&---------------------------------------------------------------------*
*&Top-definition
*&---------------------------------------------------------------------*
TABLES:t001.

INFOTYPES:0000,
          0001,
          0002,
"          0006,
          0007,
          0008,
          0009,
          0014,
          0015,
"          0016,
"          0021,
"          0022,
          0027,
"          0028,
"          0041,
"          0105,
"          0185,
          0267,
"          0528,
          0530,
          0531,
          0532,
"          0534,
          2010.
"          9000,
"          9001,
"          9002,
"          9003,
"          9004.

"Ole related
DATA: go_excel      TYPE ole2_object,
      go_books      TYPE ole2_object,
      go_sheet      TYPE ole2_object,
      go_cell       TYPE ole2_object,
      gv_file       LIKE rlgrap-filename,
      gv_sheet      TYPE i,
      go_activebook TYPE ole2_object.

TYPES:BEGIN OF ty_s_senderline,
        line(4096) TYPE c,
      END OF ty_s_senderline.

DATA: gv_linenum  TYPE i,
      gv_count    TYPE i,
      g_rc        TYPE i,
      ascii       TYPE c,
      gv_str1(50) TYPE c,
      cl_descr    TYPE REF TO cl_abap_structdescr,
      gt_excel    TYPE ty_s_senderline OCCURS 0,
      gs_excel    TYPE ty_s_senderline-line.

DATA:gt_cell TYPE STANDARD TABLE OF alsmex_tabline WITH HEADER LINE.

DATA:BEGIN OF lt_pernr OCCURS 0,
       pernr TYPE p0001-pernr,
       sname TYPE sname,
     END OF lt_pernr.

*&---------------------------------------------------------------------*
*&DATA DEFINITION
*&---------------------------------------------------------------------*
TABLES:pernr.

"构建工资项
TYPES:BEGIN OF ty_payroll,
        pernr TYPE p0001-pernr,
        ename TYPE p0001-ename,
        begda TYPE p0001-begda,
        endda TYPE p0001-endda,
        lgart TYPE pc207-lgart,
        betrg TYPE pc207-betrg,
      END OF ty_payroll.

DATA:gt_payroll TYPE TABLE OF ty_payroll,
     gs_payroll TYPE ty_payroll.

TYPES:BEGIN OF ty_jbgz,
        col1  TYPE  string,
        col2  TYPE  string,
        col3  TYPE  string,
        col4  TYPE  string,
        col5  TYPE  string,
        col6  TYPE  string,
        col7  TYPE  string,
        col8  TYPE  string,
        col9  TYPE  string,
        col10 TYPE string,
      END OF ty_jbgz.
DATA:gt_jbgz TYPE TABLE OF ty_jbgz,
     gs_jbgz TYPE ty_jbgz,
     gt_shbx TYPE TABLE OF ty_jbgz,
     gs_shbx TYPE ty_jbgz,
     gt_cbfp TYPE TABLE OF ty_jbgz,
     gs_cbfp TYPE ty_jbgz.

TYPES:BEGIN OF ty_gjj,
        col1 TYPE  string,
        col2 TYPE  string,
        col3 TYPE  string,
        col4 TYPE  string,
        col5 TYPE  string,
        col6 TYPE  string,
        col7 TYPE  string,
        col8 TYPE  string,
        col9 TYPE  string,
      END OF ty_gjj.
DATA:gt_gjj TYPE TABLE OF ty_gjj,
     gs_gjj TYPE ty_gjj.

TYPES:BEGIN OF ty_jczf,
        col1 TYPE  string,
        col2 TYPE  string,
        col3 TYPE  string,
        col4 TYPE  string,
        col5 TYPE  string,
        col6 TYPE  string,
        col7 TYPE  string,
      END OF ty_jczf.
DATA:gt_jczf TYPE TABLE OF ty_jczf,
     gs_jczf TYPE ty_jczf,
     gt_jjff TYPE TABLE OF ty_jczf,
     gs_jjff TYPE ty_jczf.

TYPES:BEGIN OF ty_bank,
        col1 TYPE  string,
        col2 TYPE  string,
        col3 TYPE  string,
        col4 TYPE  string,
        col5 TYPE  string,
        col6 TYPE  string,
        col7 TYPE  string,
        col8 TYPE  string,
      END OF ty_bank.
DATA:gt_bank TYPE TABLE OF ty_bank,
     gs_bank TYPE ty_bank.

TYPES:BEGIN OF ty_ewzf,
        col1 TYPE  string,
        col2 TYPE  string,
        col3 TYPE  string,
        col4 TYPE  string,
        col5 TYPE  string,
      END OF ty_ewzf.
DATA:gt_ewzf TYPE TABLE OF ty_ewzf,
     gs_ewzf TYPE ty_ewzf.

TYPES:BEGIN OF ty_gzsj,
        col1 TYPE  string,
        col2 TYPE  string,
        col3 TYPE  string,
        col4 TYPE  string,
        col5 TYPE  string,
      END OF ty_gzsj.
DATA:gt_gzsj TYPE TABLE OF ty_gzsj,
     gs_gzsj TYPE ty_gzsj,
     gt_gsxx TYPE TABLE OF ty_gzsj,
     gs_gsxx TYPE ty_gzsj,
     gt_kq   TYPE TABLE OF ty_gzsj,
     gs_kq   TYPE ty_gzsj.

"构建日期期间
DATA:g_begda TYPE datum,
     g_endda TYPE datum.


DATA:BEGIN OF t0001 OCCURS 0,
       pernr LIKE p0001-pernr,
       ename LIKE p0001-ename,
       begda LIKE p0001-begda,
       endda LIKE p0001-endda,
       abkrs LIKE p0001-abkrs,
     END OF t0001.

DATA: BEGIN OF t0007 OCCURS 0,
        pernr    LIKE p0001-pernr,
        ename    LIKE p0001-ename,
        begda    LIKE p0007-begda,
        endda    LIKE p0007-endda,
        schkz(8) TYPE c,
        zterf(1) TYPE c,
      END OF t0007.

DATA: BEGIN OF t0008 OCCURS 0,
        pernr LIKE p0001-pernr,
        ename LIKE p0001-ename,
        begda LIKE p0008-begda,
        endda LIKE p0008-endda,
        preas LIKE p0008-preas,
        trfar LIKE p0008-trfar,
*        trfgb     LIKE p0008-trfgb,
        trfgr LIKE p0008-trfgr,
        trfst LIKE p0008-trfst,
        lga01 LIKE p0008-lga01,
        bet01 LIKE p0008-bet01,
      END OF t0008.

DATA: BEGIN OF t0009 OCCURS 0,
        pernr     LIKE p0001-pernr,
        ename     LIKE p0001-ename,
        begda     LIKE p0009-begda,
        endda     LIKE p0009-endda,
        bnksa(1)  TYPE c,
        emftx     LIKE p0009-emftx,
        bankl(12) TYPE c,
        zweck     LIKE p0009-zweck,
      END OF t0009.

DATA: BEGIN OF t0014 OCCURS 0,
        pernr     LIKE p0001-pernr,
        ename     LIKE p0001-ename,
        begda     LIKE p0014-begda,
        endda     LIKE p0014-endda,
        lgart(4)  TYPE c,
        betrg(14) TYPE c,
        anzhl(10) TYPE c,
      END OF t0014.

DATA: BEGIN OF t0015 OCCURS 0,
        pernr     LIKE p0001-pernr,
        ename     LIKE p0001-ename,
        lgart(4)  TYPE c,
        betrg(14) TYPE c,
        begda     LIKE p0015-begda,
      END OF t0015.

DATA: BEGIN OF t0027 OCCURS 0,
        pernr     LIKE p0001-pernr,
        ename     LIKE p0001-ename,
        begda     LIKE p0027-begda,
        endda     LIKE p0027-endda,
        kstar(2)  TYPE c,
        kbu01(4)  TYPE c,
        kst01(8)  TYPE c,
        auf01(10) TYPE c,
        psp01(8)  TYPE c,
        kpr01(8)  TYPE c,
      END OF t0027.

DATA: BEGIN OF t0267 OCCURS 0,
        pernr     LIKE p0001-pernr,
        ename     LIKE p0001-ename,
        lgart     LIKE p0267-lgart,
        betrg(15) TYPE c,
        begda     LIKE p0267-begda,
        ocrsn     LIKE p0267-ocrsn,
        payid     LIKE p0267-payid,
      END OF t0267.

DATA: BEGIN OF t0530 OCCURS 0,
        pernr LIKE p0001-pernr,
        ename LIKE p0001-ename,
        begda LIKE p0530-begda,
        endda LIKE p0530-endda,
        chrsn LIKE p0530-chrsn,
        phfno LIKE p0530-phfno,
        congr LIKE p0530-congr,
        conlv LIKE p0530-conlv,
        pbyer TYPE c,
      END OF t0530.

DATA: BEGIN OF t0531 OCCURS 0,
        pernr LIKE p0001-pernr,
        ename LIKE p0001-ename,
        begda LIKE p0531-begda,
        endda LIKE p0531-endda,
        taxid LIKE p0531-taxid,
      END OF t0531.

DATA: BEGIN OF t0532 OCCURS 0,
        pernr    LIKE p0001-pernr,
        ename    LIKE p0001-ename,
        begda    LIKE p0532-begda,
        endda    LIKE p0532-endda,
        subty(4) TYPE c,
        chrsn(2) TYPE c,
        innum    TYPE p0532-innum,
        congr    TYPE p0532-congr,
        conlv    TYPE p0532-conlv,
        pbyer    TYPE c,
      END OF t0532.

DATA:BEGIN OF t2010 OCCURS 0,
       pernr TYPE p2010-pernr,
       ename LIKE p0001-ename,
       begda LIKE p2010-begda,
       lgart LIKE p2010-lgart,
       anzhl LIKE p2010-anzhl,
     END OF t2010.


"工资项有关
DATA: BEGIN OF gs_rgdir OCCURS 0.
        INCLUDE STRUCTURE pc261.
DATA: END OF gs_rgdir.
DATA: gt_rgdir LIKE TABLE OF gs_rgdir.

DATA: BEGIN OF gs_rt OCCURS 0.
        INCLUDE STRUCTURE pc207.
DATA: END OF gs_rt.
DATA: gt_rt LIKE TABLE OF gs_rt.
DATA : result TYPE paycn_result.

DATA: g_path TYPE string.

FIELD-SYMBOLS: <tnnnn>  TYPE STANDARD TABLE,
               <pnnnn>  TYPE STANDARD TABLE,
               <pannnn> TYPE STANDARD TABLE,
               <wa_tn>  TYPE any,
               <wa_pn>  TYPE any.

FIELD-SYMBOLS: <pernr>,<begda>,<endda>,<subty>.


"构建动态表
FIELD-SYMBOLS:<table> TYPE STANDARD TABLE,
              <wa>    TYPE any,
              <field> TYPE any.

DATA: lv_file      TYPE xstring,
      lv_bytecount TYPE i,
      lt_file_tab  TYPE solix_tab.
"DATA: ls_table_settings       TYPE zexcel_s_table_settings.

"DATA: lo_reader       TYPE REF TO zif_excel_reader,
"      lo_excel_writer TYPE REF TO zif_excel_writer.

DATA: g_infty(4) TYPE c,
      g_stext    TYPE char20,
      g_pernr    TYPE p0001-pernr.

"导入消息
DATA: BEGIN OF git_output OCCURS 0,
        mtype    TYPE c,
        pernr(8) TYPE c,
        messg    TYPE char100,
      END OF git_output.

"ALV相关定义
DATA: fieldcat      TYPE lvc_t_fcat WITH HEADER LINE,
      wa_layout     TYPE lvc_s_layo,
      lt_listheader TYPE slis_t_listheader,
      lw_listheader TYPE slis_listheader.

"BDC有关定义
PARAMETERS: ctumode LIKE ctu_params-dismode DEFAULT 'N' NO-DISPLAY.
DATA: bdcdata LIKE bdcdata    OCCURS 0 WITH HEADER LINE.
DATA: messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.

DEFINE hout.
  fieldcat-fieldname = '&1'.    "内表字段名称
  fieldcat-seltext   =  &2.    " 字段输出名称
  fieldcat-reptext   =  &2.
  fieldcat-outputlen =  &3.    "输出长度
  fieldcat-datatype  = '&4'.    "数据类型
  fieldcat-just      = 'L'.
  fieldcat-no_zero   =  &5.
  append fieldcat.
END-OF-DEFINITION.

*&---------------------------------------------------------------------*
*&SELECTION-SCREEEN
*&---------------------------------------------------------------------*

SELECTION-SCREEN:BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 1.
PARAMETERS:p_1 RADIOBUTTON GROUP rg1 USER-COMMAND uc1.
SELECTION-SCREEN COMMENT 2(4)   text-002 FOR FIELD p_1.
SELECTION-SCREEN POSITION 20.
PARAMETERS p_2 RADIOBUTTON GROUP rg1.
SELECTION-SCREEN COMMENT 25(10) text-003 FOR FIELD p_2.
SELECTION-SCREEN POSITION 39.
PARAMETERS p_3 RADIOBUTTON GROUP rg1.
SELECTION-SCREEN COMMENT 40(10) text-004 FOR FIELD p_3.
SELECTION-SCREEN POSITION 60.
PARAMETERS p_4 RADIOBUTTON GROUP rg1.
SELECTION-SCREEN COMMENT 70(10) text-005 FOR FIELD p_4.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 1.
PARAMETERS:p_5 RADIOBUTTON GROUP rg1.
SELECTION-SCREEN COMMENT 2(4)   text-006 FOR FIELD p_5.
SELECTION-SCREEN POSITION 20.
PARAMETERS p_6 RADIOBUTTON GROUP rg1.
SELECTION-SCREEN COMMENT 25(10) text-007 FOR FIELD p_6.
SELECTION-SCREEN POSITION 39.
PARAMETERS p_7 RADIOBUTTON GROUP rg1.
SELECTION-SCREEN COMMENT 40(10) text-008 FOR FIELD p_7.
SELECTION-SCREEN POSITION 60.
PARAMETERS p_8 RADIOBUTTON GROUP rg1.
SELECTION-SCREEN COMMENT 70(10) text-009 FOR FIELD p_8.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 1.
PARAMETERS:p_9 RADIOBUTTON GROUP rg1.
SELECTION-SCREEN COMMENT 2(4)   text-010 FOR FIELD p_9.
SELECTION-SCREEN POSITION 20.
PARAMETERS p_10 RADIOBUTTON GROUP rg1.
SELECTION-SCREEN COMMENT 25(10) text-011 FOR FIELD p_10.
SELECTION-SCREEN POSITION 39.
PARAMETERS p_11 RADIOBUTTON GROUP rg1.
SELECTION-SCREEN COMMENT 40(10) text-012 FOR FIELD p_11.
SELECTION-SCREEN POSITION 60.
PARAMETERS p_12 RADIOBUTTON GROUP rg1.
SELECTION-SCREEN COMMENT 70(10) text-013 FOR FIELD p_12.

*SELECTION-SCREEN POSITION 60.
*PARAMETERS p_12 RADIOBUTTON GROUP rg1.
*SELECTION-SCREEN COMMENT 70(10) text-013 FOR FIELD p_12.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN:END OF BLOCK b1.
*&---------------------------------------------------------------------*
*&Running mode
*&---------------------------------------------------------------------*

SELECTION-SCREEN BEGIN OF BLOCK b5 WITH FRAME TITLE text-030.
PARAMETERS:p_box AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK b5.

*&---------------------------------------------------------------------*
*&Running mode
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-017.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 1.
PARAMETERS:p_tp RADIOBUTTON GROUP rg2  DEFAULT 'X' USER-COMMAND uc2.
SELECTION-SCREEN COMMENT 3(8)   text-024 FOR FIELD p_tp.
SELECTION-SCREEN POSITION 15.
PARAMETERS p_dc RADIOBUTTON GROUP rg2.
SELECTION-SCREEN COMMENT 18(10) text-016 FOR FIELD p_dc.
SELECTION-SCREEN POSITION 32.
PARAMETERS p_dr RADIOBUTTON GROUP rg2.
SELECTION-SCREEN COMMENT 35(10) text-020 FOR FIELD p_dr.
SELECTION-SCREEN POSITION 49.
PARAMETERS p_dl RADIOBUTTON GROUP rg2.
SELECTION-SCREEN COMMENT 52(10) text-021 FOR FIELD p_dl.
SELECTION-SCREEN POSITION 66.
PARAMETERS p_dj RADIOBUTTON GROUP rg2.
SELECTION-SCREEN COMMENT 69(10) text-022 FOR FIELD p_dj.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b3.

SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE text-018.
PARAMETERS: p_file  LIKE rlgrap-filename DEFAULT 'D:\' OBLIGATORY MODIF ID m1."上传路径
SELECT-OPTIONS:s_lgart FOR p0015-lgart MODIF ID m2."工资项
"PARAMETERS: p_dat   TYPE sy-datum MODIF ID m3 DEFAULT sy-datum.     "数据日期
PARAMETERS: p_dat1  TYPE sy-datum MODIF ID m4.    "删除日期
PARAMETERS: p_dat2  TYPE sy-datum MODIF ID m5.    "定界日期
SELECTION-SCREEN END OF BLOCK b4.

*----------------------------------------------------------------------*
*  事件:INITIALIZATION
*----------------------------------------------------------------------*
INITIALIZATION.

  pnptimed = 'M'.
  pnpstat2-low = '3'.
  APPEND pnpstat2.


*----------------------------------------------------------------------*
*  事件: AT SELECTION-SCREEN
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.

**--按钮响应
  CASE sscrfields-ucomm.
    WHEN 'FC01'.
      PERFORM frm_download_tmplate USING 'ZHRBI001'.
    WHEN OTHERS.
  ENDCASE.

*&---------------------------------------------------------------------*
*&文件输入帮助
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      mask             = ',*.txt,*.*.'
      mode             = 'O'
      title            = 'CHOOSE'
    IMPORTING
      filename         = p_file
    EXCEPTIONS
      inv_winsys       = 1
      no_batch         = 2
      selection_cancel = 3
      selection_error  = 4
      OTHERS           = 5.

*&---------------------------------------------------------------------*
*& 工资项搜索帮助
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_lgart-low.

  DATA:l_tabname TYPE string.

  PERFORM frm_inty_define.

  l_tabname = 'PA' && g_infty.

  DATA:BEGIN OF lt_lg OCCURS 0,
         lgart TYPE p0015-lgart,
         lgtxt TYPE t512t-lgtxt,
       END OF lt_lg.

  "搜索帮助
  SELECT
      lgart
      INTO TABLE lt_lg
      FROM (l_tabname).

  SORT lt_lg. DELETE ADJACENT DUPLICATES FROM lt_lg.

  LOOP AT lt_lg ASSIGNING FIELD-SYMBOL(<fs_lg>).

    SELECT SINGLE
       lgtxt FROM t512t INTO <fs_lg>-lgtxt
        WHERE lgart = <fs_lg>-lgart.

  ENDLOOP.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = 'LGART'
      dynpprog        = sy-repid
      dynpnr          = sy-dynnr
      dynprofield     = 'S_LGART-LOW'
      value_org       = 'S'
    TABLES
      value_tab       = lt_lg
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.

*&---------------------------------------------------------------------*
*& 工资项搜索帮助
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_lgart-high.

  DATA:l_tabname TYPE string.

  PERFORM frm_inty_define.

  l_tabname = 'PA' && g_infty.

  DATA:BEGIN OF lt_lg OCCURS 0,
         lgart TYPE p0015-lgart,
         lgtxt TYPE t512t-lgart,
       END OF lt_lg.

  "搜索帮助
  SELECT
      lgart
      INTO TABLE lt_lg
      FROM (l_tabname).

  SORT lt_lg. DELETE ADJACENT DUPLICATES FROM lt_lg.

  LOOP AT lt_lg ASSIGNING FIELD-SYMBOL(<fs_lg>).

    SELECT SINGLE
       lgtxt FROM t512t INTO <fs_lg>-lgtxt
        WHERE lgart = <fs_lg>-lgart.

  ENDLOOP.


  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = 'LGART'
      dynpprog        = sy-repid
      dynpnr          = sy-dynnr
      dynprofield     = 'S_LGART-HIGH'
      value_org       = 'S'
    TABLES
      value_tab       = lt_lg
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.
*&---------------------------------------------------------------------*
*&动态隐藏字段
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
*

  CASE 'X'.
    WHEN p_dc OR p_tp."下载

      LOOP AT SCREEN.
        IF screen-group1 = 'M1'
            OR screen-group1 = 'M2'
                 OR screen-group1 = 'M4'
                   OR screen-group1 = 'M5'.
          screen-active = 0.
        ELSE.
          screen-active = 1.
        ENDIF.
        MODIFY SCREEN.
      ENDLOOP.

    WHEN p_dr. "导入

      LOOP AT SCREEN.
        IF screen-group1 = 'M2'
            OR screen-group1 = 'M3'
              OR screen-group1 = 'M4'
                 OR screen-group1 = 'M5'.
          screen-active = 0.
        ELSE.
          screen-active = 1.
        ENDIF.
        MODIFY SCREEN.
      ENDLOOP.

    WHEN p_dl. "删除

      LOOP AT SCREEN.
        IF screen-group1 = 'M1'
             OR screen-group1 = 'M3'
                 OR screen-group1 = 'M5'.
          screen-active = 0.
        ELSE.
          screen-active = 1.
        ENDIF.
        MODIFY SCREEN.
      ENDLOOP.

    WHEN p_dj. "定界

      LOOP AT SCREEN.
        IF screen-group1 = 'M2 ' OR screen-group1 = 'M5'
                 OR screen-group1 = 'M4'.
          screen-active = 0.
        ELSE.
          screen-active = 1.
        ENDIF.
        MODIFY SCREEN.
      ENDLOOP.

  ENDCASE.

  IF p_1 = 'X' OR p_5 = 'X' OR p_6 = 'X' OR p_7 = 'X' OR p_8 = 'X' OR p_9 = 'X'  OR p_11 = 'X'.
    LOOP AT SCREEN.
      CASE screen-name.
        WHEN 'P_DL' OR 'P_DJ'.
          screen-active = 0.
          CLEAR:p_dl,p_dj.
          MODIFY SCREEN.
      ENDCASE.
    ENDLOOP.
  ENDIF.

  IF p_3 = 'X' OR p_4 = 'X' OR p_10 = 'X' OR p_12 = 'X'.
    LOOP AT SCREEN.
      CASE screen-name.
        WHEN  'P_DJ'.
          screen-active = 0.
          CLEAR p_dj.
          MODIFY SCREEN.
      ENDCASE.
    ENDLOOP.
  ENDIF.

  IF p_12 = 'X'.
    LOOP AT SCREEN.
      CASE screen-name.
        WHEN 'P_DC' OR 'P_DL'.
          screen-active = 0.
          CLEAR:p_dc,p_dl.
          MODIFY SCREEN.
      ENDCASE.
    ENDLOOP.
  ENDIF.


*&---------------------------------------------------------------------*
*&Init screen
*&---------------------------------------------------------------------*
INITIALIZATION.

  "  APPEND VALUE #( sign = 'I' option = 'EQ' low = '3' ) TO s_stat2.

*&---------------------------------------------------------------------*
*&Start-of-selection
*&---------------------------------------------------------------------*
START-OF-SELECTION.

  "确定信息类型
  PERFORM frm_inty_define.

  "增加报表日志记录
  "导出人员模板
  PERFORM savelog(zpilot01_ycsy_zreplog) USING sy-repid '' 'A' IF FOUND.

  IF p_tp = 'X'.
    IF p_box = 'X'.
      "构建基础数据
      PERFORM frm_get_basic_data.
      "导出Excel
      PERFORM frm_export_salary.
    ELSE.
      PERFORM frm_download_tmplate USING 'ZHRBI001'.
    ENDIF.
    RETURN.
  ENDIF.

  "导入薪水
  IF p_dr = 'X'.
    PERFORM frm_check_valid USING p_file. "检查文件是否存在
    PERFORM frm_get_data_from_excel.  "从Excel中读取数据
    PERFORM frm_import_salary.        "导入薪水
    IF git_output[] IS NOT INITIAL.
      PERFORM frm_display_log.
    ENDIF.
    RETURN.
  ENDIF.

  "定界
  IF p_dj = 'X'.
    PERFORM frm_check_valid USING p_file. "检查文件是否存在
    PERFORM frm_get_data_from_excel.  "从Excel中读取数据
    PERFORM frm_update_record.        "导入薪水
    IF git_output[] IS NOT INITIAL.
      PERFORM frm_display_log.
    ENDIF.
    RETURN.
  ENDIF.

  GET pernr.

  rp-provide-from-last p0001 '' pn-begda pn-endda.
  rp-provide-from-last p0002 '' pn-begda pn-endda.
  rp-provide-from-last p0007 '' pn-begda pn-endda.
  rp-provide-from-last p0008 '' pn-begda pn-endda.
  rp-provide-from-last p0014 '' pn-begda pn-endda.
  rp-provide-from-last p0015 '' pn-begda pn-endda.
  rp-provide-from-last p0027 '' pn-begda pn-endda.
  rp-provide-from-last p2010 '' pn-begda pn-endda.
  rp-provide-from-last p0267 '' pn-begda pn-endda.
  rp-provide-from-last p0530 '' pn-begda pn-endda.
  rp-provide-from-last p0531 '' pn-begda pn-endda.
  rp-provide-from-last p0532 '' pn-begda pn-endda.

  "获取人员模板信息
  APPEND VALUE #(
        pernr = pernr-pernr
        sname = pernr-sname )
         TO lt_pernr.

END-OF-SELECTION.

  "导出薪水
  IF p_dc = 'X'.
    "取基础数据
    PERFORM frm_get_data.
    "导出Excel
    PERFORM frm_export_salary.
  ENDIF.

  "删除记录
  IF p_dl = 'X'.
    PERFORM frm_delete_record.       "删除记录
  ENDIF.

*  IF p_dj = 'X'.
*    PERFORM frm_update_record.       "工资项定界
*  ENDIF.

  "增加报表日志记录
  PERFORM updatelog(zpilot01_ycsy_zreplog) IF FOUND.

  IF git_output[] IS NOT INITIAL.
    PERFORM frm_display_log.
  ENDIF.

*&---------------------------------------------------------------------*
*&      Form  FRM_DOWNLOAD_TEMPLATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_P_PATH  text
*----------------------------------------------------------------------*
FORM frm_download_template  USING  p_id.

  DATA: l_name      LIKE wwwdatatab,
        l_mime      LIKE w3mime OCCURS 10,
        filename    TYPE string,
        user_action TYPE i,
        z_file      TYPE rlgrap-filename.

  CALL FUNCTION 'GUI_FILE_SAVE_DIALOG'
    EXPORTING
      window_title      = '请选择保存文件的位置:'
      default_extension = '.XLSX'
      default_file_name = '薪资导入模板'
      initial_directory = 'D:\'
    IMPORTING
      filename          = filename
      fullpath          = g_path
      user_action       = user_action. "0生成;1替换;2扩展;9取消。

  CASE user_action.
    WHEN 0 OR 1 OR 2.

*---从SAP WEB 资源库中下载EXCEL模板到本地
      l_name-relid = 'MI'.
      l_name-objid = p_id.

      CALL FUNCTION 'WWWDATA_IMPORT'
        EXPORTING
          key               = l_name
        TABLES
          mime              = l_mime
        EXCEPTIONS
          wrong_object_type = 1
          import_error      = 2
          OTHERS            = 3.

      IF sy-subrc <> 0.
        MESSAGE '下载模板失败,请联系运维人员!' TYPE 'S'.
        STOP.
      ENDIF.

      DATA:bin_filesize TYPE i.

      CALL FUNCTION 'GUI_DOWNLOAD'
        EXPORTING
          filename     = g_path
          filetype     = 'BIN'
          bin_filesize = bin_filesize
        TABLES
          data_tab     = l_mime.

    WHEN 9.
      MESSAGE '下载取消' TYPE 'S'.
    WHEN OTHERS.

  ENDCASE.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_EXPORT_SALARY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_export_salary.

  "下载模板至本地
  PERFORM frm_download_tmplate USING 'ZHRBI001'.

  "打开Excel
  PERFORM frm_open_excel.

  "处理数据
  PERFORM frm_deal_with_table.

  "输出至Excel
  PERFORM frm_write_to_excel.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_IMPORT_SALARY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_import_salary.

  DATA: lv_tname1(25) TYPE c,
        lv_tname2(25) TYPE c,
        l_nocommit    TYPE c,
        l_return      LIKE bapireturn1.
  DATA: dyn_line1 TYPE REF TO data,
        dyn_line2 TYPE REF TO data,
        rc        TYPE c.

  FIELD-SYMBOLS:<f1> TYPE any.

  "数据从第四行开始
  DELETE gt_cell WHERE row LT 4.

  "生成动态的信息集数据对象
  CONCATENATE 'T' g_infty '[]' INTO lv_tname1.
  ASSIGN (lv_tname1) TO <tnnnn>.
  CONCATENATE 'P' g_infty '[]' INTO lv_tname2.
  ASSIGN (lv_tname2) TO <pnnnn>.

  PERFORM frm_ceart_pannnn.


  CREATE DATA dyn_line1 LIKE LINE OF <tnnnn>.
  ASSIGN dyn_line1->* TO <wa_tn>.

  CREATE DATA dyn_line2 LIKE LINE OF <pnnnn>.
  ASSIGN dyn_line2->* TO <wa_pn>.

  REFRESH: <tnnnn>.

  "工资项录入是一行一行开始
  LOOP AT gt_cell INTO DATA(gs_cell).

    ASSIGN COMPONENT gs_cell-col OF STRUCTURE <wa_tn> TO <f1>.
    IF sy-subrc EQ 0.
      CONDENSE gs_cell-value NO-GAPS.
      <f1> = gs_cell-value.
    ENDIF.

    AT END OF row.
      MOVE-CORRESPONDING <wa_tn> TO <wa_pn>.
      ASSIGN COMPONENT 'INFTY' OF STRUCTURE <wa_pn> TO <f1>.
      <f1> = g_infty.
      CASE g_infty.
        WHEN '0008'.
          ASSIGN COMPONENT 'TRFGB' OF STRUCTURE <wa_pn> TO <f1>.
          <f1> = 'YN'.
        WHEN '0530'.
          ASSIGN COMPONENT 'CONAR' OF STRUCTURE <wa_pn> TO <f1>.
          <f1> = 'YL'.
          ASSIGN COMPONENT 'CONBR' OF STRUCTURE <wa_pn> TO <f1>.
          <f1> = '01'.
        WHEN '0009'.
          ASSIGN COMPONENT 'ZLSCH' OF STRUCTURE <wa_pn> TO <f1>.
          <f1> = 'T'.
      ENDCASE.

      "核心数据传参
      "确认信息类型
      ASSIGN COMPONENT 'INFTY' OF STRUCTURE <wa_pn> TO <f1>.
      <f1> = g_infty.
      ASSIGN COMPONENT 'PERNR' OF STRUCTURE <wa_pn> TO <pernr>.
      ASSIGN COMPONENT 'BEGDA' OF STRUCTURE <wa_pn> TO <begda>.
      ASSIGN COMPONENT 'ENDDA' OF STRUCTURE <wa_pn> TO <endda>.

      "检查人员编号是否存在
      PERFORM frm_check_objid USING <pernr> CHANGING rc.

      IF rc NE 0.
        MESSAGE s001(zhr_bi006) WITH <pernr> DISPLAY LIKE 'E'.
        LEAVE LIST-PROCESSING.
      ENDIF.

      "根据不同的信息类型确定导入模式
      CASE g_infty.
        WHEN '0001'.
          PERFORM frm_bdc_0001.
        WHEN '0531'.
          PERFORM frm_bdc_0531.
        WHEN '0532'.
          PERFORM frm_bdc_0532.
        WHEN OTHERS.
          PERFORM frm_run_bapi.
      ENDCASE.
      CLEAR:<wa_tn>,<wa_pn>.
    ENDAT.
  ENDLOOP.



ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_DELETE_RECORD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_delete_record.

  DATA: lv_tname1(25) TYPE c,
        lv_tname2(25) TYPE c,
        l_nocommit    TYPE c,
        l_return      LIKE bapireturn1,
        lc_table      TYPE string.
  DATA: dyn_line1 TYPE REF TO data,
        dyn_line2 TYPE REF TO data,
        rc        TYPE c.

  FIELD-SYMBOLS:<wa_pn> TYPE any.

  DATA:ls_return TYPE bapireturn1,
       record    TYPE string.

  PERFORM frm_ceart_pannnn.
  CONCATENATE 'PA' g_infty INTO lc_table.



  DATA: dyn_wa TYPE REF TO data.
  FIELD-SYMBOLS:<dyn_wa> TYPE any.
  DATA: lr_struc  TYPE REF TO cl_abap_structdescr.
  DATA:l_name TYPE string.

  CONCATENATE 'P' g_infty INTO l_name.
  lr_struc ?= cl_abap_typedescr=>describe_by_name( l_name ).
  CREATE DATA dyn_wa    TYPE HANDLE lr_struc.
  ASSIGN dyn_wa->*    TO <dyn_wa>.


  " 加锁
  LOOP AT lt_pernr INTO DATA(ls_pernr).


    SELECT SINGLE * FROM (lc_table)
         INTO CORRESPONDING FIELDS OF <dyn_wa>
         WHERE pernr = ls_pernr-pernr
           AND begda = p_dat1
           AND lgart IN s_lgart.

    IF sy-subrc EQ 0.

      CALL FUNCTION 'HR_EMPLOYEE_ENQUEUE'
        EXPORTING
          number = ls_pernr-pernr
        IMPORTING
          return = ls_return.


      IF ls_return IS NOT INITIAL.
        git_output-mtype = ls_return-type.
        git_output-pernr = ls_pernr-pernr.
        git_output-messg = ls_return-message.
        APPEND git_output.
        RETURN.
      ENDIF.

      ASSIGN COMPONENT 'SUBTY' OF STRUCTURE <dyn_wa> TO FIELD-SYMBOL(<fs_subty>).
      ASSIGN COMPONENT 'OBJPS' OF STRUCTURE <dyn_wa> TO FIELD-SYMBOL(<fs_objps>).
      ASSIGN COMPONENT 'ENDDA' OF STRUCTURE <dyn_wa> TO FIELD-SYMBOL(<fs_endda>).
      ASSIGN COMPONENT 'BEGDA' OF STRUCTURE <dyn_wa> TO FIELD-SYMBOL(<fs_begda>).
      ASSIGN COMPONENT 'SEQNR' OF STRUCTURE <dyn_wa> TO FIELD-SYMBOL(<fs_seqnr>).
      ASSIGN COMPONENT 'SPRPS' OF STRUCTURE <dyn_wa> TO FIELD-SYMBOL(<fs_sprps>).

*   删除
      CALL FUNCTION 'HR_INFOTYPE_OPERATION'
        EXPORTING
          infty         = g_infty
          number        = ls_pernr-pernr
          subtype       = <fs_subty>
          objectid      = <fs_objps>
          lockindicator = <fs_sprps>
          validityend   = <fs_endda>
          validitybegin = <fs_begda>
          recordnumber  = <fs_seqnr>
          record        = <dyn_wa>
          operation     = 'DEL'
        IMPORTING
          return        = ls_return.

      IF ls_return IS NOT INITIAL.
        git_output-mtype = ls_return-type.
        git_output-pernr = ls_pernr-pernr.
        git_output-messg = ls_return-message.
        APPEND git_output.
      ELSE.
        git_output-mtype = 'S'.
        git_output-pernr = ls_pernr-pernr.
        git_output-messg = '删除成功!'.
        APPEND git_output.
      ENDIF.

*   解锁
      CALL FUNCTION 'HR_EMPLOYEE_DEQUEUE'
        EXPORTING
          number = p0267-pernr
        IMPORTING
          return = ls_return.

    ELSE.

      git_output-mtype = 'E'.
      git_output-pernr = ls_pernr-pernr.
      git_output-messg = '未查询到待删除条目!'.
      APPEND git_output.

    ENDIF.
  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_get_data.

  "获取工资项描述
  SELECT
     * INTO TABLE @DATA(lt_512t)
      FROM t512t
      WHERE sprsl = @sy-langu
       AND  molga = '28'.

  READ TABLE lt_512t INTO DATA(ls_512t)
      WITH KEY lgart = p0008-lga01.
  IF sy-subrc EQ 0.
    DATA(lv_str) = p0008-lga01 && '' && ls_512t-lgtxt.
  ENDIF.


  CASE 'X'.

    WHEN p_1. "基本工资
      LOOP AT p0008.
        IF p0008-bet01 NE 0.
          APPEND VALUE #(
              col1  = p0000-pernr
              col2  = p0001-ename
              col3  = p0008-begda
              col4  = p0008-endda
              col5  = p0008-preas
              col6  = p0008-trfar
              col7  = p0008-trfgr
              col8  = p0008-trfst
              col9  = lv_str
              col10 = p0008-bet01
                  ) TO gt_jbgz.
        ENDIF.
      ENDLOOP.
    WHEN p_2."经常性支付

      LOOP AT p0014.
        IF p0014-betrg NE 0.
          READ TABLE lt_512t INTO ls_512t WITH KEY lgart = p0014-lgart.
          IF sy-subrc EQ 0.
            lv_str = p0014-lgart && '' && ls_512t-lgtxt.
          ENDIF.
          APPEND VALUE #(
              col1 = pernr-pernr
              col2 = p0001-ename
              col3 = p0014-begda
              col4 = p0014-endda
              col5 = p0014-lgart
              col6 = p0014-betrg
              col7 = p0014-anzhl
                  ) TO gt_jczf.
        ENDIF.
      ENDLOOP.

    WHEN p_3."额外支付

      LOOP AT p0015.
        IF p0015-betrg NE 0.
          READ TABLE lt_512t INTO ls_512t WITH KEY lgart = p0015-lgart.
          IF sy-subrc EQ 0.
            lv_str = p0015-lgart && '' && ls_512t-lgtxt.
          ENDIF.
          APPEND VALUE #(
            col1 = pernr-pernr
            col2 = p0001-ename
            col3 = lv_str
            col4 = p0015-betrg
*            col5 = p0015-anzhl
            col5 = p0015-begda
          ) TO gt_ewzf.
        ENDIF.
      ENDLOOP.

    WHEN p_4."奖金支付

      LOOP AT p0267.
        IF p0267-betrg NE 0.
          READ TABLE lt_512t INTO ls_512t WITH KEY lgart = p0015-lgart.
          IF sy-subrc EQ 0.
            lv_str = p0267-lgart && '' && ls_512t-lgtxt.
          ENDIF.
          APPEND VALUE #(
            col1 = pernr-pernr
            col2 = p0001-ename
            col3 = lv_str
            col4 = p0267-betrg
            col5 = p0267-anzhl
            col6 = p0267-begda
            col7 = p0267-payid
          ) TO gt_jjff.
        ENDIF.
      ENDLOOP.

    WHEN p_5. "社会保险

      APPEND VALUE #(
         col1  = pernr-pernr
         col2  = p0001-ename
         col3  = p0532-begda
         col4  = p0532-endda
         col5  = p0532-intyp
         col6  = p0532-chrsn
         col7  = p0532-innum
         col8  = p0532-congr
         col9  = p0532-conlv
         col10 = p0532-pbyer
       ) TO gt_shbx.

    WHEN p_6."住房公积金

      APPEND VALUE #(
          col1 = pernr-pernr
          col2 = p0001-ename
          col3 = p0530-begda
          col4 = p0530-endda
          col5 = p0530-chrsn
          col6 = p0530-phfno
          col7 = p0530-congr
          col8 = p0530-conlv
          col9 = '' )
          TO gt_gjj."逻辑暂时没确定

    WHEN p_7."计划工作时间

      APPEND VALUE #(
          col1 = pernr-pernr
          col2 = p0001-ename
          col3 = p0007-begda
          col4 = p0007-endda
          col5 = p0007-schkz
              ) TO gt_gzsj.

    WHEN p_8."个税信息

      APPEND VALUE #(
          col1 = pernr-pernr
          col2 = p0001-ename
          col3 = p0531-begda
          col4 = p0531-endda
          col5 = p0531-taxid
              ) TO gt_gsxx.

    WHEN p_9."银行信息

      APPEND VALUE #(
          col1 = pernr-pernr
          col2 = p0001-ename
          col3 = p0009-begda
          col4 = p0009-endda
          col5 = p0009-bnksa
          col6 = p0009-emftx
          col7 = p0009-bankl
          col8 = p0009-bankn
              ) TO gt_bank.

    WHEN p_10."考勤信息

      APPEND VALUE #(
          col1 = pernr-pernr
          col2 = p0001-ename
          col3 = p2010-begda
          col4 = p2010-lgart
          col5 = p2010-anzhl
              ) TO gt_kq.

    WHEN p_11."成本分配信息

      APPEND VALUE #(
          col1 = pernr-pernr
          col2 = p0001-ename
          col3 = p0027-begda
          col4 = p0027-endda
          col5 = p0027-kstar
          col6 = p0027-kbu01
          col7 = p0027-kst01
          col8 = p0027-auf01
          col9 = p0027-psp01
          col10 = p0027-kpr01
              ) TO gt_cbfp.

  ENDCASE.


ENDFORM.



*&---------------------------------------------------------------------*
*&      Form  FRM_GET_ACTIVE_WORKSHEET
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_get_active_worksheet .

*  CASE 'X'.
*    WHEN p_1.
*      lo_excel->set_active_sheet_index('1').
*    WHEN p_2.
*      lo_excel->set_active_sheet_index('2').
*    WHEN p_3.
*      lo_excel->set_active_sheet_index('3').
*    WHEN p_4.
*      lo_excel->set_active_sheet_index('4').
*    WHEN p_5.
*      lo_excel->set_active_sheet_index('5').
*    WHEN p_6.
*      lo_excel->set_active_sheet_index('6').
*    WHEN p_7.
*      lo_excel->set_active_sheet_index('7').
*    WHEN p_8.
*      lo_excel->set_active_sheet_index('8').
*    WHEN p_9.
*      lo_excel->set_active_sheet_index('9').
*    WHEN p_10.
*      lo_excel->set_active_sheet_index('10').
*    WHEN p_11.
*      lo_excel->set_active_sheet_index('11').
*  ENDCASE.
*
*  lo_worksheet = lo_excel->get_active_worksheet( ).
*
*  ls_table_settings-nofilters            = abap_true.
*  ls_table_settings-top_left_column      = 'A'.
*  ls_table_settings-top_left_row         = '5'.
*  ls_table_settings-with_field_head      = ''.
*"  ls_table_settings-table_style = zcl_excel_table=>BUILTINSTYLE_MEDIUM1.
*  "  ls_table_settings-bottom_right_column  = 'J'.
* ls_table_settings-noheader = 'X'.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_BIND_TABLE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_bind_table .

*  CASE 'X'.
*    WHEN p_1.
*      lo_worksheet->bind_table( ip_table          = gt_jbgz
*                          is_table_settings = ls_table_settings ).
*    WHEN p_2.
*      lo_worksheet->bind_table( ip_table          = gt_jczf
*                        is_table_settings = ls_table_settings ).
*    WHEN p_3.
*      lo_worksheet->bind_table( ip_table          = gt_ewzf
*                    is_table_settings = ls_table_settings ).
*    WHEN p_4.
*      lo_worksheet->bind_table( ip_table          = gt_jjff
*                    is_table_settings = ls_table_settings ).
*    WHEN p_5.
*      lo_worksheet->bind_table( ip_table          = gt_shbx
*                    is_table_settings = ls_table_settings ).
*    WHEN p_6.
*      lo_worksheet->bind_table( ip_table          = gt_gjj
*                    is_table_settings = ls_table_settings ).
*    WHEN p_7.
*      lo_worksheet->bind_table( ip_table          = gt_gzsj
*                    is_table_settings = ls_table_settings ).
*    WHEN p_8.
*      lo_worksheet->bind_table( ip_table          = gt_gsxx
*                    is_table_settings = ls_table_settings ).
*    WHEN p_9.
*      lo_worksheet->bind_table( ip_table          = gt_bank
*                    is_table_settings = ls_table_settings ).
*    WHEN p_10.
*      lo_worksheet->bind_table( ip_table          = gt_kq
*                    is_table_settings = ls_table_settings ).
*    WHEN p_11.
*      lo_worksheet->bind_table( ip_table          = gt_cbfp
*                    is_table_settings = ls_table_settings ).
*
*  ENDCASE.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_READ_EXCEL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_1253   text
*----------------------------------------------------------------------*
FORM frm_read_excel  USING  pv_sheetname
                            pv_srow
                            pv_erow
                            pv_scol
                            pv_ecol.

  CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename                = p_file
      i_begin_col             = pv_scol
      i_begin_row             = pv_srow
      i_end_col               = pv_ecol "
      i_end_row               = pv_erow                   "'65536'
      sheet_name              = pv_sheetname
    TABLES
      intern                  = gt_cell
    EXCEPTIONS
      inconsistent_parameters = 1
      upload_ole              = 2
      OTHERS                  = 3.


  IF gt_cell[] IS INITIAL.
    MESSAGE '读取数据失败,请联系管理员!' TYPE 'E'.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_UPLOAD_JBGZ
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_upload_jbgz.


ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_CHECK_VALID
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_P_FILE  text
*----------------------------------------------------------------------*
FORM frm_check_valid  USING pv_file.

  DATA:lw_result TYPE abap_bool,
       l_file    TYPE string.

  l_file = pv_file.

  "检查本地文件是否存在
  CALL METHOD cl_gui_frontend_services=>file_exist
    EXPORTING
      file                 = l_file
    RECEIVING
      result               = lw_result
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      wrong_parameter      = 3
      not_supported_by_gui = 4
      OTHERS               = 5.
  IF lw_result NE 'X'.
    MESSAGE '文件不存在,请检查输入!' TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_CEART_PANNNN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_ceart_pannnn .
  DATA: lc_tabname TYPE char30.
  DATA: nametab TYPE TABLE OF dfies WITH HEADER LINE.
  DATA: dyn_table TYPE REF TO data,                      "内表结构                  "
        dyn_line  TYPE REF TO data,                      "行
        xfc       TYPE lvc_s_fcat,                       "列结构
        ifc       TYPE lvc_t_fcat.                       "列内表

  DATA: l_name TYPE string.

  CONCATENATE 'PA' g_infty INTO lc_tabname.
  CONCATENATE 'P' g_infty INTO l_name.



  CALL FUNCTION 'DDIF_NAMETAB_GET'
    EXPORTING
      tabname   = lc_tabname
    TABLES
      dfies_tab = nametab
    EXCEPTIONS
      not_found = 1
      OTHERS    = 2.

  LOOP AT nametab.
    xfc-fieldname = nametab-fieldname.
    xfc-decimals  = nametab-decimals.
    xfc-inttype   = nametab-inttype.
    xfc-intlen    = nametab-leng.
    APPEND xfc TO ifc.
  ENDLOOP.

  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = ifc
    IMPORTING
      ep_table        = dyn_table.

  ASSIGN dyn_table->* TO <pannnn>.
ENDFORM.                    " FRM_CEART_PANNNN
*&---------------------------------------------------------------------*
*&      Form  FRM_CHECK_OBJID
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_<PERNR>  text
*      <--P_RC  text
*----------------------------------------------------------------------*
FORM frm_check_objid  USING  pv_pernr
                      CHANGING pv_rc.

  DATA: lwa_0001 TYPE pa0001.
  FIELD-SYMBOLS: <field>.
  CLEAR pv_rc.
  SELECT SINGLE * FROM pa0001 INTO lwa_0001 WHERE pernr = pv_pernr.
  IF lwa_0001 IS NOT INITIAL.
    pv_rc = '0'.
  ELSE.
    pv_rc = '4'.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_RUN_BAPI
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_run_bapi.

  DATA:l_nocommit TYPE c,
       l_return   LIKE bapireturn1.

  CALL FUNCTION 'BAPI_EMPLOYEE_ENQUEUE'
    EXPORTING
      number = <pernr>
    IMPORTING
      return = l_return.
  IF l_return IS NOT INITIAL.
    git_output-pernr = <pernr>.
    git_output-messg = l_return-message.
    APPEND git_output.
  ELSE.
    CALL FUNCTION 'HR_INFOTYPE_OPERATION'
      EXPORTING
        infty         = g_infty
        number        = <pernr>
        validityend   = <begda>
        validitybegin = <endda>
        record        = <wa_pn>
        operation     = 'INS'
        nocommit      = l_nocommit
      IMPORTING
        return        = l_return.
    IF l_return IS INITIAL.
      git_output-mtype = 'S'.
      git_output-pernr = <pernr>.
      git_output-messg = '导入成功!'.
      APPEND git_output.
    ELSE.
      git_output-mtype = 'E'.
      git_output-pernr = <pernr>.
      git_output-messg = l_return-message.
      APPEND git_output.
    ENDIF.
  ENDIF.

  CALL FUNCTION 'BAPI_EMPLOYEE_DEQUEUE'
    EXPORTING
      number = <pernr>.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_BDC_0531
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_bdc_0531 .

  DATA: l_p0531 TYPE p0531.
  CLEAR: bdcdata[].
  CLEAR: l_p0531.
  MOVE-CORRESPONDING <wa_tn> TO l_p0531.

  PERFORM bdc_dynpro  USING 'SAPMP50A' '1000'.
  PERFORM bdc_field   USING 'BDC_OKCODE' '=INS'.
  PERFORM bdc_field   USING 'RP50G-PERNR' l_p0531-pernr.
  PERFORM bdc_field   USING 'BDC_SUBSCR' '/1PAPAXX/HDR_10260A                     0100SUBSCR_HEADER'.
  PERFORM bdc_field   USING 'BDC_SUBSCR' 'SAPMP50A                                0320SUBSCR_ITMENU'.
  PERFORM bdc_field   USING 'BDC_SUBSCR' 'SAPMP50A                                0330SUBSCR_TIME'.
  PERFORM bdc_field   USING 'RP50G-TIMR6' 'X'.
  PERFORM bdc_field   USING 'BDC_SUBSCR' 'SAPMP50A                                0350SUBSCR_ITKEYS'.
  PERFORM bdc_field   USING 'BDC_CURSOR' 'RP50G-CHOIC'.
  PERFORM bdc_field   USING 'RP50G-CHOIC' '0531'.

  PERFORM bdc_dynpro  USING 'MP053100' '2000'.
  PERFORM bdc_field   USING 'BDC_CURSOR' 'P0531-TAXID'.
  PERFORM bdc_field   USING 'BDC_OKCODE' 'UPD'.
  PERFORM bdc_field   USING 'P0531-BEGDA' l_p0531-begda.
  PERFORM bdc_field   USING 'P0531-ENDDA' l_p0531-endda.
  PERFORM bdc_field   USING 'P0531-TAXID' l_p0531-taxid.
  PERFORM bdc_field   USING 'RB_RESIDENTS' 'X'.
  PERFORM bdc_field   USING 'BDC_SUBSCR' 'SAPMP50A                                0090SUBSCREEN_T582C'.

  CALL TRANSACTION 'PA30' USING bdcdata MODE ctumode MESSAGES INTO messtab.
  READ TABLE messtab WITH KEY msgtyp = 'E'.
  IF sy-subrc EQ 0.
    git_output-mtype = 'E'.
    git_output-pernr = l_p0531-pernr.
    CONCATENATE messtab-msgv1 ' 导入失败,数据被锁定或者无权限!'INTO git_output-messg.
    APPEND git_output.
  ELSE.
    git_output-mtype = 'S'.
    git_output-pernr = l_p0531-pernr.
    git_output-messg = '导入成功!'.
    APPEND git_output.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_BDC_0532
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_bdc_0532 .

  DATA: l_p0532 TYPE p0532.
  CLEAR: bdcdata[].
  CLEAR: l_p0532.
  MOVE-CORRESPONDING <wa_tn> TO l_p0532.

  PERFORM bdc_dynpro  USING 'SAPMP50A' '1000'.
  PERFORM bdc_field   USING 'BDC_OKCODE' '=INS'.
  PERFORM bdc_field   USING 'RP50G-PERNR' l_p0532-pernr.
  PERFORM bdc_field   USING 'BDC_SUBSCR' '/1PAPAXX/HDR_10260A                     0100SUBSCR_HEADER'.
  PERFORM bdc_field   USING 'BDC_SUBSCR' 'SAPMP50A                                0320SUBSCR_ITMENU'.
  PERFORM bdc_field   USING 'BDC_SUBSCR' 'SAPMP50A                                0330SUBSCR_TIME'.
  PERFORM bdc_field   USING 'RP50G-TIMR6' 'X'.
  PERFORM bdc_field   USING 'BDC_SUBSCR' 'SAPMP50A                                0350SUBSCR_ITKEYS'.
  PERFORM bdc_field   USING 'BDC_CURSOR' 'RP50G-SUBTY'.
  PERFORM bdc_field   USING 'RP50G-CHOIC' '0532'.
  PERFORM bdc_field   USING 'RP50G-SUBTY' l_p0532-subty.

  PERFORM bdc_dynpro  USING 'MP053200' '2000'.
  PERFORM bdc_field   USING 'BDC_CURSOR' 'P0532-CONGR'.
  PERFORM bdc_field   USING 'BDC_OKCODE' 'UPD'.
  PERFORM bdc_field   USING 'P0532-BEGDA' l_p0532-begda.
  PERFORM bdc_field   USING 'P0532-ENDDA' l_p0532-endda.
  PERFORM bdc_field   USING 'P0532-CHRSN' l_p0532-chrsn.
  PERFORM bdc_field   USING 'P0532-INNUM' l_p0532-innum.
*  PERFORM bdc_field   USING 'P0532-CONAR' 'YN'.
  PERFORM bdc_field   USING 'P0532-CONTY' '01'.
  PERFORM bdc_field   USING 'P0532-CONGR' l_p0532-congr.
  PERFORM bdc_field   USING 'P0532-CONLV' l_p0532-conlv.
  IF l_p0532-pbyer = '1'.
    PERFORM bdc_field  USING 'Q0532-ERPAY' 'X'.
  ELSEIF l_p0532-pbyer = '2'.
    PERFORM bdc_field  USING 'Q0532-BOTHP' 'X'.
  ELSEIF l_p0532-pbyer = '3'.
    PERFORM bdc_field  USING 'Q0532-EXEMP' 'X'.
  ENDIF.
  PERFORM bdc_field   USING 'BDC_SUBSCR' 'SAPMP50A                                0090SUBSCREEN_T582C'.

*
  CALL TRANSACTION 'PA30' USING bdcdata MODE ctumode MESSAGES INTO messtab.
  READ TABLE messtab WITH KEY msgtyp = 'E'.
  IF sy-subrc EQ 0.
    git_output-mtype = 'E'.
    git_output-pernr = l_p0532-pernr.
    CONCATENATE messtab-msgv1 ' 导入失败,数据被锁定或者无授权!'INTO git_output-messg.
    APPEND git_output.
  ELSE.
    git_output-mtype = 'S'.
    git_output-pernr = l_p0532-pernr.
    git_output-messg = '导入成功!'.
    APPEND git_output.
  ENDIF.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  bdc_dynpro
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PROGRAM    text
*      -->DYNPRO     text
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
  CLEAR bdcdata.
  bdcdata-program  = program.
  bdcdata-dynpro   = dynpro.
  bdcdata-dynbegin = 'X'.
  APPEND bdcdata.
ENDFORM.                    "BDC_DYNPRO
*----------------------------------------------------------------------*
*        Insert field                                                  *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
  CLEAR bdcdata.
  bdcdata-fnam = fnam.
  bdcdata-fval = fval.
  APPEND bdcdata.
ENDFORM.                    "bdc_field
*&---------------------------------------------------------------------*
*& 输出导入日志
*----------------------------------------------------------------------*
FORM frm_display_log .


  DATA: fieldname1 TYPE char30,
        fieldname2 TYPE char30.

  fieldname1 = '员工编号'.
  fieldname2 = '系统消息'.

  hout mtype           '消息类型'            4 char  ''.
  hout pernr           fieldname1            8 char  ''.
  hout messg           fieldname2           20 char  ''.

  wa_layout-cwidth_opt   =  'X'.   "宽度自动调整

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program     = sy-repid
      it_fieldcat_lvc        = fieldcat[]   "每列的标题,值
      is_layout_lvc          = wa_layout
      i_callback_top_of_page = 'ALV_TOP_OF_PAGE'
      i_save                 = 'U'
    TABLES
      t_outtab               = git_output
    EXCEPTIONS
      program_error          = 1
      OTHERS                 = 2.
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_DATA_FROM_EXCEL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_get_data_from_excel .

  "从不同的SHEET页读出不同的工资数据
  CASE 'X'.
    WHEN p_1.
      PERFORM frm_read_excel USING '基本工资信息' '1' '20000' '1' '10'.
    WHEN p_2.
      IF p_dr = 'X'.
        PERFORM frm_read_excel USING '经常性支付'  '1' '20000' '1' '7'.
      ENDIF.
      IF p_dj = 'X'.
        PERFORM frm_read_excel USING '经常性支付定界'  '1' '20000' '1' '7'.
      ENDIF.
    WHEN p_3.
      PERFORM frm_read_excel USING '偶然性支付' '1' '20000' '1' '6'.
    WHEN p_4.
      PERFORM frm_read_excel USING '单独奖金发放' '1' '20000' '1' '7'.
    WHEN p_5.
      PERFORM frm_read_excel USING '社会保险' '1' '20000' '1' '10'.
    WHEN p_6.
      PERFORM frm_read_excel USING '住房公积金' '1' '20000' '1' '9'.
    WHEN p_7.
      PERFORM frm_read_excel USING '计划工作时间' '1' '20000' '1' '7'.
    WHEN p_8.
      PERFORM frm_read_excel USING '个税信息' '1' '20000' '1' '5'.
    WHEN p_9.
      PERFORM frm_read_excel USING '银行信息' '1' '20000' '1' '8'.
    WHEN p_10.
      PERFORM frm_read_excel USING '考勤信息' '1' '20000' '1' '5'..
    WHEN p_11.
      PERFORM frm_read_excel USING '成本分配信息' '1' '20000' '1' '10'.
    WHEN p_12.
      PERFORM frm_read_excel USING '工资范围定界' '1' '20000' '1' '5'.
  ENDCASE.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_DELETE_INFTY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_delete_infty .

*  DATA: lc_table TYPE char200.
*  FIELD-SYMBOLS: <pernr>.
*  CONCATENATE 'PA' g_infty INTO lc_table.
*  ASSIGN COMPONENT 'PERNR' OF STRUCTURE <wa_pn> TO <pernr>.
*  IF <pernr> NE g_pernr.
*    SELECT * FROM (lc_table)
*          INTO CORRESPONDING FIELDS OF TABLE <pannnn>
*          WHERE pernr = <pernr>
*            AND begda = p_dat1.
*    IF <pannnn> IS NOT INITIAL.
*      DELETE (lc_table) FROM TABLE <pannnn>.
*    ENDIF.
*      g_pernr = <pernr>.
*  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_UPDATE_RECORD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_update_record .

  DATA: lc_table TYPE char200.
  FIELD-SYMBOLS: <pernr>.
  FIELD-SYMBOLS:<fs_pa>.

  DATA: dyn_line TYPE REF TO data.

  TYPES:BEGIN OF ty_data,
          "    人员编号 姓名  工资项 定界日期
          pernr TYPE pernr-pernr,
          ename TYPE p0001-ename,
          lgart TYPE lgart,
          djrq  TYPE datum,
        END OF ty_data.

  DATA:lt_data TYPE TABLE OF ty_data,
       ls_data TYPE ty_data.

  DELETE gt_cell WHERE row LT 4.

  "工资项录入是一行一行开始
  LOOP AT gt_cell INTO DATA(gs_cell).
    ASSIGN COMPONENT gs_cell-col OF STRUCTURE ls_data TO FIELD-SYMBOL(<fs>).
    <fs> = gs_cell-value.
    AT END OF row.
      APPEND ls_data TO lt_data.
    ENDAT.
  ENDLOOP.

  LOOP AT lt_data INTO ls_data.
    UPDATE pa0014 SET endda = ls_data-djrq
         WHERE pernr = ls_data-pernr
           AND lgart = ls_data-lgart
           AND endda EQ '99991231'.
    COMMIT WORK.

    git_output-mtype = 'S'.
    git_output-pernr = ls_data-pernr.
    git_output-messg = '导入成功!'.
    APPEND git_output.

  ENDLOOP.

  MESSAGE '数据修改成功!' TYPE 'S'.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_INTY_DEFINE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_inty_define .


  "p1 0008 p2 0014 p3 0016 p4 0267 p5 0532 p6 0530 p7 0007 p8 0531 p9 0009 p10 2010 p11 0027
  CASE 'X'.
    WHEN p_1.
      g_infty  = '0008'.
      gv_sheet = 1.
    WHEN p_2.
      g_infty = '0014'.
      gv_sheet = 2.
    WHEN p_3.
      g_infty = '0015'.
      gv_sheet = 3.
    WHEN p_4.
      g_infty = '0267'.
      gv_sheet = 4.
    WHEN p_5.
      g_infty = '0532'.
      gv_sheet = 5.
    WHEN p_6.
      g_infty = '0530'.
      gv_sheet = 6.
    WHEN p_7.
      g_infty = '0007'.
      gv_sheet = 7.
    WHEN p_8.
      g_infty = '0531'.
      gv_sheet = 8.
    WHEN p_9.
      g_infty = '0009'.
      gv_sheet = 9.
    WHEN p_10.
      g_infty = '2010'.
      gv_sheet = 10.
    WHEN p_11.
      g_infty = '0027'.
      gv_sheet = 11.
    WHEN p_12.
      g_infty = '0001'.
      gv_sheet = 12.
  ENDCASE.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_DOWNLOAD_TMPLATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0161   text
*----------------------------------------------------------------------*
FORM frm_download_tmplate  USING  pv_id.

  DATA:  lo_objdata     LIKE wwwdatatab,
         lo_mime        LIKE w3mime,
         lc_filename    TYPE string VALUE '薪酬导入模板', "默认名
         lc_fullpath    TYPE string,
         lc_path        TYPE string,
         ls_destination TYPE rlgrap-filename,
         ls_objnam      TYPE string,
         li_rc          TYPE sy-subrc,
         ls_errtxt      TYPE string.
  DATA:p_objid TYPE wwwdatatab-objid,
       p_dest  TYPE sapb-sappfad.

  p_objid = pv_id.

  CALL METHOD cl_gui_frontend_services=>file_save_dialog "调用保存对话框
    EXPORTING
      default_extension    = 'xlsx'
      default_file_name    = lc_filename
    CHANGING
      filename             = lc_filename
      path                 = lc_path
      fullpath             = lc_fullpath
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.
  IF lc_fullpath = ''.
    MESSAGE  '不能打开EXCEL' TYPE 'E'.
  ENDIF.

  IF sy-subrc = 0.
    p_dest = lc_fullpath.
*    CONCATENATE P_OBJID '.XLS' INTO LS_OBJNAM.
    CONDENSE ls_objnam NO-GAPS.
    SELECT SINGLE relid objid FROM wwwdata INTO CORRESPONDING FIELDS OF lo_objdata
           WHERE srtf2 = 0 AND relid = 'MI' AND objid = p_objid.
*检查表WWWDATA中是否存在所指定的模板文件
    IF sy-subrc NE 0 OR lo_objdata-objid EQ space."如果不存在,则给出错误提示
      CONCATENATE '模板文件' ls_objnam '不存在' INTO ls_errtxt.
      MESSAGE ls_errtxt TYPE 'I'.
    ENDIF.
    ls_destination = p_dest. "保存路径
*如果存在,调用DOWNLOAD_WEB_OBJECT 函数下载模板到路径下
    CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
      EXPORTING
        key         = lo_objdata
        destination = ls_destination
      IMPORTING
        rc          = li_rc.
    IF li_rc NE 0.
      CONCATENATE '模板文件:' ls_objnam '下载失败' INTO ls_errtxt.
      MESSAGE ls_errtxt TYPE 'E'.
    ENDIF.
    gv_file = ls_destination.  "FNAME 全局
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_PAYROLL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_get_payroll.





ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_WRITE_TO_EXCEL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_open_excel .

  DATA: lv_linenum  TYPE i,
        lv_count    TYPE i,
        l_rc        TYPE i,
        ascii       TYPE c,
        lv_str1(50) TYPE c,
        l_sheet     TYPE i.

  FIELD-SYMBOLS <field> TYPE any.
  DATA: lo_activebook TYPE ole2_object.


  CREATE OBJECT go_excel 'EXCEL.APPLICATION'.


  CALL METHOD OF
    go_excel
      'WORKBOOKS' = go_books.

  CALL METHOD OF
    go_books
    'OPEN'
    EXPORTING
      #1 = gv_file.

  SET PROPERTY OF go_excel 'DisplayAlerts' = 0.

  CALL METHOD OF
      go_excel
      'WORKSHEETS' = go_sheet
    EXPORTING
      #1           = gv_sheet.

  CALL METHOD OF
    go_sheet
    'ACTIVATE'.

  CALL METHOD OF
      go_excel
      'CELLS'  = go_cell
    EXPORTING
      #1       = 1
      #2       = 1.

  "  CALL METHOD OF go_excel 'CELLS'  = go_cell EXPORTING #1 = 1  #2  = 1.
  SET PROPERTY OF go_excel 'Visible' = 1.  "1/0 是否显示EXCEL


ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_DEAL_WITH_JBGZ
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_deal_with_table.

  CLEAR:gt_excel,
        gs_excel,
        gv_str1,
        ascii.

  CLASS cl_abap_char_utilities DEFINITION LOAD.
  ascii = cl_abap_char_utilities=>horizontal_tab.

  CASE 'X'.
    WHEN p_1.

      cl_descr ?= cl_abap_typedescr=>describe_by_data( gs_jbgz ).

      LOOP AT gt_jbgz INTO gs_jbgz.
        LOOP AT cl_descr->components ASSIGNING  FIELD-SYMBOL(<fs_comp>).
          ASSIGN COMPONENT <fs_comp>-name OF STRUCTURE gs_jbgz TO <field>.
          gv_str1 = <field>.
          CONDENSE gv_str1.
          IF sy-tabix = 1.
            gs_excel = gv_str1.
          ELSE.
            CONCATENATE gs_excel gv_str1 INTO gs_excel SEPARATED BY ascii.
          ENDIF .
        ENDLOOP.
        APPEND gs_excel TO gt_excel.
        CLEAR: gs_excel.
      ENDLOOP.

    WHEN p_2.

      cl_descr ?= cl_abap_typedescr=>describe_by_data( gs_jczf ).

      LOOP AT gt_jczf INTO DATA(gs_jczf).
        LOOP AT cl_descr->components ASSIGNING <fs_comp>.
          ASSIGN COMPONENT <fs_comp>-name OF STRUCTURE gs_jczf TO <field>.
          gv_str1 = <field>.
          CONDENSE gv_str1.
          IF sy-tabix = 1.
            gs_excel = gv_str1.
          ELSE.
            CONCATENATE gs_excel gv_str1 INTO gs_excel SEPARATED BY ascii.
          ENDIF .
        ENDLOOP.
        APPEND gs_excel TO gt_excel.
        CLEAR: gs_excel.
      ENDLOOP.

    WHEN p_3.

      cl_descr ?= cl_abap_typedescr=>describe_by_data( gs_ewzf ).

      LOOP AT gt_ewzf INTO DATA(gs_ewzf).
        LOOP AT cl_descr->components ASSIGNING <fs_comp>.
          ASSIGN COMPONENT <fs_comp>-name OF STRUCTURE gs_ewzf TO <field>.
          gv_str1 = <field>.
          CONDENSE gv_str1.
          IF sy-tabix = 1.
            gs_excel = gv_str1.
          ELSE.
            CONCATENATE gs_excel gv_str1 INTO gs_excel SEPARATED BY ascii.
          ENDIF .
        ENDLOOP.
        APPEND gs_excel TO gt_excel.
        CLEAR: gs_excel.
      ENDLOOP.

    WHEN p_4.

      cl_descr ?= cl_abap_typedescr=>describe_by_data( gs_jjff ).

      LOOP AT gt_jjff INTO DATA(gs_jjff).
        LOOP AT cl_descr->components ASSIGNING <fs_comp>.
          ASSIGN COMPONENT <fs_comp>-name OF STRUCTURE gs_jjff TO <field>.
          gv_str1 = <field>.
          CONDENSE gv_str1.
          IF sy-tabix = 1.
            gs_excel = gv_str1.
          ELSE.
            CONCATENATE gs_excel gv_str1 INTO gs_excel SEPARATED BY ascii.
          ENDIF .
        ENDLOOP.
        APPEND gs_excel TO gt_excel.
        CLEAR: gs_excel.
      ENDLOOP.

    WHEN p_5.

      cl_descr ?= cl_abap_typedescr=>describe_by_data( gs_shbx ).

      LOOP AT gt_shbx INTO DATA(gs_shbx).
        LOOP AT cl_descr->components ASSIGNING <fs_comp>.
          ASSIGN COMPONENT <fs_comp>-name OF STRUCTURE gs_shbx TO <field>.
          gv_str1 = <field>.
          CONDENSE gv_str1.
          IF sy-tabix = 1.
            gs_excel = gv_str1.
          ELSE.
            CONCATENATE gs_excel gv_str1 INTO gs_excel SEPARATED BY ascii.
          ENDIF .
        ENDLOOP.
        APPEND gs_excel TO gt_excel.
        CLEAR: gs_excel.
      ENDLOOP.

    WHEN p_6.

      cl_descr ?= cl_abap_typedescr=>describe_by_data( gs_gjj ).

      LOOP AT gt_gjj INTO DATA(gs_gjj).
        LOOP AT cl_descr->components ASSIGNING <fs_comp>.
          ASSIGN COMPONENT <fs_comp>-name OF STRUCTURE gs_gjj TO <field>.
          gv_str1 = <field>.
          CONDENSE gv_str1.
          IF sy-tabix = 1.
            gs_excel = gv_str1.
          ELSE.
            CONCATENATE gs_excel gv_str1 INTO gs_excel SEPARATED BY ascii.
          ENDIF .
        ENDLOOP.
        APPEND gs_excel TO gt_excel.
        CLEAR: gs_excel.
      ENDLOOP.

    WHEN p_7.

      cl_descr ?= cl_abap_typedescr=>describe_by_data( gs_gzsj ).

      LOOP AT gt_gzsj INTO DATA(gs_gzsj).
        LOOP AT cl_descr->components ASSIGNING <fs_comp>.
          ASSIGN COMPONENT <fs_comp>-name OF STRUCTURE gs_gzsj TO <field>.
          gv_str1 = <field>.
          CONDENSE gv_str1.
          IF sy-tabix = 1.
            gs_excel = gv_str1.
          ELSE.
            CONCATENATE gs_excel gv_str1 INTO gs_excel SEPARATED BY ascii.
          ENDIF .
        ENDLOOP.
        APPEND gs_excel TO gt_excel.
        CLEAR: gs_excel.
      ENDLOOP.


    WHEN p_8.

      cl_descr ?= cl_abap_typedescr=>describe_by_data( gs_gsxx ).

      LOOP AT gt_gsxx INTO DATA(gs_gsxx).
        LOOP AT cl_descr->components ASSIGNING <fs_comp>.
          ASSIGN COMPONENT <fs_comp>-name OF STRUCTURE gs_gsxx TO <field>.
          gv_str1 = <field>.
          CONDENSE gv_str1.
          IF sy-tabix = 1.
            gs_excel = gv_str1.
          ELSE.
            CONCATENATE gs_excel gv_str1 INTO gs_excel SEPARATED BY ascii.
          ENDIF .
        ENDLOOP.
        APPEND gs_excel TO gt_excel.
        CLEAR: gs_excel.
      ENDLOOP.

    WHEN p_9.

      cl_descr ?= cl_abap_typedescr=>describe_by_data( gs_bank ).

      LOOP AT gt_bank INTO DATA(gs_bank).
        LOOP AT cl_descr->components ASSIGNING <fs_comp>.
          ASSIGN COMPONENT <fs_comp>-name OF STRUCTURE gs_bank TO <field>.
          gv_str1 = <field>.
          CONDENSE gv_str1.
          IF sy-tabix = 1.
            gs_excel = gv_str1.
          ELSE.
            CONCATENATE gs_excel gv_str1 INTO gs_excel SEPARATED BY ascii.
          ENDIF .
        ENDLOOP.
        APPEND gs_excel TO gt_excel.
        CLEAR: gs_excel.
      ENDLOOP.

    WHEN p_10.

      cl_descr ?= cl_abap_typedescr=>describe_by_data( gs_kq ).

      LOOP AT gt_kq INTO DATA(gs_kq).
        LOOP AT cl_descr->components ASSIGNING <fs_comp>.
          ASSIGN COMPONENT <fs_comp>-name OF STRUCTURE gs_kq TO <field>.
          gv_str1 = <field>.
          CONDENSE gv_str1.
          IF sy-tabix = 1.
            gs_excel = gv_str1.
          ELSE.
            CONCATENATE gs_excel gv_str1 INTO gs_excel SEPARATED BY ascii.
          ENDIF .
        ENDLOOP.
        APPEND gs_excel TO gt_excel.
        CLEAR: gs_excel.
      ENDLOOP.


    WHEN p_11.

      cl_descr ?= cl_abap_typedescr=>describe_by_data( gs_cbfp ).

      LOOP AT gt_cbfp INTO DATA(gs_cbfp).
        LOOP AT cl_descr->components ASSIGNING <fs_comp>.
          ASSIGN COMPONENT <fs_comp>-name OF STRUCTURE gs_cbfp TO <field>.
          gv_str1 = <field>.
          CONDENSE gv_str1.
          IF sy-tabix = 1.
            gs_excel = gv_str1.
          ELSE.
            CONCATENATE gs_excel gv_str1 INTO gs_excel SEPARATED BY ascii.
          ENDIF .
        ENDLOOP.
        APPEND gs_excel TO gt_excel.
        CLEAR: gs_excel.
      ENDLOOP.

  ENDCASE.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_WRITE_TO_EXCEL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_write_to_excel .

  CALL METHOD OF
      go_excel
      'CELLS'  = go_cell
    EXPORTING
      #1       = 4
      #2       = 1.

  CALL METHOD OF go_cell 'Select'.

  CALL METHOD cl_gui_frontend_services=>clipboard_export       "PASTE TO EXCEL FROM EXCEL_TAB
    IMPORTING
      data                 = gt_excel
    CHANGING
      rc                   = g_rc
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.

  CALL METHOD OF go_sheet 'Paste'.

  GET PROPERTY OF go_excel 'ActiveSheet'    = go_sheet. "获取活动SHEET
  GET PROPERTY OF go_excel 'ActiveWorkbook' = go_activebook.          "Save as to File Path

  CALL METHOD OF go_activebook 'SaveAs'
    EXPORTING
      #1 = gv_file
      #2 = 1.
  IF sy-subrc EQ 0.
    MESSAGE '导出成功' TYPE 'S'.
  ELSE.
    MESSAGE '导出失败' TYPE 'S'.
  ENDIF.

  CALL METHOD OF go_books 'CLOSE'.
  CALL METHOD OF go_excel 'QUIT'.

  FREE OBJECT go_sheet.
  FREE OBJECT go_books.
  FREE OBJECT go_excel.


ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_BASIC_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_get_basic_data .

  LOOP AT lt_pernr INTO DATA(ls_pernr).
    CASE 'X'.

      WHEN p_1. "基本工资

        APPEND VALUE #(
             col1  = ls_pernr-pernr
             col2 = ls_pernr-sname
                ) TO gt_jbgz.


      WHEN p_2."经常性支付

        APPEND VALUE #(
               col1  = ls_pernr-pernr
               col2 = ls_pernr-sname
                ) TO gt_jczf.

      WHEN p_3."额外支付

        APPEND VALUE #(
           col1  = ls_pernr-pernr
               col2 = ls_pernr-sname
           ) TO gt_ewzf.


      WHEN p_4."奖金支付

        APPEND VALUE #(
              col1  = ls_pernr-pernr
              col2 = ls_pernr-sname
            ) TO gt_jjff.


      WHEN p_5. "社会保险

        APPEND VALUE #(
              col1  = ls_pernr-pernr
              col2 = ls_pernr-sname
         ) TO gt_shbx.

      WHEN p_6."住房公积金

        APPEND VALUE #(
                col1  = ls_pernr-pernr
                col2 = ls_pernr-sname )
            TO gt_gjj."逻辑暂时没确定

      WHEN p_7."计划工作时间

        APPEND VALUE #(
                col1  = ls_pernr-pernr
                col2 = ls_pernr-sname
                ) TO gt_gzsj.

      WHEN p_8."个税信息

        APPEND VALUE #(
                  col1  = ls_pernr-pernr
              col2 = ls_pernr-sname
                ) TO gt_gsxx.

      WHEN p_9."银行信息

        APPEND VALUE #(
                  col1  = ls_pernr-pernr
               col2 = ls_pernr-sname
                ) TO gt_bank.

      WHEN p_10."考勤信息

        APPEND VALUE #(
              col1  = ls_pernr-pernr
              col2 = ls_pernr-sname
                ) TO gt_kq.

      WHEN p_11."成本分配信息

        APPEND VALUE #(
                 col1  = ls_pernr-pernr
              col2 = ls_pernr-sname
                ) TO gt_cbfp.

    ENDCASE.

  ENDLOOP.

ENDFORM.


*&---------------------------------------------------------------------*
*&      Form  ALV_TOP_OF_PAGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_P_INF  text
*      <--P_GV_SHEETNAME  text
*----------------------------------------------------------------------*
FORM alv_top_of_page.

  DATA: i_header  TYPE  slis_t_listheader,
        wa_header TYPE slis_listheader.

  DATA:lv_s TYPE i,
       lv_e TYPE i.

  LOOP AT git_output INTO DATA(wa_out).
    CASE wa_out-mtype.
      WHEN 'S'.
        ADD 1 TO lv_s.
      WHEN 'E'.
        ADD 1 TO lv_e.
    ENDCASE.
  ENDLOOP.

  wa_header-typ  = 'S'.
  wa_header-key  =  '共导入人员:' .
  wa_header-info = lines( git_output[] ).
  APPEND wa_header TO i_header .
  CLEAR  wa_header .

  wa_header-typ  = 'S'.
  wa_header-key  =  '成功:' .
  wa_header-info = lv_s.
  APPEND wa_header TO i_header .
  CLEAR  wa_header .

  wa_header-typ  = 'S'.
  wa_header-key  =  '失败:' .
  wa_header-info = lv_e.
  APPEND wa_header TO i_header .
  CLEAR  wa_header .

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary = i_header
"     i_logo             = 'ENJOYSAP_LOGO'  "OAOR 中的Object Key
      i_alv_form         = 'X'.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_BDC_0531
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_bdc_0001 .

  DATA: l_p0001 TYPE p0001.
  CLEAR: bdcdata[].
  CLEAR: l_p0001.
  MOVE-CORRESPONDING <wa_tn> TO l_p0001.

  PERFORM bdc_dynpro   USING      'SAPMP50A'    '1000'.
  PERFORM bdc_field    USING      'BDC_OKCODE'  '/00'.
  PERFORM bdc_field    USING      'RP50G-PERNR' l_p0001-pernr.
  PERFORM bdc_field    USING      'BDC_SUBSCR'  '/1PAPAXX/HDR_10260A                     0100SUBSCR_HEADER'.
  PERFORM bdc_field    USING      'BDC_SUBSCR'  'SAPMP50A                                0320SUBSCR_ITMENU'.
  PERFORM bdc_field    USING      'BDC_SUBSCR'  'SAPMP50A                                0330SUBSCR_TIME'.
  PERFORM bdc_field    USING      'RP50G-TIMR6'	'X'.
  PERFORM bdc_field    USING      'BDC_SUBSCR'  'SAPMP50A                                0350SUBSCR_ITKEYS'.
  PERFORM bdc_field    USING      'BDC_CURSOR'  'RP50G-CHOIC'.
  PERFORM bdc_field    USING      'RP50G-CHOIC'	'0001'.

  PERFORM bdc_dynpro    USING     'SAPMP50A'     '1000'.
  PERFORM bdc_field     USING     'BDC_CURSOR'   'RP50G-PERNR'.
  PERFORM bdc_field     USING     'BDC_OKCODE'   '=COP'.
  PERFORM bdc_field     USING     'RP50G-PERNR'  l_p0001-pernr.
  PERFORM bdc_field     USING     'BDC_SUBSCR'   '/1PAPAXX/HDR_10260A                     0100SUBSCR_HEADER'.
  PERFORM bdc_field     USING     'BDC_SUBSCR'   'SAPMP50A                                0320SUBSCR_ITMENU'.
  PERFORM bdc_field     USING     'BDC_SUBSCR'   'SAPMP50A                                0330SUBSCR_TIME'.
  PERFORM bdc_field     USING     'RP50G-TIMR6'  'X'.
  PERFORM bdc_field     USING     'BDC_SUBSCR'   'SAPMP50A                                0350SUBSCR_ITKEYS'.
  PERFORM bdc_field     USING     'RP50G-CHOIC'  '组织分配'.

  PERFORM bdc_dynpro    USING  'MP000100'   '2000'.
  PERFORM bdc_field     USING  'BDC_CURSOR'	'P0001-ABKRS'.
  PERFORM bdc_field     USING  'BDC_OKCODE'	'UPD'.
  PERFORM bdc_field     USING  'P0001-BEGDA' l_p0001-begda.
  PERFORM bdc_field     USING  'P0001-ENDDA' l_p0001-endda.
  PERFORM bdc_field     USING  'P0001-ABKRS'  l_p0001-abkrs.
  PERFORM bdc_field     USING  'BDC_SUBSCR'	'MP000100                                0100SUB0001'.
  PERFORM bdc_field     USING  'BDC_SUBSCR'	'ZP000100                                0200SUBSCREEN_T582C'.


  CALL TRANSACTION 'PA30' USING bdcdata MODE ctumode MESSAGES INTO messtab.
  READ TABLE messtab WITH KEY msgtyp = 'E'.
  IF sy-subrc EQ 0.
    git_output-mtype = 'E'.
    git_output-pernr = l_p0001-pernr.
    CONCATENATE messtab-msgv1 ' 导入失败,数据被锁定或者无权限!'INTO git_output-messg.
    APPEND git_output.
  ELSE.
    git_output-mtype = 'S'.
    git_output-pernr = l_p0001-pernr.
    git_output-messg = '导入成功!'.
    APPEND git_output.
  ENDIF.

ENDFORM.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值