Вы находитесь на странице: 1из 4

1 of 4

http://www.riyaz.net/blog/wp-content/uploads/ZRZ_ORDER_IDOC.txt

*&---------------------------------------------------------------------*
*& Report ZRZ_ORDER_IDOC
*
*&
*
*&---------------------------------------------------------------------*
REPORT

ZRZ_ORDER_IDOC

***********************************************************************
* PURPOSE OF REPORT *
***********************************************************************
* Generats an Idoc for Customer Master, Sales Master
* and Sales item table.
***********************************************************************
TABLES : ZCUSTOMERS, "Cutomer Header
ZSOHEADERS, "Sales Header
ZSOITEMS. "Sales Items

DATA : S_CTRL_REC LIKE EDIDC, "Idoc Control Record


S_ZRZSEG1 LIKE ZRZSEG1, "CUSTOMER Header Data
S_ZRZSEG2 LIKE ZRZSEG2, "SALES HEADER Data
S_ZRZSEG3 LIKE ZRZSEG3. "SALES Detail Data

DATA : T_ZCUSTOMERS LIKE ZCUSTOMERS OCCURS 0 WITH HEADER LINE.


DATA : T_ZSOHEADERS LIKE ZSOHEADERS OCCURS 0 WITH HEADER LINE.
DATA : T_ZSOITEMS LIKE ZSOITEMS OCCURS 0 WITH HEADER LINE.
DATA : T_EDIDD LIKE EDIDD OCCURS 0 WITH HEADER LINE."Data Records
DATA : T_COMM_IDOC LIKE EDIDC OCCURS 0 WITH HEADER LINE.
"Generated Communication IDOc

CONSTANTS
C_ZRZSEG1
C_ZRZSEG2
C_ZRZSEG3

:
LIKE EDIDD-SEGNAM VALUE 'ZRZSEG1',
LIKE EDIDD-SEGNAM VALUE 'ZRZSEG2',
LIKE EDIDD-SEGNAM VALUE 'ZRZSEG3'.

CONSTANTS: C_IDOCTP LIKE EDIDC-IDOCTP VALUE 'ZRZORDER'.

*** Selection Screen


SELECT-OPTIONS : S_KUNNR FOR ZCUSTOMERS-KUNNR OBLIGATORY,
S_VBELN FOR ZSOHEADERS-VBELN.
PARAMETERS : C_MESTYP LIKE EDIDC-MESTYP DEFAULT 'ZRZSO_MT',
"Message Type
C_RCVPRT LIKE EDIDC-RCVPRT DEFAULT 'LS',
"Partner type of receiver
C_LOGSYS LIKE EDIDC-RCVPRN DEFAULT 'Y901',
C_RCVPOR LIKE EDIDC-RCVPOR DEFAULT 'A000000226',
C_SNDPRN LIKE EDIDC-SNDPRN DEFAULT 'LSSENDS',
C_SNDPRT LIKE EDIDC-SNDPRT DEFAULT 'LS'.
"Destination System
***START-OF-SELECTION
START-OF-SELECTION.
PERFORM GENERATE_DATA_RECORDS.
PERFORM GENERATE_CONTROL_RECORD.
PERFORM SEND_IDOC.

***********************************************************************

2/2/2016 2:11 PM

2 of 4

http://www.riyaz.net/blog/wp-content/uploads/ZRZ_ORDER_IDOC.txt

*&---------------------------------------------------------------------*
*&
Form generate_data_records
*&---------------------------------------------------------------------*
FORM GENERATE_DATA_RECORDS .
PERFORM FETCH_ZCUSTOMERS.
PERFORM FETCH_ZSOHEADERS.
PERFORM FETCH_ZSOITEMS.
PERFORM ARRANGE_DATA_RECORDS.
ENDFORM.
" generate_data_records

*&---------------------------------------------------------------------*
*&
Form fetch_zcustomers
*&---------------------------------------------------------------------*
FORM FETCH_ZCUSTOMERS.
SELECT *
FROM ZCUSTOMERS
INTO TABLE T_ZCUSTOMERS
WHERE KUNNR IN S_KUNNR.
IF SY-SUBRC NE 0.
MESSAGE E398(00) WITH 'No Customers Found'.
ENDIF.
ENDFORM.
" fetch_zcustomers

*&---------------------------------------------------------------------*
*&
Form fetch_zsoheaders
*&---------------------------------------------------------------------*
FORM FETCH_ZSOHEADERS.
SELECT *
FROM ZSOHEADERS
INTO TABLE T_ZSOHEADERS
WHERE VBELN IN S_VBELN
AND KUNNR IN S_KUNNR.
IF SY-SUBRC NE 0.
MESSAGE I398(00) WITH 'No Sales orders found'.
ENDIF.
ENDFORM.
" fetch_zsoheaders

*&---------------------------------------------------------------------*
*&
Form fetch_zsoitems
*&---------------------------------------------------------------------*
FORM FETCH_ZSOITEMS.
IF NOT T_ZSOHEADERS[] IS INITIAL.
SELECT *
FROM ZSOITEMS
INTO TABLE T_ZSOITEMS
FOR ALL ENTRIES IN T_ZSOHEADERS
WHERE VBELN = T_ZSOHEADERS-VBELN.
IF SY-SUBRC NE 0.
MESSAGE I398(00) WITH 'No Sales order items found'.
ENDIF.
ENDIF.
ENDFORM.
" fetch_zsoitems

*&---------------------------------------------------------------------*
*&
Form generate_control_record
*&---------------------------------------------------------------------*

2/2/2016 2:11 PM

3 of 4

http://www.riyaz.net/blog/wp-content/uploads/ZRZ_ORDER_IDOC.txt

FORM GENERATE_CONTROL_RECORD .
S_CTRL_REC-RCVPOR = C_RCVPOR.
S_CTRL_REC-MESTYP = C_MESTYP.
S_CTRL_REC-IDOCTP = C_IDOCTP.
S_CTRL_REC-RCVPRT = C_RCVPRT.
S_CTRL_REC-RCVPRN = C_LOGSYS.

"Receiver Port
"Message type
"Basic IDOC type
"Partner type of receiver
"Partner number of receiver

S_CTRL_REC-SNDPRT = C_SNDPRT. "Sender Partner type


S_CTRL_REC-SNDPRN = C_SNDPRN. "Sender Partner Number
ENDFORM.
" generate_control_record

*&---------------------------------------------------------------------*
*&
Form send_idoc
*&---------------------------------------------------------------------*
FORM SEND_IDOC.
CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'
EXPORTING
MASTER_IDOC_CONTROL
= S_CTRL_REC
TABLES
COMMUNICATION_IDOC_CONTROL
= T_COMM_IDOC
MASTER_IDOC_DATA
= T_EDIDD
EXCEPTIONS
ERROR_IN_IDOC_CONTROL
= 1
ERROR_WRITING_IDOC_STATUS
= 2
ERROR_IN_IDOC_DATA
= 3
SENDING_LOGICAL_SYSTEM_UNKNOWN = 4
OTHERS
= 5.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
COMMIT WORK.
LOOP AT T_COMM_IDOC.
WRITE:/ 'IDoc Generated - ', T_COMM_IDOC-DOCNUM.
ENDLOOP.
ENDIF.
ENDFORM.
" send_idoc

*&---------------------------------------------------------------------*
*&
Form arrange_data_records
*&---------------------------------------------------------------------*
FORM ARRANGE_DATA_RECORDS .
DATA: W_INDEX1 LIKE SY-TABIX,
W_INDEX2 LIKE SY-TABIX.
SORT T_ZCUSTOMERS BY KUNNR.
SORT T_ZSOHEADERS BY KUNNR VBELN.
SORT T_ZSOITEMS BY VBELN POSNR.
LOOP AT T_ZCUSTOMERS.
S_ZRZSEG1-KUNNR = T_ZCUSTOMERS-KUNNR.
S_ZRZSEG1-NAME1 = T_ZCUSTOMERS-NAME1.
S_ZRZSEG1-ORT01 = T_ZCUSTOMERS-ORT01.
S_ZRZSEG1-LAND1 = T_ZCUSTOMERS-LAND1.
T_EDIDD-SEGNAM = C_ZRZSEG1.
T_EDIDD-SDATA = S_ZRZSEG1.
APPEND T_EDIDD.
CLEAR T_EDIDD.
CLEAR W_INDEX1.
READ TABLE T_ZSOHEADERS WITH KEY KUNNR = T_ZCUSTOMERS-KUNNR BINARY SEARCH.

2/2/2016 2:11 PM

4 of 4

http://www.riyaz.net/blog/wp-content/uploads/ZRZ_ORDER_IDOC.txt

IF SY-SUBRC = 0.
W_INDEX1 = SY-TABIX.
LOOP AT T_ZSOHEADERS FROM W_INDEX1.
IF T_ZSOHEADERS-KUNNR NE T_ZCUSTOMERS-KUNNR.
EXIT.
ENDIF.
S_ZRZSEG2-VBELN = T_ZSOHEADERS-VBELN.
S_ZRZSEG2-KUNNR = T_ZSOHEADERS-KUNNR.
T_EDIDD-SEGNAM = C_ZRZSEG2.
T_EDIDD-SDATA = S_ZRZSEG2.
APPEND T_EDIDD.
CLEAR T_EDIDD.
CLEAR W_INDEX2.
READ TABLE T_ZSOITEMS WITH KEY VBELN = T_ZSOHEADERS-VBELN BINARY SEARCH.
IF SY-SUBRC = 0.
W_INDEX2 = SY-TABIX.
LOOP AT T_ZSOITEMS FROM SY-TABIX.
IF T_ZSOITEMS-VBELN NE T_ZSOHEADERS-VBELN.
EXIT.
ENDIF.
S_ZRZSEG3-VBELN = T_ZSOITEMS-VBELN.
S_ZRZSEG3-POSNR = T_ZSOITEMS-POSNR.
S_ZRZSEG3-MATNR = T_ZSOITEMS-MATNR.
S_ZRZSEG3-NETWR = T_ZSOITEMS-NETWR.
S_ZRZSEG3-ZMENG = T_ZSOITEMS-ZMENG.
T_EDIDD-SEGNAM = C_ZRZSEG3.
T_EDIDD-SDATA = S_ZRZSEG3.
APPEND T_EDIDD.
CLEAR T_EDIDD.
ENDLOOP.
ENDIF.
ENDLOOP.
ENDIF.
ENDLOOP.
ENDFORM.
" arrange_data_records

2/2/2016 2:11 PM

Вам также может понравиться