‎2008 Sep 01 7:01 PM
Hi Friends,
i have a requirment .
i have some 7 internal tables.
from those internal tables i need to assign all those values into one internal table
ie : final internal table.
hoe can i do that.
code :
DATA :
t_mkpf TYPE STANDARD TABLE OF ty_mkpf,
t_mseg TYPE STANDARD TABLE OF ty_mseg,
t_detl TYPE STANDARD TABLE OF ty_detl,
t_ekko TYPE STANDARD TABLE OF ty_ekko,
t_lfa1 TYPE STANDARD TABLE OF ty_lfa1,
t_marc TYPE STANDARD TABLE OF ty_marc,
t_makt TYPE STANDARD TABLE OF ty_makt,
t_mbew TYPE STANDARD TABLE OF ty_mbew,
t_final TYPE STANDARD TABLE OF ty_final.
DATA :
wa_mkpf TYPE ty_mkpf,
wa_mseg TYPE ty_mseg,
wa_ekko TYPE ty_ekko,
wa_lfa1 TYPE ty_lfa1,
wa_detl TYPE ty_detl,
wa_marc TYPE ty_marc,
wa_makt TYPE ty_makt,
wa_mbew TYPE ty_mbew,
wa_final TYPE ty_final,
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-002.
SELECT-OPTIONS s_bukrs FOR mseg-bukrs NO INTERVALS. " compnay code
SELECT-OPTIONS s_bwart FOR mseg-bwart NO-DISPLAY. " movement type
SELECT-OPTIONS s_werks FOR mseg-werks. " plant
SELECT-OPTIONS s_lifnr FOR mseg-lifnr. " vendor no
SELECT-OPTIONS s_prctr FOR marc-prctr. " profit centre
SELECT-OPTIONS s_bklas FOR mbew-bklas. " valuation class
SELECT-OPTIONS s_matnr FOR mseg-matnr. " material no
SELECTION-SCREEN END OF BLOCK b1.
FETCHING DATA FROM MKPF TABLE
SELECT mandt
mblnr
mjahr
budat
INTO TABLE t_mkpf FROM mkpf
WHERE budat >= date1 AND
budat <= date2.
IF t_mkpf[] IS NOT INITIAL.
*FETCHING DATA FROM MSEG TABLE BASED ON THE VALUES IN
*T_MKPF internal table
SELECT mandt
mblnr
mjahr
bukrs
ebeln
ebelp
matnr
meins
waers
werks
bwart
menge
FROM mseg INTO TABLE t_mseg
FOR ALL ENTRIES IN t_mkpf
WHERE mblnr = t_mkpf-mblnr AND
mjahr = t_mkpf-mjahr AND
bukrs IN s_bukrs AND
matnr IN s_matnr AND
werks IN s_werks AND
bwart IN s_bwart.
ENDIF.
check for the materail for movement types
SORT t_mseg BY mblnr ebeln ebelp matnr werks bwart menge.
LOOP AT t_mseg INTO wa_mseg.
IF wa_mseg-bwart = '101'.
wa_mseg-menge = wa_mseg-menge.
ELSEIF wa_mseg-bwart = '102'.
wa_mseg-menge = wa_mseg-menge * -1.
ELSEIF wa_mseg-bwart = '105'.
wa_mseg-menge = wa_mseg-menge.
ELSEIF wa_mseg-bwart = '106'.
wa_mseg-menge = wa_mseg-menge * -1.
ENDIF.
wa_detl-ebeln = wa_mseg-ebeln.
wa_detl-ebelp = wa_mseg-ebelp.
wa_detl-matnr = wa_mseg-matnr.
wa_detl-meins = wa_mseg-meins.
wa_detl-werks = wa_mseg-werks.
wa_detl-menge = wa_mseg-menge.
wa_detl-waers = wa_mseg-waers.
COLLECT wa_detl INTO t_detl.
CLEAR : t_detl.
ENDLOOP.
IF t_detl[] IS NOT INITIAL.
FETCHING DATA FROM EKKO TABLE BASED ON THE VALUES IN
*T_MSEG1 internal table
SELECT ebeln
lponr
lifnr
FROM ekko INTO TABLE t_ekko
FOR ALL ENTRIES IN t_detl
WHERE ebeln = t_detl-ebeln AND
lponr = t_detl-ebelp AND
lifnr IN s_lifnr.
ENDIF.
IF t_ekko[] IS NOT INITIAL.
*FETCHING DATA FROM LFA1 TABLE BASED ON THE VALUES IN
*T_EKKO internal table
SELECT lifnr
name1
FROM lfa1 INTO TABLE t_lfa1
FOR ALL ENTRIES IN t_ekko
WHERE lifnr = t_ekko-lifnr.
ENDIF.
*FETCHING DATA FROM MARC TABLE BASED ON THE VALUES IN
*T_MSEG1 internal table
SELECT matnr
werks
prctr
FROM marc INTO TABLE t_marc
FOR ALL ENTRIES IN t_detl
WHERE matnr = t_detl-matnr AND
werks = t_detl-werks.
FETCHING DATA FROM MBEW TABLE BASED ON THE VALUES IN
*T_MARC internal table
SELECT matnr
bwkey
bklas
stprs
peinh
FROM mbew INTO TABLE t_mbew
FOR ALL ENTRIES IN t_marc
WHERE matnr = t_marc-matnr AND
bwkey = t_marc-werks AND
bklas IN s_bklas.
FETCHING DATA FROM MAKT TABLE BASED ON THE VALUES IN T_MBEW internal
table
SELECT matnr
maktx
FROM makt INTO TABLE t_makt
FOR ALL ENTRIES IN t_mbew
WHERE matnr = t_mbew-matnr AND
spras = sy-langu.
now in my final internal table T_FINAL I need all the following fields.
lifnr name1 werks prctr bklas matnr maktx menge waers
In my final internal table T_FINAL.
*clearing all the work areas
CLEAR: wa_mkpf,
wa_mseg,
wa_ekko,
wa_lfa1,
wa_marc,
wa_mbew,
wa_makt.
*sort internal table T_mseg1
SORT t_detl.
*sort internal table T_ekko
SORT t_ekko BY ebeln.
sort internal table T_lfa1
SORT t_lfa1 BY lifnr.
sort internal table T_marc
SORT t_marc BY matnr werks.
sort internal table T_mbew
SORT t_mbew BY matnr.
sort internal table T_makt
SORT t_makt BY matnr.
*looping internal table T_mseg1 into wa_mseg and assinging the
*values to wa_final.
LOOP AT t_detl INTO wa_detl.
wa_final-ebeln = wa_detl-ebeln.
wa_final-ebelp = wa_detl-ebelp.
wa_final-matnr = wa_detl-matnr.
wa_final-meins = wa_detl-meins.
wa_final-menge = wa_detl-menge.
wa_final-werks = wa_detl-werks.
wa_final-waers = wa_detl-waers.
*reading internal table T_ekko
READ TABLE t_ekko INTO wa_ekko WITH KEY ebeln = wa_detl-ebeln.
IF sy-subrc = 0.
wa_final-lifnr = wa_ekko-lifnr.
ENDIF.
*reading internal table T_lfa1
READ TABLE t_lfa1 INTO wa_lfa1 WITH KEY lifnr = wa_final-lifnr.
IF sy-subrc = 0.
wa_final-name1 = wa_lfa1-name1.
ENDIF.
*reading internal table T_marc
READ TABLE t_marc INTO wa_marc WITH KEY matnr = wa_detl-matnr
werks = wa_detl-werks.
IF sy-subrc = 0.
wa_final-prctr = wa_marc-prctr.
ENDIF.
*reading internal table T_mbew
READ TABLE t_mbew INTO wa_mbew WITH KEY matnr = wa_marc-matnr
bwkey = wa_detl-werks.
IF sy-subrc = 0.
wa_final-bklas = wa_mbew-bklas.
wa_final-stprs = wa_mbew-stprs.
*calculating standard cost
wa_final-stcst = wa_mbew-stprs * wa_detl-menge.
ENDIF.
*Reading internal table t_makt
READ TABLE t_makt INTO wa_makt WITH KEY matnr = wa_mbew-matnr.
IF sy-subrc = 0.
wa_final-maktx = wa_makt-maktx.
appending values into final internal table T_final
APPEND wa_final TO t_final.
CLEAR : wa_final.
ENDIF.
ENDLOOP.
Iam using above code to get the data into T_FINAL.
But with the above code iam getting the unnecesary data when iam passing T_FINAL TO grid display.
IE: when iam giving particaluar vendor on selection screen it is displaying some other data
which is not related to that particular vendor ie: iam getting other vendors also.
can any one tell me how to correct the code.
Thanks & Regards,
JERRY.
Edited by: jerry roberts on Sep 1, 2008 8:03 PM
‎2008 Sep 01 7:45 PM
Hi,
In your code
LOOP AT t_mseg INTO wa_mseg.
IF wa_mseg-bwart = '101'.
wa_mseg-menge = wa_mseg-menge.
ELSEIF wa_mseg-bwart = '102'.
wa_mseg-menge = wa_mseg-menge * -1.
ELSEIF wa_mseg-bwart = '105'.
wa_mseg-menge = wa_mseg-menge.
ELSEIF wa_mseg-bwart = '106'.
wa_mseg-menge = wa_mseg-menge * -1.
ENDIF.
wa_detl-ebeln = wa_mseg-ebeln.
wa_detl-ebelp = wa_mseg-ebelp.
wa_detl-matnr = wa_mseg-matnr.
wa_detl-meins = wa_mseg-meins.
wa_detl-werks = wa_mseg-werks.
wa_detl-menge = wa_mseg-menge.
wa_detl-waers = wa_mseg-waers.
COLLECT wa_detl INTO t_detl.
CLEAR : t_detl. why you are using this, as it is deleting the contents of the internal table, which you are using at later stage, that is the reason you are getting different values. Use CLEAR : wa_detl.
If possible pass your complete code with Types declaration, so that we can try and execute the program.
Regards
Bala Krishna
Edited by: Bala Krishna on Sep 2, 2008 12:24 AM
‎2008 Sep 01 7:45 PM
Hi,
In your code
LOOP AT t_mseg INTO wa_mseg.
IF wa_mseg-bwart = '101'.
wa_mseg-menge = wa_mseg-menge.
ELSEIF wa_mseg-bwart = '102'.
wa_mseg-menge = wa_mseg-menge * -1.
ELSEIF wa_mseg-bwart = '105'.
wa_mseg-menge = wa_mseg-menge.
ELSEIF wa_mseg-bwart = '106'.
wa_mseg-menge = wa_mseg-menge * -1.
ENDIF.
wa_detl-ebeln = wa_mseg-ebeln.
wa_detl-ebelp = wa_mseg-ebelp.
wa_detl-matnr = wa_mseg-matnr.
wa_detl-meins = wa_mseg-meins.
wa_detl-werks = wa_mseg-werks.
wa_detl-menge = wa_mseg-menge.
wa_detl-waers = wa_mseg-waers.
COLLECT wa_detl INTO t_detl.
CLEAR : t_detl. why you are using this, as it is deleting the contents of the internal table, which you are using at later stage, that is the reason you are getting different values. Use CLEAR : wa_detl.
If possible pass your complete code with Types declaration, so that we can try and execute the program.
Regards
Bala Krishna
Edited by: Bala Krishna on Sep 2, 2008 12:24 AM
‎2008 Sep 01 11:00 PM
‎2008 Sep 02 8:18 AM