‎2010 Sep 10 10:49 AM
Hi All,
I have 5 internal table.
lets say 1 2 3 4 5.
First through SELECT statememtnt I fetched data for Internal Table 1.
Based on Internal table 1 I have fetched data for Internal table 2 using ALL ENTIES Functionality,
Based on Internal table 2 I have fetched data for Internal table 3 using ALL ENTIES Functionality,
Based on Internal table 3 I have fetched data for Internal table 4 using ALL ENTIES Functionality,
Based on Internal table 4 I have fetched data for Internal table 5 using ALL ENTIES Functionality,
Finally I am transfering data to One Final Internal Table.
In debugging mode I am finding data in All the internal table except in my final internal table.
Here I am facing problem, can any body let me know How to do this.
Here is the sample code.
TABLES: KNA1, VBAK, VBAP.
select-options: p_kunnr for kna1-kunnr.
TYPE-POOLS: SLIS.
TYPES: BEGIN OF ty_kna1,
KUNNR TYPE KNA1-KUNNR,
name1 type kna1-name1,
ORT01 TYPE KNA1-ORT01,
END OF ty_kna1.
DATA: IT_kna1 TYPE STANDARD TABLE OF ty_kna1,
WA_kna1 TYPE ty_kna1.
TYPES: BEGIN OF ty_vbak,
VBELN TYPE VBAK-VBELN,
NETWR TYPE VBAK-NETWR,
WAERK TYPE VBAK-WAERK,
END OF ty_vbak.
DATA: IT_vbak TYPE STANDARD TABLE OF ty_vbak,
WA_vbak TYPE ty_vbak.
TYPES: BEGIN OF ty_vbap,
POSNR TYPE VBAP-POSNR,
MATNR TYPE VBAP-MATNR,
END OF ty_vbap.
DATA: IT_vbap TYPE STANDARD TABLE OF ty_vbap,
WA_vbap TYPE ty_vbap.
TYPES: BEGIN OF ty_FINAL,
KUNNR TYPE KNA1-KUNNR,
name1 type kna1-name1,
ORT01 TYPE KNA1-ORT01,
VBELN TYPE VBAK-VBELN,
NETWR TYPE VBAK-NETWR,
WAERK TYPE VBAK-WAERK,
POSNR TYPE VBAP-POSNR,
MATNR TYPE VBAP-MATNR,
END OF ty_FINAL.
DATA: IT_final TYPE STANDARD TABLE OF ty_FINAL,
wa_final type ty_final.
DATA: GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE.
START-OF-SELECTION.
PERFORM GET_DATA.
PERFORM FIELDCAT.
PERFORM DISPLAY.
FORM GET_DATA.
SELECT KUNNR NAME1 ORT01 FROM KNA1 INTO TABLE IT_KNA1
WHERE KUNNR IN P_KUNNR.
IF SY-SUBRC = 0.
SELECT VBELN NETWR WAERK FROM VBAK INTO TABLE IT_VBAK
FOR ALL ENTRIES IN IT_KNA1
WHERE KUNNR = IT_KNA1-KUNNR.
SELECT POSNR MATNR FROM VBAP INTO TABLE IT_VBAP
FOR ALL ENTRIES IN IT_VBAK
WHERE VBELN = IT_VBAK-VBELN.
ENDIF.
*LOOP AT it_FINAL into wa_FINAL.
LOOP AT IT_KNA1 INTO WA_KNA1.
READ TABLE IT_vbak INTO WA_vbak WITH KEY VBELN = WA_vbak-VBELN.
READ TABLE IT_vbap INTO WA_vbap WITH KEY matnr = WA_vbap-matnr.
WA_FINAL-KUNNR = WA_KNA1-KUNNR.
WA_FINAL-NAME1 = WA_KNA1-NAME1.
WA_FINAL-ORT01 = WA_KNA1-ORT01.
WA_FINAL-VBELN = WA_VBAK-VBELN.
WA_FINAL-NETWR = WA_VBAK-NETWR.
WA_FINAL-WAERK = WA_VBAK-WAERK.
WA_FINAL-POSNR = WA_VBAP-POSNR.
WA_FINAL-MATNR = WA_VBAP-MATNR.
APPEND wa_final to IT_final.
endloop.Edited by: Thomas Zloch on Sep 10, 2010 11:51 AM - code tags added
‎2010 Sep 10 10:53 AM
Use one SELECT statement JOINing all tables and read the required columns into one internal table right away.
And please use more descriptive subject lines when posting in these forums, also post in the correct sub-forum, what does this have to do with "UI programming" ? (now moved for you).
Thomas
‎2010 Sep 10 10:58 AM
Hi Thomas,
astually I checking if kunnr exists then I have to pick up vbeln from vbak, if vbeln exist then I have to pick up netwr from vbap
similarly I am fetchinf data from bsid and bsad
How can be this is possible by using inner join statement
I think only this is possible by using all entries .
Can u tell me in this cade where i m missing.
Thanks for Your reply.
‎2010 Sep 10 11:00 AM
Hi,
READ TABLE IT_vbap INTO WA_vbap WITH KEY matnr = WA_vbap-matnr.As per the logic written by you, WA_VBAP is empty at time of above statment. Also follow proper coding standards by checking SY-SUBRC after READ statements.
Regards
Vinod
‎2010 Sep 10 11:49 AM
Here is the path I would take for joining:
KNA1
inner join VAKPA (due to performance)
inner join VBAK
inner join VBAPNot sure how you want to link BSID and BSAD to VBAK/VBAP, as you did not provide that code.
Thomas
‎2010 Sep 10 10:59 AM
Hi,
Try using the "SY-SUBRC" statement to know where the condition is not satisfied.
Also in the code replace the statement "READ TABLE IT_vbak INTO WA_vbak WITH KEY VBELN = WA_vbak-VBELN " by
READ TABLE IT_vbak INTO WA_vbak WITH KEY Kunnr = WA_kna1-kunnr.
Hope this may be helpful.
Regards,
Sharin.
‎2010 Sep 10 11:01 AM
Hi Ravi,
Please check in the debug mode what are the return codes for the read statements used in the filling the final internal table. And try to put the work areas in the sy-subrc's so that they will be read immediately after the work areas.
Also, it looks performance wise the code is not at all efficient. You can also scan the forum for a more performance options.
Hope this helps.
Thanks,
Samantak.
‎2010 Sep 10 11:19 AM
Hi,
pls try this code
TABLES: kna1, vbak, vbap.
SELECT-OPTIONS: p_kunnr FOR kna1-kunnr.
TYPE-POOLS: slis.
TYPES: BEGIN OF ty_kna1,
kunnr TYPE kna1-kunnr,
name1 TYPE kna1-name1,
ort01 TYPE kna1-ort01,
END OF ty_kna1.
DATA: it_kna1 TYPE STANDARD TABLE OF ty_kna1,
wa_kna1 TYPE ty_kna1.
TYPES: BEGIN OF ty_vbak,
vbeln TYPE vbak-vbeln,
netwr TYPE vbak-netwr,
waerk TYPE vbak-waerk,
kunnr TYPE vbak-kunnr,
END OF ty_vbak.
DATA: it_vbak TYPE STANDARD TABLE OF ty_vbak,
wa_vbak TYPE ty_vbak.
TYPES: BEGIN OF ty_vbap,
vbeln TYPE vbap-vbeln,
posnr TYPE vbap-posnr,
matnr TYPE vbap-matnr,
END OF ty_vbap.
DATA: it_vbap TYPE STANDARD TABLE OF ty_vbap,
wa_vbap TYPE ty_vbap.
TYPES: BEGIN OF ty_final,
kunnr TYPE kna1-kunnr,
name1 TYPE kna1-name1,
ort01 TYPE kna1-ort01,
vbeln TYPE vbak-vbeln,
netwr TYPE vbak-netwr,
waerk TYPE vbak-waerk,
posnr TYPE vbap-posnr,
matnr TYPE vbap-matnr,
END OF ty_final.
DATA: it_final TYPE STANDARD TABLE OF ty_final,
wa_final TYPE ty_final.
DATA: gt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.
START-OF-SELECTION.
PERFORM get_data.
PERFORM FIELDCAT.
PERFORM DISPLAY.
FORM get_data.
SELECT kunnr name1 ort01 FROM kna1 INTO TABLE it_kna1
WHERE kunnr IN p_kunnr.
IF sy-subrc = 0.
SELECT vbeln netwr waerk kunnr FROM vbak INTO TABLE it_vbak
FOR ALL ENTRIES IN it_kna1
WHERE kunnr = it_kna1-kunnr.
IF sy-subrc = 0.
SELECT vbeln posnr matnr FROM vbap INTO TABLE it_vbap
FOR ALL ENTRIES IN it_vbak
WHERE vbeln = it_vbak-vbeln.
ENDIF.
ENDIF.
*LOOP AT it_FINAL into wa_FINAL.
LOOP AT it_kna1 INTO wa_kna1.
LOOP AT it_vbak INTO wa_vbak WHERE kunnr = wa_kna1-kunnr.
LOOP AT it_vbap INTO wa_vbap WHERE vbeln = wa_vbak-vbeln.
wa_final-kunnr = wa_kna1-kunnr.
wa_final-name1 = wa_kna1-name1.
wa_final-ort01 = wa_kna1-ort01.
wa_final-vbeln = wa_vbak-vbeln.
wa_final-netwr = wa_vbak-netwr.
wa_final-waerk = wa_vbak-waerk.
wa_final-posnr = wa_vbap-posnr.
wa_final-matnr = wa_vbap-matnr.
APPEND wa_final TO it_final.
ENDLOOP.
ENDLOOP.
ENDLOOP.
Regards
George Zervas
‎2010 Sep 10 1:04 PM
‎2010 Sep 10 1:14 PM
You're going to have lots of fun with this statement
SELECT vbeln netwr waerk kunnr FROM vbak INTO TABLE it_vbak
FOR ALL ENTRIES IN it_kna1
WHERE kunnr = it_kna1-kunnr.once it is executed in a system with many VBAK entries.
Thomas
‎2012 Feb 20 5:29 AM
Hi,
Before using for all entries check whether the table has values.
ie use this ststement before fetching from VBAK table.
IF IT_KNA1 IS NOT INITIAL.
Fetch KUNNR along with other fields in VBAK table.(while using select).
Fetch VBELN along with other fields in VBAP table.(while using select).
LOOP AT IT_KNA1 INTO WA_KNA1.
Use the read statement in loop as follows:
READ TABLE IT_vbak INTO WA_vbak WITH KEY kunnr= WA_kna1-kunnr.
READ TABLE IT_vbap INTO WA_vbap WITH KEY matnr = WA_vbak-vbeln.
Assign the data to final internal table.
endloop.
How come you are looping the KNA1 table and assign the VBELN field of VBAK.
And moreover VBAP is the item table and it has multiple records.So the first entry
of it will be readed as we are passing VBELN.
Which table you are going to loop depends on the requirement.
Regards,
Ramya