abap MACRO:输出二进制的开放式数据集(adattabile al contesto)

Con questa macrosipuòevitaredi chiamare ogni volta le dataset output。 <br/> <br/> Loshapeèadattabileall'input。 <br/> <br/> Si potrebbe anche aggiungere il catch variabili CX_XXXX

MACRO OPEN DATASET FOR OUTPUT BINARY adattabile al contesto
DEFINE download.

  OPEN DATASET &1 FOR OUTPUT IN BINARY MODE.

  IF sy-subrc = 0.

    LOOP AT &2 ASSIGNING &3.
      TRANSFER &3 TO &1.
    ENDLOOP.

    CLOSE DATASET &1.

  ENDIF.

END-OF-DEFINITION.

abap alv_grid

alv_grid
CLASS lcl_gui DEFINITION DEFERRED.
DATA go_100 TYPE REF TO lcl_gui.

**********************************************************************
*	Clase padre grid
**********************************************************************
CLASS lcl_gui DEFINITION.
  PUBLIC SECTION.
    DATA:
      go_con TYPE REF TO cl_gui_custom_container,
      go_alv TYPE REF TO cl_gui_alv_grid,
      gs_stab   TYPE lvc_s_stbl VALUE 'XX'.
    METHODS:
      _create IMPORTING i_con_name TYPE clike CHANGING ct_table TYPE STANDARD TABLE.

  PROTECTED SECTION.
    METHODS:
      _click   FOR EVENT hotspot_click OF cl_gui_alv_grid IMPORTING e_row_id e_column_id,
      _uc      FOR EVENT user_command OF cl_gui_alv_grid IMPORTING e_ucomm,
      _changed FOR EVENT data_changed OF cl_gui_alv_grid IMPORTING er_data_changed.
  PRIVATE SECTION.
    METHODS:
      _fcat    CHANGING ct_fcat TYPE lvc_t_fcat,
      _excl    RETURNING VALUE(rt_excl) TYPE lvc_t_excl,
      _toolbar FOR EVENT toolbar OF cl_gui_alv_grid IMPORTING e_object e_interactive,
      _selected  RETURNING VALUE(r_subrc) TYPE sy-subrc.
ENDCLASS.


CLASS lcl_gui IMPLEMENTATION.
*--------------------------------------------------------------------*
*	Create
*--------------------------------------------------------------------*
  METHOD _create.

    DATA: lt_fcat TYPE lvc_t_fcat,
          lt_excl TYPE ui_functions,
          ls_layo TYPE lvc_s_layo,
          ls_vari TYPE disvariant.

    IF go_alv IS NOT BOUND.
      CLEAR: lt_fcat, ls_layo, lt_excl, ls_vari.

*     Instancia
      CREATE OBJECT go_con
        EXPORTING
          container_name = i_con_name.
      CREATE OBJECT go_alv
        EXPORTING
          i_parent = go_con.

*     Eventos
      SET HANDLER me->_toolbar FOR go_alv.
      SET HANDLER me->_uc   FOR go_alv.
      SET HANDLER me->_click FOR go_alv.
      SET HANDLER me->_changed FOR go_alv.

      go_alv->register_edit_event( cl_gui_alv_grid=>mc_evt_modified ).

*     Catalogo
      _fcat( CHANGING ct_fcat = lt_fcat ).

*     Layout
      ls_layo-zebra       = abap_true.
      ls_layo-col_opt     = abap_true.
*      ls_layo-cwidth_opt  = abap_true.
      ls_layo-no_rowmark  = abap_true.
      ls_layo-info_fname  = 'COLOR'.

*     Toolbar
      lt_excl = _excl( ).

*     Variante
      ls_vari-username = sy-uname.
      ls_vari-report   = sy-cprog.

      go_alv->set_table_for_first_display(
        EXPORTING
          is_layout                     = ls_layo
          it_toolbar_excluding          = lt_excl
          is_variant                    = ls_vari
          i_save                        = 'A'
          "i_default                     = space
        CHANGING
          it_outtab                     = ct_table
          it_fieldcatalog               = lt_fcat
      ).
    ENDIF.

  ENDMETHOD.

*----------------------------------------------------------------------*
* Excluir botones
*----------------------------------------------------------------------*
  METHOD _excl.
    APPEND cl_gui_alv_grid=>mc_fc_refresh           TO rt_excl.  "Refresh
    APPEND cl_gui_alv_grid=>mc_fc_loc_insert_row    TO rt_excl.  "Insertar fila
    APPEND cl_gui_alv_grid=>mc_fc_loc_append_row    TO rt_excl.  "Añadir   fila
    APPEND cl_gui_alv_grid=>mc_fc_loc_delete_row    TO rt_excl.  "Borrar   fila
    APPEND cl_gui_alv_grid=>mc_fc_loc_copy_row      TO rt_excl.  "Copiar fila
    APPEND cl_gui_alv_grid=>mc_fc_loc_paste_new_row TO rt_excl.  "Pegar  fila
    APPEND cl_gui_alv_grid=>mc_fc_loc_move_row      TO rt_excl.  "Mover  fila
    APPEND cl_gui_alv_grid=>mc_fc_loc_copy          TO rt_excl.  "Copiar
    APPEND cl_gui_alv_grid=>mc_fc_loc_cut           TO rt_excl.  "Cortar
    APPEND cl_gui_alv_grid=>mc_fc_loc_paste         TO rt_excl.  "Pegar
    APPEND cl_gui_alv_grid=>mc_fc_loc_undo          TO rt_excl.  "Deshacer
    APPEND cl_gui_alv_grid=>mc_fc_check             TO rt_excl.  "Check
  ENDMETHOD.

*----------------------------------------------------------------------*
* Catalogo
*----------------------------------------------------------------------*
  METHOD _fcat.

    FIELD-SYMBOLS: <fs_fcat> LIKE LINE OF ct_fcat.

*   Catalogo
    CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
      EXPORTING
        i_structure_name = 'ZOSES_PEDIDO_LIQ'
      CHANGING
        ct_fieldcat      = ct_fcat.

    LOOP AT ct_fcat ASSIGNING <fs_fcat>.
      "PERFORM set_fcat CHANGING <fs_fcat>.
      CASE <fs_fcat>-fieldname.
        WHEN 'BNAME'.
          <fs_fcat>-tech      = abap_true.
        WHEN 'BOX'.
          <fs_fcat>-edit      = abap_true.
          <fs_fcat>-checkbox  = abap_true.
          <fs_fcat>-tech      = abap_false.
          <fs_fcat>-outputlen = 2.
        WHEN OTHERS.
      ENDCASE.
    ENDLOOP.
  ENDMETHOD.

*----------------------------------------------------------------------*
* Toolbar
*----------------------------------------------------------------------*
  METHOD _toolbar.
*    DATA: ls_tool TYPE stb_button.
*
*    ls_tool-butn_type = 3.
*    APPEND ls_tool TO e_object->mt_toolbar. CLEAR ls_tool.
*
*    ls_tool-function = 'REFRESH'.
*    ls_tool-icon     = '@42@'.
*    APPEND ls_tool TO e_object->mt_toolbar. CLEAR ls_tool.
*
*    ls_tool-butn_type = 3.
*    APPEND ls_tool TO e_object->mt_toolbar. CLEAR ls_tool.
*
*    ls_tool-function  = 'ALL'.
*    ls_tool-icon      = '@4B@'.
*    ls_tool-quickinfo = 'Marcar Todo'.
*    APPEND ls_tool TO e_object->mt_toolbar. CLEAR ls_tool.
*
*    ls_tool-function  = 'SAL'.
*    ls_tool-icon      = '@4D@'.
*    ls_tool-quickinfo = 'Desmarcar Todo'.
*    APPEND ls_tool TO e_object->mt_toolbar. CLEAR ls_tool.
*
*    ls_tool-butn_type = 3.
*    APPEND ls_tool TO e_object->mt_toolbar. CLEAR ls_tool.
*
*    ls_tool-function  = 'LIB'.
*    ls_tool-quickinfo = 'Liberar Pedido'.
*    ls_tool-icon      = '@5Y@'.
*    ls_tool-text      = 'Lib.Ped.'.
*    APPEND ls_tool TO e_object->mt_toolbar. CLEAR ls_tool.
*
*    ls_tool-butn_type = 3.
*    APPEND ls_tool TO e_object->mt_toolbar. CLEAR ls_tool.
*
*    ls_tool-function  = 'LIQ'.
*    ls_tool-icon      = '@39@'.
*    ls_tool-quickinfo = 'Liquidar Pedido'.
*    ls_tool-text      = 'Liquidar'.
*    APPEND ls_tool TO e_object->mt_toolbar. CLEAR ls_tool.
*
*    ls_tool-butn_type = 3.
*    APPEND ls_tool TO e_object->mt_toolbar. CLEAR ls_tool.
*
*    ls_tool-function  = 'ALIB'.
*    ls_tool-icon      = '@F1@'.
*    ls_tool-quickinfo = 'Anular Liberación Pedido'.
*    ls_tool-text      = 'Anular.Lib.'.
*    APPEND ls_tool TO e_object->mt_toolbar. CLEAR ls_tool.
  ENDMETHOD.

*----------------------------------------------------------------------*
* User Command
*----------------------------------------------------------------------*
  METHOD _uc.
*    DATA: lt_report TYPE gtt_report.
*
**   Cuando ha modificado los valores pero no presionado enter
*    "PERFORM read_dynpro_0.
*    lt_report = gt_report1.
*
*    CASE e_ucomm.
*      WHEN 'REFRESH'. create_repo( EXCEPTIONS error = 1 ).
*      WHEN 'ALL'.   PERFORM sel_all USING go_alv CHANGING gt_report1. get_top( EXPORTING it_report = gt_report1 ).
*      WHEN 'SAL'.   PERFORM des_all CHANGING gt_report1. get_top( EXPORTING it_report = gt_report1 ).
*      WHEN 'LIB'.   pro_liberar_pedidos( CHANGING ct_report = lt_report ).
*      WHEN 'LIQ'.   pro_liquidar( CHANGING ct_report = lt_report ).
*      WHEN 'ALIB'.  pro_anular_liberar_pedidos( CHANGING ct_report = lt_report ).
*      WHEN OTHERS.
*    ENDCASE.
*
**   Actualiza resultados(lt_report)
*    PERFORM set_return_to_report USING lt_report CHANGING gt_report1 gt_report.
*
**   Refresca ALV
*    go_alv->refresh_table_display( is_stable = gs_stab ).
  ENDMETHOD.


*----------------------------------------------------------------------*
* Click
*----------------------------------------------------------------------*
  METHOD _click.
*    DATA: ls_report LIKE LINE OF gt_report.
*
*    READ TABLE gt_report1 INTO ls_report INDEX e_row_id-index.
*    CASE e_column_id.
*      WHEN 'VBELN'. PERFORM show_va03 USING ls_report-vbeln.
*      WHEN 'ICON'.  PERFORM show_return USING ls_report-return.
*      WHEN OTHERS.
*    ENDCASE.
  ENDMETHOD.


*----------------------------------------------------------------------*
* Seleccion de Lineas
*----------------------------------------------------------------------*
  METHOD _selected.
*    DATA: lt_rows TYPE lvc_t_row,
*          ls_rows LIKE LINE OF gt_rows.
*    FIELD-SYMBOLS <fs_report> LIKE LINE OF gt_report.
*
*    go_alv->get_selected_rows( IMPORTING et_index_rows = lt_rows ).
*
*    LOOP AT lt_rows INTO ls_rows.
*      READ TABLE gt_report ASSIGNING <fs_report> INDEX ls_rows-index.
*      IF sy-subrc = 0.
*        <fs_report>-box = abap_true.
*      ENDIF.
*    ENDLOOP.
  ENDMETHOD.

*----------------------------------------------------------------------*
* Cambios
*----------------------------------------------------------------------*
  METHOD _changed.
*    DATA: ls_good TYPE lvc_s_modi.
*    FIELD-SYMBOLS <fs_report> LIKE LINE OF gt_report1.
*
*    LOOP AT er_data_changed->mt_good_cells INTO ls_good.
*      READ TABLE gt_report1 ASSIGNING <fs_report> INDEX ls_good-row_id.
*      IF sy-subrc = 0.
*        <fs_report>-box = ls_good-value.
*      ENDIF.
*    ENDLOOP.
*
*    get_top( EXPORTING it_report = gt_report1 ).
  ENDMETHOD.
ENDCLASS.

abap _alvshow #alv

_alvshow #alv

_alvshow.abap
*----------------------------------------------------------------------*
* Mostrar alv
* Ver 1.0
*----------------------------------------------------------------------*
FORM _alv CHANGING ct_table TYPE STANDARD TABLE.

  DATA: ls_layo TYPE lvc_s_layo,
        lt_fcat TYPE lvc_t_fcat.
*        lt_event TYPE slis_t_event.
*        ls_vari TYPE disvariant.
*        ls_print TYPE lvc_s_prnt.
  FIELD-SYMBOLS: <fs_fcat> TYPE lvc_s_fcat.

  "Layout
  ls_layo-cwidth_opt  = abap_on.
  ls_layo-col_opt     = abap_on.
  ls_layo-zebra       = abap_on.
*  ls_layo-box_fname   = 'BOX'.       "Columna seleccionable
*  ls_layo-no_rowmark  = abap_on.     "Ocultar columna seleccionable
*  ls_layo-grid_title  = 'Reporte'.   "Título del reporte

** Para style por celda
*  ls_layo-stylefname  = 'T_STYLE'.   "Campo para añadir stylo por celda
*  t_style type lvc_t_styl
*  ls_style-fieldname = 'CANT'.
*  ls_style-style = cl_gui_alv_grid=>mc_style_disabled.
*  append ls_style into table ls_report-t_style.

** Para pintar filas
*  ls_report-color  = 'C700'.         "Fila se pintará, campo color en la tabla report
*  ls_layo-info_fname  = 'COLOR'.     "Nombre del Campo(char04) que lleva el color

* Para permitir grabar variante
*  ls_vari-handle   = sy-dynnr.
*  ls_vari-username = sy-uname.
*  ls_vari-report   = sy-repid.
*  ls_vari-variant  = i_variant.      "Disposición personalizado

** Para imprimir
*  ls_print-prntselinf = 'X'.
*  ls_print-prntlstinf = 'X'.

**Añadir evento
*   perform _100eventos changing lt_event.

  "Catálogo   
*  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
*    EXPORTING
*      i_structure_name = sy-repid(30)
*    CHANGING
*      ct_fieldcat      = lt_fcat.
  PERFORM _getfcat USING abap_on CHANGING ct_table lt_fcat.

  "Fcat - Descripción
  "LOOP AT lt_fcat ASSIGNING <fs_fcat>.
    " CASE <fs_fcat>-fieldname.
      "WHEN 'ICON'.       <fs_fcat>-hotspot = abap_on. <fs_fcat>-just = 'C'.
      "WHEN 'MESSAGE4'.   <fs_fcat>-tech = abap_on.
      "WHEN 'TEXT'.       <fs_fcat>-edit = abap_on.
      "WHEN 'STAT_USER'.  <fs_fcat>-outputlen = 4.
      "WHEN 'NETWR'.      <fs_fcat>-emphasize = 'C700'.
      "WHEN 'K0001'.      PERFORM _fcatname USING 'Observación' '' CHANGING <fs_fcat>.
    " ENDCASE.
  "ENDLOOP.

  "Alv
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_bypassing_buffer = abap_on
      i_buffer_active    = abap_on
      i_callback_program = sy-repid
*      i_callback_pf_status_set = '_100ST'
*      i_callback_top_of_page   = '_100TOP'
*      i_callback_user_command  = '_100UC'
*      i_grid_title       = 'Titulo'
      is_layout_lvc      = ls_layo
      it_fieldcat_lvc    = lt_fcat
      i_save             = 'A'
*      is_variant         = ls_vari
*      is_print_lvc       = ls_print
    TABLES
      t_outtab           = ct_table
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
       WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.

*----------------------------------------------------------------------*
* Obtiene catálogo de manera dinámica
*----------------------------------------------------------------------*
FORM _getfcat USING i_clearpos TYPE xfeld
              CHANGING ct_table TYPE STANDARD TABLE
                       et_fcat  TYPE lvc_t_fcat.
  DATA: lo_alv  TYPE REF TO cl_salv_table,
        lo_cols TYPE REF TO cl_salv_columns_table,
        lo_aggr TYPE REF TO cl_salv_aggregations,
        ls_fcat LIKE LINE OF et_fcat.

  TRY .
      cl_salv_table=>factory( IMPORTING r_salv_table = lo_alv
                               CHANGING t_table = ct_table ).
    CATCH cx_salv_msg.                                  "#EC NO_HANDLER
  ENDTRY.

  lo_cols = lo_alv->get_columns( ).
  lo_aggr = lo_alv->get_aggregations( ).
  et_fcat = cl_salv_controller_metadata=>get_lvc_fieldcatalog(
    r_columns = lo_cols
    r_aggregations = lo_aggr
  ).

  IF i_clearpos = abap_on.
    MODIFY et_fcat FROM ls_fcat TRANSPORTING col_pos WHERE col_pos <> space.
  ENDIF.
ENDFORM.

*----------------------------------------------------------------------*
* Modificar nombre de un campo de catálogo
*----------------------------------------------------------------------*
FORM _fcatname USING i_unico TYPE clike "Recomendable 20
                     i_large TYPE clike "Recomendable 40
               CHANGING cs_fcat TYPE lvc_s_fcat.
  DATA: l_large TYPE string.

  "Inicializa
  CLEAR: cs_fcat-scrtext_s.
  CLEAR: cs_fcat-scrtext_m.
  CLEAR: cs_fcat-rollname.

  l_large = i_large.
  IF l_large IS INITIAL.
    l_large = i_unico.
  ENDIF.

  "Asigna textos
  IF strlen( i_unico ) LE 10.
    cs_fcat-scrtext_s = i_unico.  "10
  ENDIF.
  IF strlen( i_unico ) LE 20.
    cs_fcat-scrtext_m = i_unico.  "20
  ENDIF.

  cs_fcat-coltext = i_unico.      "40
  cs_fcat-reptext = i_unico.      "55

  cs_fcat-seltext   = l_large.    "40
  cs_fcat-scrtext_l = l_large.    "40

ENDFORM.

*----------------------------------------------------------------------*
* Status del alv 0100 sin status
*----------------------------------------------------------------------*
FORM _100st USING ct_excl TYPE slis_t_extab.
  data: lt_fcode  type table of smp_dyntxt,
        ls_fcode  like line of lt_fcode.

  "Añadir a exclusión
  APPEND '&AQW'     TO ct_excl. "ambos - tratamiento de textos
  APPEND '%PC'      TO ct_excl. "ambos - fichero local
  APPEND '%SL'      TO ct_excl. "ambos - envio mail
  APPEND '&ABC'     TO ct_excl. "ambos - abc
  APPEND '&VEXCEL'  TO ct_excl. "alv grid - excel incrustado
  APPEND '&GRAPH'   TO ct_excl. "alv grid - grafico
  APPEND '&INFO'    TO ct_excl. "alv grid - info
  APPEND 'DNOT'     TO ct_excl. "alv list - visualizar nota
  APPEND 'CNOT'     TO ct_excl. "alv list - tratar nota
  APPEND '&REFRESH' TO ct_excl. "ambos - refrescar
  "APPEND '&DATA_SAVE'  TO ct_excl. "alv list - grabar
  
  "Hana
  SELECT SINGLE COUNT(*) FROM cvers WHERE component = 'S4CORE'.
  IF sy-subrc = 0.
    APPEND '&UMC'   TO ct_excl. "ambos - suma
    APPEND '&SUM'   TO ct_excl. "ambos - subtotal
    APPEND '&OL0'   TO ct_excl. "ambos - modificar disposición
    APPEND '&AVE'   TO ct_excl. "ambos - grabar disposición
  ENDIF.

  ""Añadir FC01
  "ls_fcode-icon_id   = icon_print.
  "ls_fcode-icon_text = 'Imprimir'.
  "ls_fcode-text      = 'Imprimir Formulario'.
  "APPEND ls_fcode TO lt_fcode.

  PERFORM dynamic_report_fcodes IN PROGRAM rhteiln0 TABLES lt_fcode USING ct_excl '' ''.
  SET PF-STATUS 'ALVLIST' EXCLUDING ct_excl OF PROGRAM 'RHTEILN0'.
ENDFORM.

*----------------------------------------------------------------------*
* User_command del alv 0100
*----------------------------------------------------------------------*
FORM _100uc USING i_ucomm TYPE sy-ucomm
                  cs_sel  TYPE slis_selfield.
*  DATA: ls_report LIKE LINE OF gt_report.

  CASE i_ucomm.
    WHEN '&IC1'.  "Evento click
*      READ TABLE gt_report INTO ls_report INDEX cs_sel-tabindex.
*      CASE cs_sel-fieldname.
*        WHEN 'ICON'. go_con->ver_detalle( ls_report ).
*        WHEN 'VBELN'. PERFORM _show_va03 USING ls_report-vbeln.
*        WHEN 'STAT'. PERFORM _showalvpopup USING 160 12 ls_report-t_statu.
*        WHEN OTHERS.
*      ENDCASE.
    WHEN 'FC01'.
    WHEN '&DATA_SAVE'.
    WHEN '/&REFRESH'.
*      PERFORM create_report.
      cs_sel-refresh = abap_on.
      cs_sel-col_stable = abap_on.
      cs_sel-row_stable = abap_on.
    WHEN OTHERS.
  ENDCASE.
ENDFORM.

*----------------------------------------------------------------------*
*	Verifica selección
*----------------------------------------------------------------------*
FORM _100isselected.

*  DATA: ls_report LIKE LINE OF gt_report.

*  READ TABLE gt_report WITH KEY box = abap_on TRANSPORTING NO FIELDS.
  IF sy-subrc <> 0.
*    MESSAGE s000 WITH 'Debe seleccionar linea(s)'.
    sy-subrc = 1.
  ENDIF.

ENDFORM.

abap COFILES e DATA:下载CR / oggetti da Produzione sviluppo

报告每票价下载dei due files di testata(cartella COFILE)e posizione(cartella DATA)必需品all'importazione di CR da prod a dev

COFILES e DATA Download CR_oggetti da Produzione a sviluppo
*&---------------------------------------------------------------------*
*& Report  ZMC_COFILES
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT  zmc_cofiles.
CONSTANTS:c_data_files_path  TYPE string   VALUE 'data',
          c_co_files_path    TYPE string   VALUE 'cofiles',
          c_request_released TYPE c        VALUE 'R',
          c_co_file_prefix   TYPE c        VALUE 'K',
          c_data_file_prefix TYPE c        VALUE 'R',
          c_execute_command  TYPE sy-ucomm VALUE 'ONLI',
          c_dot              TYPE c        VALUE '.',
          c_slash_win        TYPE c        VALUE '\',
          c_slash_lin        TYPE c        VALUE '/'.
DATA:gv_dir_trans TYPE char255.
PARAMETERS:p_ot TYPE e070-trkorr DEFAULT 'XXXKYYYYYY',
           p_out TYPE string DEFAULT 'C:\temp' LOWER CASE.
 
INITIALIZATION.
  CALL 'C_SAPGPARAM' ID 'NAME' FIELD 'DIR_TRANS' ID 'VALUE' FIELD gv_dir_trans.
 
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_ot.
  CALL FUNCTION 'TR_F4_REQUESTS'
    EXPORTING
      iv_trstatus         = c_request_released
    IMPORTING
      ev_selected_request = p_ot.
 
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_out.
  DATA:lv_selected_folder TYPE string.
  CALL METHOD cl_gui_frontend_services=>directory_browse
    CHANGING
      selected_folder      = lv_selected_folder
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 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.
  p_out = lv_selected_folder.
 
AT SELECTION-SCREEN.
  IF sy-ucomm = c_execute_command.
    PERFORM check_status.
    PERFORM check_directory.
  ENDIF.
 
START-OF-SELECTION.
  PERFORM download USING c_co_file_prefix.
  PERFORM download USING c_data_file_prefix.
  PERFORM show_msg.
*&---------------------------------------------------------------------*
*&      Form  check_directory
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM check_directory.
  DATA: lv_result TYPE c,
        lv_directory TYPE string.
  lv_directory = p_out.
  CALL METHOD cl_gui_frontend_services=>directory_exist
    EXPORTING
      directory            = lv_directory
    RECEIVING
      result               = lv_result
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      wrong_parameter      = 3
      not_supported_by_gui = 4
      OTHERS               = 5.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  IF lv_result IS INITIAL.
    MESSAGE e398(00) WITH text-001."The output directory does not exist!
  ENDIF.
ENDFORM.                    "check_directory
*&---------------------------------------------------------------------*
*&      Form  check_status
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM check_status.
  DATA:ls_e070  TYPE e070 .
  SELECT SINGLE * INTO ls_e070  FROM e070  WHERE trkorr = p_ot.
  IF sy-subrc = 0.
    IF ls_e070-trstatus NE c_request_released.
      MESSAGE e398(00) WITH text-002."The TR must be released!
    ENDIF.
  ELSE.
    MESSAGE e398(00) WITH text-003."The TR does not exist!
  ENDIF.
ENDFORM.                    "check_status
*&---------------------------------------------------------------------*
*&      Form  show_msg
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM show_msg.
  MESSAGE s398(00) WITH text-004."Files downloaded successfully!
ENDFORM.                    "show_msg
*&---------------------------------------------------------------------*
*&      Form  download
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM download USING pv_type TYPE c.
  DATA:lv_path LIKE sapb-sappfad,
       lv_targetpath LIKE sapb-sappfad,
       lv_ot_filename TYPE string.
  CONCATENATE pv_type p_ot+4(6) c_dot p_ot(3) INTO lv_ot_filename.
  CASE pv_type.
    WHEN c_co_file_prefix.
      CONCATENATE gv_dir_trans c_slash_lin c_co_files_path c_slash_lin INTO lv_path.
    WHEN c_data_file_prefix.
      CONCATENATE gv_dir_trans c_slash_lin c_data_files_path c_slash_lin INTO lv_path.
  ENDCASE.
  CONCATENATE lv_path lv_ot_filename INTO lv_path.
  CONCATENATE p_out c_slash_win p_ot c_slash_win lv_ot_filename INTO lv_targetpath.
  CALL FUNCTION 'ARCHIVFILE_SERVER_TO_CLIENT'
    EXPORTING
      path       = lv_path
      targetpath = lv_targetpath
    EXCEPTIONS
      error_file = 1
      OTHERS     = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.                    "download

abap 货币转换:da char a curr

Per convertire valore da char a curr,modifica manuale della stringa。 La virgola causerebbe转换每次转换。 <br/> <br/>价值contiene il valore che sto modificando(char o string),il field symbol la riga col valore di tipo curr che sto andando a cambiare。 <br/> <br/> lo snippet fa anche una modifica dell'importo realtivo ad altro campo in alv。

Currency conv da char a curr
FORM get_value_from_dmbtr  USING value          TYPE char128
                                 p_lfs_modified STRUCTURE zfi_paghe.

  DATA: lv_value TYPE dmbtr.
  DATA: lv_lenght TYPE string.
  DATA: lv_dmbtr_temp TYPE string,
        lv_int        TYPE string,
        lv_dec        TYPE string.

  FIELD-SYMBOLS <lfs_modified> TYPE zfi_paghe.
  ASSIGN p_lfs_modified TO <lfs_modified>.

  MOVE value TO lv_dmbtr_temp.

  SPLIT lv_dmbtr_temp AT ',' INTO lv_int lv_dec.

  REPLACE ALL OCCURRENCES OF ',' IN value WITH space.
  CONDENSE value NO-GAPS.
  lv_value = value.
  MOVE lv_value TO <lfs_modified>-dmbtr.

  lv_lenght = strlen( lv_dec ).

  IF lv_lenght = 2.
    <lfs_modified>-dmbtr = <lfs_modified>-dmbtr / 100.
  ENDIF.

  IF lv_lenght = 1.
    <lfs_modified>-dmbtr = <lfs_modified>-dmbtr / 10.
  ENDIF.

  <lfs_modified>-wrbtr = <lfs_modified>-dmbtr.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form GET_VALUE_FROM_WRBTR
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*      -->P_LS_MODI_VALUE  text
*      -->P_<LFS_MODIFIED>  text
*&---------------------------------------------------------------------*
FORM get_value_from_wrbtr USING value          TYPE char128
                                p_lfs_modified STRUCTURE zfi_paghe.

  DATA: lv_value TYPE wrbtr.
  DATA: lv_lenght TYPE string.
  DATA: lv_dmbtr_temp TYPE string,
        lv_int        TYPE string,
        lv_dec        TYPE string.

  FIELD-SYMBOLS <lfs_modified> TYPE zfi_paghe.
  ASSIGN p_lfs_modified TO <lfs_modified>.

  MOVE value TO lv_dmbtr_temp.

  SPLIT lv_dmbtr_temp AT ',' INTO lv_int lv_dec.

  REPLACE ALL OCCURRENCES OF ',' IN value WITH space.
  CONDENSE value NO-GAPS.
  lv_value = value.
  MOVE lv_value TO <lfs_modified>-dmbtr.

  lv_lenght = strlen( lv_dec ).

  IF lv_lenght = 2.
    <lfs_modified>-wrbtr = <lfs_modified>-wrbtr / 100.
  ENDIF.

  IF lv_lenght = 1.
    <lfs_modified>-wrbtr = <lfs_modified>-wrbtr / 10.
  ENDIF.

  <lfs_modified>-dmbtr = <lfs_modified>-wrbtr.

ENDFORM.

abap OO ALV:Cursore che resta su cella / riga modificata al salvataggio

Va chiamato il seguente metodo con i due campi struttura ad X.

OO ALV Cursore che resta su cella_riga modificata al salvataggio
DATA ls_stable TYPE lvc_s_stbl.
ls_stable-row = 'X'.
ls_stable-col = 'X'.
CALL METHOD gr_alvgrid->refresh_table_display
EXPORTING
is_stable = ls_stable.

abap ALV:Tutti campi非chiave EDITABILI

ALV Tutti campi non chiave EDITABILI
" Set all non-keyfields editable
  LOOP AT gt_fcat INTO ls_fcat
                  WHERE ( key = abap_false ).
    ls_fcat-edit    = abap_true.

    MODIFY gt_fcat FROM ls_fcat.
  ENDLOOP.

abap 将ALV报告输出发送为CSV电子邮件附件

报告完成,发送邮件(OBJECT ORIENTED)più输出

Send ALV Report Output as CSV Email Attachement
Tagged: alv, code library, email, report

This utility report runs specified ALV report behind the scene and extract its output, converts that to csv and send it to email recipients. Very useful if you want to send output of report to user(s) periodically.

Program takes report name and variant as input. It runs specified report with specified variant and export list to memory using statement.
1
2
3
4
	
SUBMIT (p_report)
USING SELECTION-SET p_vari
       LINE-SIZE sy-linsz
      EXPORTING LIST TO MEMORY AND RETURN.

Then using function module LIST_FROM_MEMORY program imports list from memory, convert it into ascii format using function module LIST_TO_ASCI. After some text processing it converts output in csv format and compose email with attachment using class CL_BCS.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
	
REPORT  zpw_run_email.
 
*&---------------------------------------------------------------------*
*&      Types and Data
*&---------------------------------------------------------------------*
 
CONSTANTS:
  gc_tab  TYPE c VALUE cl_bcs_convert=>gc_tab,
  gc_crlf TYPE c VALUE cl_bcs_convert=>gc_crlf.
 
TYPES :  BEGIN OF ty_fin ,
            line TYPE string ,
          END OF ty_fin .
 
DATA : g_email         TYPE char200 .
DATA : ascilines(1024) TYPE c OCCURS 0 WITH HEADER LINE.
DATA : list            TYPE TABLE OF abaplist WITH HEADER LINE.
DATA : i_final         TYPE TABLE OF ty_fin .
 
*&---------------------------------------------------------------------*
*&      Selection Screen
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME .
PARAMETERS : p_report TYPE trdir-name    OBLIGATORY,
             p_vari   TYPE rsvar-variant OBLIGATORY.
SELECTION-SCREEN SKIP 1 .
 
PARAMETER : p_trim TYPE char01 AS   CHECKBOX ,
            p_neg  TYPE char01 AS CHECKBOX .
SELECTION-SCREEN SKIP 1 .
 
SELECT-OPTIONS : s_to FOR g_email NO INTERVALS OBLIGATORY,
                 s_cc FOR g_email NO INTERVALS .
SELECTION-SCREEN END OF BLOCK b1 .
 
*&---------------------------------------------------------------------*
*&      Start of Selection
*&---------------------------------------------------------------------*
START-OF-SELECTION .
  PERFORM execute_report .
  PERFORM process_output .
  PERFORM send_email .
 
*&---------------------------------------------------------------------*
*&      Form  execute_report
*&---------------------------------------------------------------------*
FORM execute_report .
* Call report and export output in memory
  SUBMIT (p_report)
  USING SELECTION-SET p_vari
         LINE-SIZE sy-linsz
        EXPORTING LIST TO MEMORY AND RETURN.
ENDFORM.                    "execute_report
 
 
*&---------------------------------------------------------------------*
*&      Form  process_output
*&---------------------------------------------------------------------*
FORM process_output .
 
  TYPES : BEGIN OF ty_split ,
             token TYPE char50 ,
          END OF ty_split .
 
  DATA : li_split TYPE TABLE OF ty_split ,
         lv_str   TYPE string            ,
         ls_final TYPE ty_fin            ,
         lv_token TYPE char50            .
 
  FIELD-SYMBOLS <fs_slip> TYPE ty_split .
 
* Get report output from memory
  CALL FUNCTION 'LIST_FROM_MEMORY'
    TABLES
      listobject = list
    EXCEPTIONS
      not_found  = 1
      OTHERS     = 2.
 
* Convert it to ascii
  CALL FUNCTION 'LIST_TO_ASCI'
    TABLES
      listobject         = list
      listasci           = ascilines
    EXCEPTIONS
      empty_list         = 1
      list_index_invalid = 2
      OTHERS             = 3.
 
* Convert ascii to csv file
  LOOP AT ascilines .
*   Skip separater lines
    CHECK ascilines+0(10) <> '----------' .
    CLEAR li_split .
    SPLIT ascilines AT '|' INTO TABLE li_split .
 
    CLEAR lv_str .
    LOOP AT li_split ASSIGNING <fs_slip> .
 
      CLEAR lv_token .
      lv_token = <fs_slip>-token .
 
*     Post processing
      IF p_trim = abap_true .
        CONDENSE lv_token .
      ENDIF .
 
      IF p_neg = abap_true .
        CONDENSE lv_token .
        TRY.
            FIND REGEX '(\d+(\,\d+)?)+(\.\d+)?-' IN lv_token .
            IF sy-subrc = 0 .
              REPLACE '-' IN lv_token WITH space .
              CONCATENATE '-' lv_token INTO lv_token .
            ENDIF.
          CATCH cx_root .
            MESSAGE 'Error in regular expression' TYPE 'A'.
        ENDTRY .
      ENDIF.
 
      CASE sy-tabix.
        WHEN 1 .
        WHEN 2.
          lv_str = lv_token.
        WHEN OTHERS.
          CONCATENATE lv_str lv_token INTO lv_str SEPARATED BY gc_tab.
      ENDCASE.
    ENDLOOP .
    CLEAR ls_final .
    ls_final-line = lv_str   .
    APPEND ls_final TO i_final .
  ENDLOOP.
ENDFORM.                    "process_output
 
 
*&---------------------------------------------------------------------*
*&      Form  send_email
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM send_email .
 
  DATA lv_string TYPE string.
  DATA : ls_final TYPE ty_fin .
 
  DATA main_text      TYPE bcsy_text.
  DATA binary_content TYPE solix_tab.
  DATA size           TYPE so_obj_len.
  DATA : email      TYPE adr6-smtp_addr.
 
  DATA send_request   TYPE REF TO cl_bcs.
  DATA document       TYPE REF TO cl_document_bcs.
  DATA recipient      TYPE REF TO if_recipient_bcs.
  DATA bcs_exception  TYPE REF TO cx_bcs.
  DATA sent_to_all    TYPE os_boolean.
 
  DATA : lv_subject TYPE so_obj_des .
 
 
  LOOP AT i_final INTO ls_final .
    CASE sy-tabix.
      WHEN 1.
        CONCATENATE ls_final-line gc_crlf INTO lv_string .
      WHEN OTHERS.
        CONCATENATE lv_string ls_final-line gc_crlf INTO lv_string .
    ENDCASE.
  ENDLOOP.
 
* --------------------------------------------------------------
* convert the text string into UTF-16LE binary data including
* byte-order-mark. Mircosoft Excel prefers these settings
* all this is done by new class cl_bcs_convert (see note 1151257)
 
  TRY.
      cl_bcs_convert=>string_to_solix(
        EXPORTING
          iv_string   = lv_string
          iv_codepage = '4103'  "suitable for MS Excel, leave empty
          iv_add_bom  = 'X'     "for other doc types
        IMPORTING
          et_solix  = binary_content
          ev_size   = size ).
    CATCH cx_bcs.
      MESSAGE e445(so).
  ENDTRY.
 
 
  TRY.
 
*     -------- create persistent send request ------------------------
      send_request = cl_bcs=>create_persistent( ).
 
*     -------- create and set document with attachment ---------------
*     create document object from internal table with text
 
      CONCATENATE p_report p_vari sy-datum sy-uzeit INTO lv_subject SEPARATED BY space.
 
      PERFORM create_body_of_email CHANGING main_text .
 
*     APPEND 'Email from SAP background Job' TO main_text.  "#EC NOTEXT
      document = cl_document_bcs=>create_document(
        i_type    = 'HTM'
        i_text    = main_text
        i_subject = lv_subject ).                           "#EC NOTEXT
 
      DATA : lv_name TYPE sood-objdes .
 
      lv_name = p_report .
*     add the spread sheet as attachment to document object
      document->add_attachment(
        i_attachment_type    = 'csv'                        "#EC NOTEXT
        i_attachment_subject = lv_name                      "#EC NOTEXT
        i_attachment_size    = size
        i_att_content_hex    = binary_content ).
 
*     add document object to send request
      send_request->set_document( document ).
 
*      DATA : l_receipient_soos TYPE soos1.
 
*     --------- add recipient (e-mail address) -----------------------
      LOOP AT s_to .
*       create recipient object
        email = s_to-low .
        recipient = cl_cam_address_bcs=>create_internet_address( email ).
*       add recipient object to send request
        send_request->add_recipient( recipient ).
      ENDLOOP .
 
      CALL METHOD send_request->set_status_attributes
        EXPORTING
          i_requested_status = 'E'.
 
      LOOP AT s_cc .
*       create recipient object
        email = s_cc-low .
        recipient = cl_cam_address_bcs=>create_internet_address( email ).
 
*       add recipient object to send request
        send_request->add_recipient( EXPORTING i_recipient = recipient i_copy = abap_true ).
      ENDLOOP .
 
 
*     ---------- send document ---------------------------------------
      sent_to_all = send_request->send( i_with_error_screen = 'X' ).
 
      COMMIT WORK.
 
      IF sent_to_all IS INITIAL.
        MESSAGE i500(sbcoms) WITH s_to-low.
      ELSE.
        MESSAGE s022(so).
      ENDIF.
 
*   ------------ exception handling ----------------------------------
*   replace this rudimentary exception handling with your own one !!!
    CATCH cx_bcs INTO bcs_exception.
      MESSAGE i865(so) WITH bcs_exception->error_type.
  ENDTRY.
 
 
 
ENDFORM .                    "send_email
 
*&---------------------------------------------------------------------*
*&      Form  CREATE_BODY_OF_EMAIL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_MAIN_TEXT  text
*----------------------------------------------------------------------*
FORM create_body_of_email  CHANGING body_html TYPE bcsy_text.
 
  DATA : ls_line TYPE so_text255 .
 
  APPEND '<html>' TO body_html .
  APPEND '<title>Email</title>' TO body_html .
  APPEND '<body>' TO body_html  .
  APPEND '<p>Data attached</p>' TO body_html .
  APPEND '</body>' TO body_html .
  APPEND '</html>' TO body_html .
 
ENDFORM.                    " CREATE_BODY_OF_EMAIL

I tried above program with MB52.

abap POPUP:POPUP GET VALUE

popup_get_value
  field_s-tabname    = 'ZSYPRE_LOG'.
  field_s-fieldname  = 'VALUE_OLD'.
  field_s-value      = <lfs_field>.
  CONDENSE field_s-value.
  field_s-field_attr = '02'.
  APPEND field_s TO field_t.
  CLEAR field_s.

  field_s-tabname    = lv_tab.
  field_s-fieldname  = i_field.
  field_s-field_obl  = abap_true.
  APPEND field_s TO field_t.
  CLEAR field_s.

  field_s-tabname    = 'ZSYPRE_LOG'.
  field_s-fieldname  = 'DESCRIPTION'.
  field_s-field_obl  = abap_true.
  APPEND field_s TO field_t.
  CLEAR field_s.

  CALL FUNCTION 'POPUP_GET_VALUES'
    EXPORTING
*     NO_VALUE_CHECK  = ' '
      popup_title     = lv_title
*     START_COLUMN    = '5'
*     START_ROW       = '5'
    IMPORTING
      returncode      = retcode
    TABLES
      fields          = field_t
    EXCEPTIONS
      error_in_fields = 1
      OTHERS          = 2.
  IF sy-subrc <> 0.
    RAISE popup_error.
  ENDIF.

  e_retcode = retcode.
  CHECK retcode EQ ''.

abap 退出:VF01 / VF02 / VF03

EXIT VF01 _ VF02 _ VF03
Transaction Code - VF02 Change Billing Document

Exit Name Description

SDVFX007 User exit: Billing plan during transfer to Accounting

SDVFX008 User exit: Processing of transfer structures SD-FI

SDVFX009 Billing doc. processing KIDONO (payment reference number)

SDVFX010 User exit item table for the customer lines

SDVFX011 Userexit for the komkcv- and kompcv-structures

V05I0001 User exits for billing index

V05N0001 User Exits for Printing Billing Docs. using POR Procedure

V60A0001 Customer functions in the billing document

V60P0001 Data provision for additional fields for display in lists

V61A0001 Customer enhancement: Pricing

SDVFX001 User exit header line in delivery to accounting

SDVFX002 User exit for A/R line (transfer to accounting)

SDVFX003 User exit: Cash clearing (transfer to accounting)

SDVFX004 User exit: G/L line (transfer to accounting)

SDVFX005 User exit: Reserves (transfer to accounting)

SDVFX006 User exit: Tax line (transfer to accounting)

No of Exits: 16

FOR vf03.

Transaction Code - VF03 Display Billing Document

Exit Name Description

SDVFX007 User exit: Billing plan during transfer to Accounting

SDVFX008 User exit: Processing of transfer structures SD-FI

SDVFX009 Billing doc. processing KIDONO (payment reference number)

SDVFX010 User exit item table for the customer lines

SDVFX011 Userexit for the komkcv- and kompcv-structures

V05I0001 User exits for billing index

V05N0001 User Exits for Printing Billing Docs. using POR Procedure

V60A0001 Customer functions in the billing document

V60P0001 Data provision for additional fields for display in lists

V61A0001 Customer enhancement: Pricing

SDVFX001 User exit header line in delivery to accounting

SDVFX002 User exit for A/R line (transfer to accounting)

SDVFX003 User exit: Cash clearing (transfer to accounting)

SDVFX004 User exit: G/L line (transfer to accounting)

SDVFX005 User exit: Reserves (transfer to accounting)

SDVFX006 User exit: Tax line (transfer to accounting)

No of Exits: 16