Visualizzazione post con etichetta ABAP. Mostra tutti i post
Visualizzazione post con etichetta ABAP. Mostra tutti i post

mercoledì 1 settembre 2021

SALV table editabile

*---------------------------------------------------------------------*
*       CLASS lcl_handle_events DEFINITION                            *
*---------------------------------------------------------------------*
CLASS lcl_handle_events DEFINITION.

  PUBLIC SECTION.

    METHODS:

      on_after_refresh FOR EVENT after_refresh OF cl_gui_alv_grid
        IMPORTING sender,

      on_user_command FOR EVENT added_function OF cl_salv_events_table
        IMPORTING e_salv_function.

ENDCLASS.

*---------------------------------------------------------------------*
*       CLASS lcl_handle_events IMPLEMENTATION                        *
*---------------------------------------------------------------------*
CLASS lcl_handle_events IMPLEMENTATION.

  METHOD on_after_refresh.
    DATA: ls_layout TYPE lvc_s_layo,
          lt_fcat   TYPE lvc_t_fcat.
    FIELD-SYMBOLS:  LIKE LINE OF lt_fcat.
    TRY.
        SET HANDLER on_after_refresh FOR ALL INSTANCES ACTIVATION space.
        sender->get_frontend_fieldcatalog( IMPORTING et_fieldcatalog = lt_fcat ).
        sender->register_edit_event( i_event_id = cl_gui_alv_grid=>mc_evt_modified ).
        LOOP AT lt_fcat ASSIGNING .
          IF -fieldname EQ 'ZINCSTOCKPREC'
          OR -fieldname EQ 'ZINCSTOCKSUCC'.
            -edit = abap_true.
          ENDIF.
        ENDLOOP.
        sender->set_frontend_fieldcatalog( lt_fcat ).
*        ls_layout-edit = abap_true. "Edit ALL
*        sender->set_frontend_layout( ls_layout ).
        sender->set_ready_for_input( 1 ).
      CATCH cx_salv_error.
    ENDTRY.
  ENDMETHOD.

ENDCLASS.

*----------------------------------------------------------------------*
* FORM OUTPUT_ALV                                                      *
*----------------------------------------------------------------------*
FORM output_alv.

  DATA: lo_content TYPE REF TO cl_salv_form_element.

  TRY.
      CASE 'X'.
        WHEN rb_issr.
          cl_salv_table=>factory(
            IMPORTING
              r_salv_table = go_alv
            CHANGING
              t_table      = gt_terri[] ).
      ENDCASE.
    CATCH cx_salv_msg.
  ENDTRY.
  IF go_alv IS BOUND.
    CREATE OBJECT go_events.
    CASE 'X'.
      WHEN rb_cdc OR rb_issr.
        go_alv->set_screen_status(
          pfstatus = 'STANDARD_STOCK'
          report = sy-cprog
          set_functions = go_alv->c_functions_all ).
        IF rb_cdc = 'X'.
          PERFORM set_settings.
        ELSE.
          PERFORM build_header CHANGING lo_content.
          go_alv->set_top_of_list( lo_content ).
          SET HANDLER go_events->on_after_refresh FOR ALL INSTANCES ACTIVATION 'X'.
        ENDIF.
    ENDCASE.
    SET HANDLER go_events->on_user_command FOR go_alv->get_event( ).
    go_alv->get_columns( )->set_optimize( 'X' ).
    go_alv->display( ).
  ENDIF.

ENDFORM.

sabato 21 agosto 2021

Sostituzione del testo in linea

    IF ( gs_manual_xls-bsart IN gr_jomtr OR
         gs_manual_xls-bsart IN gr_jomtt OR
         gs_manual_xls-bsart IN gr_jomtp ) AND
       gs_manual_xls-zprodunit IS NOT INITIAL AND
       strlen( gs_manual_xls-zprodunit ) < 8.
      gv_status = gs_outputadv-zstatus = gc_ko.
      gv_message =
      gs_outputadv-zmessage = replace( val  = TEXT-e42
                                       sub  = '&'
                                       with = |{ gs_outputadv-zgenericarticle }_{ gs_outputadv-zzcolor }_{ gs_outputadv-zzsize }|
                                       occ  = 1 ).
    ELSE.
      gs_outputadv-zprodunit = gs_manual_xls-zprodunit.
      gs_outputadv-zmessage = gv_message.
    ENDIF.

mercoledì 11 agosto 2021

Popup per ottenere valori

  METHOD on_user_command.
    DATA: lv_retc      TYPE c,
          lt_fields    TYPE TABLE OF sval,
          ls_rows      TYPE lvc_s_row,
          lt_rows      TYPE lvc_t_row,
          lv_answer    TYPE char1,
          lt_royriutil TYPE TABLE OF ztsdo_royriutil,
          ls_royriutil TYPE ztsdo_royriutil,
          ls_h         TYPE ztsdo_condcontrh,
          ls_d         TYPE ztsdo_condcontrd.
    CASE e_salv_function.
      WHEN 'NEW'.
        IF rb_cdc = 'X'.
          CLEAR gs_condiz.
          CALL SCREEN 100 STARTING AT 5 5 ENDING AT 80 20.
        ELSE.
          APPEND VALUE #( tabname = 'TVKBT'
                          fieldname = 'VKBUR'
                          fieldtext = 'Territory'
                        ) TO lt_fields.
          APPEND VALUE #( tabname = 'ZTSDO_ROYRIUTIL'
                          fieldname = 'ZINCSTOCKPREC'
                        ) TO lt_fields.
          APPEND VALUE #( tabname = 'ZTSDO_ROYRIUTIL'
                          fieldname = 'ZINCSTOCKSUCC'
                        ) TO lt_fields.
          CALL FUNCTION 'POPUP_GET_VALUES'
            EXPORTING
              popup_title     = 'Nuova riga'
            IMPORTING
              returncode      = lv_retc
            TABLES
              fields          = lt_fields
            EXCEPTIONS
              error_in_fields = 1
              OTHERS          = 2.
          IF sy-subrc <> 0.
            MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno.
          ENDIF.
          CHECK lv_retc <> 'A'.
          gs_terri-zvkbur = lt_fields[ 1 ]-value.
          SELECT SINGLE bezei
            FROM tvkbt
            INTO gs_terri-bezei
           WHERE spras = sy-langu
             AND vkbur = gs_terri-zvkbur.
          IF sy-subrc <> 0.
            MESSAGE |Non valido: Territory { gs_terri-zvkbur }| TYPE 'I'.
            EXIT.
          ELSE.
            gs_terri-zincstockprec = lt_fields[ 2 ]-value.
            gs_terri-zincstocksucc = lt_fields[ 3 ]-value.
            APPEND gs_terri TO gt_terri.
            go_alv->refresh( ).
          ENDIF.
        ENDIF.
      WHEN 'ANNU'.
        [...]
      WHEN 'SAVE'.
        [...]
      WHEN 'CONF'.
        [...]
    ENDCASE.
  ENDMETHOD.

domenica 1 agosto 2021

Esempio di UNION DISTINCT

  DATA: lr_zauth TYPE RANGE OF zesd_auth.
  SELECT DISTINCT 'I', 'EQ', z_auth
    FROM ztsdo_ret_cancel
  UNION DISTINCT
  SELECT 'I', 'EQ', z_auth
    FROM ztsdo_ret_rej
    INTO TABLE @lr_zauth.
  IF lr_zauth[] IS NOT INITIAL.
    DELETE gi_gr_items WHERE zsd_auth IN lr_zauth.
  ENDIF.

giovedì 1 luglio 2021

Help F4 su tabella ALV

*----------------------------------------------------------------------*
* DECLARATIONS                                                         *
*----------------------------------------------------------------------*
TABLES: fsh_seasons, kna1, vbak, ztsdo_pr_ven_web.

TYPES: BEGIN OF ty_out,
         chkbx       TYPE c,
         kunnr       TYPE ztsdo_pr_ven_web-kunnr,
         name1       TYPE kna1-name1,
         zreserve_no TYPE ztsdo_pr_ven_web-zreserve_no,
         vbeln       TYPE ztsdo_res_sch-vbeln,
         posnr       TYPE ztsdo_res_sch-posnr,
         etenr       TYPE ztsdo_res_sch-etenr,
         text        TYPE ztsdo_res_sch-text,
         zzseason    TYPE ztsdo_res_sch-zzseason,
         fsh_season  TYPE vbap-fsh_season,
         land1       TYPE kna1-land1,
         zzsubbrand  TYPE vbak-zzsubbrand,
         qty         TYPE kwmeng,
         zvaltot     TYPE bp_wgt,
         zkschl      TYPE ztsdo_res_sch-zkschl,
         zprcsc      TYPE ztsdo_res_sch-zprcsc,
         zschl_02    TYPE kscha,
         zprcsc_02   TYPE kbetr,
         zvalnet     TYPE vbak-netwr,
         zwaerk      TYPE waerk,
         zaugru      TYPE ztsdo_res_sch-zaugru,
         zdtaord     TYPE ztsdo_pr_ven_web-zdtaord,
         zstato      TYPE ztsdo_pr_ven_web-zstato,
         zdescr      TYPE ztsdo_statven_pt-zdescr,
         zupddat     TYPE ztsdo_pr_ven_web-zupddat,
         style       TYPE lvc_t_styl,
       END OF ty_out,
       ty_outtab TYPE STANDARD TABLE OF ty_out.

DATA: gt_out TYPE ty_outtab.

CLASS lcl_event_receiver DEFINITION DEFERRED.

DATA: go_custom_c       TYPE REF TO cl_gui_custom_container,
      go_grid           TYPE REF TO cl_gui_alv_grid,
      go_event_receiver TYPE REF TO lcl_event_receiver,
      gs_stable         TYPE lvc_s_stbl,
      gt_excl_func      TYPE ui_functions,
      gv_ts             TYPE timestamp,
      gv_ora            TYPE syst_uzeit.

*----------------------------------------------------------------------*
* CLASS LCL_EVENT_RECEIVER DEFINITION                                  *
*----------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.

  PUBLIC SECTION.
    METHODS:

      handle_onf4 FOR EVENT onf4 OF cl_gui_alv_grid
        IMPORTING
            e_fieldname
            e_fieldvalue
            es_row_no
            er_event_data
            et_bad_cells
            e_display.

ENDCLASS.                    "lcl_event_receiver DEFINITION

*----------------------------------------------------------------------*
* CLASS LCL_EVENT_RECEIVER IMPLEMENTATION                              *
*----------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.

  METHOD handle_onf4.
    FIELD-SYMBOLS:  TYPE STANDARD TABLE,
                     TYPE lvc_t_modi.
    DATA: lv_retfield TYPE dfies-fieldname,
          lt_return   TYPE TABLE OF ddshretval.
    CASE e_fieldname.
      WHEN 'ZAUGRU'.
        SELECT augru, bezei
          FROM tvaut
          INTO TABLE @DATA(lt_tvaut)
         WHERE spras = @sy-langu.
        lv_retfield = 'AUGRU'.
        ASSIGN lt_tvaut TO .
      WHEN 'ZKSCHL' OR 'ZSCHL_02'.
        SELECT kschl, vtext
          FROM t685t
          INTO TABLE @DATA(lt_t685t)
         WHERE kvewe = 'A'
           AND kappl = 'V'
           AND spras = @sy-langu.
        lv_retfield = 'KSCHL'.
        ASSIGN lt_t685t TO .
    ENDCASE.
    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
      EXPORTING
        retfield        = lv_retfield
        value_org       = 'S'
      TABLES
        value_tab       = 
        return_tab      = lt_return
      EXCEPTIONS
        parameter_error = 1
        no_values_found = 2
        OTHERS          = 3.
    IF sy-subrc = 0 AND lt_return[] IS NOT INITIAL.
      ASSIGN er_event_data->m_data->* TO .
      APPEND VALUE #( row_id    = es_row_no-row_id
                      fieldname = e_fieldname
                      value     = lt_return[ 1 ]-fieldval ) TO .
    ENDIF.
    er_event_data->m_event_handled = 'X'.
  ENDMETHOD.                    "handle_onf4

ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION

*----------------------------------------------------------------------*
* LAYOUT                                                               *
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: so_kunnr FOR kna1-kunnr,
                so_seasn FOR fsh_seasons-fsh_season,
                so_land1 FOR kna1-land1,
                so_subbr FOR vbak-zzsubbrand,
                so_stato FOR ztsdo_pr_ven_web-zstato DEFAULT '01'.
PARAMETERS: cb_bkg AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK b1.

*----------------------------------------------------------------------*
* INIT                                                                 *
*----------------------------------------------------------------------*
INITIALIZATION.
  gs_stable-row = 'X'.
  gs_stable-col = 'X'.
  gv_ora = sy-uzeit.
  gv_ts = sy-datum && sy-uzeit.

*----------------------------------------------------------------------*
* PROGRAM BODY                                                         *
*----------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM get_data.
  IF cb_bkg IS INITIAL.
    CALL SCREEN 100.
  ELSE.
    PERFORM sale_approval USING gt_out.
  ENDIF.

END-OF-SELECTION.
  EXIT.

*----------------------------------------------------------------------*
*                                                                      *
*                      ██████╗  ██████╗   ██████╗                      *
*                      ██╔══██╗ ██╔══██╗ ██╔═══██╗                     *
*                      ██████╔╝ ██████╔╝ ██║   ██║                     *
*                      ██╔═══╝  ██╔══██╗ ██║   ██║                     *
*                      ██║      ██████╔╝ ╚██████╔╝                     *
*                      ╚═╝      ╚═════╝   ╚═════╝                      *
*                                                                      *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* MODULE STATUS_0100 OUTPUT                                            *
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.

  DATA: ls_layout   TYPE lvc_s_layo,
        lt_fieldcat TYPE lvc_t_fcat,
        lt_f4       TYPE lvc_t_f4.

  SET PF-STATUS 'ZPF01'.
  SET TITLEBAR 'ZTITLE01'.

  IF go_custom_c IS INITIAL.

*   Creo il container
    CREATE OBJECT go_custom_c
      EXPORTING
        container_name = 'CONTAINER'.

    PERFORM exclude_tb_func.
    PERFORM build_fielcat CHANGING lt_fieldcat.

    CREATE OBJECT go_grid
      EXPORTING
        i_parent = go_custom_c.

    APPEND VALUE lvc_s_f4( fieldname  = 'ZAUGRU'
                           register   = 'X' ) TO lt_f4.
    APPEND VALUE lvc_s_f4( fieldname  = 'ZKSCHL'
                           register   = 'X' ) TO lt_f4.
    APPEND VALUE lvc_s_f4( fieldname  = 'ZSCHL_02'
                           register   = 'X' ) TO lt_f4.
    CALL METHOD go_grid->register_f4_for_fields
      EXPORTING
        it_f4 = lt_f4.

    ls_layout-stylefname = 'STYLE'.

    CALL METHOD go_grid->set_table_for_first_display
      EXPORTING
        is_layout            = ls_layout
        it_toolbar_excluding = gt_excl_func
      CHANGING
        it_fieldcatalog      = lt_fieldcat
        it_outtab            = gt_out.

    CREATE OBJECT go_event_receiver.
    SET HANDLER go_event_receiver->handle_onf4
            FOR go_grid.

  ENDIF.

ENDMODULE.

*----------------------------------------------------------------------*
*                                                                      *
*                        ██████╗   █████╗  ██╗                         *
*                        ██╔══██╗ ██╔══██╗ ██║                         *
*                        ██████╔╝ ███████║ ██║                         *
*                        ██╔═══╝  ██╔══██║ ██║                         *
*                        ██║      ██║  ██║ ██║                         *
*                        ╚═╝      ╚═╝  ╚═╝ ╚═╝                         *
*                                                                      *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* MODULE USER_COMMAND_0100 INPUT                                       *
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.

  CASE sy-ucomm.
    WHEN 'BACK' OR 'UP'.
      FREE: go_custom_c,
            go_grid,
            go_event_receiver.
      LEAVE TO SCREEN 0.
    WHEN 'EXIT'.
      FREE: go_custom_c,
            go_grid,
            go_event_receiver.
      LEAVE PROGRAM.
  ENDCASE.

ENDMODULE.

*----------------------------------------------------------------------*
*                                                                      *
*           ███████╗  ██████╗  ██████╗  ███╗   ███╗ ███████╗           *
*           ██╔════╝ ██╔═══██╗ ██╔══██╗ ████╗ ████║ ██╔════╝           *
*           █████╗   ██║   ██║ ██████╔╝ ██╔████╔██║ ███████╗           *
*           ██╔══╝   ██║   ██║ ██╔══██╗ ██║╚██╔╝██║ ╚════██║           *
*           ██║      ╚██████╔╝ ██║  ██║ ██║ ╚═╝ ██║ ███████║           *
*           ╚═╝       ╚═════╝  ╚═╝  ╚═╝ ╚═╝     ╚═╝ ╚══════╝           *
*                                                                      *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* FORM GET_DATA                                                        *
*----------------------------------------------------------------------*
FORM get_data.

[...]

ENDFORM.

*----------------------------------------------------------------------*
* FORM EXCLUDE_TB_FUNC                                                 *
*----------------------------------------------------------------------*
FORM exclude_tb_func.

[...]

ENDFORM.

*----------------------------------------------------------------------*
* FORM BUILD_FIELCAT                                                   *
*----------------------------------------------------------------------*
FORM build_fielcat CHANGING pt_fieldcat TYPE lvc_t_fcat.

  DATA ls_fieldcat TYPE lvc_s_fcat.

  DEFINE fill_fieldcat.
    ADD 1 TO ls_fieldcat-col_pos.
    ls_fieldcat-fieldname = &1.
    ls_fieldcat-reptext = &2.
    ls_fieldcat-f4availabl = &3.
    ls_fieldcat-outputlen = &4.
    APPEND ls_fieldcat TO pt_fieldcat.
  END-OF-DEFINITION.

  ls_fieldcat-key = space.
  ls_fieldcat-tabname = 'GT_OUT'.
  ls_fieldcat-edit = ls_fieldcat-no_out = 'X'.
  fill_fieldcat 'CHKBX'       'X'                    ''  '2'.
  ls_fieldcat-edit = ls_fieldcat-no_out = ''.
  fill_fieldcat 'KUNNR'       'Negozio'              ''  '10'.
  fill_fieldcat 'NAME1'       'Descrizione'          ''  '35'.
  fill_fieldcat 'ZRESERVE_NO' 'Numero prenotazione'  ''  '10'.
  fill_fieldcat 'TEXT'        'Descr. prenotazione'  ''  '40'.
  fill_fieldcat 'ZZSEASON'    'Stag.Vendita'         ''  '4'.
  fill_fieldcat 'FSH_SEASON'  'Stag.Giacenza'        ''  '4'.
  fill_fieldcat 'LAND1'       'Paese'                ''  '2'.
  fill_fieldcat 'ZZSUBBRAND'  'Marchio'              ''  '2'.
  fill_fieldcat 'QTY'         'Capi'                 ''  '19'.
  fill_fieldcat 'ZVALTOT'     'Valore totale'        ''  '21'.
  fill_fieldcat 'ZKSCHL'      'Cond.Sconto'          'X' '4'.
  fill_fieldcat 'ZPRCSC'      'Percent.Sconto'       ''  '16'.
  fill_fieldcat 'ZSCHL_02'    '2ª Cond.Sconto'       'X' '4'.
  fill_fieldcat 'ZPRCSC_02'   '2ª Percent.Sconto'    ''  '16'.
  fill_fieldcat 'ZVALNET'     'Valore netto'         ''  '21'.
  fill_fieldcat 'ZWAERK'      'Divisa'               ''  '5'.
  fill_fieldcat 'ZAUGRU'      'Mot.Ordine'           'X' '3'.
  fill_fieldcat 'ZDTAORD'     'Data ordine'          ''  '10'.
  fill_fieldcat 'ZSTATO'      'Stato'                ''  '2'.
  fill_fieldcat 'ZDESCR'      'Descr.stato'          ''  '30'.
  fill_fieldcat 'ZUPDDAT'     'Data evasione'        ''  '10'.

ENDFORM.

*----------------------------------------------------------------------*
* FORM SALE_APPROVAL                                                   *
*----------------------------------------------------------------------*
FORM sale_approval USING pt_out TYPE ty_outtab.

[...]

ENDFORM.

*----------------------------------------------------------------------*

lunedì 28 giugno 2021

Leggere campi dynpro non aggiornati

  IF rb_pick = gc_x AND
     p_zppsl IS NOT INITIAL AND
     gv_scr300_werks-werks IS NOT INITIAL.
    APPEND VALUE #( fieldname = 'P_ZPPSL' ) TO lt_dynpread.
    CALL FUNCTION 'DYNP_VALUES_READ'
      EXPORTING
        dyname     = sy-cprog
        dynumb     = '0301'
      TABLES
        dynpfields = lt_dynpread.
    IF sy-subrc = 0.
      READ TABLE lt_dynpread INTO DATA(ls_dynpread) WITH KEY fieldname = 'P_ZPPSL'.
      SELECT @abap_true
       UP TO 1 ROWS
        FROM t001l
        INTO @DATA(lv_exists)
       WHERE werks = @gv_scr300_werks-werks
         AND lgort = @ls_dynpread-fieldvalue.
      ENDSELECT.
      IF lv_exists IS INITIAL.
        MESSAGE TEXT-e19 TYPE gc_s DISPLAY LIKE gc_e.
        EXIT.
      ELSE.
        CLEAR lv_exists.
      ENDIF.
    ENDIF.
  ENDIF.

martedì 1 giugno 2021

Bottoni dentro tabella ALV

*----------------------------------------------------------------------*
REPORT zfbc_monitor_fabio.

*----------------------------------------------------------------------*
* DECLARATIONS                                                         *
*----------------------------------------------------------------------*
DATA: BEGIN OF gs_out,
        name  TYPE eps2filnam,
        datum TYPE crdate,
        uzeit LIKE sy-uzeit,
        pdf   TYPE icon_d,
      END OF gs_out.
DATA: gt_out LIKE STANDARD TABLE OF gs_out.

DATA: gv_dirnam   TYPE eps2filnam,
      gv_url(255) TYPE c,
      gv_content  TYPE xstring,
      gv_fatt     TYPE zflag_fatt,
      gv_lett     TYPE zflag_lett,
      gv_canc     TYPE zflag_canc,
      gv_ap       TYPE zfbc_area.

DATA: go_container_r     TYPE REF TO cl_gui_container,
      go_container_l     TYPE REF TO cl_gui_container,
      go_docking         TYPE REF TO cl_gui_docking_container,
      go_splitter        TYPE REF TO cl_gui_splitter_container,
      go_gui_html_viewer TYPE REF TO cl_gui_html_viewer,
      go_alv             TYPE REF TO cl_salv_table.

CLASS lcl_handle_events DEFINITION DEFERRED.

DATA: go_events TYPE REF TO lcl_handle_events.

DATA: ok_code TYPE syucomm.

*---------------------------------------------------------------------*
*       CLASS lcl_handle_events DEFINITION                            *
*---------------------------------------------------------------------*
CLASS lcl_handle_events DEFINITION.

  PUBLIC SECTION.

    METHODS:

      on_user_command FOR EVENT added_function OF cl_salv_events_table
        IMPORTING e_salv_function,

      on_single_click FOR EVENT link_click OF cl_salv_events_table
        IMPORTING row column.

ENDCLASS.

*---------------------------------------------------------------------*
*       CLASS lcl_handle_events IMPLEMENTATION                        *
*---------------------------------------------------------------------*
CLASS lcl_handle_events IMPLEMENTATION.

  METHOD on_user_command.

    DATA: lv_answer     TYPE c,
          lv_url(255)   TYPE c,
          lo_selections TYPE REF TO cl_salv_selections,
          lt_rows       TYPE salv_t_row,
          ls_row        TYPE i,
          ls_cell       TYPE salv_s_cell.

    CHECK e_salv_function = '&DEL'.
    lo_selections = go_alv->get_selections( ).
    lt_rows = lo_selections->get_selected_rows( ).
    CHECK lt_rows[] IS NOT INITIAL.
    CALL FUNCTION 'POPUP_TO_CONFIRM'
      EXPORTING
        text_question = 'Sicuro di voler eliminare i file?'
      IMPORTING
        answer        = lv_answer.
    CHECK lv_answer = '1'.
    LOOP AT lt_rows INTO ls_row.
      READ TABLE gt_out INTO gs_out INDEX ls_row.
      CONCATENATE gv_dirnam gs_out-name INTO lv_url.
      DELETE DATASET lv_url.
      CLEAR gs_out-name.
      MODIFY gt_out FROM gs_out
                    INDEX ls_row
                    TRANSPORTING name.
      CHECK lv_url = gv_url.
      lv_answer = 'D'.
    ENDLOOP.
    DELETE gt_out WHERE name IS INITIAL.
    CLEAR lt_rows[].
    lo_selections->set_selected_rows( lt_rows[] ).
    ls_cell-row = 1.
    ls_cell-columnname = 'NAME'.
    lo_selections->set_current_cell( ls_cell ).
    go_alv->refresh( ).
    CHECK lv_answer = 'D'.
    IF gt_out[] IS NOT INITIAL.
      PERFORM preview_pdf USING 1.
    ELSE.
      CALL METHOD go_container_r->free
        EXCEPTIONS
          cntl_error        = 1
          cntl_system_error = 2
          OTHERS            = 3.
      CLEAR go_container_r.
    ENDIF.

  ENDMETHOD.

  METHOD on_single_click.

    CASE column.
      WHEN 'NAME'.
        PERFORM preview_pdf USING row.
      WHEN 'PDF'.
        PERFORM view_pdf USING row.
    ENDCASE.

  ENDMETHOD.

ENDCLASS.

*----------------------------------------------------------------------*
* LAYOUT                                                               *
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
SELECTION-SCREEN SKIP.
SELECT-OPTIONS: so_datum FOR sy-datum DEFAULT sy-datum.
PARAMETERS:     pa_uname LIKE sy-uname DEFAULT sy-uname.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-004.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT   (30) TEXT-002 MODIF ID id3.
SELECTION-SCREEN COMMENT 31(30) TEXT-003 MODIF ID id3.
SELECTION-SCREEN COMMENT 61(30) TEXT-011 MODIF ID id3.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: rb_fad RADIOBUTTON GROUP rbg1 MODIF ID id1.
SELECTION-SCREEN COMMENT 3(27) TEXT-005   MODIF ID id1.
PARAMETERS: rb_fai RADIOBUTTON GROUP rbg1 MODIF ID id1.
SELECTION-SCREEN COMMENT 33(27) TEXT-005  MODIF ID id1.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: rb_lnd RADIOBUTTON GROUP rbg1 MODIF ID id2 DEFAULT 'X'.
SELECTION-SCREEN COMMENT 3(27) TEXT-006   MODIF ID id2.
PARAMETERS: rb_lni RADIOBUTTON GROUP rbg1 MODIF ID id2.
SELECTION-SCREEN COMMENT 33(27) TEXT-006  MODIF ID id2.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: rb_lsd RADIOBUTTON GROUP rbg1 MODIF ID id4.
SELECTION-SCREEN COMMENT 3(27) TEXT-007   MODIF ID id4.
PARAMETERS: rb_lsi RADIOBUTTON GROUP rbg1 MODIF ID id4.
SELECTION-SCREEN COMMENT 33(27) TEXT-007  MODIF ID id4.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: rb_lcd RADIOBUTTON GROUP rbg1 MODIF ID id4.
SELECTION-SCREEN COMMENT 3(27) TEXT-009   MODIF ID id4.
PARAMETERS: rb_lci RADIOBUTTON GROUP rbg1 MODIF ID id4.
SELECTION-SCREEN COMMENT 33(27) TEXT-009  MODIF ID id4.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: rb_lgd RADIOBUTTON GROUP rbg1 MODIF ID id5.
SELECTION-SCREEN COMMENT 3(27) TEXT-010   MODIF ID id5.
PARAMETERS: rb_lgi RADIOBUTTON GROUP rbg1 MODIF ID id5.
SELECTION-SCREEN COMMENT 33(27) TEXT-010  MODIF ID id5.
PARAMETERS: rb_lgn RADIOBUTTON GROUP rbg1 MODIF ID id5.
SELECTION-SCREEN COMMENT 63(27) TEXT-010  MODIF ID id5.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN END OF BLOCK b1.

*----------------------------------------------------------------------*
* EVENTS                                                               *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF screen-group1 = 'ID1' AND
       gv_fatt IS INITIAL.
      screen-output = 0.
      screen-input = 0.
      screen-active = 0.
      MODIFY SCREEN.
    ENDIF.
    IF screen-group1 = 'ID2' AND
       gv_lett IS INITIAL.
      screen-output = 0.
      screen-input = 0.
      screen-active = 0.
      MODIFY SCREEN.
    ENDIF.
    IF screen-group1 = 'ID3'.
      screen-intensified = 1.
      MODIFY SCREEN.
    ENDIF.
    IF screen-group1 = 'ID4' AND
       gv_lett IS INITIAL.
      screen-output = 0.
      screen-input = 0.
      screen-active = 0.
      MODIFY SCREEN.
    ENDIF.
    IF screen-group1 = 'ID5' AND
       gv_lett IS INITIAL.
      screen-output = 0.
      screen-input = 0.
      screen-active = 0.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.

*----------------------------------------------------------------------*
* INIT                                                                 *
*----------------------------------------------------------------------*
INITIALIZATION.

  SELECT SINGLE flag_fatt flag_lett flag_canc
    FROM zfbc_mon_fabio_a
    INTO (gv_fatt, gv_lett, gv_canc)
   WHERE uname = sy-uname.

  REFRESH so_datum[].
  so_datum-low    = sy-datum - 7.
  so_datum-high   = sy-datum.
  so_datum-option = 'BT'.
  so_datum-sign   = 'I'.
  APPEND so_datum.
  CLEAR so_datum.

*----------------------------------------------------------------------*
* PROGRAM BODY                                                         *
*----------------------------------------------------------------------*
START-OF-SELECTION.

  PERFORM dir_list.

END-OF-SELECTION.

  CHECK gt_out[] IS NOT INITIAL.
  CALL SCREEN 100.

*----------------------------------------------------------------------*
*                                                                      *
*                      #######  #######   #######                      *
*                      ###  ### ###  ### #### ####                     *
*                      ###  ### ###  ### ###   ###                     *
*                      #######  #######  ###   ###                     *
*                      ###      ###  ### ###   ###                     *
*                      ###      ###  ### #### ####                     *
*                      ###      #######   #######                      *
*                                                                      *
*----------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.

  SET PF-STATUS 'D0100'.
  SET TITLEBAR 'D0100'.

  PERFORM output_alv.

ENDMODULE.

*----------------------------------------------------------------------*
*                                                                      *
*                        #######   ######  ###                         *
*                        ###  ### ###  ### ###                         *
*                        ###  ### ###  ### ###                         *
*                        #######  ######## ###                         *
*                        ###      ###  ### ###                         *
*                        ###      ###  ### ###                         *
*                        ###      ###  ### ###                         *
*                                                                      *
*----------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.

  PERFORM user_command.

ENDMODULE.

*----------------------------------------------------------------------*
*                                                                      *
*           ########  #######  #######  ####   #### ########           *
*           ######## #### #### ###  ### ##### ##### ########           *
*           ######   ###   ### ###  ### ########### #####              *
*           ######   ###   ### #######  ########### ########           *
*           ###      ###   ### ###  ### ### ### ###    #####           *
*           ###      #### #### ###  ### ###     ### ########           *
*           ###       #######  ###  ### ###     ### ########           *
*                                                                      *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* FORM DIR_LIST                                                        *
*----------------------------------------------------------------------*
FORM dir_list.

  CONSTANTS: lc_days1980 TYPE i VALUE 3652,
             lc_hours    TYPE uzeit VALUE '020000'.

  DATA: lt_dir TYPE STANDARD TABLE OF eps2fili,
        ls_dir LIKE LINE OF lt_dir.

  DATA: lv_pit       TYPE i,
        lv_mtime(12) TYPE c.

  DATA: ls_path     TYPE zfbc_path_postel.
  DATA: path_ln TYPE string,
        path_ls TYPE string,
        path_lc TYPE string,
        path_lg TYPE string,
        path_ft TYPE string.

  SELECT DISTINCT * FROM zfbc_path_postel
   INTO ls_path WHERE area_app = 'LT'.
  ENDSELECT.

  IF sy-subrc = 0.
    path_ln =  ls_path-path_ln.
    path_ls =  ls_path-path_ls.
    path_lc =  ls_path-path_lc.
    path_lg =  ls_path-path_lg.
    REPLACE ALL OCCURRENCES OF 'SYSID' IN path_ln WITH sy-sysid.
    REPLACE ALL OCCURRENCES OF 'SYSID' IN path_ls WITH sy-sysid.
    REPLACE ALL OCCURRENCES OF 'SYSID' IN path_lc WITH sy-sysid.
    REPLACE ALL OCCURRENCES OF 'SYSID' IN path_lg WITH sy-sysid.
  ENDIF.

  SELECT DISTINCT * FROM zfbc_path_postel
     INTO ls_path WHERE area_app = 'FT'.
  ENDSELECT.

  IF sy-subrc = 0.
    path_ft =  ls_path-path_ln.
    REPLACE ALL OCCURRENCES OF 'SYSID' IN path_ft WITH sy-sysid.
  ENDIF.

  CASE 'X'.
    WHEN rb_fad.
      gv_dirnam = path_ft.
    WHEN rb_lnd.
      gv_dirnam = path_ln.
    WHEN rb_lsd.
      gv_dirnam = path_ls.
    WHEN rb_lcd.
      gv_dirnam = path_lc.
    WHEN rb_lgd.
      gv_dirnam = path_lg.
    WHEN rb_fai.
      REPLACE ALL OCCURRENCES OF '/FABIO/' IN path_ft WITH '/FABIO/SENT/'.
      gv_dirnam = path_ft.
    WHEN rb_lni.
      REPLACE ALL OCCURRENCES OF '/FABIO/' IN path_ln WITH '/FABIO/SENT/'.
      gv_dirnam = path_ln.
    WHEN rb_lsi.
      REPLACE ALL OCCURRENCES OF '/FABIO/' IN path_ls WITH '/FABIO/SENT/'.
      gv_dirnam = path_ls.
    WHEN rb_lci.
      REPLACE ALL OCCURRENCES OF '/FABIO/' IN path_lc WITH '/FABIO/SENT/'.
      gv_dirnam = path_lc.
    WHEN rb_lgi.
      REPLACE ALL OCCURRENCES OF '/FABIO/' IN path_lg WITH '/FABIO/SENT/'.
      gv_dirnam = path_lg.
    WHEN rb_lgn.
      CONCATENATE path_lg '/NO_FABIO/' INTO path_lg.
      gv_dirnam = path_lg.
  ENDCASE.

  CALL FUNCTION 'EPS2_GET_DIRECTORY_LISTING'
    EXPORTING
      iv_dir_name            = gv_dirnam
    TABLES
      dir_list               = lt_dir
    EXCEPTIONS
      invalid_eps_subdir     = 1
      sapgparam_failed       = 2
      build_directory_failed = 3
      no_authorization       = 4
      read_directory_failed  = 5
      too_many_read_errors   = 6
      empty_directory_list   = 7.

  IF sy-subrc <> 0
  OR lt_dir[] IS INITIAL.
    MESSAGE i208(00) WITH TEXT-008.
    EXIT.
  ENDIF.

  gs_out-pdf = '@IT@'.
  LOOP AT lt_dir INTO ls_dir WHERE name CP '*.PDF'.
    gs_out-name = ls_dir-name.
    CONCATENATE ls_dir-mtim+6(4) ls_dir-mtim+3(2) ls_dir-mtim(2)
  INTO gs_out-datum.
    CONCATENATE ls_dir-mtim+11(2) ls_dir-mtim+14(2) ls_dir-mtim+17(2)
    INTO gs_out-uzeit.
    CHECK gs_out-datum IN so_datum.
    CHECK gs_out-datum IN so_datum.
    IF pa_uname IS NOT INITIAL.
      IF gs_out-name CS pa_uname.
        APPEND gs_out TO gt_out.
      ENDIF.
    ELSE.
      APPEND gs_out TO gt_out.
    ENDIF.
  ENDLOOP.

  IF gt_out[] IS INITIAL.
    MESSAGE i208(00) WITH TEXT-008.
    EXIT.
  ELSE.
    SORT gt_out.
  ENDIF.

ENDFORM.

*----------------------------------------------------------------------*
* FORM OUTPUT_ALV                                                      *
*----------------------------------------------------------------------*
FORM output_alv.

  CLEAR: go_docking, go_splitter, go_container_l, go_container_r.

  CREATE OBJECT go_docking
    EXPORTING
      repid = sy-repid
      dynnr = '0100'
      ratio = '95'. "--max container length

* Create a splitter with 1 row and 2 column
  CREATE OBJECT go_splitter
    EXPORTING
      parent  = go_docking
      rows    = 1
      columns = 2.

** Right Container
  go_splitter->get_container(
    EXPORTING
      row       = 1
      column    = 2
    RECEIVING
      container = go_container_r ).

** Left Container
  go_splitter->get_container(
    EXPORTING
      row       = 1
      column    = 1
    RECEIVING
      container = go_container_l ).

  CREATE OBJECT go_gui_html_viewer
    EXPORTING
      parent = go_container_r.
  PERFORM preview_pdf USING 1.

  TRY.
      cl_salv_table=>factory(
        EXPORTING
          r_container = go_container_l
        IMPORTING
          r_salv_table = go_alv
        CHANGING
          t_table      = gt_out ).
      PERFORM set_settings.
      go_alv->display( ).
    CATCH cx_salv_msg.
      " error handling
      RETURN.
  ENDTRY.

ENDFORM.

*----------------------------------------------------------------------*
* FORM SET_SETTINGS                                                    *
*----------------------------------------------------------------------*
FORM set_settings.

  DATA: ls_key        TYPE salv_s_layout_key,
        lo_cols       TYPE REF TO cl_salv_columns_table,
        lo_col        TYPE REF TO cl_salv_column_table,
        lo_funcs      TYPE REF TO cl_salv_functions_list,
        lo_layout     TYPE REF TO cl_salv_layout,
        lo_display    TYPE REF TO cl_salv_display_settings,
        lo_selections TYPE REF TO cl_salv_selections,
        lo_events     TYPE REF TO cl_salv_events_table.

*Events
  lo_events = go_alv->get_event( ).
  CREATE OBJECT go_events.
  SET HANDLER go_events->on_user_command FOR lo_events.
  SET HANDLER go_events->on_single_click FOR lo_events.

*Columns
  lo_cols = go_alv->get_columns( ).
  TRY.
      lo_col ?= lo_cols->get_column( 'NAME' ).
      lo_col->set_cell_type( if_salv_c_cell_type=>hotspot ).
      lo_col ?= lo_cols->get_column( 'PDF' ).
      lo_col->set_cell_type( if_salv_c_cell_type=>button ).
      lo_col->set_short_text( 'View Pdf' ).
    CATCH cx_salv_error.
      " error handling
      RETURN.
  ENDTRY.

  lo_cols->set_optimize( 'X' ).

*Layouts
  ls_key-report = sy-repid.
  lo_layout = go_alv->get_layout( ).
  lo_layout->set_key( ls_key ).
  lo_layout->set_default( 'X' ).
  lo_layout->set_save_restriction( ).

*Functions
  lo_funcs = go_alv->get_functions( ).
  lo_funcs->set_all( ).
  IF ( rb_fad = 'X' OR rb_lnd = 'X' OR rb_lsd = 'X' OR rb_lcd = 'X' )
    AND gv_canc = 'X'.
    TRY.
        lo_funcs->add_function(
          name     = '&DEL'
          icon     = '@11@'
          text     = ''
          tooltip  = 'Eliminare'
          position =
            if_salv_c_function_position=>right_of_salv_functions ).
      CATCH cx_salv_wrong_call.
        " error handling
        RETURN.
    ENDTRY.
  ENDIF.

*Display Settings
  lo_display = go_alv->get_display_settings( ).
  lo_display->set_striped_pattern( 'X' ).

*Selections
  lo_selections = go_alv->get_selections( ).
  lo_selections->set_selection_mode(
    if_salv_c_selection_mode=>row_column ).

ENDFORM.

*----------------------------------------------------------------------*
* FORM USER_COMMAND                                                    *
*----------------------------------------------------------------------*
FORM user_command.

  CASE ok_code.
    WHEN 'BACK' OR 'EXIT' OR 'CANC'.
      SET SCREEN 0.
      LEAVE SCREEN.
  ENDCASE.

ENDFORM.

*----------------------------------------------------------------------*
* FORM PREVIEW_PDF                                                     *
*----------------------------------------------------------------------*
FORM preview_pdf USING pf_row TYPE i.

  DATA: lv_url(255) TYPE c,
        lt_data     TYPE STANDARD TABLE OF x255.

  READ TABLE gt_out INTO gs_out INDEX pf_row.
  CONCATENATE gv_dirnam gs_out-name INTO gv_url.
  OPEN DATASET gv_url FOR INPUT IN BINARY MODE.
  CHECK sy-subrc = 0.
  READ DATASET gv_url INTO gv_content.
  CLOSE DATASET gv_url.

  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
    EXPORTING
      buffer     = gv_content
    TABLES
      binary_tab = lt_data.

  go_gui_html_viewer->load_data(
    EXPORTING
      type                 = 'application'
      subtype              = 'pdf'
    IMPORTING
      assigned_url         = lv_url
    CHANGING
      data_table           = lt_data
    EXCEPTIONS
      dp_invalid_parameter = 1
      dp_error_general     = 2
      cntl_error           = 3
      OTHERS               = 4 ).
  go_gui_html_viewer->show_url(
    url = lv_url
    in_place = 'X' ).

ENDFORM.

*----------------------------------------------------------------------*
* FORM VIEW_PDF                                                        *
*----------------------------------------------------------------------*
FORM view_pdf USING pf_row TYPE i.

  DATA: lv_url(255) TYPE c,
        lv_content  TYPE xstring.

  READ TABLE gt_out INTO gs_out INDEX pf_row.
  CONCATENATE gv_dirnam gs_out-name INTO lv_url.
  IF lv_url <> gv_url.
    OPEN DATASET lv_url FOR INPUT IN BINARY MODE.
    CHECK sy-subrc = 0.
    READ DATASET lv_url INTO lv_content.
    CLOSE DATASET lv_url.
  ELSE.
    lv_content = gv_content.
  ENDIF.

  CALL FUNCTION 'ISH_DALE_PDF_DISPLAY'
    EXPORTING
      i_pdf = lv_content.

ENDFORM.

*----------------------------------------------------------------------*

giovedì 20 maggio 2021

Da range a clausola where

  TYPES: BEGIN OF ty_range,
           tablename LIKE rsdstabs-prim_tab,
           frange_t TYPE ty_frange_t,
         END OF ty_range.
  TYPES: ty_range_t TYPE STANDARD TABLE OF ty_range.
  TYPES: ty_fields TYPE STANDARD TABLE OF rsdsfields.
  
  DATA: it_fields TYPE ty_fields.
  DATA: it_ranges TYPE ty_range_t.
  DATA: lv_selid TYPE rsdynsel-selid.
  DATA: lt_tables TYPE STANDARD TABLE OF rsdstabs.
  DATA: lt_where TYPE rsds_twhere.

  CALL FUNCTION 'FREE_SELECTIONS_INIT'
    EXPORTING
      kind         = 'T'
    IMPORTING
      selection_id = lv_selid
    TABLES
      tables_tab   = lt_tables.

  CALL FUNCTION 'FREE_SELECTIONS_DIALOG'
    EXPORTING
      selection_id    = lv_selid
      title           = 'Select WHERE criteria'
      as_window       = 'X'
      start_row       = 7
      start_col       = 10
    IMPORTING
      field_ranges    = it_ranges
    TABLES
      fields_tab      = it_fields
    EXCEPTIONS
      internal_error  = 1
      no_action       = 2
      selid_not_found = 3
      illegal_status  = 4
      OTHERS          = 5.

  CALL FUNCTION 'FREE_SELECTIONS_RANGE_2_WHERE'
    EXPORTING
      field_ranges  = it_ranges
    IMPORTING
      where_clauses = lt_where.

sabato 1 maggio 2021

SAPscript: testo legato alla valorizzazione della variabile

/EDATI_BANCA_P
*&t_banca-banka&
*&t_banca-stras&
*&t_banca-ort01&
/:IF &T_BANCA-BANKS& EQ 'IT '.
*&'Cod. ABI: 't_banca-abi& &'Cod. CAB: 't_banca-cab&
/:ELSE.
*&t_banca-str&&t_banca-bnklz&
/:ENDIF.

mercoledì 9 dicembre 2020

Accedere alle tabelle interne (senza READ TABLE)

*----------------------------------------------------------------------*
* FORM FORM1                                                           *
*----------------------------------------------------------------------*
FORM form1.

  SELECT *
    FROM t005t
    INTO TABLE @DATA(lt_t005t)
   WHERE spras = 'I'.

  DATA(ls_t005t) = lt_t005t[ land1 = 'IT' ].

  ls_t005t  = lt_t005t[ 2 ].

ENDFORM.

*----------------------------------------------------------------------*

lunedì 23 novembre 2020

Ottenere l'indice di una riga in tabella interna

DATA: lt_return TYPE TABLE OF bapiret2.

DATA(lv_index)= line_index( lt_return[ type = 'E'
                                       id = 'ZUTIL' ] ).

lunedì 16 novembre 2020

Operatore condizionale ternario in ABAP

DATA: lv_threshold TYPE i,
      lv_number    TYPE i.

DATA(bool) = COND #( WHEN lv_number * lv_number > lv_threshold THEN abap_true ELSE abap_false ).


La seguente istruzione restituisce un risultato del tipo specificato che dipende dalle espressioni logiche.

… COND dtype|#( WHEN log_exp1 THEN result1
              [ WHEN log_exp2 THEN result2 ]
                …
              [ ELSE resultn ] ) …


La seguente istruzione restituisce un risultato del tipo specificato che dipende dalla struttura di controllo.

… SWITCH dtype|#( operand
                    WHEN const1 THEN result1
                  [ WHEN const2 THEN result2 ]
                    …
                  [ ELSE resultn ] ) …

lunedì 26 ottobre 2020

Creazione dinamica di tabelle interne

*----------------------------------------------------------------------*
* DECLARATIONS                                                         *
*----------------------------------------------------------------------*
DATA: gt_fcat TYPE lvc_t_fcat,
      gs_fcat TYPE lvc_s_fcat.

FIELD-SYMBOLS: <gf_table> TYPE STANDARD TABLE,
               <gf_line>  TYPE any,
               <gf_campo> TYPE any.

*----------------------------------------------------------------------*
* LAYOUT                                                               *
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS: pa_begda TYPE begda OBLIGATORY,
            pa_endda TYPE endda OBLIGATORY,
            pa_kurst TYPE kurst OBLIGATORY,
            pa_fname TYPE string LOWER CASE,
            pa_fout  TYPE localfile.
SELECTION-SCREEN END OF BLOCK b1.

*----------------------------------------------------------------------*
* EVENTS                                                               *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
  pa_fname = 'Exchange_Rates.csv'.
  CONCATENATE '/IFR/' sy-sysid '/EXPORT/'
         INTO pa_fout.

*----------------------------------------------------------------------*
* PROGRAM BODY                                                         *
*----------------------------------------------------------------------*
START-OF-SELECTION.

  PERFORM get_data.

END-OF-SELECTION.

  PERFORM save_remote.

*----------------------------------------------------------------------*
* FORM GET_DATA                                                        *
*----------------------------------------------------------------------*
FORM get_data.

  DATA: lv_col_pos  TYPE i,
        lt_newtable TYPE REF TO data,
        lt_newline  TYPE REF TO data,
        lr_waers    TYPE RANGE OF waers,
        lv_datum    TYPE datum,
        lv_gdatu    TYPE gdatu_inv,
        lv_dest(6)  TYPE c.

  DATA: BEGIN OF lt_tcurr OCCURS 0.
      INCLUDE STRUCTURE tcurr.
  DATA: END OF lt_tcurr.

  SELECT sign opti low high
    FROM tvarvc
    INTO TABLE lr_waers
   WHERE name = 'ZCUKY'
     AND type = 'S'.

  ADD 1 TO lv_col_pos.
  gs_fcat-col_pos = lv_col_pos.
  gs_fcat-fieldname = 'KTEXT'.
  gs_fcat-tabname = 'ITAB'.
  gs_fcat-key = 'X'.
  gs_fcat-emphasize = 'K41'.
  gs_fcat-datatype = 'CHAR'.
  gs_fcat-inttype = 'C'.
  gs_fcat-intlen = '15'.
  gs_fcat-lowercase = 'X'.
  gs_fcat-reptext = 'valuta target'.
  gs_fcat-domname = 'TEXT15'.
  gs_fcat-dd_outlen = '15'.
  gs_fcat-scrtext_l = 'Target currency'.
  gs_fcat-scrtext_m = 'Target currency'.
  gs_fcat-scrtext_s = 'Target currency'.
  APPEND gs_fcat TO gt_fcat.
  LOOP AT lr_waers INTO DATA(ls_waers).
    ADD 1 TO lv_col_pos.
    gs_fcat-col_pos = lv_col_pos.
    gs_fcat-fieldname = ls_waers-low.
    gs_fcat-datatype = 'DEC'.
    gs_fcat-inttype = 'P'.
    gs_fcat-intlen = '9'.
    gs_fcat-lowercase = ''.
    gs_fcat-reptext = ls_waers-low.
    gs_fcat-domname = 'UKURS'.
    gs_fcat-dd_outlen = '12'.
    gs_fcat-decimals = '5'.
    gs_fcat-scrtext_l = ls_waers-low.
    gs_fcat-scrtext_m = ls_waers-low.
    gs_fcat-scrtext_s = ls_waers-low.
    APPEND gs_fcat TO gt_fcat.
  ENDLOOP.
  ADD 1 TO lv_col_pos.
  gs_fcat-col_pos = lv_col_pos.
  gs_fcat-fieldname = 'DATUM'.
  gs_fcat-datatype = 'DATS'.
  gs_fcat-inttype = 'D'.
  gs_fcat-intlen = '8'.
  gs_fcat-reptext = 'Date'.
  gs_fcat-domname = 'DATUM'.
  gs_fcat-dd_outlen = '10'.
  gs_fcat-decimals = '0'.
  gs_fcat-scrtext_l = 'Date'.
  gs_fcat-scrtext_m = 'Date'.
  gs_fcat-scrtext_s = 'Date'.
  APPEND gs_fcat TO gt_fcat.

  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog           = gt_fcat
    IMPORTING
      ep_table                  = lt_newtable
    EXCEPTIONS
      generate_subpool_dir_full = 1
      OTHERS                    = 2.
  IF sy-subrc IS INITIAL.
    ASSIGN lt_newtable->* TO <gf_table>.
  ENDIF.
  APPEND INITIAL LINE TO <gf_table>.
  CREATE DATA lt_newline LIKE LINE OF <gf_table>.
  ASSIGN lt_newline->* TO <gf_line>.

  CASE sy-sysid.
    WHEN 'PRD'.
      lv_dest = 'PRD001'.
    WHEN 'DEV'.
      lv_dest = 'DEV001'.
    WHEN OTHERS.
      lv_dest = 'QAS001'.
  ENDCASE.
  CALL FUNCTION 'ZFM_READ_TCURR'
    DESTINATION lv_dest
    EXPORTING
      i_kurst = pa_kurst
      i_tcurr = 'EUR'
      i_begda = pa_begda
      i_endda = pa_endda
    TABLES
      t_tcurr = lt_tcurr.
  DELETE lt_tcurr WHERE fcurr NOT IN lr_waers.
  lv_datum = pa_begda.
  WHILE lv_datum <= pa_endda.
    CONVERT DATE lv_datum INTO INVERTED-DATE lv_gdatu.
    LOOP AT lt_tcurr INTO DATA(ls_tcurr) WHERE gdatu = lv_gdatu.
      ASSIGN COMPONENT ls_tcurr-fcurr OF STRUCTURE <gf_line> TO <gf_campo>.
      IF ls_tcurr-ukurs < 0.
        <gf_campo> = ls_tcurr-ukurs * -1.
      ENDIF.
      IF ls_tcurr-ffact > 1.
        <gf_campo> = ls_tcurr-ukurs * ls_tcurr-ffact.
      ENDIF.
      IF ls_tcurr-tfact > 1.
        <gf_campo> = ls_tcurr-ukurs * ls_tcurr-tfact.
      ENDIF.
    ENDLOOP.
    IF <gf_campo> IS ASSIGNED.
      ASSIGN COMPONENT 'KTEXT' OF STRUCTURE <gf_line> TO <gf_campo>.
      <gf_campo> = 'Euro'.
      ASSIGN COMPONENT 'DATUM' OF STRUCTURE <gf_line> TO <gf_campo>.
      <gf_campo> = lv_datum.
      APPEND <gf_line> TO <gf_table>.
    ENDIF.
    CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
      EXPORTING
        date      = lv_datum
        days      = 1
        months    = 0
        signum    = '+'
        years     = 0
      IMPORTING
        calc_date = lv_datum.
    UNASSIGN <gf_campo>.
  ENDWHILE.
  DELETE <gf_table> INDEX 1.

ENDFORM.

*----------------------------------------------------------------------*
* FORM SAVE_REMOTE                                                     *
*----------------------------------------------------------------------*
FORM save_remote.

  DATA: lt_exec_protocol TYPE TABLE OF btcxpm,
        lv_file          TYPE btcxpgpar,
        lv_localfile     TYPE localfile,
        lv_line          TYPE string,
        lv_char(10),
        lv_index         TYPE i,
        lv_type          TYPE c.

  CONCATENATE pa_fout
              pa_fname
         INTO lv_localfile.
  OPEN DATASET lv_localfile FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.

  LOOP AT gt_fcat INTO gs_fcat.
    CONCATENATE lv_line '"' gs_fcat-scrtext_l '"' ';'
           INTO lv_line.
  ENDLOOP.
  TRANSFER lv_line TO lv_localfile.
  CLEAR lv_line.

  LOOP AT <gf_table> ASSIGNING <gf_line>.
    DO.
      ADD 1 TO lv_index.
      ASSIGN COMPONENT lv_index OF STRUCTURE <gf_line> TO <gf_campo>.
      IF sy-subrc = 0.
        CLEAR lv_type.
        DESCRIBE FIELD <gf_campo> TYPE lv_type.
        CASE lv_type.
          WHEN 'P'.
            lv_char = <gf_campo>.
            TRANSLATE lv_char USING '.,'.
            CONDENSE lv_char.
            CONCATENATE lv_line '"' lv_char '"' ';'
                   INTO lv_line.
          WHEN 'D'.
            CONCATENATE lv_line '"' <gf_campo>+6(2) '/' <gf_campo>+4(2) '/' <gf_campo>+0(4) '"' ';'
                   INTO lv_line.
          WHEN OTHERS.
            CONCATENATE lv_line '"' <gf_campo> '"' ';'
                   INTO lv_line.
        ENDCASE.
      ELSE.
        CLEAR lv_index.
        EXIT.
      ENDIF.
    ENDDO.
    TRANSFER lv_line TO lv_localfile.
    CLEAR lv_line.
  ENDLOOP.

  CLOSE DATASET lv_localfile.

  lv_file = lv_localfile.
  CALL FUNCTION 'SXPG_CALL_SYSTEM'
    EXPORTING
      commandname           = 'ZCHMOD777'
      additional_parameters = lv_file
    TABLES
      exec_protocol         = lt_exec_protocol.

  WRITE 'File correctly exported'.

ENDFORM.

*----------------------------------------------------------------------*

lunedì 31 agosto 2020

Rendere una dynpro sensibile al click su un checkbox

CONSTANTS: gc_blank_time TYPE char6 VALUE '      '.

PARAMETERS: p_date_l TYPE vekp-erdat.
PARAMETERS: p_date_h TYPE vekp-erdat.
PARAMETERS: p_time_l TYPE vekp-eruhr.
PARAMETERS: p_time_h TYPE vekp-eruhr.
PARAMETERS: p_timest AS CHECKBOX USER-COMMAND com001.

INITIALIZATION.
  p_time_l = gc_blank_time.
  p_time_h = gc_blank_time.

AT SELECTION-SCREEN OUTPUT.
  CHECK p_timest IS INITIAL.
  LOOP AT SCREEN.
    IF p_date_l IS INITIAL AND screen-name = 'P_DATE_L'.
      screen-required = 2.
    ENDIF.
    IF p_date_h IS INITIAL AND screen-name = 'P_DATE_H'.
      screen-required = 2.
    ENDIF.
    IF p_time_l = gc_blank_time AND screen-name = 'P_TIME_L'.
      screen-required = 2.
    ENDIF.
    IF p_time_h = gc_blank_time AND screen-name = 'P_TIME_H'.
      screen-required = 2.
    ENDIF.
    MODIFY SCREEN.
  ENDLOOP.

giovedì 9 luglio 2020

Controllo di esistenza di una riga in tabella interna

*----------------------------------------------------------------------*
* FORM SALESDOCUMENT_CHANGE                                            *
*----------------------------------------------------------------------*
FORM salesdocument_change USING pt_rows TYPE salv_t_row.

DATA: lt_return TYPE TABLE OF bapiret2.

IF line_exists( lt_return[ type = 'E'
                           id = 'ZUTIL' ] ).
  CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  READ TABLE lt_return INTO DATA(ls_return) WITH KEY type = 'E'.
ENDIF.

venerdì 27 dicembre 2019

Visualizzare una SALV TABLE popup

  DATA: lt_excel TYPE zsdo_t_excel,
        lo_alv   TYPE REF TO cl_salv_table.

    IF lt_excel[] IS NOT INITIAL.
      TRY.
          cl_salv_table=>factory(
            IMPORTING
              r_salv_table = lo_alv
            CHANGING
              t_table      = lt_excel[] ).
        CATCH cx_salv_msg.
      ENDTRY.
      IF lo_alv IS BOUND.
        lo_alv->set_screen_status(
          pfstatus = 'SALV_TABLE_STANDARD'
          report = sy-repid
          set_functions = lo_alv->c_functions_all ).
        lo_alv->get_columns( )->set_optimize( ).
        lo_alv->set_screen_popup(
          start_column = 5
          end_column   = 180
          start_line   = 2
          end_line     = 25 ).
        lo_alv->display( ).
      ENDIF.
    ELSE.
      CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'
        EXPORTING
          textline1 = 'niente da mostrare'.
    ENDIF.

martedì 30 aprile 2019

Aggiornare più campi della stessa dynpro

*&---------------------------------------------------------------------*
*&      Form  F_GET_LOCATION
*&---------------------------------------------------------------------*
*       Match-code for Return Type
*----------------------------------------------------------------------*
FORM f_get_location CHANGING p_auart p_lgort.

  DATA: lc_zrettype TYPE dfies-fieldname     VALUE 'ZRETTYPE',
        lc_value    TYPE ddbool_d            VALUE 'S',
        lc_field    TYPE help_info-dynprofld VALUE 'P_AUART'.

  DATA: BEGIN OF ls_zrettype,
          zrettype TYPE zrettype,
        END OF ls_zrettype.

  DATA: li_value_tab  LIKE STANDARD TABLE OF ls_zrettype,
        li_return_tab LIKE STANDARD TABLE OF ddshretval WITH HEADER LINE.

  DATA: ls_dynpread TYPE dynpread,
        lt_dynpread TYPE TABLE OF dynpread.

* End of Season
  ls_zrettype-zrettype = TEXT-i01.
  APPEND ls_zrettype TO li_value_tab.
  CLEAR ls_zrettype.

* Article Recall
  ls_zrettype-zrettype = TEXT-i02.
  APPEND ls_zrettype TO li_value_tab.
  CLEAR ls_zrettype.

* Customer Closing
  ls_zrettype-zrettype = TEXT-i03.
  APPEND ls_zrettype TO li_value_tab.
  CLEAR ls_zrettype.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = lc_zrettype
      dynpprog        = sy-cprog
      dynpnr          = sy-dynnr
      dynprofield     = lc_field
      value_org       = lc_value
      window_title    = TEXT-s02
    TABLES
      value_tab       = li_value_tab
      return_tab      = li_return_tab
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.
  IF sy-subrc EQ 0.
    READ TABLE li_return_tab INDEX 1.
    IF sy-subrc IS INITIAL.
      p_auart = li_return_tab-fieldval.
    ENDIF.
  ENDIF.

  ls_dynpread-fieldname = 'P_LGORT'.
  CASE p_auart.
    WHEN 'End of Season'.
      SELECT SINGLE low
        FROM tvarvc
        INTO ls_dynpread-fieldvalue
       WHERE name = 'ZSDO-OTC0065_STORE_LOC'
         AND type = 'P'.
    WHEN 'Article Recall'.
      ls_dynpread-fieldvalue = 'IC13'.
    WHEN 'Customer Closing'.
      ls_dynpread-fieldvalue = 'IC13'.
  ENDCASE.
  APPEND ls_dynpread TO lt_dynpread.

* Update the dynpro values.
  CALL FUNCTION 'DYNP_VALUES_UPDATE'
    EXPORTING
      dyname     = sy-cprog
      dynumb     = sy-dynnr
    TABLES
      dynpfields = lt_dynpread
    EXCEPTIONS
      OTHERS     = 8.

ENDFORM.

*----------------------------------------------------------------------*

martedì 31 luglio 2018

Select annidata con cast

ls_bukrs = 'IEQ'.
AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
                    ID 'BUKRS' FIELD gs_table-bukrs
                    ID 'ACTVT' FIELD '03'.
IF sy-subrc = 0.
  SELECT SINGLE kostl,                         "#EC CI_SEL_NESTED
                waers,
                wrbtr
    FROM zvim_wf_det_blkv
   WHERE bukrs = @gs_table-bukrs
     AND belnr = @gs_table-belnr
     AND gjahr = @gs_table-gjahr
     AND buzei IN (
         SELECT CAST( RIGHT( wi_text, 3 ) AS NUMC( 3 ) ) AS buzei
           FROM swwwihead
          WHERE wi_id = @gs_worklist-wi_chckwi )
    INTO (@gs_table-kostl,
          @gs_table-waers,
          @gs_table-wrbtr).
  SELECT ktext                                 "#EC CI_SEL_NESTED
   UP TO 1 ROWS
    FROM cskt
    INTO gs_table-ktext
   WHERE spras = sy-langu
     AND kokrs = 'BENG'
     AND kostl = gs_table-kostl
   ORDER BY datbi DESCENDING.
  ENDSELECT.
ELSE.
  ls_bukrs-low = gs_table-bukrs.
  COLLECT ls_bukrs INTO lr_bukrs.
ENDIF.
IF lr_bukrs[] IS INITIAL.
  ls_bukrs-low = 'XX'.
  APPEND ls_bukrs TO lr_bukrs.
ENDIF.

giovedì 19 aprile 2018

Visualizzare una SALV TABLE con le impostazioni minime

DATA: BEGIN OF ls_madein,
        fsh_season TYPE fsh_saiso,
        satnr      TYPE zesd_satnr,
        zzmadein   TYPE zemade_in,
      END OF ls_madein.
DATA: lo_alv    TYPE REF TO cl_salv_table,
      lo_cols   TYPE REF TO cl_salv_columns_table,
      lo_col    TYPE REF TO cl_salv_column,
      lo_layout TYPE REF TO cl_salv_layout,
      lv_key    TYPE salv_s_layout_key,
      lv_text_s TYPE scrtext_s,
      lv_text_m TYPE scrtext_m,
      lv_text_l TYPE scrtext_l,
      lt_madein LIKE STANDARD TABLE OF ls_madein.

DEFINE set_column.
  lv_text_s = lv_text_m = lv_text_l = &2.
  lo_col = lo_cols->get_column( &1 ).
  lo_col->set_short_text( lv_text_s ).
  lo_col->set_medium_text( lv_text_m ).
  lo_col->set_long_text( lv_text_l ).
END-OF-DEFINITION.

cl_salv_table=>factory(
    IMPORTING
      r_salv_table = lo_alv
    CHANGING
      t_table      = lt_madein ).
  lo_alv->set_screen_status(
            pfstatus = 'STANDARD'
            report = 'SAPLSALV'
            set_functions = lo_alv->c_functions_all ).
  lo_cols = lo_alv->get_columns( ).
  lo_cols->set_optimize( 'X' ).
*  lo_alv->get_columns( )->set_optimize( ).
*  lo_alv->get_columns( )->get_column('ZZMADEIN')->set_visible( EXPORTING value = space ).
*  lo_alv->get_columns( )->get_column('SATNR')->set_short_text('Articolo').
  set_column 'SATNR' 'Articolo'.
  lo_layout = lo_alv->get_layout( ).
  lv_key-report = sy-repid.
  lo_layout->set_key( lv_key ).
  lo_layout->set_save_restriction( if_salv_c_layout=>restrict_none ).
  lo_alv->display( ).

martedì 13 marzo 2018

Caricare un range da una tabella interna senza usare un LOOP AT

*----------------------------------------------------------------------*
* FORM F_DATA_EXTRACTIONS                                              *
*----------------------------------------------------------------------*
FORM f_data_extractions.

  DATA: lr_ernam TYPE RANGE OF ernam.

  SELECT ernam
    FROM ztsdo_user
    INTO TABLE @DATA(lt_user).

  lr_ernam = VALUE #( FOR ls IN lt_user[]
                          ( sign = 'I'
                            option = 'EQ'
                            low = ls-ernam ) ).

ENDFORM.

*----------------------------------------------------------------------*