sap报表导入查询数据检查

REPORT zdemo001 NO STANDARD PAGE HEADING.
TYPE-POOLS: slis.
INCLUDE <icon>.
TABLES: sscrfields, zttpm_debt01.
DATA: gt_zttpm_debt01 TYPE TABLE OF zttpm_debt01,
      gr_grid         TYPE REF TO cl_gui_alv_grid,
      g_error         TYPE char1.
TYPES:BEGIN OF ty_partner,
        partner TYPE bu_partner,
      END OF ty_partner.
DATA: lt_zttpm_debt01 TYPE TABLE OF zttpm_debt01.
DATA: ls_partner  TYPE ty_partner.
DATA: lt_partner  TYPE TABLE OF ty_partner.
DATA: lv_qianqi_debt TYPE char20,
      lv_qianqi_int  TYPE char20.
FIELD-SYMBOLS: <fs_zttpm_debt01> TYPE zttpm_debt01.

SELECTION-SCREEN FUNCTION KEY 1.
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001.
PARAMETERS: p_search RADIOBUTTON GROUP rg1 DEFAULT 'X' USER-COMMAND setype,
            p_import RADIOBUTTON GROUP rg1.
SELECTION-SCREEN END OF BLOCK blk1.

SELECTION-SCREEN BEGIN OF BLOCK blk2 WITH FRAME TITLE text-002.
SELECT-OPTIONS: s_bp     FOR zttpm_debt01-customer_bp    MODIF ID bk1.
SELECTION-SCREEN END OF BLOCK blk2.

SELECTION-SCREEN BEGIN OF BLOCK blk3 WITH FRAME TITLE text-003.
PARAMETERS: p_file TYPE string LOWER CASE MEMORY ID file MODIF ID bk2.
SELECTION-SCREEN END OF BLOCK blk3.

INITIALIZATION.
  DATA: functxt TYPE smp_dyntxt.

  functxt-icon_id   = icon_export.
  functxt-quickinfo = '下载模板'.
  functxt-icon_text = '下载模板'.
  sscrfields-functxt_01 = functxt.
AT SELECTION-SCREEN OUTPUT.
  CASE 'X'.
    WHEN p_search.
      LOOP AT SCREEN.
        IF screen-group1 = 'BK1'.
          screen-active = '1'.
        ENDIF.
        IF screen-group1 = 'BK2'.
          screen-active = '0'.
        ENDIF.
        MODIFY SCREEN.
      ENDLOOP.

    WHEN p_import.
      LOOP AT SCREEN.
        IF screen-group1 = 'BK1'.
          screen-active = '0'.
        ENDIF.
        IF screen-group1 = 'BK2'.
          screen-active = '1'.
        ENDIF.
        MODIFY SCREEN.
      ENDLOOP.
  ENDCASE.

AT SELECTION-SCREEN.
  CASE sscrfields-ucomm.
    WHEN 'FC01'.
      CALL METHOD zmcl_service_common=>download_file_template
        EXPORTING
          iv_objid             = 'ZMR057'
          iv_default_extension = '.XLSX'
          iv_default_file_name = '信息导入.XLSX'.
  ENDCASE.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  DATA: lv_desktop  TYPE string,
        lv_return   TYPE i,
        lt_filename TYPE filetable,
        lv_filename TYPE file_table.

  cl_gui_frontend_services=>get_desktop_directory( CHANGING desktop_directory = lv_desktop ).

  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
      default_extension = 'XLSX'
      initial_directory = lv_desktop
    CHANGING
      file_table        = lt_filename
      rc                = lv_return
    EXCEPTIONS
      OTHERS            = 99.

  READ TABLE lt_filename INTO lv_filename INDEX 1.
  p_file = lv_filename.

START-OF-SELECTION.

  CASE abap_true.

**********************************************************************
* 查询数据
**********************************************************************
    WHEN p_search.

      SELECT * INTO TABLE gt_zttpm_debt01
           FROM zttpm_debt01
           WHERE customer_bp IN s_bp.
**********************************************************************
* 数据导入
**********************************************************************
    WHEN p_import.

      DATA: lr_reader  TYPE REF TO zif_excel_reader,
            lr_excel   TYPE REF TO zcl_excel,
            lr_sheet   TYPE REF TO zcl_excel_worksheet,
            lv_cell    TYPE i,
            lv_index   TYPE string.

      FIELD-SYMBOLS: <fs_cell> TYPE zexcel_s_cell_data.

      TRY.
          CREATE OBJECT lr_reader TYPE zcl_excel_reader_2007.
          lr_excel = lr_reader->load_file( p_file ).
        CATCH zcx_excel.
          MESSAGE '导入出错' TYPE 'S' DISPLAY LIKE 'E'.
          EXIT.
      ENDTRY.

      lr_sheet = lr_excel->get_active_worksheet( ).

* 删除表头
      DELETE lr_sheet->sheet_content WHERE cell_row <= 1 OR cell_column >= 8.

      FIELD-SYMBOLS: <fv_field> TYPE any.

      LOOP AT lr_sheet->sheet_content ASSIGNING <fs_cell>.
        AT NEW cell_row.
          APPEND INITIAL LINE TO gt_zttpm_debt01 ASSIGNING <fs_zttpm_debt01>.
        ENDAT.
        CONDENSE <fs_cell>-cell_value.

        lv_cell = <fs_cell>-cell_column + 1.

        "IF <fs_cell>-cell_column <> 5.
        ASSIGN COMPONENT lv_cell OF STRUCTURE <fs_zttpm_debt01> TO <fv_field>.
        IF sy-subrc = 0.
          TRY.
              <fv_field> = <fs_cell>-cell_value.
            CATCH cx_root.
              DATA: lv_float  TYPE f.

              lv_float = <fs_cell>-cell_value.
              <fv_field> = lv_float.
          ENDTRY.
        ENDIF.
        "ENDIF.
*        IF <fs_cell>-cell_column = 5.
*          <fs_zttpm_debt01>-update_date = <fs_cell>-cell_value.
*        ENDIF.
      ENDLOOP.
  ENDCASE.

**********************************************************************
* 显示数据
**********************************************************************
  DATA: ls_layout   TYPE lvc_s_layo,
        lt_fieldcat TYPE lvc_t_fcat.
  FIELD-SYMBOLS: <fs_fieldcat> TYPE lvc_s_fcat.

  ls_layout-col_opt     = abap_true.
  ls_layout-cwidth_opt  = abap_true.
  ls_layout-zebra       = abap_true.
  ls_layout-sel_mode    = 'A'.

  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name   = 'ZTTPM_DEBT01'
      i_buffer_active    = abap_true
      i_bypassing_buffer = abap_true
    CHANGING
      ct_fieldcat        = lt_fieldcat.

  LOOP AT lt_fieldcat ASSIGNING <fs_fieldcat>.
    CASE <fs_fieldcat>-fieldname.
      WHEN 'CUSTOMER_BP'.
        <fs_fieldcat>-coltext = '客户代码'.
      WHEN 'CUSTOMER_NAME'.
        <fs_fieldcat>-coltext = '客户名称'.
      WHEN 'QIANQI_DEBT'.
        <fs_fieldcat>-coltext = '前期欠款(货款)'.
      WHEN 'QIANQI_INT'.
        <fs_fieldcat>-coltext = '前期欠款(利息)'.
      WHEN 'UPDATE_DATE'.
        <fs_fieldcat>-coltext = '修改日期'.
      WHEN 'UPDATE_BY'.
        <fs_fieldcat>-coltext = '修改人'.
      WHEN 'MESSAGE'.
        <fs_fieldcat>-coltext = '提示信息'.
      WHEN OTHERS.
        DELETE lt_fieldcat.
        CONTINUE.
    ENDCASE.

    <fs_fieldcat>-reptext = <fs_fieldcat>-colddictxt = <fs_fieldcat>-coltext.
  ENDLOOP.

  IF p_search EQ 'X'.
    DELETE lt_fieldcat INDEX 7.
  ENDIF.
  SORT gt_zttpm_debt01 BY customer_bp.
  SELECT partner FROM but000 INTO TABLE lt_partner
    FOR ALL ENTRIES IN gt_zttpm_debt01
    WHERE partner = gt_zttpm_debt01-customer_bp.
  SORT lt_partner BY partner.
  LOOP AT gt_zttpm_debt01 ASSIGNING <fs_zttpm_debt01>.
    READ TABLE lt_partner INTO ls_partner WITH KEY partner = <fs_zttpm_debt01>-customer_bp BINARY SEARCH.
    IF ls_partner-partner IS INITIAL.
      <fs_zttpm_debt01>-message = <fs_zttpm_debt01>-customer_bp && '客户代码不存在'.
      g_error = 'X'.
    ENDIF.
    IF <fs_zttpm_debt01>-qianqi_debt IS NOT INITIAL.
      lv_qianqi_debt = <fs_zttpm_debt01>-qianqi_debt.
      CONDENSE lv_qianqi_debt NO-GAPS.
      IF cl_abap_matcher=>matches(
          pattern = '^(-?[1-9]\d*(\.\d*[1-9])?)|(-?0\.\d*[1-9])$'
          text = lv_qianqi_debt ) = abap_true.
      ELSE.
        <fs_zttpm_debt01>-message = lv_qianqi_debt && '前期欠款(货款)字段格式有误'.
        g_error = 'X'.
      ENDIF.
    ENDIF.
    IF <fs_zttpm_debt01>-qianqi_int IS NOT INITIAL.
      lv_qianqi_int = <fs_zttpm_debt01>-qianqi_int .
      CONDENSE lv_qianqi_int NO-GAPS.
      IF cl_abap_matcher=>matches(
          pattern = '^(-?[1-9]\d*(\.\d*[1-9])?)|(-?0\.\d*[1-9])$'
          text = lv_qianqi_int ) = abap_true.
      ELSE.
        <fs_zttpm_debt01>-message = lv_qianqi_int && '前期欠款(利息)字段格式有误'.
        g_error = 'X'.
      ENDIF.
    ENDIF.
    <fs_zttpm_debt01>-update_date = sy-datum.
    <fs_zttpm_debt01>-update_by   = sy-uname.
    CLEAR:ls_partner.
  ENDLOOP.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = sy-repid
      is_layout_lvc            = ls_layout
      i_callback_pf_status_set = 'FRM_SET_STATUS'
      i_callback_user_command  = 'FRM_USER_COMMAND'
      it_fieldcat_lvc          = lt_fieldcat
    TABLES
      t_outtab                 = gt_zttpm_debt01.
**********************************************************************

*&---------------------------------------------------------------------*
*&      Form  frm_save
*&---------------------------------------------------------------------*
*       保存数据
*----------------------------------------------------------------------*
FORM frm_save.

  IF g_error IS NOT INITIAL.
    MESSAGE '导入数据有错误不能保存!' TYPE 'W'.
    EXIT.
  ENDIF.
  MODIFY zttpm_debt01 FROM TABLE gt_zttpm_debt01.
  IF sy-subrc = 0.
    MESSAGE '保存成功' TYPE 'S'.
  ENDIF.
  COMMIT WORK AND WAIT.

ENDFORM.                    "frm_save

*&---------------------------------------------------------------------*
*&      Form  frm_user_command
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_UCOMM        text
*      -->P_RS_SELFIELD  text
*----------------------------------------------------------------------*
FORM frm_user_command USING p_ucomm     TYPE sy-ucomm
                          p_selfield  TYPE slis_selfield .
  DATA: lv_answer TYPE c.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = gr_grid.

  CASE p_ucomm.
    WHEN 'SAVE' OR '&DATA_SAVE'.
      PERFORM frm_save.
      p_selfield-refresh = abap_true.
    WHEN 'DELETE'.
      PERFORM frm_delete.
      p_selfield-refresh = abap_true.
  ENDCASE.
ENDFORM.                    "frm_user_command

*&---------------------------------------------------------------------*
*&      Form  frm_set_status
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_EXTAB    text
*----------------------------------------------------------------------*
FORM frm_set_status USING p_extab TYPE slis_t_extab.
  DATA lt_buttons TYPE TABLE OF sy-ucomm.

  IF p_import EQ ''.
    APPEND 'SAVE' TO lt_buttons.
    DELETE lt_buttons WHERE table_line EQ 'DELETE'.
  ELSE.
    APPEND 'DELETE' TO lt_buttons.
    DELETE lt_buttons WHERE table_line EQ 'SAVE'.
  ENDIF.

  SET PF-STATUS 'GUIALV01' EXCLUDING lt_buttons.
ENDFORM.                    "frm_set_status
*&---------------------------------------------------------------------*
*&      Form  frm_delete
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_delete.

  DATA: lt_zttpm_debt01 TYPE TABLE OF zttpm_debt01,
        ls_zttpm_debt01 TYPE zttpm_debt01,
        lt_rows TYPE lvc_t_row,
        ls_row TYPE lvc_s_row.

  CALL METHOD gr_grid->get_selected_rows
    IMPORTING
      et_index_rows = lt_rows.

  LOOP AT lt_rows INTO ls_row.

    READ TABLE gt_zttpm_debt01 INTO ls_zttpm_debt01 INDEX ls_row-index.
    IF sy-subrc = 0.
      APPEND ls_zttpm_debt01 TO lt_zttpm_debt01.
    ENDIF.

  ENDLOOP.

  IF lt_zttpm_debt01[] IS NOT INITIAL.

    DELETE zttpm_debt01 FROM TABLE lt_zttpm_debt01.
    IF sy-subrc = 0.
      MESSAGE '删除成功' TYPE 'S'.
    ENDIF.
    COMMIT WORK AND WAIT.
  ENDIF.

  LOOP AT lt_zttpm_debt01 INTO ls_zttpm_debt01.
    DELETE TABLE gt_zttpm_debt01 FROM <fs_zttpm_debt01>.
  ENDLOOP.

  CALL METHOD gr_grid->refresh_table_display
    EXCEPTIONS
      finished = 1
      OTHERS   = 2.

ENDFORM.                    " frm_delete

相关推荐

  1. sap报表导入查询数据检查

    2024-01-11 01:02:02       43 阅读
  2. SAP-MM-库龄报表

    2024-01-11 01:02:02       37 阅读
  3. SAP ABAP EXCEL 下载模板并导入

    2024-01-11 01:02:02       65 阅读
  4. MySQL导入/导出数据

    2024-01-11 01:02:02       36 阅读
  5. mysql数据导出导入

    2024-01-11 01:02:02       49 阅读
  6. mongoexport导出聚合查询的mongo数据

    2024-01-11 01:02:02       23 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-11 01:02:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-11 01:02:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-11 01:02:02       87 阅读
  4. Python语言-面向对象

    2024-01-11 01:02:02       96 阅读

热门阅读

  1. 【笔记】Helm-2 如何使用-2 同步你的仓库

    2024-01-11 01:02:02       62 阅读
  2. linux网络

    2024-01-11 01:02:02       48 阅读
  3. LeetCode 2723. 两个 Promise 对象相加

    2024-01-11 01:02:02       48 阅读
  4. 并发编程之JUC并发工具类上

    2024-01-11 01:02:02       54 阅读
  5. 算法笔记:全排列

    2024-01-11 01:02:02       53 阅读
  6. Hive之set参数大全-3

    2024-01-11 01:02:02       41 阅读