Friday, 18 February 2022

Program to upload a Excel file into Z table

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

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


TYPE-POOLS: truxs.

PARAMETERS: p_file TYPE  rlgrap-filename.

TYPES: BEGIN OF t_datatab,
      col1(30)    TYPE c,
      col2(30)    TYPE c,
      col3(30)    TYPE c,
      END OF t_datatab.
DATA: it_datatab type standard table of t_datatab,
      wa_datatab type t_datatab.

DATA: it_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-OPTIONS: s_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
*********************************************************************************


DATA: gt_rel_disp TYPE TABLE OF scustom.

TYPES: BEGIN OF ty_data,
         state TYPE cnv_10940_relev,
       END OF ty_data.


DATA: gv_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.


CONSTANTS: gc_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.
    DATA: gref_events_0100 TYPE REF TO lcl_event_handler.
    METHODS: on_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.
    METHODS: data_change FOR EVENT data_changed
                  OF cl_gui_alv_grid
      IMPORTING er_data_changed
                  e_onf4.

  PROTECTED SECTION.
    DATA: lv2 TYPE c.
  PRIVATE SECTION.
    DATA: lv1 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.
    DATA: ls_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.

  DATA: gref_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.