‎2006 May 09 4:48 PM
Hi,
I have the following code in my BADI:
ct_value_list is defined in the parameters of the method as a type standard table.
Create values list reference
CREATE DATA lv_value_list_ref LIKE LINE OF ct_value_list.
ASSIGN lv_value_list_ref->* TO <lfs_value_list>.
IF CT_VALUE_LIST IS INITIAL.
lv_tabix = sy-tabix.
IF NOT LT_DATA[] IS INITIAL.
LOOP AT lt_data assigning <lfs_data>.
assign <lfs_data> to <lfs_value_list>.
assign <lfs_value_list> to <lv_value_list>.
ASSIGN COMPONENT lc_prvar OF STRUCTURE <lfs_value_list>
TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
Get the material id
READ TABLE it_matkey_tab ASSIGNING <lfs_matkey>
WITH KEY matnr = <lfs_attribute>.
IF sy-subrc = 0.
lv_matid = <lfs_matkey>-matid.
ENDIF.
ENDIF.
ASSIGN COMPONENT lc_mktgr OF STRUCTURE <lfs_value_list>
TO <lfs_attribute>.
IF <lfs_value_list> IS ASSIGNED.
READ TABLE it_loc ASSIGNING <lfs_loc>
WITH KEY locno = <lfs_attribute>.
IF sy-subrc = 0.
lv_locid = <lfs_loc>-locid.
ENDIF.
READ TABLE it_matloc ASSIGNING <lfs_matloc_int>
WITH KEY matid = lv_matid
locid = lv_locid.
if sy-subrc = 0.
MATLOC: Assignment of Values - START
ASSIGN COMPONENT 'MATLOCID'
OF STRUCTURE <lfs_matloc_int> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_matloc_int>-matlocid.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
INSERT <lfs_matloc_int> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'PLANNER_SNP'
OF STRUCTURE <lfs_matloc_int> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_matloc_int>-planner_snp.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'AT101'
OF STRUCTURE <lfs_matloc_int> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_matloc_int>-at101.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'AT102'
OF STRUCTURE <lfs_matloc_int> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_matloc_int>-at102.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'AT103'
OF STRUCTURE <lfs_matloc_int> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_matloc_int>-at103.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'AT104'
OF STRUCTURE <lfs_matloc_int> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_matloc_int>-at104.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'AT105'
OF STRUCTURE <lfs_matloc_int> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_matloc_int>-at105.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
endif.
ENDIF.
ASSIGN COMPONENT 'PRVAR'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-prvar.
INSERT <lfs_value_list> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'PARPR'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-parpr.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'VARID'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-varid.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'VARCT'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-varct.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'VARTX'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-vartx.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'DMOAP'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-dmoap.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'PRDID'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-prdid.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'BRFAM'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-brfam.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'MATKL'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-matkl.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'BRDIF'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-brdif.
INSERT <lfs_attribute> INTO TABLE ct_value_list.
ENDIF.
ASSIGN COMPONENT 'MEIND'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-meind.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'MKLEN'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-mklen.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'PCKTY'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-pckty.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'ITPCK'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-itpck.
INSERT <lfs_attribute> INTO TABLE ct_value_list.
ENDIF.
ASSIGN COMPONENT 'PMEIN'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-pmein.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'MKTHK'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-mkthk.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'FLIND'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-flind.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'EDTID'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-edtid.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'BNDTY'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-bndty.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'ITBND'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-itbnd.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'ITCSE'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-itcse.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'TPCOL'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-tpcol.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'SPFLV'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-spflv.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'PRSHP'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-prshp.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'MKTGR'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-mktgr.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'SUBMK'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-submk.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'BOMHD'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-bomhd.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'BRDSC'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-brdsc.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'MKSTR'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-mkstr.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'EDDSC'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-eddsc.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'EDCAT'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-edcat.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'CCIND'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-ccind.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'CGSTY'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-cgsty.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'FLTTY'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-fltty.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'CPIND'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-cpind.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'MBIND'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-mbind.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'USPRP'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-usprp.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'EDDET'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-eddet.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'BRGEW'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-brgew.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'NTGEW'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-ntgew.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'GEWEI'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-gewei.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'VOLUM'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-volum.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'VOLEH'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-voleh.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'DMOAPP1'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-dmoapp1.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'MAKTX'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-maktx.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ASSIGN COMPONENT 'RPLVL'
OF STRUCTURE <lfs_value_list> TO <lfs_attribute>.
IF <lfs_attribute> IS ASSIGNED.
<lfs_attribute> = <lfs_value_list>-rplvl.
INSERT <lfs_attribute> INTO TABLE <lv_value_list>.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
I get a shortdump in the code for the above code. There are diff types of inserts that I am trying to do and each one gives a short dump.
Looking forward to your inputs.
Your program is not applicable in my case as I have ct_value_list passed as a changing parameter of type standard table in my APO BADI.
cheers
Aveek
‎2006 May 09 5:13 PM
Hi,
Can you show us the declaration of <lv_value_list>?
Also, please let us know the DUMP details.
Regards,
Ravi
‎2006 May 10 8:45 AM
Hi,
FIELD-SYMBOLS : <lv_value_list> type any table.
Dump Analysis:
-
The statement
"INSERT wa INTO TABLE itab"
requires the lines of the internal table "CT_VALUE_LIST" and the
work area " wa" to be compatible. Compatibility means
equivalence in the context of ABAP/4 type checking.
In this case, the condition is not satisfied because the internal table
"CT_VALUE_LIST" has the line type "u" and the length 610, but the work area
wa"
has the type "C" and the length 18.
(If the work area " wa" is the header line of the internal
table "CT_VALUE_LIST", the above inconsistency can arise if an internal
table t with the line type T1 is passed to a subroutine (FORM or
FUNCTION) as an actual parameter and the corresponding formal
parameter p is declared in the subroutine by "TABLES p STRUCTURE T2".
If then T1 and T2 are incompatible, the header line p
has the type T2 (specifed by STRUCTURE), but the internal
table p has the line type T1 (passed from the actual parameter)).
cheers
Aveek
‎2006 May 10 8:50 AM
Hi,
Instead of doing this
CREATE DATA lv_value_list_ref LIKE LINE OF ct_value_list.
ASSIGN lv_value_list_ref->* TO <lfs_value_list>.
Can you try doing this.
field-symbols : <fs_value_list> like line of table ct_value_list.
Now use the <fs_value_list> to get the individual values, like the way you are doing and then finally append that to the table.
APPEND <FS_VALUE_LIST> TO TABLE.
Regards,
Ravi
Note : please mark the helpful answers
‎2006 May 10 9:25 AM
Hi,
Will try your option and keep you posted.
cheers
Aveek
Will award points if problem is solved.
‎2006 May 10 10:49 AM
Hai Aveek
try this example:
=====================================
REPORT zmaschl_create_data_dynamic .
TYPE-POOLS: slis.
DATA: it_fcat TYPE slis_t_fieldcat_alv,
is_fcat LIKE LINE OF it_fcat.
DATA: it_fieldcat TYPE lvc_t_fcat,
is_fieldcat LIKE LINE OF it_fieldcat.
DATA: new_table TYPE REF TO data.
DATA: new_line TYPE REF TO data.
FIELD-SYMBOLS: <l_table> TYPE ANY TABLE,
<l_line> TYPE ANY,
<l_field> TYPE ANY.
Build fieldcat
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = 'SYST'
CHANGING
ct_fieldcat = it_fcat[].
LOOP AT it_fcat INTO is_fcat WHERE NOT reptext_ddic IS initial.
MOVE-CORRESPONDING is_fcat TO is_fieldcat.
is_fieldcat-fieldname = is_fcat-fieldname.
is_fieldcat-ref_field = is_fcat-fieldname.
is_fieldcat-ref_table = is_fcat-ref_tabname.
APPEND is_fieldcat TO it_fieldcat.
ENDLOOP.
Create a new Table
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = it_fieldcat
IMPORTING
ep_table = new_table.
Create a new Line with the same structure of the table.
ASSIGN new_table->* TO <l_table>.
CREATE DATA new_line LIKE LINE OF <l_table>.
ASSIGN new_line->* TO <l_line>.
Test it...
DO 30 TIMES.
ASSIGN COMPONENT 'SUBRC' OF STRUCTURE <l_line> TO <l_field>.
<l_field> = sy-index.
INSERT <l_line> INTO TABLE <l_table>.
ENDDO.
LOOP AT <l_table> ASSIGNING <l_line>.
ASSIGN COMPONENT 'SUBRC' OF STRUCTURE <l_line> TO <l_field>.
WRITE <l_field>.
ENDLOOP.
Thanks & regards
Sreenivasulu P