cancel
Showing results for 
Search instead for 
Did you mean: 

Display fetched value as heading

Former Member
0 Kudos

Hi Experts,

Please advice if it is possible to display the fetched value as heading in ALV.

Suppose If in dbtab:


OBJECT           OBJECT DESCRIPTION            CLASS           VALUE 
 OBJ 1             MACHINE 1                       A               20 
 OBJ 2             MACHINE 2                       B               30
 OBJ 3             MACHINE 3                       C               40
 OBJ 4             MACHINE 4                       D               50

and I want my o/p as


OBJECT   OBJECT DESCRIPTION           A    B   C     D 
 OBJ 1         MACHINE 1            20     0    0     0
 OBJ 2         MACHINE 2              0   30    0     0
 OBJ 3         MACHINE 3              0     0  40     0
 OBJ 4         MACHINE 4              0     0    0    50

and if there is extra class called E it should display automatically ....if no then no need

Please advice

Karthik

Edited by: Karthik R on Jul 21, 2009 1:52 PM

Edited by: Karthik R on Jul 21, 2009 1:53 PM

Edited by: Karthik R on Jul 21, 2009 1:53 PM

Edited by: Karthik R on Jul 21, 2009 1:54 PM

Edited by: Karthik R on Jul 21, 2009 1:54 PM

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Hi

U need to create an new internal table dynamically in order of the values in field CLASS.

U can use class like CL_ALV_TABLE_CREATE or cl_abap_tabledescr to do it

Max

Former Member
0 Kudos

Hi

Try this:

DATA: LR_VALUE_DESCR  TYPE REF TO CL_ABAP_ELEMDESCR,
      LR_STRUCT_DESCR TYPE REF TO CL_ABAP_STRUCTDESCR,
      LR_TABLE_DESCR  TYPE REF TO CL_ABAP_TABLEDESCR,
      COMPONENT       TYPE CL_ABAP_STRUCTDESCR=>COMPONENT,
      LT_COMPONENTS   TYPE CL_ABAP_STRUCTDESCR=>COMPONENT_TABLE.


DATA: BEGIN OF ITAB OCCURS 0,
        FIELD1(1) TYPE C,
        CLASS(1)  TYPE C,
        VALUE     TYPE I,
      END   OF ITAB.

DATA: BEGIN OF ITAB_CLASS OCCURS 0,
        CLASS(1)  TYPE C,
      END   OF ITAB_CLASS.

DATA: DYN_TABLE TYPE REF TO DATA,
      DYN_WA    TYPE REF TO DATA.

FIELD-SYMBOLS: <FS_TABLE> TYPE TABLE,
               <FS_WA>    TYPE ANY,
               <FS_VAL>   TYPE ANY.

ITAB-FIELD1 = '1'.
ITAB-CLASS  = 'A'.
ITAB-VALUE  = 20.
APPEND ITAB.

ITAB-FIELD1 = '2'.
ITAB-CLASS  = 'B'.
ITAB-VALUE  = 20.
APPEND ITAB.

ITAB-FIELD1 = '3'.
ITAB-CLASS  = 'C'.
ITAB-VALUE  = 20.
APPEND ITAB.

ITAB-FIELD1 = '4'.
ITAB-CLASS  = 'D'.
ITAB-VALUE  = 20.
APPEND ITAB.

ITAB-FIELD1 = '5'.
ITAB-CLASS  = 'A'.
ITAB-VALUE  = 20.
APPEND ITAB.

Max

Former Member
0 Kudos

Step 2

LOOP AT ITAB.
  ITAB_CLASS-CLASS = ITAB-CLASS.
  COLLECT ITAB_CLASS.

  WRITE: / ITAB-FIELD1, ITAB-CLASS, ITAB-VALUE.
ENDLOOP.


* Create base field
COMPONENT-NAME = 'FIELD1'.
LR_VALUE_DESCR ?= CL_ABAP_ELEMDESCR=>GET_C( P_LENGTH = 1 ).
COMPONENT-TYPE = LR_VALUE_DESCR.
INSERT COMPONENT INTO TABLE LT_COMPONENTS.

* Create CLASS field
LOOP AT ITAB_CLASS.
  COMPONENT-NAME = ITAB_CLASS-CLASS.
  LR_VALUE_DESCR ?= CL_ABAP_ELEMDESCR=>DESCRIBE_BY_NAME( 'I' ).
  COMPONENT-TYPE = LR_VALUE_DESCR.
  INSERT COMPONENT INTO TABLE LT_COMPONENTS.
ENDLOOP.

* Create table

LR_STRUCT_DESCR = CL_ABAP_STRUCTDESCR=>CREATE( P_COMPONENTS =
LT_COMPONENTS P_STRICT = 'X' ).
LR_TABLE_DESCR  = CL_ABAP_TABLEDESCR=>CREATE( P_LINE_TYPE =
LR_STRUCT_DESCR ).

CREATE DATA DYN_TABLE TYPE HANDLE LR_TABLE_DESCR.
ASSIGN DYN_TABLE->* TO <FS_TABLE>.

CREATE DATA DYN_WA LIKE LINE OF <FS_TABLE>.
ASSIGN DYN_WA->* TO <FS_WA>.

LOOP AT ITAB.
  CLEAR <FS_WA>.
  ASSIGN COMPONENT 'FIELD1' OF STRUCTURE <FS_WA> TO <FS_VAL>.
  <FS_VAL> = ITAB-FIELD1.

  READ TABLE ITAB_CLASS WITH KEY CLASS = ITAB-CLASS.

  ASSIGN COMPONENT ITAB-CLASS OF STRUCTURE <FS_WA> TO <FS_VAL>.
  <FS_VAL> = ITAB-VALUE.

  APPEND <FS_WA> TO <FS_TABLE>.
ENDLOOP.

SKIP.

LOOP AT <FS_TABLE> ASSIGNING <FS_WA>.
  WRITE /.
  DO.
    ASSIGN COMPONENT SY-INDEX OF STRUCTURE <FS_WA> TO <FS_VAL>.
    IF SY-SUBRC <> 0. EXIT. ENDIF.
    WRITE: <FS_VAL>.
  ENDDO.
ENDLOOP.

Max

Former Member
0 Kudos

Hi Max,

Thanks a lot for ur kind help,

But I think it does'nt meet my requirment...

Actaully I am doing a report on Equipment History for a particular Plant...For this I need to fetch the initial

details from equi table.

As per my report each Equipment will belong to some class ( klah~class )

and this class will have there own characteristics it may be 1 or more than 1. Characteristics

may vary from class to class.

So as per my requirment I need to display this charcteristics as heading and then displacy

the values below it.

SELECT EQUI~EQUNR
         EQUI~EQTYP
         EQUI~OBJNR
         EQUI~SERGE
         EQUI~HERST
         EQUI~TYPBZ
    FROM EQUI INNER JOIN EQUZ
      ON EQUI~EQUNR EQ EQUZ~EQUNR
    INTO TABLE IT_EQUI
   WHERE EQUI~EQUNR IN S_EQUNR
     AND EQUI~EQTYP IN S_EQTYP
     AND EQUZ~IWERK IN S_WERKS.

  IF NOT IT_EQUI[] IS INITIAL.

    SELECT OBJEK
           ATINN       " this is charcterestic which I need to display as heading
           ATWRT
           ATFLV
           KLART
      FROM AUSP INTO TABLE IT_AUSP
       FOR ALL ENTRIES IN IT_EQUI
     WHERE OBJEK = IT_EQUI-EQUNR
       AND KLART EQ '002'.

  ENDIF.

there is standard t-code called IE03 which meet my requirement

Please advice

Karthik

Edited by: Karthik R on Jul 21, 2009 3:16 PM

Former Member
0 Kudos

Hi

My it's just a sample and it's based on your first requirement, now u should explain how the output should be if the equipement has more than 1 characteristic.

Anyway u can check the charateristic table in order to decide which type has to have the fields of dynamic table, the BAPI like BAPI_CLASS_GET_CHARACTERISTICS can be used in order to get out information about charateristic.

Max

Former Member
0 Kudos

Hi Max,

Thanks again for ur quick responce

I need to fetch this charcterestics from AUSP table and the values for the

corresponding characterestics from some other table.

Based on class, no: of characterestics can differ and I need to move this characteretics to

fieldcatalog and display as header...

Please advice me is this possible ?

Karthik

Former Member
0 Kudos

Hi

If you need to create an internal table having the characteristic as fields, u can use this variant of my previuos sample:

.CALL FUNCTION 'BAPI_CLASS_GET_CHARACTERISTICS'
  EXPORTING
    CLASSTYPE       = C_KLART
    CLASSNUM        = C_CLASS
    KEY_DATE        = SY-DATUM
    WITH_VALUES     = 'X'
  TABLES
    CHARACTERISTICS = T_CHARACTERISTICS
    CHAR_VALUES     = T_CHAR_VALUES.

DATA: LEN TYPE I,
      DEC TYPE I.

LOOP AT T_CHARACTERISTICS.
  COMPONENT-NAME = T_CHARACTERISTICS-NAME_CHAR.

  MOVE T_CHARACTERISTICS-NUMBER_DIGITS   TO LEN.
  MOVE T_CHARACTERISTICS-NUMBER_DECIMALS TO DEC.

  CASE T_CHARACTERISTICS-DATA_TYPE.
    WHEN 'CHAR'.
      LR_VALUE_DESCR ?= CL_ABAP_ELEMDESCR=>GET_C( P_LENGTH = LEN ).
    WHEN 'CURR'.
    WHEN 'DATE'.
      LR_VALUE_DESCR ?= CL_ABAP_ELEMDESCR=>GET_D( ).
    WHEN 'NUM'.
      IF T_CHARACTERISTICS-NUMBER_DECIMALS IS INITIAL.
        LR_VALUE_DESCR ?= CL_ABAP_ELEMDESCR=>GET_I( ).
      ELSE.
        LR_VALUE_DESCR ?= CL_ABAP_ELEMDESCR=>GET_P( P_LENGTH = LEN P_DECIMALS = DEC ).
      ENDIF.
    WHEN 'TIME'.
      LR_VALUE_DESCR ?= CL_ABAP_ELEMDESCR=>GET_T( ).
    WHEN 'UDEF'.
  ENDCASE.

  COMPONENT-TYPE = LR_VALUE_DESCR.
  INSERT COMPONENT INTO TABLE LT_COMPONENTS.
ENDLOOP.

.

Max

Former Member
0 Kudos

HI Max,

My problem is half solved , now again I need ur help-

how to pass multiple CLASSNUM and CLASSNUM to the FM BAPI_CLASS_GET_CHARACTERISTICS.

I have kept klah~class in selection screen and then pass the value thru the FM BAPI_CLASS_GET_CHARACTERISTICS.

If I enter 1 class in selection-screen I am getting correct o/p but if enter multiple class in selection screen its

picking up the values of last class.

Please advice.

Karthik

Former Member
0 Kudos

Hi

U need to run the BAPI as many times an many classes selected:

 SELECT-OPTIONS: S_CLASS FOR RMCLM-CLASS.

DATA: BEGIN OF T_CLASS TYPE TABLE OF KLAH WITH HEADER LINE.

SELECT * FROM KLAH INTO TABLE T_CLASS
  WHERE CLASS IN S_CLASS.

LOOP AT T_CLASS.
 REFHRES: T_CHAR_VALUES, T_CHARACTERISTICS.
.CALL FUNCTION 'BAPI_CLASS_GET_CHARACTERISTICS'
  EXPORTING
    CLASSTYPE       = T_CLASS-KLART
    CLASSNUM        = T_CLASS-CLASS
    KEY_DATE        = SY-DATUM
    WITH_VALUES     = 'X'
  TABLES
    CHARACTERISTICS = T_CHARACTERISTICS
    CHAR_VALUES     = T_CHAR_VALUES.
 
DATA: LEN TYPE I,
      DEC TYPE I.
 
LOOP AT T_CHARACTERISTICS.
  COMPONENT-NAME = T_CHARACTERISTICS-NAME_CHAR.
 
  MOVE T_CHARACTERISTICS-NUMBER_DIGITS   TO LEN.
  MOVE T_CHARACTERISTICS-NUMBER_DECIMALS TO DEC.
 
  CASE T_CHARACTERISTICS-DATA_TYPE.
    WHEN 'CHAR'.
      LR_VALUE_DESCR ?= CL_ABAP_ELEMDESCR=>GET_C( P_LENGTH = LEN ).
    WHEN 'CURR'.
    WHEN 'DATE'.
      LR_VALUE_DESCR ?= CL_ABAP_ELEMDESCR=>GET_D( ).
    WHEN 'NUM'.
      IF T_CHARACTERISTICS-NUMBER_DECIMALS IS INITIAL.
        LR_VALUE_DESCR ?= CL_ABAP_ELEMDESCR=>GET_I( ).
      ELSE.
        LR_VALUE_DESCR ?= CL_ABAP_ELEMDESCR=>GET_P( P_LENGTH = LEN P_DECIMALS = DEC ).
      ENDIF.
    WHEN 'TIME'.
      LR_VALUE_DESCR ?= CL_ABAP_ELEMDESCR=>GET_T( ).
    WHEN 'UDEF'.
  ENDCASE.
 
  COMPONENT-TYPE = LR_VALUE_DESCR.
  INSERT COMPONENT INTO TABLE LT_COMPONENTS.
ENDLOOP.

ENDLOOP.

Max

Answers (0)