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

Need solution to solve fields with many characters

Former Member
0 Likes
807

Hi all, if you refer back to my earlier post, i would like to know how to use ALV and if i would need to use a special transaction code to do it.

I have 3 columns that are named Description, Material PO Text and Item Text. The records retrieved for these columns would likely exceed the 40 character space that i have assigned in my original program when the report is generated. I was informed by my consultant that i should consider using ALVs to solve it.

Any advice, hints or resources you could let me know about, so i would know where to begin?

Thanks in advance

6 REPLIES 6
Read only

RichHeilman
Developer Advocate
Developer Advocate
0 Likes
703

I posted an answer to your other post, but you created a new post.

ALV is ABAP List Viewer. This is functionality provided by SAP. There are two ways of coding an ALV for your report. You can use the function module way or the class/method way. Since you are new to ABAP, I will not confuse you with ABAP OO yet. Here is a sample program showing you how to code an ALV grid using the function module.



report zrich_0004
       no standard page heading.

type-pools slis.

data: fieldcat type slis_t_fieldcat_alv.

data: begin of imara occurs 0,
      matnr type mara-matnr,
      maktx type makt-maktx,
      end of imara.

* Selection Screen
selection-screen begin of block b1 with frame title text-001 .
select-options: s_matnr for imara-matnr .
selection-screen end of block b1.

start-of-selection.

  perform get_data.
  perform write_report.


************************************************************************
*  Get_Data
************************************************************************
form get_data.

  select  mara~matnr makt~maktx
            into corresponding fields of table imara
              from mara
               inner join makt
                 on mara~matnr = makt~matnr
                    where mara~matnr in s_matnr
                      and makt~spras = sy-langu.

endform.

************************************************************************
*  WRITE_REPORT
************************************************************************
form write_report.

  perform build_field_catalog.

* CALL ABAP LIST VIEWER (ALV)
  call function 'REUSE_ALV_GRID_DISPLAY'
       exporting
            it_fieldcat = fieldcat
       tables
            t_outtab    = imara.

endform.

************************************************************************
* BUILD_FIELD_CATALOG
************************************************************************
form build_field_catalog.

  data: fc_tmp type slis_t_fieldcat_alv with header line.
  clear: fieldcat. refresh: fieldcat.

  clear: fc_tmp.
  fc_tmp-reptext_ddic    = 'Material Number'.
  fc_tmp-fieldname  = 'MATNR'.
  fc_tmp-tabname   = 'IMARA'.
  fc_tmp-outputlen  = '18'.
  fc_tmp-col_pos    = 2.
  append fc_tmp to fieldcat.


  clear: fc_tmp.
  fc_tmp-reptext_ddic    = 'Material'.
  fc_tmp-fieldname  = 'MAKTX'.
  fc_tmp-tabname   = 'IMARA'.
  fc_tmp-outputlen  = '40'.
  fc_tmp-col_pos    = 3.
  append fc_tmp to fieldcat.

endform.

Regards,

Rich Heilman

Read only

RichHeilman
Developer Advocate
Developer Advocate
0 Likes
703

For examples on the OO way to generated a ALV grid, please see the programs which begin with BCALV_GRID_

Regards,

Rich Heilman

Read only

Former Member
0 Likes
703

hi,

visit http://www.sapdevelopment.co.uk/alvhome

to understand alv's.

and even you can see lot of programs in SLIS package.

vijay

Read only

Former Member
0 Likes
703

Hi Bernard,

1. REUSE_ALV_LIST_DISPLAY

REUSE_ALV_FIELDCATALOG_MERGE

These are the two functions which are required

to display in ALV List or ALV Grid.

2. Just see the documentation on it.

Regards,

Amit M.

Read only

0 Likes
702

Here's another example of OO alv grid. Probably will not add any value, but an example none the less. It uses a dynpro screen 100. Create screen 100, uncomment the modules in the flow logic, add a custom container to the screen called ALV_CONTAINER.




REPORT ZRICH_0006.

TABLES: MARA.

TYPE-POOLS: SLIS, ICON.

* Internal Tables
DATA: BEGIN OF IALV OCCURS 0,
      MATNR TYPE MARA-MATNR,
      MAKTX TYPE MAKT-MAKTX,
      END OF IALV .

* Miscellanous Variables
DATA: INDEX_ROWS TYPE LVC_T_ROW,
      INDEX LIKE LINE OF INDEX_ROWS.

***********************************************************************
*       CLASS cl_event_receiver DEFINITION
***********************************************************************
CLASS CL_EVENT_RECEIVER DEFINITION.
  PUBLIC SECTION.
    METHODS HANDLE_DOUBLE_CLICK
      FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
      IMPORTING E_ROW E_COLUMN.
  PRIVATE SECTION.
ENDCLASS.

***********************************************************************
*       CLASS CL_EVENT_RECEIVER IMPLEMENTATION
***********************************************************************
CLASS CL_EVENT_RECEIVER IMPLEMENTATION.
  METHOD HANDLE_DOUBLE_CLICK.
* Do Nothing
  ENDMETHOD.
ENDCLASS.

DATA: ALV_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
      EVENT_RECEIVER TYPE REF TO CL_EVENT_RECEIVER,
      ALV_GRID TYPE REF TO CL_GUI_ALV_GRID,
      ROW_TABLE TYPE LVC_T_ROW WITH HEADER LINE,
      OK_CODE LIKE SY-UCOMM,
      LAYOUT  TYPE LVC_S_LAYO,
      FIELDCAT TYPE LVC_T_FCAT.

SELECT-OPTIONS: S_MATNR FOR MARA-MATNR.

START-OF-SELECTION.

  PERFORM GET_DATA.

  IF IALV[] IS INITIAL.
    MESSAGE S429(MO).
    EXIT.
  ENDIF.

  CALL SCREEN 100.

************************************************************************
*      Module  status_0100  OUTPUT
************************************************************************
MODULE STATUS_0100 OUTPUT.
  SET PF-STATUS '0100'.
  SET TITLEBAR '0100'.

  DATA: VARIANT TYPE  DISVARIANT.
  DATA: LT_EXCLUDE TYPE UI_FUNCTIONS.

  VARIANT-REPORT = SY-REPID.
  VARIANT-USERNAME = SY-UNAME.

* Create Controls
  CREATE OBJECT ALV_CONTAINER
         EXPORTING CONTAINER_NAME = 'ALV_CONTAINER'.

*   create Event Receiver
  CREATE OBJECT EVENT_RECEIVER.
  CREATE OBJECT ALV_GRID
         EXPORTING  I_PARENT =  ALV_CONTAINER.

*  Populate Field Catalog
  PERFORM GET_FIELDCATALOG.

* Optionally restrict generic functions to 'change only'.
* (The user shall not be able to add new lines).
  PERFORM EXCLUDE_TB_FUNCTIONS CHANGING LT_EXCLUDE.

* Set selection mode to "D"  --  Multiple Lines
  LAYOUT-SEL_MODE = 'D'.

  CALL METHOD ALV_GRID->SET_TABLE_FOR_FIRST_DISPLAY
      EXPORTING
           IS_LAYOUT              = LAYOUT
           IT_TOOLBAR_EXCLUDING   = LT_EXCLUDE
           IS_VARIANT             = VARIANT
           I_SAVE                 = 'A'
           I_STRUCTURE_NAME       = 'IALV'
      CHANGING
           IT_OUTTAB       = IALV[]
           IT_FIELDCATALOG = FIELDCAT[].

*   handler for ALV grid
  SET HANDLER EVENT_RECEIVER->HANDLE_DOUBLE_CLICK FOR ALV_GRID.

ENDMODULE.

************************************************************************
*      Module  USER_COMMAND_0100  INPUT
************************************************************************
MODULE USER_COMMAND_0100 INPUT.

  CASE SY-UCOMM.

    WHEN 'BACK' OR 'CANC'.
      PERFORM FREE_CONTAINERS.
      IF SY-SUBRC = 0.
        SET SCREEN 0.
        LEAVE SCREEN.
      ELSE.
        LEAVE PROGRAM.
      ENDIF.

    WHEN 'EXIT'.
      PERFORM FREE_CONTAINERS.
      LEAVE PROGRAM.

    WHEN 'CONTINUE'.

* Retrieve selected rows from ALV grid
      PERFORM GET_SELECTED_ROWS.

* Do something with those selected rows here
      LOOP AT INDEX_ROWS INTO INDEX.

        READ TABLE IALV INDEX INDEX-INDEX.
        IF SY-SUBRC = 0.

* Insert code here

        ENDIF.
      ENDLOOP.



      PERFORM FREE_CONTAINERS.
      LEAVE TO SCREEN 100.

  ENDCASE.

ENDMODULE.


*********************************************************************
*       FORM GET_DATA.
*********************************************************************
FORM GET_DATA.

  SELECT MARA~MATNR MAKT~MAKTX
             INTO CORRESPONDING FIELDS OF TABLE IALV
                 FROM MARA
                      INNER JOIN MAKT
                         ON MARA~MATNR = MAKT~MATNR
                                WHERE MARA~MATNR IN S_MATNR
                                  AND MAKT~SPRAS = SY-LANGU.

  SORT IALV ASCENDING BY MATNR.

ENDFORM.

************************************************************************
*      Form  GET_SELECTED_ROWS
************************************************************************
FORM GET_SELECTED_ROWS.

* Get Selected rows from alv grid
  CLEAR INDEX_ROWS.  REFRESH INDEX_ROWS.
  CALL METHOD ALV_GRID->GET_SELECTED_ROWS
           IMPORTING
                 ET_INDEX_ROWS = INDEX_ROWS.

ENDFORM.

************************************************************************
*      Form  FREE_CONTAINERS
************************************************************************
FORM FREE_CONTAINERS.

  IF NOT ALV_CONTAINER IS INITIAL.
    CALL METHOD ALV_CONTAINER->FREE.
    CLEAR: ALV_CONTAINER.
    FREE : ALV_CONTAINER.
  ENDIF.

ENDFORM.

************************************************************************
*      Form  Get_Fieldcatalog - Set Up Columns/Headers
************************************************************************
FORM GET_FIELDCATALOG.

  DATA: LS_FCAT TYPE LVC_S_FCAT.
  DATA: COLUMNNO(3) TYPE N VALUE '0'.
  REFRESH: FIELDCAT.

  CLEAR: LS_FCAT.
  LS_FCAT-REPTEXT    = 'Material Number'.
  LS_FCAT-COLTEXT    = 'Material Number'.
  LS_FCAT-FIELDNAME  = 'MATNR'.
  LS_FCAT-REF_TABLE  = 'IALV'.
  LS_FCAT-OUTPUTLEN  = '18'.
  LS_FCAT-COL_POS    = 1.
  APPEND LS_FCAT TO FIELDCAT.

  CLEAR: LS_FCAT.
  LS_FCAT-REPTEXT    = 'Material Description'.
  LS_FCAT-COLTEXT    = 'Material Description'.
  LS_FCAT-FIELDNAME  = 'MAKTX'.
  LS_FCAT-REF_TABLE  = 'IALV'.
  LS_FCAT-OUTPUTLEN  = '40'.
  LS_FCAT-COL_POS    = 2.
  APPEND LS_FCAT TO FIELDCAT.

ENDFORM.

***********************************************************************
*      Form  EXCLUDE_TB_FUNCTIONS
***********************************************************************
FORM EXCLUDE_TB_FUNCTIONS CHANGING PT_EXCLUDE TYPE UI_FUNCTIONS.
* Only allow to change data not to create new entries (exclude
* generic functions).

  DATA LS_EXCLUDE TYPE UI_FUNC.

  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_MOVE_ROW.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.

ENDFORM.

Regards,

Rich Heilman

Read only

Former Member
0 Likes
702

Hi Bernard,

1. try this program (just copy paste)

While using ALV,

there are some things which are required,

optional etc.

I have kept the bare minimum coding.

along with comments.

2 The documentation on these both FMs

will definitely help u a lot.

REPORT abc .

*----


NECESSARY / MUST

TYPE-POOLS : slis.

DATA : alvfc TYPE slis_t_fieldcat_alv.

*----


ITAB DECLARATION

DATA : prg TYPE sy-repid.

DATA : BEGIN OF itab OCCURS 0.

INCLUDE STRUCTURE t001.

DATA : END OF itab.

*----


SELECT

SELECT * FROM t001

INTO TABLE itab..

prg = sy-repid.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'

EXPORTING

i_program_name = prg

i_internal_tabname = 'ITAB'

CHANGING

ct_fieldcat = alvfc

EXCEPTIONS

inconsistent_interface = 1

program_error = 2

OTHERS = 3.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'

EXPORTING

it_fieldcat = alvfc

TABLES

t_outtab = itab

EXCEPTIONS

program_error = 1

OTHERS = 2

.

Regards,

Amit M.