Friday 18 February 2022

Program to upload a Excel file into Z table

 *&---------------------------------------------------------------------*

*& Report ZUPLOAD_EXCEL_TO_ITAB
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZUPLOAD_EXCEL_TO_ITAB.


TYPE-POOLStruxs.

PARAMETERSp_file TYPE  rlgrap-filename.

TYPESBEGIN OF t_datatab,
      col1(30)    TYPE c,
      col2(30)    TYPE c,
      col3(30)    TYPE c,
      END OF t_datatab.
DATAit_datatab type standard table of t_datatab,
      wa_datatab type t_datatab.

DATAit_raw TYPE truxs_t_text_data.

* At selection screen
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      field_name 'P_FILE'
    IMPORTING
      file_name  p_file.


***********************************************************************
*START-OF-SELECTION.
START-OF-SELECTION.

  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
*     I_FIELD_SEPERATOR        =
      i_line_header            =  'X'
      i_tab_raw_data           =  it_raw       " WORK TABLE
      i_filename               =  p_file
    TABLES
      i_tab_converted_data     it_datatab[]    "ACTUAL DATA
   EXCEPTIONS
      conversion_failed        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.


***********************************************************************
* END-OF-SELECTION.

END-OF-SELECTION.


  LOOP AT it_datatab INTO wa_datatab.
    WRITE:/ wa_datatab-col1,
            wa_datatab-col2,
            wa_datatab-col3.
  ENDLOOP.

Tuesday 11 August 2020

F4 help returning 2 values to update two different selection screen fields

**&---------------------------------------------------------------------*
**& Report ZF4_MULTIPLE
**&---------------------------------------------------------------------*
**&
**&---------------------------------------------------------------------*
REPORT zf4_multiple.


TABLES:  mara.

SELECT-OPTIONSs_matnr FOR mara-matnr NO INTERVALS.
PARAMETERS:   p_maktx TYPE makt-maktx.

DATA:
  BEGIN OF itab OCCURS 0,
    matnr LIKE makt-matnr,
    maktx LIKE makt-maktx,
  END OF itab,
  t_dynptab  TYPE TABLE OF dselc,
  t_rettab   TYPE TABLE OF ddshretval,
  fs_rettab  TYPE ddshretval,
  fs_dynptab TYPE dselc,
  w_matnr    TYPE mara-matnr.

INITIALIZATION.
  SELECT matnr
         maktx
    FROM makt
    INTO TABLE itab
    UP TO 20 ROWS
    WHERE spras sy-langu.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF screen-name 'P_MAKTX'.
      screen-input 0.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_matnr-low.

  fs_dynptab-fldname 'F0001'.
  fs_dynptab-dyfldname 'S_MATNR-LOW'.
  APPEND fs_dynptab TO t_dynptab.

  fs_dynptab-fldname 'F0002'.
  fs_dynptab-dyfldname 'P_MAKTX'.
  APPEND fs_dynptab TO t_dynptab.

  fs_rettab-fieldname 'P_MATNR'.

  APPEND fs_rettab TO t_rettab.


  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        'MATNR'
      dynpprog        'ZF4_MULTIPLE'
      dynpnr          sy-dynnr
      dynprofield     'S_MATNR-LOW'
      value_org       'S'
    TABLES
      value_tab       itab
      return_tab      t_rettab
      dynpfld_mapping t_dynptab
    EXCEPTIONS
      parameter_error 1
      no_values_found 2
      OTHERS          3.
  IF sy-subrc EQ 0.
    CLEAR w_matnr.
    READ TABLE t_rettab INTO fs_rettab WITH KEY fieldname 'F0001'.
    IF sy-subrc EQ 0.
      w_matnr fs_rettab-fieldval.
    ENDIF.
  ENDIF.


Saturday 2 May 2020

Sample code to Add custom F4 to a field in ALV


**********************************************************************************GLOBAL DATA DECLARATION
*********************************************************************************


DATAgt_rel_disp TYPE TABLE OF scustom.

TYPESBEGIN OF ty_data,
         state TYPE cnv_10940_relev,
       END OF ty_data.


DATAgv_cont_0100     TYPE REF TO cl_gui_custom_container,
      gv_grid_0100     TYPE REF TO cl_gui_alv_grid,
      gs_f4            TYPE lvc_s_f4,
      gt_f4            TYPE lvc_t_f4,
      gt_data          TYPE TABLE OF ty_data,
      gt_ret           TYPE TABLE OF ddshretval,
      gs_layo_0100     TYPE lvc_s_layo,
      gs_fieldcat_0100 TYPE lvc_s_fcat,
      gt_fieldcat_0100 TYPE lvc_t_fcat,
      gt_exclude_0100  TYPE ui_functions,
      gs_exclude       TYPE ui_func,
      gv_change.


CONSTANTSgc_x          VALUE 'X'.


FIELD-SYMBOLS<itab> TYPE lvc_t_modi.

**********************************************************************************LOCAL CLASS DEFINITION
*********************************************************************************


*Class definition to handle the ONF4 event
CLASS lcl_event_handler DEFINITION.
  PUBLIC SECTION.
    DATAgref_events_0100 TYPE REF TO lcl_event_handler.
    METHODSon_f4 FOR EVENT onf4 OF cl_gui_alv_grid
      IMPORTING sender
                  e_fieldname
                  e_fieldvalue
                  es_row_no
                  er_event_data
                  et_bad_cells
                  e_display.
    METHODSdata_change FOR EVENT data_changed
                  OF cl_gui_alv_grid
      IMPORTING er_data_changed
                  e_onf4.

  PROTECTED SECTION.
    DATAlv2 TYPE c.
  PRIVATE SECTION.
    DATAlv1 TYPE c.
ENDCLASS.                    "lcl_event_handler DEFINITION


**********************************************************************************LOCAL CLASS IMPLEMENTATION
*********************************************************************************


*Class implementation to handle the ONF4 event
CLASS lcl_event_handler IMPLEMENTATION.

  METHOD on_f4.
    DATAls_data     LIKE LINE OF gt_data,
          ls_sel      LIKE LINE OF gt_ret,
          ls_modi     TYPE lvc_s_modi,
          ls_fin_disp LIKE LINE OF gt_rel_disp.
* Add the custom F4 values; here we are adding 2 values 'Uncertain' and 'Relevant' for the field STATE
    IF gt_data[] IS INITIAL.
      ls_data-state 'PUNE'.
      APPEND ls_data TO gt_data.
      CLEAR ls_data.
      ls_data-state 'MUMBAI'.
      APPEND ls_data TO gt_data.
    ENDIF.

*Call the function module to display the custom F4 values
    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
      EXPORTING
        retfield        'CITY'
        window_title    'List of State entries'(002)
        value_org       'S'
      TABLES
        value_tab       gt_data[]
        return_tab      gt_ret[]
      EXCEPTIONS
        parameter_error 1
        no_values_found 2
        OTHERS          3.


"  (note: gt_ret[] contains the row id selected by the user from the list of f4 
" values)
  

  IF sy-subrc 0.
      READ TABLE gt_ret INTO ls_sel INDEX 1.
      ASSIGN er_event_data->m_data->TO <itab>.
      READ TABLE gt_rel_disp INDEX es_row_no-row_id INTO ls_fin_disp.
      ls_modi-row_id   es_row_no-row_id.
      ls_modi-fieldname 'CITY'.
      ls_modi-value     ls_sel-fieldval.
      APPEND ls_modi TO <itab>.
      gv_change gc_x.
    ENDIF.


    er_event_data>m_event_handled gc_x.

" (to inform grid that f4 was handled manually)
  ENDMETHOD.

  METHOD data_change.
    gv_change gc_x.
  ENDMETHOD.                    "data_changed


ENDCLASS.                    "lcl_event_handler IMPLEMENTATION


**********************************************************************************START-OF-SELECTION
*********************************************************************************


START-OF-SELECTION.
  CALL SCREEN '0100'.


**********************************************************************************  pbo -  status_0100
*********************************************************************************

MODULE status_0100 OUTPUT.
  SET PF-STATUS '0100'.
  SET TITLEBAR  '0100'.
ENDMODULE.                    "data_change


**********************************************************************************PBO -  get_result_data
*********************************************************************************MODULE get_result_data_0100 OUTPUT.

  DATAgref_events_0100 TYPE REF TO lcl_event_handler.

  IF gv_cont_0100 IS INITIAL.
*Create an object for the Grid container
    CREATE OBJECT gv_cont_0100
      EXPORTING
        container_name              'CONT1' "CONTAINER NAME
      EXCEPTIONS
        cntl_error                  1
        cntl_system_error           2
        create_error                3
        lifetime_error              4
        lifetime_dynpro_dynpro_link 5
        OTHERS                      6.
    IF sy-subrc <> 0.
    ENDIF.
  ENDIF.

  IF gv_grid_0100 IS INITIAL.
*Create an object for the ALV Grid
    CREATE OBJECT gv_grid_0100
      EXPORTING
        i_parent          gv_cont_0100
      EXCEPTIONS
        error_cntl_create 1
        error_cntl_init   2
        error_cntl_link   3
        error_dp_create   4
        OTHERS            5.
    IF sy-subrc <> 0.
    ENDIF.

*Register the field for which the custom F4 has to be displayed
    gs_f4-fieldname  'CITY'.
    gs_f4-register   'X'.
    gs_f4-getbefore  space.
    gs_f4-chngeafter space.
    APPEND gs_f4 TO gt_f4.

*    (note: chngeafter set to 'X' only if any other field value has to be set based
*    on the selected f4 value)
    CALL METHOD gv_grid_0100->register_f4_for_fields
      EXPORTING
        it_f4 gt_f4.

* Define layout attributes
    gs_layo_0100-cwidth_opt     gc_x.
    gs_layo_0100-sel_mode       'D'.
    gs_layo_0100-zebra          gc_x.
    gs_layo_0100-grid_title     'Display Result'(001).

* Define the field catalogue attributes
    gs_fieldcat_0100-fieldname  'ID'.
    gs_fieldcat_0100-coltext    'ID'.
    gs_fieldcat_0100-col_pos    1.
    gs_fieldcat_0100-outputlen  40.
    gs_fieldcat_0100-datatype   'NUMC'.
    gs_fieldcat_0100-intlen     40.
    gs_fieldcat_0100-edit        gc_x.
    APPEND gs_fieldcat_0100 TO gt_fieldcat_0100.
    CLEAR gs_fieldcat_0100.

    gs_fieldcat_0100-fieldname   'CITY'.
    gs_fieldcat_0100-coltext     'City'.
    gs_fieldcat_0100-col_pos     2.
    gs_fieldcat_0100-outputlen   30.
    gs_fieldcat_0100-datatype    'CHAR'.
    gs_fieldcat_0100-intlen      30.
    gs_fieldcat_0100-f4availabl  gc_x.
    gs_fieldcat_0100-edit        gc_x.
    APPEND gs_fieldcat_0100 TO gt_fieldcat_0100.


    gs_fieldcat_0100-fieldname   'NAME'.
    gs_fieldcat_0100-coltext     'Name'.
    gs_fieldcat_0100-col_pos     3.
    gs_fieldcat_0100-outputlen   40.
    gs_fieldcat_0100-datatype    'CHAR'.
    gs_fieldcat_0100-intlen      40.
    gs_fieldcat_0100-edit        gc_x.
    APPEND gs_fieldcat_0100 TO gt_fieldcat_0100.

    gs_fieldcat_0100-fieldname   'STREET'.
    gs_fieldcat_0100-coltext     'Street'.
    gs_fieldcat_0100-col_pos     4.
    gs_fieldcat_0100-outputlen   30.
    gs_fieldcat_0100-datatype    'CHAR'.
    gs_fieldcat_0100-intlen      60.
    gs_fieldcat_0100-edit        gc_x.
    APPEND gs_fieldcat_0100 TO gt_fieldcat_0100.


    gs_fieldcat_0100-fieldname   'POSTBOX'.
    gs_fieldcat_0100-coltext     'PostBox'.
    gs_fieldcat_0100-col_pos     5.
    gs_fieldcat_0100-outputlen   20.
    gs_fieldcat_0100-datatype    'CHAR'.
    gs_fieldcat_0100-intlen      20.
    gs_fieldcat_0100-edit        gc_x.
    APPEND gs_fieldcat_0100 TO gt_fieldcat_0100.

    gs_fieldcat_0100-fieldname   'POSTCODE'.
    gs_fieldcat_0100-coltext     'Postcode'.
    gs_fieldcat_0100-col_pos     20.
    gs_fieldcat_0100-outputlen   10.
    gs_fieldcat_0100-datatype    'CHAR'.
    gs_fieldcat_0100-intlen      20.
    gs_fieldcat_0100-edit        gc_x.
    APPEND gs_fieldcat_0100 TO gt_fieldcat_0100.


    gs_fieldcat_0100-fieldname  'COUNTRY'.
    gs_fieldcat_0100-coltext     'Country'.
    gs_fieldcat_0100-col_pos     5.
    gs_fieldcat_0100-outputlen   20.
    gs_fieldcat_0100-datatype    'CHAR'.
    gs_fieldcat_0100-intlen      20.
    gs_fieldcat_0100-edit        gc_x.
    APPEND gs_fieldcat_0100 TO gt_fieldcat_0100.


* Define the functions that has to be excluded
    gs_exclude cl_gui_alv_grid=>mc_fc_maximum.
    APPEND gs_exclude TO gt_exclude_0100.
    gs_exclude cl_gui_alv_grid=>mc_fc_select_all.
    APPEND gs_exclude TO gt_exclude_0100.
    gs_exclude cl_gui_alv_grid=>mc_fc_minimum.
    APPEND gs_exclude TO gt_exclude_0100.
    gs_exclude cl_gui_alv_grid=>mc_fc_subtot.
    APPEND gs_exclude TO gt_exclude_0100.

* Create an object for the local class
    CREATE OBJECT gref_events_0100.
    SET HANDLER gref_events_0100->on_f4 FOR gv_grid_0100.

    SELect FROM scustom INTO TABLE gt_rel_disp.

* Display data in ALV GRID format.
    CALL METHOD gv_grid_0100->set_table_for_first_display
      EXPORTING
        i_bypassing_buffer            gc_x
        is_layout                     gs_layo_0100
        it_toolbar_excluding          gt_exclude_0100
      CHANGING
        it_outtab                     gt_rel_disp[]
        it_fieldcatalog               gt_fieldcat_0100
      EXCEPTIONS
        invalid_parameter_combination 1
        program_error                 2
        too_many_lines                3
        OTHERS                        4.
    IF sy-subrc <> 0.
* Raise a message
    ENDIF.
  ENDIF.
ENDMODULE.                    "get_result_data_0100 OUTPUT


**********************************************************************************PAI -  user_command_0100
*********************************************************************************MODULE user_command_0100 INPUT.
  CASE sy-ucomm.
    WHEN 'SAVE'.
      CALL METHOD gv_grid_0100->check_changed_data.
      CHECK gv_change EQ 'X'.
      CLEAR gv_change.
      MODIFY SCUSTOM FROM TABLE gt_rel_disp.
      COMMIT WORK.
    when 'BACK'.
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.            



********************************************************************************** SCREEN
*********************************************************************************


PROCESS BEFORE OUTPUT.
  MODULE status_0100.

  MODULE get_result_data_0100.

PROCESS AFTER INPUT.
  MODULE user_command_0100.