06-01-2017 7:27 AM
I am creating a Interactive Report with the get cursor but the error occurs 'no compenent exists with 'ebeln', I have declared the internal table also.
I think some silly mistake is there in select query using outer join.
TYPES: BEGIN OF wat,
LIFNR TYPE LFA1-LIFNR,
NAME1 TYPE LFA1-NAME1,
EBELN TYPE EKKO-EBELN,
END OF wat.
DATA: itab TYPE SORTED TABLE OF wat
WITH NON-UNIQUE KEY LIFNR,
wa_wat type wat.
DATA : IT_EKKO TYPE TABLE OF EKKO,
WA_EKKO TYPE EKKO,
IT_EKPO TYPE TABLE OF EKPO,
WA_EKPO TYPE EKPO,
IT_LFA1 TYPE TABLE OF LFA1,
WA_LFA1 TYPE LFA1.
DATA : FNAM(30), FVAL(50).
SELECT-OPTIONS : S_EBELN FOR WA_EKKO-EBELN.
INITIALIZATION.
AT SELECTION-SCREEN.
PERFORM VALIDATE_INPUT.
START-OF-SELECTION.
PERFORM GET_DATA.
PERFORM DISPLAY_DATA.
TOP-OF-PAGE.
PERFORM DISPLAY_TOPOFPAGE.
AT LINE-SELECTION.
PERFORM DISPLAY_SECONDARYLIST.
TOP-OF-PAGE DURING LINE-SELECTION.
PERFORM LINE_TOPOFPAGE.
FORM VALIDATE_INPUT .
IF S_EBELN IS INITIAL.
MESSAGE 'Enter Purchasing Document Number' TYPE 'E'.
ENDIF.
ENDFORM. " VALIDATE_INPUT
FORM GET_DATA .
SELECT s~LIFNR s~NAME1 p~EBELN
INTO CORRESPONDING FIELDS OF TABLE itab
FROM LFA1 AS s
LEFT OUTER JOIN EKKO AS p ON s~EBELN = p~EBELN.
ENDFORM. " GET_DATA
FORM DISPLAY_DATA .
LOOP AT itab INTO WA_wat.
WRITE:/ WA_LFA1-LIFNR, WA_LFA1-NAME1, WA_EKKO-EBELN.
ENDLOOP.
ENDFORM. " DISPLAY_DATA
FORM DISPLAY_SECONDARYLIST .
GET CURSOR FIELD FNAM VALUE FVAL.
CONDENSE FNAM.
CONDENSE FVAL.
IF FNAM = 'WA_LFA1-lifnr'.
SELECT SINGLE * FROM LFA1 INTO WA_LFA1 WHERE LIFNR = FVAL .
WRITE:/ WA_LFA1-lifnr, WA_LFA1-NAME1, WA_LFA1-ORT01, WA_LFA1-STRAS, WA_LFA1-ERNAM, WA_LFA1-KUNNR, WA_LFA1-SPRAS.
ELSEIF FNAM = 'WA_EKKO-EBELN'.
SELECT * FROM EKKO INTO TABLE IT_EKKO UP TO 50 ROWS WHERE EBELN = FVAL.
LOOP AT IT_EKKO INTO WA_EKKO.
WRITE:/ WA_EKKO-EBELN, WA_EKKO-BUKRS, WA_EKKO-BSART , WA_EKKO-ERNAM , WA_EKKO-LIFNR.
ENDLOOP.
ENDIF.
ENDFORM. " DISPLAY_SECONDARYLIST
FORM DISPLAY_TOPOFPAGE .
WRITE:/ 'Vendor Details' COLOR 3.
ENDFORM. " DISPLAY_TOPOFPAGE
FORM LINE_TOPOFPAGE .
IF FNAM = 'WA_LFA1-LIFNR'.
WRITE:/ 'Vndor details ', WA_LFA1-LIFNR COLOR 5.
ELSEIF FNAM = 'WA_EKKO-EBELN'.
WRITE:/ 'Purchasing Document Details ', WA_EKKO-EBELN COLOR 5.
ENDIF.
ENDFORM. " LINE_TOPOFPAGE
06-01-2017 7:53 AM
Hi!
This is because you have no such field (EBELN) in LFA1 table. May be you need to set like this:
LEFT OUTER JOIN EKKO AS p ON s~LIFNR = p~LIFNR "all POs related to this customer
Also you can check EKPA table
Hope it's helpful
Evgeny
06-01-2017 7:29 AM
FORM GET_DATA .
SELECT s~LIFNR s~NAME1 p~EBELN
INTO CORRESPONDING FIELDS OF TABLE itab
FROM LFA1 AS s
LEFT OUTER JOIN EKKO AS p ON s~EBELN = p~EBELN. " THE ERROR IS SHOWING ON THIS LINE<NO COMPONENT WITH NAME EBELN>
ENDFORM. " GET_DATA
06-01-2017 8:14 AM
Just out of interest, why are you defining specific aliases ?
Using p and s and any other type of alias increases the difficulty in maintaining the code at a later date because (although this is a simple case) you have to figure out and remember what p and s are.
Why not use the table name ? It's there and it's free to use:
Select Lfa1~Lifnr Lfa1~Name1
Ekko~Ebeln
Into Corresponding Fields Of Table Itab
From Lfa1
Left Outer Join Ekko On Lfa1~Ebeln = Ekko~Ebeln.
The only time you need to make up an alias is when you are doing a self-join:
Select y2~seq y1~charg yfiber~fid
y1~printed lqua~lgpla
into table tb_bins
from yfiberf as y1
inner join yfiberf as y2 on y2~seq = y1~seq
inner join yfiber on yfiber~charg = y1~charg and
yfiber~werks = y1~werks
inner join lqua on lqua~lgnum = y2~lgnum and
lqua~matnr = y2~matnr and
lqua~werks = y2~werks and
lqua~charg = y2~charg
where y1~werks = w_werks and
y1~lgnum = w_lgnum and
y1~charg = w_charg.
(in fact the only time you need an alias is when the tables contain fields of the same name but it's better to include them for understandings sake)
In the example above, Y1 and Y2 are the same table - yFibref.
06-01-2017 7:49 AM
sometimes it helps to translate coding into real spoken language
You are actually trying to join a vendor master with a purchasing document based on the purchasing document number.
Wouldn't it make a little more sense to do the join on the vendor number instead?
06-01-2017 7:53 AM
Hi!
This is because you have no such field (EBELN) in LFA1 table. May be you need to set like this:
LEFT OUTER JOIN EKKO AS p ON s~LIFNR = p~LIFNR "all POs related to this customer
Also you can check EKPA table
Hope it's helpful
Evgeny
06-01-2017 8:56 AM
This is the correct answer, and I'm marking it as such, and closing the question. If you have further questions, please post a new question.
06-01-2017 8:47 AM
Thank You Jürgen and Evgeny but I want the output of the primary report in the format
Vendor No Vendor Name Purchase Order No
V-101 V-100ABC 4500000001
V-102 V-101PQR 4500000002
V-103 V-102XYZ 4500000003
Can you help please?
06-01-2017 8:53 AM
06-01-2017 8:57 AM
Please only post the relevant part of the code. In this case, it is only the data definition of itab (which is terrible name for an internal table), and the form get_data. When you post code, please use the "code" button in the question editor, so that formatting is retained and your question is easy to read.