on 07-21-2009 9:22 AM
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
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
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
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
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
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
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
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
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
User | Count |
---|---|
5 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.