Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Selection using check box in std ALV grid!

Former Member
0 Likes
594

Hi all,

I have written a custom report to show the O/p in ALV grid.

This is my code:

TABLES :zpo_loi.

TYPE-POOLS : slis.


TYPE-POOLS: icon.
TABLES : sscrfields.

DATA : ls_composer TYPE ssfcompop,
           ls_control TYPE ssfctrlop.

DATA : wa_return TYPE TABLE OF bapiret2  ,
        wa_address TYPE bapiaddr3.

DATA : wa_crmd_orderadm_h TYPE zpo_loi,
       it_po TYPE TABLE OF crmd_orderadm_h,
       wa_po TYPE bbp_pds_header.


DATA : it_tab TYPE TABLE OF zpo_loi.

DATA :  it_data TYPE TABLE OF crmd_orderadm_h,
        wa_data TYPE bbp_pds_header,
        et_data TYPE bbps_sf_po_output.

DATA : w_formname TYPE tdsfname ,
       w_sfname TYPE rs38l_fnam.

DATA :it_po_no TYPE TABLE OF select_be_obj_id,
      wa_it_po_no  LIKE LINE OF it_po_no.

DATA :r_itab TYPE ddshretval OCCURS 0.

DATA : it_output LIKE TABLE OF zloi,
       wa_output TYPE zloi.

DATA : w_answer TYPE c.


DATA : g_repid LIKE sy-repid,
      g_title TYPE lvc_title,
      g_set_pf_stat TYPE slis_formname VALUE 'SET_PF_STATUS',
      g_user_command TYPE slis_formname VALUE 'USER_COMMAND',
      g_layout TYPE slis_layout_alv,
      g_print_alv TYPE slis_print_alv,
      g_variant LIKE disvariant,
      c_char_a(1) VALUE 'A',
      c_char_x(1) VALUE 'X',
      itab_alv_sort TYPE slis_t_sortinfo_alv,
      itab_alv_fcat TYPE slis_t_fieldcat_alv.

*---------------------------------------------------------------------*
*       Internal tables          Begin with IT_                       *
*---------------------------------------------------------------------*
DATA : it_fcat TYPE slis_t_fieldcat_alv,                           "---ALV
       it_disp TYPE TABLE OF zloi.



*---------------------------------------------------------------------*
*       Work Area for Internal tables      Begin with WA_             *
*---------------------------------------------------------------------*


DATA : wa_fcat TYPE slis_fieldcat_alv ,              "---ALV
       wa_layout           TYPE lvc_s_layo,               "---ALV
       wa_it_disp LIKE LINE OF it_disp.


DATA : it_sf_po TYPE TABLE OF crmd_orderadm_h,
       wa_sf_po TYPE bbp_pds_header.

*SELECTION-SCREEN:
*  BEGIN OF SCREEN 500 AS WINDOW TITLE title,
*
*  END OF SCREEN 500.

*DATA : functxt TYPE smp_dyntxt.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS sel_po FOR zpo_loi-zobject_id.
SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
PARAMETERS : pr_loi RADIOBUTTON GROUP grp1 USER-COMMAND ucom,
             pr_fondo RADIOBUTTON GROUP grp1.
SELECTION-SCREEN END OF BLOCK b2.


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

*---------------------------------------------------------------------*
*       At selection-screen output                                    *
*---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
  IF pr_fondo = 'X'.
    REFRESH sel_po.
    LOOP AT SCREEN.
      IF screen-name = text-003 OR screen-name = text-004.
        screen-input = '0'.
        MODIFY SCREEN.
      ENDIF.
    ENDLOOP.
  ELSEIF pr_loi = 'X'.
    LOOP AT SCREEN.
      IF screen-name = text-003 OR screen-name = text-004.
        screen-input = '1'.
        MODIFY SCREEN.
      ENDIF.
    ENDLOOP.
  ENDIF.
*---------------------------------------------------------------------*

*---------------------------------------------------------------------*
*       At selection-screen on radiobutton                            *
*---------------------------------------------------------------------*
AT SELECTION-SCREEN ON RADIOBUTTON GROUP grp1.
  IF pr_fondo  = 'X'.
    REFRESH sel_po.
    LOOP AT SCREEN.
      IF screen-name = text-003 OR screen-name = text-004.
        screen-input = '0'.
        MODIFY SCREEN.
      ENDIF.
    ENDLOOP.
  ELSEIF pr_loi = 'X'.
    LOOP AT SCREEN.
      IF screen-name = text-003 OR screen-name = text-004.
        screen-input = '1'.
        MODIFY SCREEN.
      ENDIF.
    ENDLOOP.
  ENDIF.

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


AT SELECTION-SCREEN ON VALUE-REQUEST FOR sel_po-low.
  PERFORM populate_table.
  PERFORM f4_help.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR sel_po-high.
  PERFORM populate_table.
  PERFORM f4_help.



*---------------------------------------------------------------------*
*       At selection-screen                                           *
*---------------------------------------------------------------------*
AT SELECTION-SCREEN.
*---------------------------------------------------------------------*



*---CHECKING THE INPUT >>>
  IF sy-ucomm = 'ONLI'.

    PERFORM f002-check_input.
    PERFORM f001-check.
  ENDIF.


*&---------------------------------------------------------------------*
*&      Form  POPULATE_TABLE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM populate_table .

  SELECT zobject_id
           description
  FROM zpo_loi
  INTO CORRESPONDING FIELDS OF TABLE it_tab.


  SORT it_tab BY zobject_id ASCENDING.


ENDFORM.                    " POPULATE_TABLE
*&---------------------------------------------------------------------*
*&      Form  F4_HELP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM f4_help .

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      ddic_structure = ' '
      retfield       = 'ZOBJECT_ID'
      dynpprog       = sy-repid
      dynpnr         = sy-dynnr
      dynprofield    = 'A'
      value_org      = 'S'
    TABLES
      value_tab      = it_tab
      return_tab     = r_itab.



ENDFORM.                                                    " F4_HELP
*&---------------------------------------------------------------------*
*&      Form  F001-CHECK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM f001-check .


  IF pr_fondo = 'X'.

    PERFORM display_expiring_fondos.

  ELSEIF pr_loi = 'X'.

    PERFORM fetch_po_det.
    PERFORM build_fcat.
    PERFORM alv_display.



  ENDIF.

ENDFORM.                    " F001-CHECK




*&---------------------------------------------------------------------*
*&      Form  F002-CHECK_INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM f002-check_input .

  IF pr_loi = 'X'.
    REFRESH it_po.

    IF sel_po-low IS NOT INITIAL.
      SELECT object_id
      FROM crmd_orderadm_h
      INTO CORRESPONDING FIELDS OF TABLE it_po
      WHERE object_type = 'BUS2201'
      AND object_id = sel_po-low.
      IF sy-subrc NE 0.
        IF sel_po-high IS NOT INITIAL.
          SELECT object_id
          FROM crmd_orderadm_h
          INTO CORRESPONDING FIELDS OF TABLE it_po
          WHERE object_type = 'BUS2201'
          AND  object_id = sel_po-high.
          IF sy-subrc NE 0.
            MESSAGE e009(zsrm).
          ENDIF.
        ENDIF.
        MESSAGE e007(zsrm).
      ENDIF.
    ELSE.
      MESSAGE e010(zsrm).
    ENDIF.

    IF sel_po-high IS NOT INITIAL.
      SELECT object_id
      FROM crmd_orderadm_h
      INTO CORRESPONDING FIELDS OF TABLE it_po
      WHERE object_type = 'BUS2201'
      AND  object_id = sel_po-high.
      IF sy-subrc NE 0.
        MESSAGE e008(zsrm).
      ENDIF.
    ENDIF.
  ENDIF.


ENDFORM.                    " F002-CHECK_INPUT







*&---------------------------------------------------------------------*
*&      Form  FETCH_PO_DET
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM fetch_po_det .


  REFRESH it_po.

  it_po_no[] = sel_po[].

  DATA : w_count TYPE i,
         w_lines TYPE c,
         wa_header TYPE bbp_pds_po_header_d.


  REFRESH : it_po,it_output.

  IF sel_po-high IS NOT INITIAL.
    SELECT object_id
           description
           posting_date
           created_by
    FROM crmd_orderadm_h
    INTO CORRESPONDING FIELDS OF TABLE it_po
    WHERE object_type = 'BUS2201'
    AND object_id BETWEEN sel_po-low AND sel_po-high.
  ELSE.
    SELECT object_id
           description
           posting_date
           created_by
    FROM crmd_orderadm_h
    INTO CORRESPONDING FIELDS OF TABLE it_po
    WHERE object_type = 'BUS2201'
    AND object_id = sel_po-low.
  ENDIF.

  w_lines = sy-dbcnt.

  w_count = 1.

  DO.
    IF w_count LE w_lines.
      READ TABLE it_po INTO wa_po INDEX w_count.
      MOVE wa_po-object_id TO wa_output-zzpono.
      MOVE wa_po-description TO wa_output-zzpodesc.
      MOVE wa_po-posting_date TO wa_output-zzpodate.
      MOVE wa_po-created_by TO wa_output-zzpocreator.

      CALL FUNCTION 'BBP_PD_PO_GETDETAIL'
        EXPORTING
          i_object_id = wa_output-zzpono
        IMPORTING
          e_header    = wa_header.


      CALL FUNCTION 'BAPI_USER_GET_DETAIL'
        EXPORTING
          username = wa_output-zzpocreator
        IMPORTING
          address  = wa_address
        TABLES
          return   = wa_return.

      CLEAR wa_output-zzpocreator.
      CONCATENATE wa_address-firstname '   '  wa_address-lastname INTO wa_output-zzpocreator .

      MOVE wa_header-total_value TO wa_output-zzpoval.
      MOVE wa_header-currency TO wa_output-zzpocur.
      APPEND wa_output TO it_output.
      w_count = w_count + 1.
    ELSE.
      EXIT.
    ENDIF.
  ENDDO.




ENDFORM.                    " FETCH_PO_DET



*&---------------------------------------------------------------------*
*&      Form  BUILD_FCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM build_fcat .


  g_repid = sy-repid.
  g_title = 'Print LOI details'.
  g_print_alv-no_print_listinfos = 'X'.
  g_variant-report = sy-repid.
  g_variant-variant = sy-title.

  CLEAR g_layout.
  g_layout-f2code = ' '.
  wa_layout-zebra       = 'X'.

  g_layout-flexible_key = 'X'.
  g_layout-colwidth_optimize = 'X'.
  g_layout-detail_initial_lines = 'X'.
  g_layout-box_fieldname = 'ZZCHECK'.


  REFRESH it_fcat.

*Po no
  CLEAR wa_fcat.
  wa_fcat-fieldname = 'ZZPONO' .
  wa_fcat-tabname = 'IT_DISP'.
  wa_fcat-seltext_m  = 'Purchase Order'.
*wa_fcat-seltext_s = 'Purchase Order.
  wa_fcat-icon = 'X'.
  wa_fcat-col_pos = '2'.
  wa_fcat-outputlen = 10.
  APPEND wa_fcat TO it_fcat.



*Description
  CLEAR wa_fcat.
  wa_fcat-fieldname = 'ZZPODESC' .
  wa_fcat-tabname = 'IT_DISP'.
*wa_fcat-seltext_l = 'Description'.
  wa_fcat-seltext_m = 'Description'.
*wa_fcat-seltext_s = 'Description'.
  wa_fcat-col_pos = '3'.
  wa_fcat-outputlen = 10.
  APPEND wa_fcat TO it_fcat.


*Posting date
  CLEAR wa_fcat.
  wa_fcat-fieldname = 'ZZPODATE' .
  wa_fcat-tabname = 'IT_DISP'.
  wa_fcat-seltext_l = 'Posting Date'.
  wa_fcat-seltext_m = 'Posting Date'.
*wa_fcat-seltext_s = 'Posting Date'.
  wa_fcat-col_pos = '4'.
  wa_fcat-outputlen = 8.
  APPEND wa_fcat TO it_fcat.


*value
  CLEAR wa_fcat.
  wa_fcat-fieldname = 'ZZPOVAL' .
  wa_fcat-tabname = 'IT_DISP'.
*wa_fcat-seltext_l = 'PO value'.
  wa_fcat-seltext_m = 'PO value'.
*wa_fcat-seltext_s = 'PO value'.
  wa_fcat-col_pos = '5'.
  wa_fcat-outputlen = 15.
  wa_fcat-no_zero = 'X'.
  APPEND wa_fcat TO it_fcat.


*Currency
  CLEAR wa_fcat.
  wa_fcat-fieldname = 'ZZPOCUR' .
  wa_fcat-tabname = 'IT_DISP'.
*wa_fcat-seltext_l = 'PO Currency'.
  wa_fcat-seltext_m = 'PO Currency'.
*wa_fcat-seltext_s = 'PO Currency'.
  wa_fcat-col_pos = '6'.
  wa_fcat-outputlen = 5.
  APPEND wa_fcat TO it_fcat.


*Creator
  CLEAR wa_fcat.
  wa_fcat-fieldname = 'ZZPOCREATOR' .
  wa_fcat-tabname = 'IT_DISP'.
*wa_fcat-seltext_l = 'Buyer'.
  wa_fcat-seltext_m = 'Buyer'.
*wa_fcat-seltext_s = 'Buyer'.
  wa_fcat-col_pos = '7'.
  wa_fcat-outputlen = 12.
  APPEND wa_fcat TO it_fcat.



ENDFORM.                    " BUILD_FCAT
*&---------------------------------------------------------------------*
*&      Form  ALV_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM alv_display .


  SORT it_output BY zzpono.


  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       = g_repid
      i_callback_pf_status_set = g_set_pf_stat
      i_callback_user_command  = g_user_command
      i_grid_title             = g_title
      is_layout                = g_layout
      it_fieldcat              = it_fcat[]
      is_variant               = g_variant
      is_print                 = g_print_alv
    TABLES
      t_outtab                 = it_output[]
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
  IF sy-subrc <> 0.

  ENDIF.


ENDFORM.                    " ALV_DISPLAY



*&---------------------------------------------------------------------*
*&      Form  user_command
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->R_UCOMM      text
*      -->RS_SELFIELD  text
*----------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.                             "#EC CALLED

  DATA: gd_repid LIKE sy-repid, "Exists
  ref_grid TYPE REF TO cl_gui_alv_grid.
  IF ref_grid IS INITIAL.
    CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
      IMPORTING
        e_grid = ref_grid.
  ENDIF.
  IF NOT ref_grid IS INITIAL.
    CALL METHOD ref_grid->check_changed_data .
  ENDIF.



  rs_selfield-refresh = 'X'.


  CASE r_ucomm.

    WHEN 'PRINTLOI'.

      PERFORM call_sf.


    WHEN 'BACK'.
      CALL SELECTION-SCREEN 1000.

    WHEN 'CANCEL'.
      CALL SELECTION-SCREEN 1000.


    WHEN 'EXIT'.
      CALL SELECTION-SCREEN 1000.


  ENDCASE.




ENDFORM.                    "user_command



*&---------------------------------------------------------------------*
*&      Form  set_pf_status
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RT_EXTAB   text
*----------------------------------------------------------------------*
FORM set_pf_status USING rt_extab TYPE slis_t_extab.

  SET PF-STATUS 'ZALV' EXCLUDING rt_extab.
  SET TITLEBAR 'ZALV'.

ENDFORM.                    "set_pf_status



*&---------------------------------------------------------------------*
*&      Form  CALL_SF
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM call_sf .


  REFRESH it_sf_po.

  LOOP AT it_output INTO wa_output WHERE zzcheck = 'X'.
    wa_sf_po-object_id = wa_output-zzpono.
    APPEND wa_sf_po TO it_sf_po.
  ENDLOOP.


  w_formname = 'ZSR_EBP_DOCU_LETTEROFINTENT1'.


  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      formname           = w_formname
    IMPORTING
      fm_name            = w_sfname
    EXCEPTIONS
      no_form            = 1
      no_function_module = 2
      OTHERS             = 3.
  IF sy-subrc <> 0.
  ENDIF.




  ls_composer-tdnewid = 'X'.
  ls_control-no_dialog = 'X'.

  LOOP AT it_sf_po INTO wa_sf_po.

    CALL FUNCTION w_sfname
      EXPORTING
        control_parameters = ls_control
        output_options     = ls_composer
        wa_object          = wa_sf_po
      EXCEPTIONS
        formatting_error   = 1
        internal_error     = 2
        send_error         = 3
        user_canceled      = 4
        OTHERS             = 5.
    IF sy-subrc <> 0.
    ENDIF.

  ENDLOOP.


ENDFORM.                    " CALL_SF
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_EXPIRING_FONDOS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM display_expiring_fondos .



  SET PF-STATUS 'ZLOI'.
  SET TITLEBAR 'ZLOI'.


  TYPES : BEGIN OF ty_output1,
            guid TYPE bbp_guid,
            object_id TYPE crmt_object_id_db,
            description TYPE crmt_process_description,
            posting_date TYPE crmt_posting_date,
            zzfondo_dat TYPE zfondo_dat,
            created_by TYPE crmt_created_by,
           END OF ty_output1.




  DATA : it_output1 TYPE TABLE OF ty_output1,
         wa_output1 TYPE ty_output1,
          w_lines,
          w_count,
          it_fondo TYPE TABLE OF zsr_fondo,
          it_temp_fondo TYPE TABLE OF zsr_fondo,
          wa_temp_fondo TYPE zsr_fondo,
          wa_fondo TYPE zsr_fondo,
          w_diff TYPE p,
          wa_header1  TYPE bbp_pds_po_header_d.


  CONSTANTS : c_otype(8) VALUE 'BUS2201'.

  REFRESH : it_output1,it_temp_fondo,it_fondo.


  SELECT b~zzfondo_dat
         a~guid
         a~object_id
         a~description
         a~posting_date
         a~created_by
  INTO CORRESPONDING FIELDS OF TABLE it_output1
  FROM bbp_pdhsc AS b
  LEFT OUTER JOIN crmd_orderadm_h AS a ON b~guid = a~guid
  AND a~object_type = c_otype.



  LOOP AT it_output1 INTO wa_output1.

    CALL FUNCTION '/SDF/CMO_DATETIME_DIFFERENCE'
      EXPORTING
        date1            = sy-datum
        date2            = wa_output1-zzfondo_dat
      IMPORTING
        datediff         = w_diff
      EXCEPTIONS
        invalid_datetime = 1
        OTHERS           = 2.
    IF sy-subrc <> 0.
    ENDIF.


    IF w_diff <= '7'.
      wa_temp_fondo-zzpono = wa_output1-object_id.
      APPEND wa_temp_fondo TO it_temp_fondo.
    ENDIF.
  ENDLOOP.


*select the final entries for PO whose FONDO is expiring
  DESCRIBE TABLE it_temp_fondo LINES w_lines.

  w_count = 1.

  DO.
    IF w_count LE w_lines.
      READ TABLE it_temp_fondo INTO wa_temp_fondo INDEX w_count.
      IF sy-subrc = 0.
        CALL FUNCTION 'BBP_PD_PO_GETDETAIL'
          EXPORTING
            i_object_id = wa_temp_fondo-zzpono
          IMPORTING
            e_header    = wa_header1.

        wa_fondo-zzpono = wa_temp_fondo-zzpono.
        wa_fondo-zzpodesc = wa_header1-description.
        wa_fondo-zzpodate =  wa_header1-posting_date.
        wa_fondo-zzexpdate = wa_header1-zzfondo_dat.
        wa_fondo-zzpoval = wa_header1-total_value.
        wa_fondo-zzpocur = wa_header1-currency.
        wa_fondo-zzpocreator = wa_header1-created_by.

        CLEAR : wa_address.

        REFRESH wa_return.

        CALL FUNCTION 'BAPI_USER_GET_DETAIL'
          EXPORTING
            username = wa_header1-created_by
          IMPORTING
            address  = wa_address
          TABLES
            return   = wa_return.

        CLEAR wa_fondo-zzpocreator.
        CONCATENATE wa_address-firstname '   '  wa_address-lastname INTO wa_fondo-zzpocreator .

        w_count = w_count + 1.
        APPEND wa_fondo TO it_fondo.

      ENDIF.
    ELSE.
      EXIT.
    ENDIF.
  ENDDO.


  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_structure_name = 'ZSR_FONDO'
      i_grid_title     = 'EXPIRING FONDOS'
    TABLES
      t_outtab         = it_fondo[]
    EXCEPTIONS
      program_error    = 1
      OTHERS           = 2.
  IF sy-subrc <> 0.

  ENDIF.


ENDFORM.                    " DISPLAY_EXPIRING_FONDOS

Now in my ALV grid o/p i can see the check box but if i select one row and then try to select another the first one gets deselected.

Can anybody tell me what is missing?

4 REPLIES 4
Read only

Former Member
0 Likes
560

Hi,

Try like changing this

insted of

g_layout-f2code = ' '.

use this

g_layout-f2code = 'DISP'. " Sets fcode for when double

and

g_layout-f2code = '&ETA'. " it will display POPUP screen

Best Regards

Ranga

Edited by: Ranga Swamy on Nov 1, 2008 11:07 PM

Edited by: Ranga Swamy on Nov 1, 2008 11:17 PM

Read only

0 Likes
560

This does not really answer my query.

I have tried whatever you have suggested but it doesnt help at all!

Read only

0 Likes
560

can u elaborate your query,

Read only

0 Likes
560

Hi,

In my ALV grid,when i select one row and then try to select another row,the second one gest unselected.To select multiple rows,i have to then use CTRL+SHIFT.

I just want to know whether in the classical ALV ,is it possible to directly select MULTIPLE rows of the grid with single click of the mouse rather then just using CTRL+SHIFT keys?If so,how?

Thanks in advance.