宏申's profileClick's BlogPhotosBlogListsMore Tools Help

Blog


    January 24

    DELETE APPLICATION LOG ACCORDING TO NUMBER

      REPORT  zctest02.

    TABLES balhdr.
    DATA: it_handle TYPE bal_t_logh.

    SELECT-OPTIONS s_num FOR balhdr-lognumber OBLIGATORY.

    SELECT log_handle
      INTO TABLE it_handle
      FROM balhdr
     WHERE lognumber IN s_num.
    IF sy-subrc <> 0.
      MESSAGE 'HAVE NO SUCH NUMBER!' TYPE 'S' DISPLAY LIKE 'E'.
      EXIT.
    ENDIF.

    CALL FUNCTION 'BAL_DB_DELETE'
      EXPORTING
        i_t_log_handle           = it_handle
      EXCEPTIONS
        no_logs_specified        = 1
        OTHERS                   = 2.
    IF sy-subrc = 0.
      MESSAGE 'DELETED SUCCESSFULLY!' TYPE 'S'.
    ELSE.
      MESSAGE ID sy-msgid TYPE 'S'  NUMBER sy-msgno DISPLAY LIKE 'E'
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
     

    Application Log: create

    T-CODE:

    SLG0  创建对象

    SLG1  察看日志

    slg1

    REPORT  zctest01.

    DATA: wa_log TYPE bal_s_log,
          wa_msg TYPE bal_s_msg.

    wa_log-object = 'ZCTEST01'.
    wa_log-alprog = sy-cprog.


    CALL FUNCTION 'BAL_LOG_CREATE'
      EXPORTING
        i_s_log                       = wa_log
     EXCEPTIONS
       log_header_inconsistent       = 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.

    wa_msg-msgty = 'E'.
    wa_msg-msgid = '00'.
    wa_msg-msgno = '001'.
    wa_msg-msgv1 = 'MSGV1'.
    wa_msg-msgv2 = 'MSGV2'.
    wa_msg-msgv3 = 'MSGV3'.
    wa_msg-msgv4 = 'MSGV4'.

    CALL FUNCTION 'BAL_LOG_MSG_ADD'
      EXPORTING
        i_s_msg                   = wa_msg
     EXCEPTIONS
       log_not_found             = 1
       msg_inconsistent          = 2
       log_is_full               = 3
       OTHERS                    = 4.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

    wa_msg-msgty = 'S'.
    wa_msg-msgid = '00'.
    wa_msg-msgno = '001'.
    wa_msg-msgv1 = 'AA'.
    wa_msg-msgv2 = 'BB'.
    wa_msg-msgv3 = 'CC'.
    wa_msg-msgv4 = 'DD'.

    CALL FUNCTION 'BAL_LOG_MSG_ADD'
      EXPORTING
        i_s_msg                   = wa_msg
     EXCEPTIONS
       log_not_found             = 1
       msg_inconsistent          = 2
       log_is_full               = 3
       OTHERS                    = 4.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

    CALL FUNCTION 'BAL_DB_SAVE'
      EXPORTING
        i_save_all             = 'X'
      EXCEPTIONS
        log_not_found          = 1
        save_not_allowed       = 2
        numbering_error        = 3
        OTHERS                 = 4.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

    November 06

    娱乐项目,更改logo

    1、输入Tcodesmw0;菜单:工具/web开发/web资源库
    2
    、选择WebRFC应用程序的二进制数据,回车;
    3
    、在软件包中输入zbc0,点击执行;
    4
    、点击新建,创建对象;
    5
    、对象名称输入zlogo,说明随便输入,点击右箭头,输入文件;
    6
    、选择想要显示的图片文件;
    7
    、开发类输入zbc0,保存;
    8
    、提交请求,点击对号继续;
    9
    zlogo资源对象已经添加成功;
    10
    、执行Tcodesm30
    11
    、表/视图输入SSM_CUST,点击维护;
    12
    、在START_IMAGE项中输入ZLOGO(刚才建立的对象名);
    13
    、保存,退出,重新登陆;注意事项:如果没有出现Logo图片,请执行sm30,表/视图输入SSM_CUST,点击传输;图片不要太大。

    about unicode in abap

    *check if the system is unicode
    IF cl_abap_char_utilities=>charsize = 1.
       WRITE: 'This system is non-Unicode'(000).
    ELSE.
       WRITE: 'This system is Unicode'(001).
    ENDIF.
    *returns the hexadecimal unicode value for a character
    CL_ABAP_CONV_OUT_CE=>UCCP
    *returns a character for a unicode code point
    CL_ABAP_CONV_IN_CE=>UCCP
     
    October 24

    日期型F4帮助:f4_date

    *需求:只有显示年月,但要有日期的search help
    PARAMETERS:p1(6TYPE c.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p1.
      DATA:l_date TYPE sy-datum.
      CALL FUNCTION 'F4_DATE'
        EXPORTING
          date_for_first_month         = sy-datum
        IMPORTING
          select_date                  = l_date
        EXCEPTIONS
          calendar_buffer_not_loadable = 1
          date_after_range             = 2
          date_before_range            = 3
          date_invalid                 = 4
          factory_calendar_not_found   = 5
          holiday_calendar_not_found   = 6
          parameter_conflict           = 7
          OTHERS                       = 8.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
      p1 = l_date+0(6).
    October 18

    YM的算号器,很好很强大

    REPORT  z_testym15                                                  .
    PARAMETERS:
      sys_id(3) DEFAULT '000'    ,
      sys_numb(2) DEFAULT '00'  ,
      msg_ser(15)  DEFAULT 'SUPERJXY' ,
      ins_no(10) DEFAULT '0000000000'.
    START-OF-SELECTION.
      DATA key(10).
      PERFORM get_sp_value
                USING
                  sys_id
                  sys_numb
                  msg_ser
                  ins_no
                CHANGING
                  key.
    END-OF-SELECTION.
      WRITE key.
    *&---------------------------------------------------------------------*
    *&      Form  get_sp_value
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->P_PF_SID  text
    *      -->P_PF_SYSNO  text
    *      -->P_PF_SERVER  text
    *      <--P_PF_VALUE  text
    *----------------------------------------------------------------------*
    FORM get_sp_value USING    p_pf_sid
                               p_pf_sysno
                               p_pf_server
                               p_pf_instno
                      CHANGING p_pf_value.
      CONSTANTS: lc_part_len TYPE i VALUE 5,
                 lc_pw_len   TYPE i VALUE 10,
                 lc_allowed_chars(38) TYPE c VALUE
                 '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_'.

      DATA: lf_string(20)        TYPE c,
            lf_key               TYPE i,
            lf_part(lc_part_len) TYPE c,
            lf_finalf(lc_pw_len) TYPE c,
            lf_finalx            TYPE xstring,
            lf_xbuffer           TYPE xstring,
            lf_opf(10)           TYPE c,
            lf_langu             LIKE sy-langu,
            lf_subrc             LIKE sy-subrc,
            lf_len               TYPE i,
            lo_conv_to_x         TYPE REF TO cl_abap_conv_out_ce.
      CLEAR: lf_string, lf_finalx, lf_opf.
      CONCATENATE p_pf_sid p_pf_sysno p_pf_server INTO lf_string.
    * Large letters only
      TRANSLATE lf_string TO UPPER CASE.
      lf_langu = sy-langu.
      SET LOCALE LANGUAGE 'E'.
      lo_conv_to_x = cl_abap_conv_out_ce=>create( encoding = '1100' ).
      lf_len = STRLEN( lf_string ).
      IF lf_string(lf_len) CN lc_allowed_chars.
      ELSE.
    * Fold the input string to a lc_part_len long string
        WHILE lf_len > 0.
          lf_part = lf_string(lc_part_len).
          SHIFT lf_string BY lc_part_len PLACES.
          lf_len = STRLEN( lf_string ).
          CALL METHOD lo_conv_to_x->reset.
          CALL METHOD lo_conv_to_x->write( data = lf_part n = -1 ).
          lf_xbuffer = lo_conv_to_x->get_buffer( ).
          lf_finalx = lf_finalx BIT-XOR lf_xbuffer.
        ENDWHILE.
        lf_key = 12.
        PERFORM scramble USING      lf_finalx
                                    lf_key
                                    lc_part_len
                           CHANGING lf_finalf
                                    lf_subrc.
        IF NOT lf_finalf IS INITIAL.
          p_pf_value = lf_finalf.
        ELSE.
          CLEAR p_pf_value.
        ENDIF.
      ENDIF.
    ENDFORM.                    "get_sp_value
    *&---------------------------------------------------------------------*
    *&      Form  scramble
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->P_LF_FINALX  text
    *      -->P_LF_KEY  text
    *      -->P_LC_PART_LEN  text
    *      <--P_LF_finalf  text
    *      <--P_LF_SUBRC  text
    *----------------------------------------------------------------------*
    FORM scramble USING    iv_xstring TYPE xstring
                           iv_key TYPE i
                           iv_src_len TYPE i
                  CHANGING lf_finalf
                           lf_subrc LIKE sy-subrc.
      CONSTANTS: lc_max_len    TYPE i VALUE 20,
                 lc_mask(4)    TYPE x VALUE '0000003F',
                 lc_random(64) TYPE x VALUE
                          'F0ED53B83244F1F876C67959FD4F13A2' &
                          'C15195EC5483C234774943A27DE26596' &
                          '5E5398789A17A33CD383A8B829FBDCA5' &
                          '55D702778413ACDDF9B83116610E6DFA'.
      DATA: lv_key_index(4)  TYPE x,
            lv_rand_index(4) TYPE x,
            lv_xkey(4)       TYPE x,
            lv_xkey_shl_1(4) TYPE x,
            lv_xkey_shr_5(4) TYPE x,
            lv_scramble_byte TYPE x,
            lv_dest(lc_max_len) TYPE x,
            lv_index         TYPE i,
            lv_len           TYPE i.
      CLEAR lf_subrc.
      IF iv_src_len EQ 0. EXIT. ENDIF.
      lv_len = XSTRLEN( iv_xstring ).
      IF iv_src_len GT lc_max_len OR
         iv_src_len GT lv_len.
        lf_subrc = 2.
        EXIT.
      ENDIF.
      lv_xkey       = iv_key.
      lv_xkey_shl_1 = iv_key * 2.
      lv_xkey_shr_5 = iv_key DIV 32.
      lv_rand_index = lv_xkey BIT-XOR lv_xkey_shr_5 BIT-XOR lv_xkey_shl_1.
      lv_rand_index = lv_rand_index BIT-AND lc_mask.
      lv_index = 0.
      DO iv_src_len TIMES.
        CATCH SYSTEM-EXCEPTIONS compute_int_times_overflow = 1.
          lv_key_index = ( iv_key * lv_index * lv_index ) - lv_index.
        ENDCATCH.
        IF sy-subrc <> 0.
          lf_subrc = 1.
          EXIT.
        ENDIF.
        lv_scramble_byte = lc_random+lv_rand_index(1) BIT-XOR
                           lv_key_index+3(1).
        lv_dest+lv_index(1) = iv_xstring+lv_index(1) BIT-XOR
                              lv_scramble_byte.
        lv_index = lv_index + 1.
        lv_rand_index = lv_rand_index + 1.
        lv_rand_index = lv_rand_index BIT-AND lc_mask.
      ENDDO.
      IF lf_subrc <> 0.
        EXIT.
      ENDIF.
      WRITE lv_dest(iv_src_len) TO lf_finalf.
    ENDFORM.                    " scramble
    October 16

    在top_of_page事件中实现超过60位可打印的alv header(grid)

        因为在 I_CALLBACK_HTML_TOP_OF_PAGE 中用cl_dd_document创建的alv头不能打印,而用REUSE_ALV_COMMENTARY_WRITE在top_of_page中输出的头虽然可以打印,但SLIS_T_LISTHEADER-INFO只有60位,有一定的局限性。所以在需要输出更长文本时,可以在top_of_page中使用以下代码实现
     
      FORM f_top_of_page .
      DATA: lr_content     TYPE REF TO cl_salv_form_element,
            lr_rows        TYPE REF TO cl_salv_form_layout_grid,
            lr_row         TYPE REF TO cl_salv_form_layout_flow,
            lr_grid_status TYPE REF TO cl_salv_form_layout_grid.
      DATA: l_row TYPE i VALUE '1'.
      DATA: l_string TYPE string.
      CREATE OBJECT lr_rows.
      lr_content = lr_rows.
    * 需要输出的文本
      l_string =  '1234567890abcdefgh1234567890abcdefgh'.
    * 相当于H (Header)
      lr_row = lr_rows->add_row( ).
      lr_row->create_header_information( text = l_string ).

      lr_row = lr_rows->add_row( ).
      lr_row = lr_rows->add_row( ).
      lr_grid_status = lr_row->create_grid( ).

    * 相当于S(Selection)
      lr_grid_status->create_label(
        row    = l_row
        column = 1
        text   = l_string ).        " Key
      lr_grid_status->create_text(
        row    = l_row
        column = 2
        text   = l_string ).        " Info

      lr_grid_status->create_text(
        row    = l_row
        column = 3
        text   = l_string ).        " Info
      ADD 1 TO l_row.
      lr_grid_status->create_label(
        row    = l_row
        column = 1
        text   = l_string ).

      lr_row = lr_rows->add_row( ).
      lr_row = lr_rows->add_row( ).
    * 相当于A (Action)
      lr_row->create_action_information( text = l_string ).


      cl_salv_form_content=>set( lr_content ).
    ENDFORM.                    " F_TOP_OF_PAGE
    October 10

    在user command事件中改变alv grid某列的显示模式(checkbox变普通)

    建一个status命名stu_100,建一个按钮ucomm为CHANGE
     
    *&---------------------------------------------------------------------*
    *& Report  ZCTEST15
    *&
    *&---------------------------------------------------------------------*
    *& 在user command事件中改变alv grid某列的显示模式(checkbox变普通)
    *& by click 2007.10.10
    *&---------------------------------------------------------------------*
    REPORT  zctest15 NO STANDARD PAGE HEADING.
    TYPE-POOLS slis.
    DEFINE mac_field.
      clear iw_fieldcat.
      iw_fieldcat-col_pos   = &1.
      iw_fieldcat-fieldname = &2.
      iw_fieldcat-seltext_l = &3.
      iw_fieldcat-intlen    = &4.
      iw_fieldcat-checkbox  = &5.
      iw_fieldcat-edit      = &6.
      append iw_fieldcat to it_fieldcat.
    END-OF-DEFINITION.
    TYPES:
      BEGIN OF ty_data,
        chk TYPE c,
        para1 TYPE char10,
        para2 TYPE char10,
      END OF ty_data.

    DATA:
      it_data TYPE TABLE OF ty_data,
      iw_data TYPE ty_data,
      it_exclude TYPE ui_functions,
      iw_exclude TYPE ui_func,
      iw_layout   TYPE slis_layout_alv,
      it_fieldcat TYPE slis_t_fieldcat_alv,
      iw_fieldcat TYPE slis_fieldcat_alv.
    DATA:
      w_repid TYPE sy-repid VALUE sy-repid.
    INITIALIZATION.
      mac_field : '1' 'CHK'   '选择' '1'   'X'   'X',
                  '2' 'PARA1' '变量1' '10' space space,
                  '3' 'PARA2' '变量2' '10' space space.
      iw_layout-colwidth_optimize = 'X'.
    START-OF-SELECTION.
      DO 10 TIMES.
        CLEAR iw_data.
        iw_data-para1 = sy-index.
        iw_data-para2 = sy-index * sy-index.
        APPEND iw_data TO it_data.
      ENDDO.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
          is_layout                = iw_layout
          it_fieldcat              = it_fieldcat
          i_callback_program       = w_repid
          i_callback_pf_status_set = 'F_STATUS'
          i_callback_user_command  = 'F_UCOMM'
        TABLES
          t_outtab                 = it_data
        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.
    *&---------------------------------------------------------------------*
    *&      Form  F_STATUS
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM f_status USING lit_extab TYPE slis_t_extab.
      SET PF-STATUS 'STU_100'.
    ENDFORM.                    " F_STATUS
    *&---------------------------------------------------------------------*
    *&      Form  F_UCOMM
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM f_ucomm USING l_ucomm LIKE sy-ucomm
                       liw_selfield TYPE slis_selfield .
      CASE l_ucomm.
        WHEN 'CHANGE'.
          PERFORM f_change.
      ENDCASE.
    ENDFORM.                    " F_UCOMM
    *&---------------------------------------------------------------------*
    *&      Form  f_change
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM f_change .
      DATA: ref_grid TYPE REF TO cl_gui_alv_grid.
      DATA: liw_layout   TYPE lvc_s_layo,
            lit_fieldcat TYPE lvc_t_fcat,
            liw_fieldcat TYPE lvc_s_fcat.
    * 取得当前alv的grid和fieldcat
      CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
        IMPORTING
          e_grid          = ref_grid
          et_fieldcat_lvc = lit_fieldcat.
    * 更新数据到内表
      CALL METHOD ref_grid->check_changed_data.
    * 更改fieldcat
      READ TABLE lit_fieldcat INTO liw_fieldcat INDEX 1.
      liw_fieldcat-checkbox = space.
      liw_fieldcat-edit = space.
      MODIFY lit_fieldcat FROM liw_fieldcat INDEX 1.
    * 重新显示alv
      CALL METHOD ref_grid->set_frontend_fieldcatalog
        EXPORTING
          it_fieldcatalog = lit_fieldcat.


    * 以前走的老路,也可以实现,但是复杂了点
    ** 隐藏toolbar
    *  liw_layout-no_toolbar = 'X'.
    ** 重新显示alv
    *  CALL METHOD ref_grid->set_table_for_first_display
    *    EXPORTING
    *      is_layout       = liw_layout
    *    CHANGING
    *      it_outtab       = it_data
    *      it_fieldcatalog = lit_fieldcat.
    ENDFORM.                    " f_change
    September 29

    用OO方法开发ALV(已实现DropdownList,纵向alv head,double_click、top_of_page事件,不断完善中)

    *其他操作:
    *1.建立屏幕100,在100上画一个custom control命名为cont1
    *2.定义一个status命名为stu_0100
    REPORT zctest13.
    CLASS cl_events DEFINITION DEFERRED.
    TABLES: kna1.
    DATA: save_ok TYPE sy-ucomm,
          ok_code TYPE sy-ucomm,
          w_fname TYPE scrfname VALUE 'CONT1',
          w_grid  TYPE REF TO cl_gui_alv_grid,
          w_cont  TYPE REF TO cl_gui_custom_container,
          it_fieldcat TYPE lvc_t_fcat,
          iw_layout TYPE lvc_s_layo,
          w_receiver TYPE REF TO cl_events,
          it_exclude TYPE ui_functions.
    DATA: w_doc TYPE REF TO cl_dd_document,
          w_splitter TYPE REF TO cl_gui_splitter_container,
          w_viewer TYPE REF TO cl_gui_html_viewer,
          w_head TYPE REF TO cl_gui_container,
          w_body TYPE REF TO cl_gui_container.
    DATA: it_kna1 TYPE TABLE OF kna1,
          iw_kna1 TYPE kna1.
    *----------------------------------------------------------------------*
    *       CLASS cl_events DEFINITION
    *----------------------------------------------------------------------*
    *
    *----------------------------------------------------------------------*
    CLASS cl_events DEFINITION.
      PUBLIC SECTION.
        METHODS handle_double_click FOR EVENT double_click
          OF cl_gui_alv_grid IMPORTING e_row e_column.
        METHODS handle_top_of_page FOR EVENT top_of_page
          OF cl_gui_alv_grid IMPORTING e_dyndoc_id.
    ENDCLASS.                    "cl_events DEFINITION
    *----------------------------------------------------------------------*
    *       CLASS cl_events IMPLEMENTATION
    *----------------------------------------------------------------------*
    CLASS cl_events IMPLEMENTATION.
      METHOD handle_double_click.
        PERFORM f_double_click USING e_row.
      ENDMETHOD.                    "handle_double_click
      METHOD handle_top_of_page.
        PERFORM f_top_of_page  USING e_dyndoc_id.
      ENDMETHOD.                    "handle_top_of_page
    ENDCLASS.                    "cl_events DEFINITION
    SELECT-OPTIONS s_kunnr FOR kna1-kunnr.
    START-OF-SELECTION.
      SELECT *
        INTO CORRESPONDING FIELDS OF TABLE it_kna1
        FROM kna1
       WHERE kunnr IN s_kunnr.
      CALL SCREEN 0100.
    *&---------------------------------------------------------------------*
    *&      Module  STATUS_0100  OUTPUT
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    MODULE status_0100 OUTPUT.
      SET PF-STATUS 'STU_0100'.
      IF w_cont IS INITIAL.
        PERFORM f_create_alv.
      ENDIF.
    ENDMODULE.                 " STATUS_0100  OUTPUT
    *&---------------------------------------------------------------------*
    *&      Module  USER_COMMAND_0100  INPUT
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    MODULE user_command_0100 INPUT.
      save_ok = ok_code.
      CLEAR ok_code.
      CASE save_ok.
        WHEN 'SAVE'.
          CALL METHOD w_grid->check_changed_data.
      ENDCASE.
    ENDMODULE.                 " USER_COMMAND_0100  INPUT
    *&---------------------------------------------------------------------*
    *&      Module  CANCEL  INPUT
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    MODULE cancel INPUT.
      LEAVE TO SCREEN 0.
    ENDMODULE.                 " CANCEL  INPUT
    *&---------------------------------------------------------------------*
    *&      Form  f_create_alv
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM f_create_alv .
      DATA: lw_line TYPE i,
            liw_fieldcat TYPE lvc_s_fcat.
      CREATE OBJECT w_cont
        EXPORTING
          container_name = w_fname.
      CREATE OBJECT w_doc.
    *    EXPORTING
    *      style = 'ALV_GRID'.
      CREATE OBJECT w_splitter
        EXPORTING
          parent  = w_cont
          rows    = 1
          columns = 2.
    * 分配容器
      CALL METHOD w_splitter->get_container
        EXPORTING
          row       = 1
          column    = 1
        RECEIVING
          container = w_head.
      CALL METHOD w_splitter->get_container
        EXPORTING
          row       = 1
          column    = 2
        RECEIVING
          container = w_body.
    * 设定左边容器初始宽度
      CALL METHOD w_splitter->set_column_width
        EXPORTING
          id    = 1
          width = 45.
      CREATE OBJECT w_grid
        EXPORTING
          i_parent = w_body.
    *  CALL METHOD w_grid->register_edit_event
    *    EXPORTING
    *      i_event_id = cl_gui_alv_grid=>mc_evt_enter.
      CREATE OBJECT w_receiver.
      SET HANDLER w_receiver->handle_double_click FOR w_grid.
      SET HANDLER w_receiver->handle_top_of_page  FOR w_grid.
      CALL METHOD cl_gui_control=>set_focus
        EXPORTING
          control = w_grid.
      CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
        EXPORTING
          i_structure_name = 'KNA1'
        CHANGING
          ct_fieldcat      = it_fieldcat.
      DESCRIBE TABLE it_fieldcat LINES lw_line.
      DELETE it_fieldcat FROM 9 TO lw_line.
      READ TABLE it_fieldcat INTO liw_fieldcat INDEX 5.
      liw_fieldcat-edit = 'X'.
      liw_fieldcat-drdn_hndl = '1'.
      liw_fieldcat-checktable = '!'.
      MODIFY it_fieldcat FROM liw_fieldcat INDEX 5.
      READ TABLE it_fieldcat INTO liw_fieldcat INDEX 6.
      liw_fieldcat-edit = 'X'.
      liw_fieldcat-drdn_hndl = '1'.
      liw_fieldcat-checktable = '!'.
      MODIFY it_fieldcat FROM liw_fieldcat INDEX 6.
      PERFORM f_fill_exclude.
      PERFORM f_dropdown.
      CALL METHOD w_grid->set_table_for_first_display
        EXPORTING
          it_toolbar_excluding = it_exclude
        CHANGING
          it_outtab            = it_kna1
          it_fieldcatalog      = it_fieldcat.
      CALL METHOD w_grid->set_ready_for_input
        EXPORTING
          i_ready_for_input = 1.
    *  CALL METHOD w_doc->initialize_document.
      CALL METHOD w_grid->list_processing_events
        EXPORTING
          i_event_name = 'TOP_OF_PAGE'
          i_dyndoc_id  = w_doc.
    ENDFORM.                    " f_create_alv
    *&---------------------------------------------------------------------*
    *&      Form  F_FILL_EXCLUDE
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM f_fill_exclude .
      DATA liw_exclude TYPE ui_func.
      liw_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row.
      APPEND liw_exclude TO it_exclude.
      liw_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row.
      APPEND liw_exclude TO it_exclude.
      liw_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.
      APPEND liw_exclude TO it_exclude.
      liw_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.
      APPEND liw_exclude TO it_exclude.
      liw_exclude = cl_gui_alv_grid=>mc_fc_loc_move_row.
      APPEND liw_exclude TO it_exclude.
      liw_exclude = cl_gui_alv_grid=>mc_fc_loc_copy.
      APPEND liw_exclude TO it_exclude.
      liw_exclude = cl_gui_alv_grid=>mc_fc_loc_cut.
      APPEND liw_exclude TO it_exclude.
      liw_exclude = cl_gui_alv_grid=>mc_fc_loc_paste.
      APPEND liw_exclude TO it_exclude.
      liw_exclude = cl_gui_alv_grid=>mc_fc_loc_paste_new_row.
      APPEND liw_exclude TO it_exclude.
      liw_exclude = cl_gui_alv_grid=>mc_fc_loc_undo.
      APPEND liw_exclude TO it_exclude.
    ENDFORM.                    " F_FILL_EXCLUDE
    *&---------------------------------------------------------------------*
    *&      Form  F_DROPDOWN
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM f_dropdown .
      DATA: lit_dropdown TYPE lvc_t_drop,
            liw_dropdown TYPE lvc_s_drop.
      liw_dropdown-handle = '1'.
      liw_dropdown-value  = '1'.
      APPEND liw_dropdown TO lit_dropdown.
      liw_dropdown-handle = '1'.
      liw_dropdown-value  = '2'.
      APPEND liw_dropdown TO lit_dropdown.
      liw_dropdown-handle = '1'.
      liw_dropdown-value  = '3'.
      APPEND liw_dropdown TO lit_dropdown.
      liw_dropdown-handle = '1'.
      liw_dropdown-value  = '4'.
      APPEND liw_dropdown TO lit_dropdown.
      liw_dropdown-handle = '1'.
      liw_dropdown-value  = '5'.
      APPEND liw_dropdown TO lit_dropdown.
      liw_dropdown-handle = '1'.
      liw_dropdown-value  = '6'.
      APPEND liw_dropdown TO lit_dropdown.
      liw_dropdown-handle = '1'.
      liw_dropdown-value  = '7'.
      APPEND liw_dropdown TO lit_dropdown.
      liw_dropdown-handle = '1'.
      liw_dropdown-value  = '8'.
      APPEND liw_dropdown TO lit_dropdown.
      liw_dropdown-handle = '1'.
      liw_dropdown-value  = '9'.
      APPEND liw_dropdown TO lit_dropdown.
      liw_dropdown-handle = '1'.
      liw_dropdown-value  = '10'.
      APPEND liw_dropdown TO lit_dropdown.
      liw_dropdown-handle = '1'.
      liw_dropdown-value  = '11'.
      APPEND liw_dropdown TO lit_dropdown.
      liw_dropdown-handle = '1'.
      liw_dropdown-value  = '12'.
      APPEND liw_dropdown TO lit_dropdown.
      liw_dropdown-handle = '1'.
      liw_dropdown-value  = '13'.
      APPEND liw_dropdown TO lit_dropdown.
      liw_dropdown-handle = '1'.
      liw_dropdown-value  = '14'.
      APPEND liw_dropdown TO lit_dropdown.
      liw_dropdown-handle = '1'.
      liw_dropdown-value  = '15'.
      APPEND liw_dropdown TO lit_dropdown.
      CALL METHOD w_grid->set_drop_down_table
        EXPORTING
          it_drop_down = lit_dropdown.
    ENDFORM.                    " F_DROPDOWN
    *&---------------------------------------------------------------------*
    *&      Form  F_DOUBLE_CLICK
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM f_double_click USING f_row TYPE lvc_s_row.
      DATA: w_kunnr TYPE kunnr.
      CLEAR iw_kna1.
      READ TABLE it_kna1 INTO iw_kna1 INDEX f_row-index.
      CHECK iw_kna1-kunnr IS NOT INITIAL.
      w_kunnr = iw_kna1-kunnr.
      SET PARAMETER ID 'KUN' FIELD w_kunnr.
      CALL TRANSACTION 'VD02' AND SKIP FIRST SCREEN.
      CLEAR it_kna1.
      SELECT *
        INTO CORRESPONDING FIELDS OF TABLE it_kna1
        FROM kna1
       WHERE kunnr IN s_kunnr.
      CALL METHOD w_grid->refresh_table_display.
    ENDFORM.                    " F_DOUBLE_CLICK
    *&---------------------------------------------------------------------*
    *&      Form  F_TOP_OF_PAGE
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM f_top_of_page  USING f_doc TYPE REF TO cl_dd_document.
      DATA: lw_back TYPE sdydo_key VALUE space.
      CALL METHOD f_doc->add_text
        EXPORTING
          text      = '01 资产减值准备'
          sap_style = 'HEADING'.                "大字黑体
      CALL METHOD f_doc->new_line.
      CALL METHOD f_doc->add_text
        EXPORTING
          text         = '02 固定资产折旧、油气资产折耗、生产性生物资产折旧'
          sap_emphasis = 'EMPHASIS'.               "斜体
      IF w_viewer IS INITIAL.
        CREATE OBJECT w_viewer
          EXPORTING
            parent = w_head.
      ENDIF.
      CALL FUNCTION 'REUSE_ALV_GRID_COMMENTARY_SET'
        EXPORTING
          document = w_doc
          bottom   = space.
      CALL METHOD w_doc->merge_document.
      CALL METHOD w_doc->set_document_background
        EXPORTING
          picture_id = lw_back.
      w_doc->html_control = w_viewer.
      CALL METHOD w_doc->display_document
        EXPORTING
          reuse_control = 'X'
          parent        = w_head.
    ENDFORM.                    " F_TOP_OF_PAGE
    September 28

    自定义f4_help并更新屏幕comment

    REPORT zctest11 LINE-SIZE 255 MESSAGE-ID zzzzz01.
    TYPES:
      BEGIN OF ty_kna1,
        kunnr TYPE kunnr,
        name1 TYPE name1_gp,
      END OF ty_kna1.
    DATA: iw_kna1 TYPE ty_kna1,
          it_kna1 TYPE TABLE OF ty_kna1,
          iw_dfies TYPE dfies,
          it_dfies TYPE TABLE OF dfies,
          iw_dynp TYPE dynpread,
          it_dynp TYPE TABLE OF dynpread,
          iw_return TYPE ddshretval,
          it_return TYPE TABLE OF ddshretval.
    DATA: w_position TYPE i,
          w_offset   TYPE i.
    PARAMETERS: p_kunnr(10) TYPE c.
    SELECTION-SCREEN COMMENT 50(40) w_name FOR FIELD p_kunnr.
    INITIALIZATION.
      PERFORM f_set_dfies USING : 'KUNNR',
                                  'NAME1'.
    AT SELECTION-SCREEN.
      SELECT SINGLE name1
        INTO w_name
        FROM kna1
       WHERE kunnr = p_kunnr.
      CHECK sy-subrc <> 0.
      CLEAR w_name.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_kunnr.
      CLEAR: it_kna1,it_return.
      SELECT kunnr
             name1
        INTO CORRESPONDING FIELDS OF TABLE it_kna1
        FROM kna1.
      CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
        EXPORTING
          retfield               = 'KUNNR'
          dynpprog               = sy-repid
          dynpnr                 = sy-dynnr
          dynprofield            = 'P_KUNNR'
          value_org              = 'S'
        TABLES
          value_tab              = it_kna1
          field_tab              = it_dfies
          return_tab             = it_return
        EXCEPTIONS
          parameter_error        = 1
          no_values_found        = 2
          OTHERS                 = 3.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
      CHECK it_return IS NOT INITIAL.
      CLEAR: iw_dynp,iw_kna1,it_dynp.
      READ TABLE it_return INTO iw_return INDEX 1.

      READ TABLE it_kna1 INTO iw_kna1 WITH KEY kunnr = iw_return-fieldval.
                                                               "#EC *
      CHECK sy-subrc = 0.
      iw_dynp-fieldname  = 'P_KUNNR'.
      iw_dynp-fieldvalue = iw_return-fieldval.
      APPEND iw_dynp TO it_dynp.
      CLEAR iw_dynp.
      iw_dynp-fieldname  = 'W_NAME'.
      iw_dynp-fieldvalue = iw_kna1-name1.
      APPEND iw_dynp TO it_dynp.
      CALL FUNCTION 'DYNP_VALUES_UPDATE'
        EXPORTING
          dyname               = sy-repid
          dynumb               = sy-dynnr
        TABLES
          dynpfields           = it_dynp
        EXCEPTIONS
          invalid_abapworkarea = 1
          invalid_dynprofield  = 2
          invalid_dynproname   = 3
          invalid_dynpronummer = 4
          invalid_request      = 5
          no_fielddescription  = 6
          undefind_error       = 7
          OTHERS               = 8.
      CHECK sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    *&---------------------------------------------------------------------*
    *&      Form  f_set_dfies
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM f_set_dfies  USING    value(u_fname) TYPE c.
      DATA: l_fname TYPE dfies-lfieldname.
      l_fname = u_fname.
      w_position = w_position + 1.
      CALL FUNCTION 'DDIF_FIELDINFO_GET'
        EXPORTING
          tabname              = 'KNA1'
          lfieldname           = l_fname
        IMPORTING
          dfies_wa             = iw_dfies
        EXCEPTIONS
          not_found            = 1
          internal_error       = 2
          OTHERS               = 3.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
      CLEAR iw_dfies-tabname.
      iw_dfies-position = w_position.
      iw_dfies-reptext  = iw_dfies-fieldtext.
      iw_dfies-offset   = w_offset.
      w_offset = w_offset + iw_dfies-intlen.
      APPEND iw_dfies TO it_dfies.
    ENDFORM.                    " f_set_dfies

    web dynpro初体验

    http://help.sap.com/saphelp_erp2005/helpdata/en/79/002c2a0d43e645a39a89dd662b5f68/frameset.htm
    今天小试了一把,结果不知道什么原因没法看到结果,不知道是单位的路由原因还是操作系统的原因,看来只有回家试试了,不知道28是不是bisis 7.0的,hope。
    第一次操作的直观感受就是,和.net jbuilder等图形开发工具比起来还是麻烦了很多,不过想想毕竟人家不是专业搞这个的嘛。
    单位不能搞,只能回家搞了,看来以后3c时间是越来越少了。。。
    September 21

    在ABAP中使用simple transform创建XML文件

    *&---------------------------------------------------------------------*
    *& Report  ZCTEST06
    *& 在strans中创建simple transform
    *& 暂时没有找到创建xml component的方法
    *&---------------------------------------------------------------------*
    REPORT  zctest06.
    DATA:
      BEGIN OF iw_line,
        line1(10) TYPE c,
        line2(10) TYPE c,
      END OF iw_line,
      BEGIN OF iw_head,
        h1(10) TYPE c,
        h1_attr(10) TYPE c,
        h2(10) TYPE c,
        line LIKE TABLE OF iw_line,
      END OF iw_head,
      it_head LIKE TABLE OF iw_head,
      BEGIN OF it_xml OCCURS 0,
        line(100) TYPE c,
      END OF it_xml.
    DATA: w_xml TYPE string,
          w_len TYPE i,
          w_fname TYPE string.
    PARAMETERS: p_file(128) TYPE c OBLIGATORY LOWER CASE..
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
      PERFORM f_get_filename.
    START-OF-SELECTION.
      CLEAR: iw_line,iw_head.
      iw_head-h1 = 'head-1-1'.
      iw_head-h2 = 'head-1-2'.
      iw_head-h1_attr = '100'.
      iw_line-line1 = 'line-1-1-1'.
      iw_line-line2 = 'line-1-2-1'.
      APPEND iw_line TO iw_head-line.
      CLEAR iw_line.
      iw_line-line1 = 'line-1-1-2'.
      iw_line-line2 = 'line-1-2-2'.
      APPEND iw_line TO iw_head-line.
      APPEND iw_head TO it_head.
      CLEAR: iw_line,iw_head.
      iw_head-h1 = 'head-2-1'.
      iw_head-h2 = 'head-2-2'.
      iw_head-h1_attr = '200'.
      iw_line-line1 = 'line-2-1-1'.
      iw_line-line2 = 'line-2-2-1'.
      APPEND iw_line TO iw_head-line.
      CLEAR iw_line.
      iw_line-line1 = 'line-2-1-2'.
      iw_line-line2 = 'line-2-2-2'.
      APPEND iw_line TO iw_head-line.
      CLEAR iw_line.
      iw_line-line1 = 'line-2-1-3'.
      iw_line-line2 = 'line-2-2-3'.
      APPEND iw_line TO iw_head-line.
      APPEND iw_head TO it_head.
      CALL TRANSFORMATION zctest01
        SOURCE root = it_head
        RESULT XML w_xml.
      CALL FUNCTION 'SCMS_STRING_TO_FTEXT'
        EXPORTING
          text      = w_xml
        IMPORTING
          length    = w_len
        TABLES
          ftext_tab = it_xml.
      w_fname = p_file.
      CALL FUNCTION 'GUI_DOWNLOAD'
        EXPORTING
          filename                = w_fname
          filetype                = 'BIN'
        IMPORTING
          filelength              = w_len
        TABLES
          data_tab                = it_xml
        EXCEPTIONS
          file_write_error        = 1
          no_batch                = 2
          gui_refuse_filetransfer = 3
          invalid_type            = 4
          no_authority            = 5
          unknown_error           = 6
          header_not_allowed      = 7
          separator_not_allowed   = 8
          filesize_not_allowed    = 9
          header_too_long         = 10
          dp_error_create         = 11
          dp_error_send           = 12
          dp_error_write          = 13
          unknown_dp_error        = 14
          access_denied           = 15
          dp_out_of_memory        = 16
          disk_full               = 17
          dp_timeout              = 18
          file_not_found          = 19
          dataprovider_exception  = 20
          control_flush_error     = 21
          OTHERS                  = 22.
      IF sy-subrc = 0.
        WRITE 'OK'.
      ELSE.
        WRITE 'FALSE'.
      ENDIF.
    *&---------------------------------------------------------------------*
    *&      Form  F_GET_FILENAME
    *&---------------------------------------------------------------------*
    FORM f_get_filename .
      DATA: l_rc    TYPE i,
            it_file TYPE filetable.
      CALL METHOD cl_gui_frontend_services=>file_open_dialog
        EXPORTING
          initial_directory = 'D:\test'
          file_filter       = 'XML FIELS (*.xml)|*.xml|ALL FILES (*.*)|*.*'
        CHANGING
          file_table        = it_file
          rc                = l_rc.
      CHECK l_rc = 1.
      READ TABLE it_file INTO p_file INDEX 1.
    ENDFORM.                    " F_GET_FILENAME

    用cl_abap_typedescr、cl_abap_structdescr取得自定义工作区中的字段信息

    *&---------------------------------------------------------------------*
    *& Report  ZCTEST06
    *&---------------------------------------------------------------------*
    *& 主要使用cl_abap_typedescr=>describe_by_data方法
    *& 和子类cl_abap_structdescr中的components属性
    *& components包含以下信息
    *&     length    长度
    *&     decimals  小数
    *&     type_kind 类型
    *&     name      字段名
    *&---------------------------------------------------------------------*
    REPORT  zctest06.
    TYPE-POOLS abap.
    TYPES:
      BEGIN OF ty1,
        p1(10) TYPE c,
        p2(5)  TYPE n,
        p3(3)  TYPE p DECIMALS 2,
      END OF ty1.
    DATA: iw1 TYPE ty1,
          iw_comp TYPE abap_compdescr,
          ref_descr TYPE REF TO cl_abap_structdescr.
    ref_descr ?= cl_abap_typedescr=>describe_by_data( iw1 ).
    LOOP AT ref_descr->components INTO iw_comp.
      WRITE : /1 iw_comp-length,
              15 iw_comp-decimals,
              30 iw_comp-type_kind,
              45 iw_comp-name.
      CLEAR iw_comp.
    ENDLOOP.
    September 18

    使用VIEW_MAINTENANCE_CALL维护视图

    REPORT  zctest10.
    TABLES t001b.
    TYPES:
      BEGIN OF ty_mkoar,
        mkoar TYPE mkoar,
      END OF ty_mkoar.

    DATA: it_vimsellist TYPE TABLE OF vimsellist,
          iw_vimsellist TYPE vimsellist,
          it_vimexclfun TYPE TABLE OF vimexclfun,
          iw_vimexclfun TYPE vimexclfun.
    DATA: it_mkoar TYPE TABLE OF ty_mkoar,
          iw_mkoar TYPE ty_mkoar.
    DATA: w_flg TYPE c.

    PARAMETERS p_bukrs TYPE t001b-bukrs.

    SELECT-OPTIONS: s_mkoar FOR t001b-mkoar.

    START-OF-SELECTION.

      SELECT mkoar
        INTO CORRESPONDING FIELDS OF TABLE it_mkoar
        FROM t001b
       WHERE mkoar IN s_mkoar.

    *编辑过滤数据条件
      iw_vimsellist-viewfield = 'BUKRS'.
      iw_vimsellist-operator  = 'EQ'.
      iw_vimsellist-and_or    = 'AND'.
      iw_vimsellist-value     = p_bukrs.
      APPEND iw_vimsellist TO it_vimsellist.

      LOOP AT it_mkoar INTO iw_mkoar.
        iw_vimsellist-viewfield = 'MKOAR'.
        iw_vimsellist-operator  = 'EQ'.
        iw_vimsellist-and_or    = 'OR'.
        iw_vimsellist-value     = iw_mkoar-mkoar.
        APPEND iw_vimsellist TO it_vimsellist.
        CLEAR iw_mkoar.
      ENDLOOP.
    *屏蔽按钮(按T-CODE)
      iw_vimexclfun-function = 'NEWL'.
      APPEND iw_vimexclfun TO it_vimexclfun.
      iw_vimexclfun-function = 'KOPE'.
      APPEND iw_vimexclfun TO it_vimexclfun.
      iw_vimexclfun-function = 'DELE'.
      APPEND iw_vimexclfun TO it_vimexclfun.

      CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
        EXPORTING
          action                       = 'U'
          view_name                    = 'V_T001B'
        TABLES
          dba_sellist                  = it_vimsellist
          excl_cua_funct               = it_vimexclfun
        EXCEPTIONS
          client_reference             = 1
          foreign_lock                 = 2
          invalid_action               = 3
          no_clientindependent_auth    = 4
          no_database_function         = 5
          no_editor_function           = 6
          no_show_auth                 = 7
          no_tvdir_entry               = 8
          no_upd_auth                  = 9
          only_show_allowed            = 10
          system_failure               = 11
          unknown_field_in_dba_sellist = 12
          view_not_found               = 13
          maintenance_prohibited       = 14
          OTHERS                       = 15.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.

     

    使用SELECT_OPTIONS_RESTRICT对SELECT-OPTIONS进行限制

    REPORT  zctest16.
    TYPE-POOLS: sscr.
    TABLES: t001,mara.
    SELECT-OPTIONS: s_bukrs FOR t001-bukrs,
                    s_matnr FOR mara-matnr.
    INITIALIZATION.
    * 控制用结构ls_restrict的做成
      DATA: liw_restrict TYPE sscr_restrict.
      DATA: liw_optlist  TYPE sscr_opt_list,
            liw_ass      TYPE sscr_ass.
    * 自定义名称V1
      liw_optlist-name = 'V1'.
    * 允许'='
      liw_optlist-options-eq = 'X'.
    * 允许范围
      liw_optlist-options-bt = 'X'.
      APPEND  liw_optlist TO liw_restrict-opt_list_tab.
     
      CLEAR liw_optlist.
    * 自定义名称V2
      liw_optlist-name = 'V2'.
    * 允许'='
      liw_optlist-options-eq = 'X'.
      APPEND  liw_optlist TO liw_restrict-opt_list_tab.
      liw_ass-kind = 'S'.
      liw_ass-name = 'S_BUKRS'.
      liw_ass-sg_main = 'I'.
      liw_ass-op_main = 'V1'.
      APPEND  liw_ass TO liw_restrict-ass_tab.
      CLEAR liw_ass.
      liw_ass-kind = 'S'.
      liw_ass-name = 'S_MATNR'.
      liw_ass-sg_main = 'I'.
      liw_ass-op_main = 'V2'.
      APPEND  liw_ass TO liw_restrict-ass_tab.
      CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'
        EXPORTING
          restriction            = liw_restrict
        EXCEPTIONS
          too_late               = 1
          repeated               = 2
          selopt_without_options = 3
          selopt_without_signs   = 4
          invalid_sign           = 5
          empty_option_list      = 6
          invalid_kind           = 7
          repeated_kind_a        = 8
          OTHERS                 = 9.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF. 
    September 14

    在ABAP中使用XSLT创建XML文件

    *&---------------------------------------------------------------------*
    *& Report  ZCTEST14
    *&
    *&---------------------------------------------------------------------*
    *& TEST FOR XSLT
    *&
    *&---------------------------------------------------------------------*
    REPORT  zctest14.
    DATA:
      BEGIN OF iw_head,
        user_no TYPE char10,
        user_name TYPE char50,
      END OF iw_head,
      BEGIN OF iw_payee,
        account_payee TYPE char10,
        account_name TYPE char20,
        address TYPE char20,
        bank_name TYPE char20,
        bank_code TYPE char20,
      END OF iw_payee,
      BEGIN OF iw_payment,
        payment_type TYPE char20,
        id TYPE char10,
        date TYPE char10,
        explain TYPE char20,
        amount TYPE char10,
        amount_bill TYPE char10,
        account TYPE char10,
        bank_account TYPE char10,
        payee LIKE TABLE OF iw_payee,
        remit_no TYPE char10,
        budget_no TYPE char10,
        erp_no TYPE char10,
      END OF iw_payment,
      BEGIN OF iw_payment_set,
        operator TYPE char100,
        payment LIKE TABLE OF iw_payment,
      END OF iw_payment_set,
      BEGIN OF iw_data,
        wst_exg_version TYPE char5,
        head LIKE TABLE OF iw_head,
        payment_set LIKE TABLE OF iw_payment_set,
      END OF iw_data,
      BEGIN OF it_xml OCCURS 0,
        line(100) TYPE c,
      END OF it_xml.
    DATA: w_xml TYPE string,
          w_len TYPE i,
          w_fname TYPE string.

    PARAMETERS: p_file(128) TYPE c OBLIGATORY LOWER CASE..
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
      PERFORM f_get_filename.
    START-OF-SELECTION.
    * 装填数据
      CLEAR iw_data.
      iw_data-wst_exg_version = '300'.
      CLEAR iw_head.
      iw_head-user_no = '2'.
      iw_head-user_name = '客户名称(可空)'.
      APPEND iw_head TO iw_data-head.
      CLEAR iw_payment_set.
      CONCATENATE '<casher>录入人(可空)</casher>'
                  '     <checker>复核人(可空)</checker>'
             INTO iw_payment_set-operator
        SEPARATED BY cl_abap_char_utilities=>cr_lf.
      CLEAR iw_payment.
      iw_payment-payment_type = 'auto|inner|outer'.
      iw_payment-id           = '124'.
      iw_payment-date         = '2006-03-10'.
      iw_payment-explain      = '导入的内部转帐指令'.
      iw_payment-amount       = '5000'.
      iw_payment-amount_bill  = ''.
      iw_payment-account      = '21201'.
      iw_payment-bank_account = '102200501'.
      CLEAR iw_payee.
      iw_payee-account_payee = '21202'.
      iw_payee-account_name  = '九恒星科技'.
      iw_payee-address       = ''.
      iw_payee-bank_name     = ''.
      iw_payee-bank_code     = ''.
      APPEND iw_payee TO iw_payment-payee.
      iw_payment-remit_no     = '01'.
      iw_payment-budget_no    = ''.
      iw_payment-erp_no       = ''.
      APPEND iw_payment TO iw_payment_set-payment.
      CLEAR iw_payment.
      iw_payment-payment_type = 'auto|inner|outer'.
      iw_payment-id           = '125'.
      iw_payment-date         = '2006-03-10'.
      iw_payment-explain      = '导入对外支付指令'.
      iw_payment-amount       = '2000'.
      iw_payment-amount_bill  = ''.
      iw_payment-account      = '21201'.
      iw_payment-bank_account = '102200501'.
      CLEAR iw_payee.
      iw_payee-account_payee = '10221205005'.
      iw_payee-account_name  = '集团外单位'.
      iw_payee-address       = '北京'.
      iw_payee-bank_name     = '中国工商银行'.
      iw_payee-bank_code     = '01'.
      APPEND iw_payee TO iw_payment-payee.
      iw_payment-remit_no     = '01'.
      iw_payment-budget_no    = ''.
      iw_payment-erp_no       = 'ERP002'.
      APPEND iw_payment TO iw_payment_set-payment.
      APPEND iw_payment_set TO iw_data-payment_set.
    * call transformation
      CALL TRANSFORMATION zctest02
        SOURCE data = iw_data
        RESULT XML w_xml.

    * 表中的数据<>在传到STRANS中时会自动转换为'&lt;' '&gt;',所以在这里转回来
      REPLACE ALL OCCURRENCES OF '&lt;' IN w_xml WITH '<'.
      REPLACE ALL OCCURRENCES OF '&gt;' IN w_xml WITH '>'.
     
      CALL FUNCTION 'SCMS_STRING_TO_FTEXT'
        EXPORTING
          text      = w_xml
        IMPORTING
          length    = w_len
        TABLES
          ftext_tab = it_xml.
      w_fname = p_file.
      CALL FUNCTION 'GUI_DOWNLOAD'
        EXPORTING
          filename                        = w_fname
          filetype                        = 'BIN'
        IMPORTING
          filelength                      = w_len
        TABLES
          data_tab                        = it_xml
        EXCEPTIONS
          file_write_error                = 1
          no_batch                        = 2
          gui_refuse_filetransfer         = 3
          invalid_type                    = 4
          no_authority                    = 5
          unknown_error                   = 6
          header_not_allowed              = 7
          separator_not_allowed           = 8
          filesize_not_allowed            = 9
          header_too_long                 = 10
          dp_error_create                 = 11
          dp_error_send                   = 12
          dp_error_write                  = 13
          unknown_dp_error                = 14
          access_denied                   = 15
          dp_out_of_memory                = 16
          disk_full                       = 17
          dp_timeout                      = 18
          file_not_found                  = 19
          dataprovider_exception          = 20
          control_flush_error             = 21
          OTHERS                          = 22.
      IF sy-subrc = 0.
        WRITE 'OK'.
      ELSE.
        WRITE 'FALSE'.
      ENDIF.
    *&---------------------------------------------------------------------*
    *&      Form  F_GET_FILENAME
    *&---------------------------------------------------------------------*
    FORM f_get_filename .
      DATA: l_rc    TYPE i,
            it_file TYPE filetable,
            l_obj TYPE REF TO cl_gui_frontend_services.
      CREATE OBJECT l_obj.
      CALL METHOD l_obj->file_open_dialog
        EXPORTING
          initial_directory = 'D:\test'
        CHANGING
          file_table        = it_file
          rc                = l_rc.
      CHECK l_rc = 1.
      READ TABLE it_file INTO p_file INDEX 1.
    ENDFORM.                    " F_GET_FILENAME 
    September 09

    使用if_ixml 、if_ixml_document 、if_ixml_element创建本地xml文件

    *终于知道怎么创建comment了,原来有个if_ixml_comment
    *xml的结构: if_ixml > if_ixml_document > if_ixml_element
    *                                                  > if_ixml_comment
    *if_ixml_document、if_ixml_element、if_ixml_comment都包含属性 if_ixml_node
     
    REPORT  zctest13.
    DATA:
          it_file TYPE filetable,
          it_dlines TYPE dcxmllines.
    DATA: BEGIN OF iw_xml,
            line LIKE LINE OF it_dlines,
          END OF iw_xml,
          it_xml LIKE TABLE OF iw_xml.
    DATA:
      w_wst TYPE REF TO if_ixml_element,
      w_head TYPE REF TO if_ixml_element,
      w_paymentset TYPE REF TO if_ixml_element,
      w_payment TYPE REF TO if_ixml_element,
      w_operator TYPE REF TO if_ixml_element,
      w_payee TYPE REF TO if_ixml_element,
      w_comment TYPE REF TO if_ixml_comment,
      w_attribute TYPE REF TO if_ixml_attribute,
      w_document TYPE REF TO if_ixml_document,
      w_ixml TYPE REF TO if_ixml,
      w_rval TYPE i,
      w_size TYPE i,
      w_fname TYPE string,
      w_rc TYPE sy-subrc.
    PARAMETERS: p_file(128) TYPE c OBLIGATORY LOWER CASE.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
      CALL METHOD cl_gui_frontend_services=>file_open_dialog
        EXPORTING
          file_filter             = '*.XML,*.xml'
          initial_directory       = 'D:\test'
        CHANGING
          file_table              = it_file
          rc                      = w_rc
        EXCEPTIONS
          file_open_dialog_failed = 1
          cntl_error              = 2
          error_no_gui            = 3
          not_supported_by_gui    = 4
          OTHERS                  = 5.
      CHECK sy-subrc = 0.
      READ TABLE it_file INTO p_file INDEX 1.
    START-OF-SELECTION.
      w_fname = p_file.
      CLASS cl_ixml DEFINITION LOAD.
      w_ixml = cl_ixml=>create( ).
      CHECK NOT w_ixml IS INITIAL.
      w_document = w_ixml->create_document( ).
      w_wst = w_document->create_element( name = 'wst-exg').
      CALL METHOD w_wst->set_attribute
        EXPORTING
          name  = 'version'
          value = '300'
        RECEIVING
          rval  = w_rc.
      PERFORM f_add_element USING 'head'
                            CHANGING w_wst w_head.
      PERFORM f_element_add USING 'user-no'
                                  '2'
                         CHANGING w_head.
      PERFORM f_element_add USING 'user-name'
                                  '客户名称'
                         CHANGING w_head.
      PERFORM f_add_element USING 'payment-set'
                         CHANGING w_wst w_paymentset.
      PERFORM f_add_element USING 'operator'
                         CHANGING w_paymentset w_operator.
      w_comment = w_document->create_comment( 'this is a comment').
      CALL METHOD w_operator->append_child
        EXPORTING
          new_child = w_comment
        RECEIVING
          rval      = w_rval.
      PERFORM f_add_element USING 'payment'
                         CHANGING w_paymentset w_payment.
      CALL METHOD w_payment->set_attribute
        EXPORTING
          name  = 'type'
          value = 'auto|inner|outer'
        RECEIVING
          rval  = w_rc.
      PERFORM f_element_add USING 'id'
                                  '124'
                         CHANGING w_payment.
      PERFORM f_element_add USING 'date'
                                  '2006-03-10'
                         CHANGING w_payment.
      PERFORM f_element_add USING 'explain'
                                  '导入的内部转帐命令'
                         CHANGING w_payment.
      PERFORM f_element_add USING 'amount'
                                  '5000'
                         CHANGING w_payment.
      PERFORM f_element_add USING 'amount-bill'
                                  space
                         CHANGING w_payment.
      PERFORM f_element_add USING 'account'
                                  '21201'
                         CHANGING w_payment.
      PERFORM f_element_add USING 'bank-account'
                                  '102200501'
                         CHANGING w_payment.
      PERFORM f_add_element USING 'payee'
                         CHANGING w_payment w_payee.
      PERFORM f_element_add USING 'account-payee'
                                  '21202'
                         CHANGING w_payee.
      PERFORM f_element_add USING 'account-name'
                                  '九恒星科技'
                         CHANGING w_payee.
      PERFORM f_element_add USING 'address'
                                  space
                         CHANGING w_payee.
      PERFORM f_element_add USING 'band-name'
                                  space
                         CHANGING w_payee.
      PERFORM f_element_add USING 'bank-code'
                                  space
                         CHANGING w_payee.
      PERFORM f_element_add USING 'remit-no'
                                  '01'
                         CHANGING w_payment.
      PERFORM f_element_add USING 'budget-no'
                                  space
                         CHANGING w_payment.
      PERFORM f_element_add USING 'ERP-no'
                                  space
                         CHANGING w_payment.
      w_rc = w_document->append_child( new_child = w_wst ).
      IF w_rc IS NOT INITIAL.
        WRITE 'ERROR 2'.
        RETURN.
      ENDIF.
      CALL FUNCTION 'SDIXML_DOM_TO_XML'
        EXPORTING
          document            = w_document
    *   PRETTY_PRINT        = ' '
        IMPORTING
    *   XML_AS_STRING       =
          size                = w_size
        TABLES
          xml_as_table        = it_dlines
        EXCEPTIONS
          no_document         = 1
          OTHERS              = 2.
      IF sy-subrc <> 0.
        WRITE 'ERROR 3'.
        RETURN.
      ENDIF.
      LOOP AT it_dlines INTO iw_xml-line.
        APPEND iw_xml TO it_xml.
        CLEAR iw_xml.
      ENDLOOP.
      CALL FUNCTION 'GUI_DOWNLOAD'
        EXPORTING
          bin_filesize                    = w_size
          filename                        = w_fname
          filetype                        = 'BIN'
    *   APPEND                          = ' '
    *   WRITE_FIELD_SEPARATOR           = ' '
    *   HEADER                          = '00'
    *   TRUNC_TRAILING_BLANKS           = ' '
    *   WRITE_LF                        = 'X'
    *   COL_SELECT                      = ' '
    *   COL_SELECT_MASK                 = ' '
    *   DAT_MODE                        = ' '
    *   CONFIRM_OVERWRITE               = ' '
    *   NO_AUTH_CHECK                   = ' '
    *   CODEPAGE                        = ' '
    *   IGNORE_CERR                     = ABAP_TRUE
    *   REPLACEMENT                     = '#'
    *   WRITE_BOM                       = ' '
    *   TRUNC_TRAILING_BLANKS_EOL       = 'X'
    *   WK1_N_FORMAT                    = ' '
    *   WK1_N_SIZE                      = ' '
    *   WK1_T_FORMAT                    = ' '
    *   WK1_T_SIZE                      = ' '
    * IMPORTING
    *   FILELENGTH                      =
        TABLES
          data_tab                        = it_xml
    *   FIELDNAMES                      =
        EXCEPTIONS
          file_write_error                = 1
          no_batch                        = 2
          gui_refuse_filetransfer         = 3
          invalid_type                    = 4
          no_authority                    = 5
          unknown_error                   = 6
          header_not_allowed              = 7
          separator_not_allowed           = 8
          filesize_not_allowed            = 9
          header_too_long                 = 10
          dp_error_create                 = 11
          dp_error_send                   = 12
          dp_error_write                  = 13
          unknown_dp_error                = 14
          access_denied                   = 15
          dp_out_of_memory                = 16
          disk_full                       = 17
          dp_timeout                      = 18
          file_not_found                  = 19
          dataprovider_exception          = 20
          control_flush_error             = 21
          OTHERS                          = 22.
      IF sy-subrc <> 0.
        WRITE 'ERROR 4'.
      ENDIF.
    *&---------------------------------------------------------------------*
    *&      Form  f_element_add
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM f_element_add USING f_name TYPE string
                             f_val  TYPE string
                    CHANGING f_elem TYPE REF TO if_ixml_element.
      DATA: lw_docu TYPE REF TO if_ixml_document,
            lw_elem TYPE REF TO if_ixml_element,
            lw_rval TYPE i.
      lw_docu = w_document.
      lw_elem = lw_docu->create_element( f_name ).
      CALL METHOD lw_elem->set_value
        EXPORTING
          value = f_val
        RECEIVING
          rval  = w_rval.
      CALL METHOD f_elem->append_child
        EXPORTING
          new_child = lw_elem
        RECEIVING
          rval      = lw_rval.
    ENDFORM.                    " f_element_add
    *&---------------------------------------------------------------------*
    *&      Form  f_add_element
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM f_add_element  USING    f_name
                        CHANGING f_father TYPE REF TO if_ixml_element
                                 f_son    TYPE REF TO if_ixml_element.
      DATA: lw_docu TYPE REF TO if_ixml_document,
            lw_rval TYPE i.
      IF f_son IS INITIAL.
        lw_docu = w_document.
        f_son = lw_docu->create_element( f_name ).
      ENDIF.
      CALL METHOD f_father->append_child
        EXPORTING
          new_child = f_son
        RECEIVING
          rval      = lw_rval.
    ENDFORM.                    " f_add_element
    August 30

    利用SUBTOTAL_TEXT事件对alv合计行项目进行修改,以显示自定义合计文本

    * 技术要点:隐藏用来做合计的列,这样才能触发subtotal_text事件
    *&---------------------------------------------------------------------*
    *& Report  ZCTEST08
    *&
    *&---------------------------------------------------------------------*
    *&利用SUBTOTAL_TEXT事件对alv合计行项目进行修改,以显示自定义合计文本
    *&
    *&---------------------------------------------------------------------*
    REPORT  zctest08.
    *----------------------------------------------------------------------*
    *    类型池定义
    *----------------------------------------------------------------------*
    TYPE-POOLS: slis.
    *----------------------------------------------------------------------*
    *    表结构定义
    *----------------------------------------------------------------------*
    TABLES: faglflext.
    *----------------------------------------------------------------------*
    *    类型定义
    *----------------------------------------------------------------------*
    TYPES:
      BEGIN OF ty_faglflext,
        racct  TYPE faglflext-racct,
        rpmax  TYPE faglflext-rpmax,
        rbusa  TYPE faglflext-rbusa,
        zz0001 TYPE faglflext-zz0001,
        drcrk  TYPE faglflext-drcrk,
        hslvt  TYPE faglflext-hslvt,
        hsl01  TYPE faglflext-hsl01,
        hsl02  TYPE faglflext-hsl02,
        hsl03  TYPE faglflext-hsl03,
        hsl04  TYPE faglflext-hsl04,
        hsl05  TYPE faglflext-hsl05,
        hsl06  TYPE faglflext-hsl06,
        hsl07  TYPE faglflext-hsl07,
        hsl08  TYPE faglflext-hsl08,
        hsl09  TYPE faglflext-hsl09,
        hsl10  TYPE faglflext-hsl10,
        hsl11  TYPE faglflext-hsl11,
        hsl12  TYPE faglflext-hsl12,
        hsl13  TYPE faglflext-hsl13,
        hsl14  TYPE faglflext-hsl14,
        hsl15  TYPE faglflext-hsl15,
        hsl16  TYPE faglflext-hsl16,
      END OF ty_faglflext,
      BEGIN OF ty_data,
        racct_h TYPE faglflext-racct,
        rbusa_h TYPE faglflext-rbusa,
        racct   TYPE faglflext-racct,
        rbusa   TYPE faglflext-rbusa,
        zz0001  TYPE faglflext-zz0001,
        hslvt   TYPE faglflext-hslvt,
        hsl_s   TYPE faglflext-hslvt,
        hsl_h   TYPE faglflext-hslvt,
      END OF ty_data.
    *&---------------------------------------------------------------------*
    *&    内表定义
    *&---------------------------------------------------------------------*
    DATA: it_fag       TYPE TABLE OF ty_faglflext,
          it_data      TYPE TABLE OF ty_data,
          it_fieldcat  TYPE slis_t_fieldcat_alv,
          it_events    TYPE slis_t_event,
          it_sort      TYPE slis_t_sortinfo_alv,
          it_excluding TYPE slis_t_extab.
    *&---------------------------------------------------------------------*
    *&  工作区定义
    *&---------------------------------------------------------------------*
    DATA: iw_fag       TYPE ty_faglflext,          "总计工作区
          iw_data      TYPE ty_data,
          iw_fieldcat  TYPE slis_fieldcat_alv,
          iw_event     TYPE slis_alv_event,
          iw_sort      TYPE slis_sortinfo_alv,
          iw_layout    TYPE slis_layout_alv,       "ALV输出布局
          iw_print     TYPE slis_print_alv,
          iw_excluding TYPE slis_extab.
    *&---------------------------------------------------------------------*
    *&  屏幕定义
    *&---------------------------------------------------------------------*
    PARAMETERS:
      p_year  TYPE faglflext-ryear OBLIGATORY,               "会计年度
      p_rldnr TYPE faglflext-rldnr DEFAULT '0L' OBLIGATORY.  "分类帐
    SELECT-OPTIONS:
      s_racct FOR faglflext-racct.
    *----------------------------------------------------------------------*
    *    INITIALIZATION
    *----------------------------------------------------------------------*
    INITIALIZATION.
    * 隐藏用来做合计的两列,这样才能触发subtotal_text事件
      PERFORM f_fill_fieldcat
        USING: 'X'   'RACCT_H' '总帐科目'            space,
               'X'   'RBUSA_H' '业务范围'            space,
               space 'RACCT'   '总帐科目'            space,
               space 'RBUSA'   '业务范围'            space,
               space 'ZZ0001'  '附加-各公司任意信息' space,
               space 'HSLVT'   '年初结转'            'X'  ,
               space 'HSL_S'   '本期借方'            'X'  ,
               space 'HSL_H'   '本期贷方'            'X'  .
      CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
        IMPORTING
          et_events       = it_events
        EXCEPTIONS
          list_type_wrong = 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.
    * SUBTOTAL_TEXT事件
      READ TABLE it_events INTO iw_event
        WITH KEY name = slis_ev_subtotal_text.
      iw_event-form = 'F_SUBTOTAL_TEXT'.
      MODIFY it_events FROM iw_event INDEX sy-tabix.
    * 以隐藏的两列做合计
      CLEAR iw_sort.
      iw_sort-spos = 1.
      iw_sort-fieldname = 'RACCT_H'.
      iw_sort-subtot = 'X'.
      APPEND iw_sort TO it_sort.
      CLEAR iw_sort.
      iw_sort-spos = 1.
      iw_sort-fieldname = 'RBUSA_H'.
      iw_sort-subtot = 'X'.
      APPEND iw_sort TO it_sort.
      iw_layout-colwidth_optimize    = 'X'."列宽自适应
      iw_layout-no_totalline         = 'X'."不显示总合计行

    * 屏蔽'更改布局'按钮
      iw_excluding-fcode = '&OL0'.
      APPEND iw_excluding TO it_excluding.
     
    *&---------------------------------------------------------------------*
    *&    START-OF-SELECTION
    *&---------------------------------------------------------------------*
    START-OF-SELECTION.
      SELECT * INTO CORRESPONDING FIELDS OF TABLE it_fag
        FROM faglflext
       WHERE ryear = p_year
         AND rldnr = p_rldnr
         AND racct IN s_racct.
      LOOP AT it_fag INTO iw_fag.
        CLEAR iw_data.
        iw_data-racct  = iw_data-racct_h = iw_fag-racct.
        iw_data-rbusa  = iw_data-rbusa_h = iw_fag-rbusa.
        iw_data-zz0001 = iw_fag-zz0001.
        iw_data-hslvt  = iw_fag-hslvt.
    *   期间金额合计(1~16)
        PERFORM f_calc_hsl.
        COLLECT iw_data INTO it_data.
        CLEAR iw_fag.
      ENDLOOP.
      DATA: l_repid TYPE sy-repid.
      l_repid = sy-repid.
      CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
        EXPORTING
    *     I_INTERFACE_CHECK              = ' '
    *     I_BYPASSING_BUFFER             =
    *     I_BUFFER_ACTIVE                = ' '
          i_callback_program             = l_repid
    *     I_CALLBACK_PF_STATUS_SET       = ' '
    *     I_CALLBACK_USER_COMMAND        = ' '
    *     I_STRUCTURE_NAME               =
          is_layout                      = iw_layout
          it_fieldcat                    = it_fieldcat
          it_excluding                   = it_excluding
    *     IT_SPECIAL_GROUPS              =
          it_sort                        = it_sort
    *     IT_FILTER                      =
    *     IS_SEL_HIDE                    =
    *     I_DEFAULT                      = 'X'
    *     I_SAVE                         = ' '
    *     IS_VARIANT                     =
          it_events                      = it_events
    *     IT_EVENT_EXIT                  =
    *     IS_PRINT                       =
    *     IS_REPREP_ID                   =
    *     I_SCREEN_START_COLUMN          = 0
    *     I_SCREEN_START_LINE            = 0
    *     I_SCREEN_END_COLUMN            = 0
    *     I_SCREEN_END_LINE              = 0
    *     IR_SALV_LIST_ADAPTER           =
    *     IT_EXCEPT_QINFO                =
    *     I_SUPPRESS_EMPTY_DATA          = ABAP_FALSE
    *   IMPORTING
    *     E_EXIT_CAUSED_BY_CALLER        =
    *     ES_EXIT_CAUSED_BY_USER         =
        TABLES
          t_outtab                       = it_data
        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.
    *&---------------------------------------------------------------------*
    *&      Form  F_FILL_FIELDCAT
    *&---------------------------------------------------------------------*
    FORM f_fill_fieldcat  USING u_out
                                u_fnmae
                                u_text
                                u_sum.
      CLEAR iw_fieldcat.
      IF u_out = 'X'.
        iw_fieldcat-no_out    = 'X'.
      ENDIF.
      iw_fieldcat-fieldname = u_fnmae.
      iw_fieldcat-seltext_l = u_text.
      IF u_sum = 'X'.
        iw_fieldcat-do_sum = 'X'.
      ENDIF.
      APPEND iw_fieldcat TO it_fieldcat.
    ENDFORM.                    " F_FILL_FIELDCAT
    *&---------------------------------------------------------------------*
    *&      Form  F_CALC_HSL
    *&---------------------------------------------------------------------*
    FORM f_calc_hsl .
      FIELD-SYMBOLS <fs> TYPE faglflext-hslvt.
      DATA: l_name(5) TYPE c,
            l_cnt(2) TYPE n,
            l_sum    TYPE faglflext-hslvt.
      DO.
        l_cnt = l_cnt + 1.
        CONCATENATE 'HSL' l_cnt INTO l_name.
        ASSIGN COMPONENT l_name OF STRUCTURE iw_fag TO <fs>.
        IF sy-subrc <> 0.
          EXIT.
        ENDIF.
        l_sum = l_sum + <fs>.
      ENDDO.
      IF iw_fag-drcrk = 'S'.
        iw_data-hsl_s = l_sum.
      ELSEIF iw_fag-drcrk = 'H'.
        iw_data-hsl_h = l_sum.
      ENDIF.
    ENDFORM.                    " F_calc_HSL
    *&---------------------------------------------------------------------*
    *&      Form  F_SUBTOTAL_TEXT
    *&---------------------------------------------------------------------*
    FORM f_subtotal_text USING i_line        TYPE ty_data
                               i_subtot_text TYPE slis_subtot_text.
    * 自定义的合计行文本
      IF i_subtot_text-criteria = 'RACCT_H'.
        i_subtot_text-display_text_for_subtotal = '(总帐科目编号合计)'.
      ELSEIF i_subtot_text-criteria = 'RBUSA_H'.
        i_subtot_text-display_text_for_subtotal = '(业务范围编号小计)'.
      ENDIF.

    ENDFORM.                    " FRM_SUBTOTAL_TEXT 
    August 23

    将文本文件转为pdf格式

    REPORT zctest02 LINE-SIZE 132.
    TYPES:
      BEGIN OF typ_file,
        text(132) TYPE c,
      END OF typ_file.
    DATA:
      iw_file TYPE typ_file,
      it_file TYPE TABLE OF typ_file,
      it_pdf  TYPE TABLE OF tline,
      g_size  TYPE i,
      g_spid  TYPE rspoid,
      g_para  TYPE pri_params,
      g_flag  TYPE c.
    PARAMETERS: p_from(128) TYPE c OBLIGATORY LOWER CASE
                                   DEFAULT 'D:\test\char.txt',
                p_to(128)   TYPE c OBLIGATORY LOWER CASE
                                   DEFAULT 'D:\test\test.pdf'.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_from.
      PERFORM f_get_filename.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_to.
      PERFORM f_set_filename.
    START-OF-SELECTION.
      PERFORM f_read_file.
      CALL FUNCTION 'GET_PRINT_PARAMETERS'
    *   EXPORTING
    *     ARCHIVE_ID                     = C_CHAR_UNKNOWN
    *     ARCHIVE_INFO                   = C_CHAR_UNKNOWN
    *     ARCHIVE_MODE                   = C_CHAR_UNKNOWN
    *     ARCHIVE_TEXT                   = C_CHAR_UNKNOWN
    *     AR_OBJECT                      = C_CHAR_UNKNOWN
    *     ARCHIVE_REPORT                 = C_CHAR_UNKNOWN
    *     AUTHORITY                      = C_CHAR_UNKNOWN
    *     COPIES                         = C_NUM3_UNKNOWN
    *     COVER_PAGE                     = C_CHAR_UNKNOWN
    *     DATA_SET                       = C_CHAR_UNKNOWN
    *     DEPARTMENT                     = C_CHAR_UNKNOWN
    *     DESTINATION                    = C_CHAR_UNKNOWN
    *     EXPIRATION                     = C_NUM1_UNKNOWN
    *     IMMEDIATELY                    = C_CHAR_UNKNOWN
    *     IN_ARCHIVE_PARAMETERS          = ' '
    *     IN_PARAMETERS                  = ' '
    *     LAYOUT                         = C_CHAR_UNKNOWN
    *     LINE_COUNT                     = C_INT_UNKNOWN
    *     LINE_SIZE                      = C_INT_UNKNOWN
    *     LIST_NAME                      = C_CHAR_UNKNOWN
    *     LIST_TEXT                      = C_CHAR_UNKNOWN
    *     MODE                           = ' '
    *     NEW_LIST_ID                    = C_CHAR_UNKNOWN
    *     PROTECT_LIST                   = C_CHAR_UNKNOWN
    *     NO_DIALOG                      = C_FALSE
    *     RECEIVER                       = C_CHAR_UNKNOWN
    *     RELEASE                        = C_CHAR_UNKNOWN
    *     REPORT                         = C_CHAR_UNKNOWN
    *     SAP_COVER_PAGE                 = C_CHAR_UNKNOWN
    *     HOST_COVER_PAGE                = C_CHAR_UNKNOWN
    *     PRIORITY                       = C_NUM1_UNKNOWN
    *     SAP_OBJECT                     = C_CHAR_UNKNOWN
    *     TYPE                           = C_CHAR_UNKNOWN
    *     USER                           = SY-UNAME
    *     USE_OLD_LAYOUT                 = ' '
    *     UC_DISPLAY_MODE                = C_CHAR_UNKNOWN
    *     DRAFT                          = C_CHAR_UNKNOWN
    *     ABAP_LIST                      = ' '
    *     USE_ARCHIVENAME_DEF            = ' '
    *     DEFAULT_SPOOL_SIZE             = C_CHAR_UNKNOWN
    *     WITH_STRUCTURE                 = C_CHAR_UNKNOWN
    *     SUPPRESS_SHADING               = C_CHAR_UNKNOWN
    *     PO_FAX_STORE                   = ' '
    *     NO_FRAMES                      = C_CHAR_UNKNOWN
        IMPORTING
    *     OUT_ARCHIVE_PARAMETERS         =
          out_parameters                 = g_para
          valid                          = g_flag
    *     VALID_FOR_SPOOL_CREATION       =
       EXCEPTIONS
         archive_info_not_found         = 1
         invalid_print_params           = 2
         invalid_archive_params         = 3
         OTHERS                         = 4
                .
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
      CHECK g_flag = 'X'.
      NEW-PAGE
        NO-TITLE
        NO-HEADING
        PRINT ON PARAMETERS g_para
        NO DIALOG.
      LOOP AT it_file INTO iw_file.
        WRITE: /1 iw_file-text.
        CLEAR iw_file.
      ENDLOOP.
      NEW-PAGE PRINT OFF.
    * SPOOL转PDF
      g_spid = sy-spono.
      CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
        EXPORTING
          src_spoolid                    = g_spid
          no_dialog                      = ' '
    *     DST_DEVICE                     =
    *     PDF_DESTINATION                =
        IMPORTING
          pdf_bytecount                  = g_size
    *     PDF_SPOOLID                    =
    *     LIST_PAGECOUNT                 =
    *     BTC_JOBNAME                    =
    *     BTC_JOBCOUNT                   =
        TABLES
          pdf                            = it_pdf
       EXCEPTIONS
         err_no_abap_spooljob           = 1
         err_no_spooljob                = 2
         err_no_permission              = 3
         err_conv_not_possible          = 4
         err_bad_destdevice             = 5
         user_cancelled                 = 6
         err_spoolerror                 = 7
         err_temseerror                 = 8
         err_btcjob_open_failed         = 9
         err_btcjob_submit_failed       = 10
         err_btcjob_close_failed        = 11
         OTHERS                         = 12
                .
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
      PERFORM f_save_file.
    *&---------------------------------------------------------------------*
    *&      Form  F_GET_FILENAME
    *&---------------------------------------------------------------------*
    FORM f_get_filename .
      DATA: l_rc    TYPE i,
            it_file TYPE filetable,
            l_obj TYPE REF TO cl_gui_frontend_services.
      CREATE OBJECT l_obj.
      CALL METHOD l_obj->file_open_dialog
        EXPORTING
          file_filter       = '.txt'
          initial_directory = 'D:\test'
        CHANGING
          file_table        = it_file
          rc                = l_rc.
      CHECK l_rc = 1.
      READ TABLE it_file INTO p_from INDEX 1.
    ENDFORM.                    " F_GET_FILENAME
    *&---------------------------------------------------------------------*
    *&      Form  F_READ_FILE
    *&---------------------------------------------------------------------*
    FORM f_read_file .
      DATA: l_fname TYPE string.
      l_fname = p_from.
      CALL FUNCTION 'GUI_UPLOAD'
        EXPORTING
          filename                      = l_fname
          filetype                      = 'ASC'
    *     HAS_FIELD_SEPARATOR           = ' '
    *     HEADER_LENGTH                 = 0
    *     READ_BY_LINE                  = 'X'
    *     DAT_MODE                      = ' '
    *     CODEPAGE                      = ' '
    *     IGNORE_CERR                   = ABAP_TRUE
    *     REPLACEMENT                   = '#'
    *     CHECK_BOM                     = ' '
    *     VIRUS_SCAN_PROFILE            =
    *     NO_AUTH_CHECK                 = ' '
    *   IMPORTING
    *     FILELENGTH                    =
    *     HEADER                        =
        TABLES
          data_tab                      = it_file
       EXCEPTIONS
         file_open_error               = 1
         file_read_error               = 2
         no_batch                      = 3
         gui_refuse_filetransfer       = 4
         invalid_type                  = 5
         no_authority                  = 6
         unknown_error                 = 7
         bad_data_format               = 8
         header_not_allowed            = 9
         separator_not_allowed         = 10
         header_too_long               = 11
         unknown_dp_error              = 12
         access_denied                 = 13
         dp_out_of_memory              = 14
         disk_full                     = 15
         dp_timeout                    = 16
         OTHERS                        = 17
                .
      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.                    " F_READ_FILE
    *&---------------------------------------------------------------------*
    *&      Form  F_SET_FILENAME
    *&---------------------------------------------------------------------*
    FORM f_set_filename .
      DATA: l_rc TYPE i,
            it_file TYPE filetable,
            l_name TYPE string,
            l_path TYPE string,
            l_fpath TYPE string,
            l_obj TYPE REF TO cl_gui_frontend_services.
      CREATE OBJECT l_obj.
      CALL METHOD l_obj->file_save_dialog
        EXPORTING
          file_filter       = '.pdf'
          initial_directory = 'D:\test'
        CHANGING
          filename          = l_name
          path              = l_path
          fullpath          = l_fpath
          user_action       = l_rc.
      CHECK l_rc <> 9.
      p_to = l_fpath.
    ENDFORM.                    " F_SET_FILENAME
    *&---------------------------------------------------------------------*
    *&      Form  F_SAVE_FILE
    *&---------------------------------------------------------------------*
    FORM f_save_file .
      DATA:l_file TYPE string.
      l_file = p_to.
      CALL FUNCTION 'GUI_DOWNLOAD'
        EXPORTING
          bin_filesize                    = g_size
          filename                        = l_file
          filetype                        = 'BIN'
    *     APPEND                          = ' '
    *     WRITE_FIELD_SEPARATOR           = ' '
    *     HEADER                          = '00'
    *     TRUNC_TRAILING_BLANKS           = ' '
    *     WRITE_LF                        = 'X'
    *     COL_SELECT                      = ' '
    *     COL_SELECT_MASK                 = ' '
    *     DAT_MODE                        = ' '
    *     CONFIRM_OVERWRITE               = ' '
    *     NO_AUTH_CHECK                   = ' '
    *     CODEPAGE                        = ' '
    *     IGNORE_CERR                     = ABAP_TRUE
    *     REPLACEMENT                     = '#'
    *     WRITE_BOM                       = ' '
    *     TRUNC_TRAILING_BLANKS_EOL       = 'X'
    *     WK1_N_FORMAT                    = ' '
    *     WK1_N_SIZE                      = ' '
    *     WK1_T_FORMAT                    = ' '
    *     WK1_T_SIZE                      = ' '
    *     WRITE_EOL                       = ABAP_TRUE
        IMPORTING
          filelength                      = g_size
        TABLES
          data_tab                        = it_pdf
    *     FIELDNAMES                      =
       EXCEPTIONS
         file_write_error                = 1
         no_batch                        = 2
         gui_refuse_filetransfer         = 3
         invalid_type                    = 4
         no_authority                    = 5
         unknown_error                   = 6
         header_not_allowed              = 7
         separator_not_allowed           = 8
         filesize_not_allowed            = 9
         header_too_long                 = 10
         dp_error_create                 = 11
         dp_error_send                   = 12
         dp_error_write                  = 13
         unknown_dp_error                = 14
         access_denied                   = 15
         dp_out_of_memory                = 16
         disk_full                       = 17
         dp_timeout                      = 18
         file_not_found                  = 19
         dataprovider_exception          = 20
         control_flush_error             = 21
         OTHERS                          = 22
                .
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
      WRITE 'SAVED SUCCESSFULLY!'.
    ENDFORM.                    " F_SAVE_FILE 
    July 11

    不使用se51根据radiobutton显示不同的选择条件

    * 当一个BLOCK内所有的控件都为不激活状态时,BLOCK会自动隐藏
    REPORT zsf2200.
    *&---------------------------------------------------------------------*
    *&    テーブル定義
    *&---------------------------------------------------------------------*
    TABLES: likp,lips.
    *&---------------------------------------------------------------------*
    *&    画面定義
    *&---------------------------------------------------------------------*
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-t01.
      PARAMETERS: p_buhin1 RADIOBUTTON GROUP grp1   "精密部品
                    DEFAULT 'X' USER-COMMAND zgrp1,
                  p_buhin2 RADIOBUTTON GROUP grp1.  "車両部品
    SELECTION-SCREEN END OF BLOCK b1.
    SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-t02.
      SELECT-OPTIONS: s_datum  FOR sy-datum,        "出荷予定日
                      s_kunnr1 FOR likp-kunnr       "得意先コード
                        NO INTERVALS NO-EXTENSION,
                      s_matnr  FOR lips-matnr       "品目コード
                        NO INTERVALS NO-EXTENSION.
      SELECTION-SCREEN SKIP.
      PARAMETERS: p_yotei1 TYPE char256,            "出荷予定ファイル名
                  p_card   TYPE char256,            "出荷カードファイル名
                  p_label  TYPE char256.            "出荷ラベルファイル名
    SELECTION-SCREEN END OF BLOCK b2.
    SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-t03.
      PARAMETERS: p_datum TYPE sy-datum.            "出荷予定日
      SELECT-OPTIONS: s_kunnr2 FOR likp-kunnr,      "得意先コード
                      s_vstel  FOR likp-vstel,      "出荷ポイント
                      s_vsart  FOR likp-vsart       "出荷タイプ
                        DEFAULT c_sd_spart_syaryo.  " '10'
      PARAMETERS: p_spart TYPE spart.               "製品部門
      SELECTION-SCREEN BEGIN OF LINE.
        SELECTION-SCREEN COMMENT 1(31) text-t04 FOR FIELD p_sai.
        PARAMETERS p_sai TYPE char1 AS CHECKBOX.    "再出力
      SELECTION-SCREEN END OF LINE.
      SELECTION-SCREEN SKIP.
      PARAMETERS: p_yotei2 TYPE char256,            "出荷予定ファイル名
                  p_yotei3 TYPE char256.            "出荷予定表ファイル名
    SELECTION-SCREEN END OF BLOCK b3.
    *&---------------------------------------------------------------------*
    *&    Event AT SELECTION-SCREEN OUTPUT
    *&---------------------------------------------------------------------*
    AT SELECTION-SCREEN OUTPUT.
      PERFORM sub_modify_screen.
    *&---------------------------------------------------------------------*
    *&      Form  SUB_MODIFY_SCREEN
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM sub_modify_screen .
      IF p_buhin1 = c_x.
        LOOP AT SCREEN.
          IF   screen-name = 'S_DATUM-LOW'
            OR screen-name = 'P_PATH1'
            OR screen-name = 'P_YOTEI1'
            OR screen-name = 'P_CARD'
            OR screen-name = 'P_LABEL'.
            screen-required = 2.
            MODIFY SCREEN.
          ENDIF.
          IF   screen-name CS 'P_DATUM'
            OR screen-name CS 'S_KUNNR2'
            OR screen-name CS 'S_VSTEL'
            OR screen-name CS 'S_VSART'
            OR screen-name CS 'P_SPART'
            OR SCREEN-NAME =  '%FT04020_1000'       "COMMENT行の名称
            OR screen-name =  'P_SAI'
            OR screen-name CS 'P_YOTEI2'
            OR screen-name CS 'P_YOTEI3'.
            screen-active = 0.
            MODIFY SCREEN.
          ENDIF.
        ENDLOOP.
      ELSE.
        LOOP AT SCREEN.
          IF   screen-name = 'P_DATUM'
            OR screen-name = 'S_KUNNR2-LOW'
            OR screen-name = 'S_VSTEL-LOW'
            OR screen-name = 'S_VSART-LOW'
            OR screen-name = 'P_SPART'
            OR screen-name = 'P_PATH2'
            OR screen-name = 'P_YOTEI2'
            OR screen-name = 'P_YOTEI3'.
            screen-required = 2.
            MODIFY SCREEN.
          ENDIF.
          IF   screen-name CS 'S_DATUM'
            OR screen-name CS 'S_KUNNR1'
            OR screen-name CS 'S_MATNR'
            OR screen-name CS 'P_YOTEI1'
            OR screen-name CS 'P_CARD'
            OR screen-name CS 'P_LABEL'.
            screen-active = 0.
            MODIFY SCREEN.
          ENDIF.
        ENDLOOP.
      ENDIF.
    ENDFORM.                    " SUB_MODIFY_SCREEN