‎2007 Jul 26 7:54 AM
Hi,
I am creating a Functional Spec. My requirement is in
SELECT OPTIONS i want EKKO-AEDAT(EKKO-BSTYP = A), LFB1-MINDK, EKKO-EKGRP, EKKO-LIFNR.
My output Layout is from different tables which is LFB1-MINDK,EKKO-EKGRP,EKKO-AEDAT,EKKO-EBELN,EKKO-SUBMI,EKKO-BSART,EKKO-KTWRT,EKKO-LIFNR,LFA1-KTOKK,LFA1-NAME1,ADRC-HOUSE_NUM1,ADRC-STREET,ADRC-PO_BOX,ADR6-SMTP_ADDR,WYT3-LIFN2.
These are the fields i needed in the output.
I wrote the program as below. It is Syntactically correct. plz let me know what else to be done to get the desired output.
REPORT ZFS_TAB1 LINE-SIZE 180
LINE-COUNT 26(2)
NO STANDARD PAGE HEADING.
TYPES:
BEGIN OF TY_LFB1,
MINDK TYPE LFB1-MINDK,
END OF TY_LFB1,
BEGIN OF TY_EKKO,
EKGRP TYPE EKKO-EKGRP,
AEDAT TYPE EKKO-AEDAT,
EBELN TYPE EKKO-EBELN,
SUBMI TYPE EKKO-SUBMI,
BSART TYPE EKKO-BSART,
KTWRT TYPE EKKO-KTWRT,
LIFNR TYPE EKKO-LIFNR,
END OF TY_EKKO,
BEGIN OF TY_LFA1,
KTOKK TYPE LFA1-KTOKK,
NAME1 TYPE LFA1-NAME1,
ORT01 TYPE LFA1-ORT01,
REGIO TYPE LFA1-REGIO,
PSTLZ TYPE LFA1-PSTLZ,
TELF1 TYPE LFA1-TELF1,
TELFX TYPE LFA1-TELFX,
END OF TY_LFA1,
BEGIN OF TY_ADRC,
HOUSE_NUM1 TYPE ADRC-HOUSE_NUM1,
STREET TYPE ADRC-STREET,
PO_BOX TYPE ADRC-PO_BOX,
END OF TY_ADRC,
BEGIN OF TY_ADR6,
SMTP_ADDR TYPE ADR6-SMTP_ADDR,
END OF TY_ADR6,
BEGIN OF TY_WYT3,
LIFN2 TYPE WYT3-LIFN2,
END OF TY_WYT3.
D A T A
DATA:
ST_LFB1 TYPE TY_LFB1,
IT_LFB1 TYPE TABLE OF TY_LFB1,
ST_EKKO TYPE TY_EKKO,
IT_EKKO TYPE TABLE OF TY_EKKO,
ST_LFA1 TYPE TY_LFA1,
IT_LFA1 TYPE TABLE OF TY_LFA1,
ST_ADRC TYPE TY_ADRC,
IT_ADRC TYPE TABLE OF TY_ADRC,
ST_ADR6 TYPE TY_ADR6,
IT_ADR6 TYPE TABLE OF TY_ADR6,
ST_WYT3 TYPE TY_WYT3,
IT_WYT3 TYPE TABLE OF TY_WYT3.
S E L E C T O P T I O N S.
SELECT-OPTIONS:
SMINDK FOR ST_LFB1-MINDK,
SAEDAT FOR ST_EKKO-AEDAT,
SEKGRP FOR ST_EKKO-EKGRP,
SLIFNR FOR ST_EKKO-LIFNR.
A T S E L E C T I O N S C R E E N
AT SELECTION-SCREEN.
PERFORM VALIDATE_MINDK.
PERFORM VALIDATE_EKGRP.
PERFORM VALIDATE_LIFNR.
S T A R T O F S E L E C T I O N.
START-OF-SELECTION.
PERFORM GETDATA_EKKO.
PERFORM GETMIND_LFB1.
PERFORM GET_VENDORMASTERDATA.
PERFORM GET_VENDORADDRESS.
PERFORM GET_VENDOREMAIL.
PERFORM GET_INVOICEPARTY.
&----
*& Form GETDATA_EKKO
&----
text
----
--> p1 text
<-- p2 text
----
FORM GETDATA_EKKO .
SELECT EKGRP "PURCHASING GROUP
AEDAT "DATE ON WHICH RECORD WAS CREATED
EBELN "PURCHASING DOCUMENT NUMBER
SUBMI "COLLECTIVE NUMBER
BSART "PURCHASE DOCUMENT TYPE
KTWRT "CUMULATIVE PLANNED VALUE
LIFNR "VENDOR ACCOUNT NUMBER
FROM EKKO INTO TABLE IT_EKKO
WHERE EKGRP IN SEKGRP AND LIFNR IN SLIFNR AND AEDAT IN SAEDAT AND BSTYP = 'A'.
IF SY-SUBRC EQ 0.
LOOP AT IT_EKKO INTO ST_EKKO.
WRITE:/ ST_EKKO-EKGRP,ST_EKKO-AEDAT,ST_EKKO-EBELN,ST_EKKO-SUBMI,ST_EKKO-BSART,ST_EKKO-KTWRT,ST_EKKO-KTWRT,ST_EKKO-LIFNR.
ENDLOOP.
ENDIF.
ENDFORM. " GETDATA_EKKO
&----
*& Form GETMIND_LFB1
&----
text
----
--> p1 text
<-- p2 text
----
FORM GETMIND_LFB1 .
SELECT MINDK "MINORIY INDICATORS
FROM LFB1 INTO TABLE IT_LFB1 WHERE MINDK IN SMINDK.
IF SY-SUBRC EQ 0.
LOOP AT IT_LFB1 INTO ST_LFB1.
WRITE:/ ST_LFB1-MINDK.
ENDLOOP.
ENDIF.
ENDFORM. " GETMIND_LFB1
&----
*& Form GET_VENDORMASTERDATA
&----
text
----
--> p1 text
<-- p2 text
----
FORM GET_VENDORMASTERDATA .
SELECT KTOKK "VENDOR ACCOUNT NUMBER
NAME1 "NAME1
ORT01 "CITY
REGIO "REGION
PSTLZ "POSTAL CODE
TELF1 "FIRST TELEPHONE NUMBER
TELFX "FAX NUMBER
FROM LFA1 INTO TABLE IT_LFA1.
IF SY-SUBRC EQ 0.
LOOP AT IT_LFA1 INTO ST_LFA1.
WRITE:/ ST_LFA1-KTOKK,ST_LFA1-NAME1,ST_LFA1-ORT01,ST_LFA1-REGIO,ST_LFA1-PSTLZ,ST_LFA1-TELF1,ST_LFA1-TELFX.
ENDLOOP.
ENDIF.
ENDFORM. " GET_VENDORMASTERDATA
&----
*& Form GET_VENDORADDRESS
&----
text
----
--> p1 text
<-- p2 text
----
FORM GET_VENDORADDRESS .
SELECT HOUSE_NUM1 "HOUSE NUMBER1
STREET "STREET
PO_BOX "PO BOX
FROM ADRC INTO TABLE IT_ADRC.
IF SY-SUBRC EQ 0.
LOOP AT IT_ADRC INTO ST_ADRC.
WRITE:/ ST_ADRC-HOUSE_NUM1,ST_ADRC-STREET,ST_ADRC-PO_BOX.
ENDLOOP.
ENDIF.
ENDFORM. " GET_VENDORADDRESS
&----
*& Form GET_VENDOREMAIL
&----
text
----
--> p1 text
<-- p2 text
----
FORM GET_VENDOREMAIL .
SELECT SMTP_ADDR "VENDOR EMAIL ADDRESS
FROM ADR6 INTO TABLE IT_ADR6.
IF SY-SUBRC EQ 0.
LOOP AT IT_ADR6 INTO ST_ADR6.
WRITE:/ ST_ADR6-SMTP_ADDR.
ENDLOOP.
ENDIF.
ENDFORM. " GET_VENDOREMAIL
&----
*& Form GET_INVOICEPARTY
&----
text
----
--> p1 text
<-- p2 text
----
FORM GET_INVOICEPARTY .
SELECT LIFN2
FROM WYT3 INTO TABLE IT_WYT3.
IF SY-SUBRC EQ 0.
LOOP AT IT_WYT3 INTO ST_WYT3.
WRITE:/ ST_WYT3-LIFN2.
ENDLOOP.
ENDIF.
ENDFORM. " GET_INVOICEPARTY
&----
*& Form VALIDATE_MINDK
&----
text
----
--> p1 text
<-- p2 text
----
FORM VALIDATE_MINDK .
DATA:
LW_MINDK TYPE T059M-MINDK,
W_INPUT TYPE C.
IF SMINDK NE 'EX'.
SELECT MINDK FROM T059M INTO LW_MINDK
WHERE MINDK IN SMINDK.
ENDSELECT.
*ENDIF.
*IF SY-SUBRC NE 0.
*MESSAGE E000(0) WITH 'NO MINORITY INDICATOR FOR THIS CUSTOMER'.
*ELSE.
*W_INPUT = 'X'.
ENDIF.
ENDFORM. " VALIDATE_MINDK
&----
*& Form VALIDATE_EKGRP
&----
text
----
--> p1 text
<-- p2 text
----
FORM VALIDATE_EKGRP .
DATA:
LW_EKGRP TYPE T024-EKGRP,
W_INPUT TYPE C.
IF SAEDAT IS NOT INITIAL.
SELECT EKGRP FROM T024 INTO LW_EKGRP
WHERE EKGRP IN SEKGRP.
ENDSELECT.
ENDIF.
*IF SY-SUBRC NE 0.
*MESSAGE E000(0) WITH 'INVALID PURCHASE GROUP RANGE'.
*ELSE.
*W_INPUT = 'X'.
*ENDIF.
ENDFORM. " VALIDATE_EKGRP
&----
*& Form VALIDATE_LIFNR
&----
text
----
--> p1 text
<-- p2 text
----
FORM VALIDATE_LIFNR .
DATA:
LW_LIFNR TYPE EKKO-LIFNR,
W_INPUT TYPE C.
IF SLIFNR IS NOT INITIAL.
SELECT LIFNR FROM EKKO INTO LW_LIFNR
WHERE LIFNR IN SLIFNR.
ENDSELECT.
ENDIF.
IF SY-SUBRC NE 0.
MESSAGE E000(0) WITH 'INVALID VENDOR GROUP RANGE'.
ELSE.
W_INPUT = 'X'.
ENDIF.
ENDFORM. " VALIDATE_LIFNR
Thanks
Ram. S
‎2007 Jul 26 8:32 AM
Hi
EKKO-AEDAT is separate from BSTYP field
BSTYP condition give in the where condition of select statement of EKKO.
first Join EKKO and EKPO with EBELN field into ITAB.
for all entries of this ITAB (take the LIFNR from this ITAB)
join LFA1, LFB1 (with LIFNR field) and ADRC and ADR6 with
LFA1-ADRNR = ADRC-ADDRNUMBER
ADRC-ADDRNUMBER = ADR6-ADDRNUMBER
fetch data into ITAB1
and move the ITAB and ITAB1 data into i_FINAL and display it
<b>Reward points for useful Answers</b>
Regards
Anji
‎2007 Jul 26 8:30 AM
Hi Ram,
Whatever you are trying to do is right, but there is a suggestion.
Inorder to use the data that is collected efficiently, this data needs to be held together in a single repository. So try combining all the data <b>into a single internal table</b>.
Regards,
Kiran
‎2007 Jul 26 8:32 AM
Hi
EKKO-AEDAT is separate from BSTYP field
BSTYP condition give in the where condition of select statement of EKKO.
first Join EKKO and EKPO with EBELN field into ITAB.
for all entries of this ITAB (take the LIFNR from this ITAB)
join LFA1, LFB1 (with LIFNR field) and ADRC and ADR6 with
LFA1-ADRNR = ADRC-ADDRNUMBER
ADRC-ADDRNUMBER = ADR6-ADDRNUMBER
fetch data into ITAB1
and move the ITAB and ITAB1 data into i_FINAL and display it
<b>Reward points for useful Answers</b>
Regards
Anji