*&---------------------------------------------------------------------*
*& Report ZYZ_ORDER_IDOC *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*
REPORT zyz_order_idoc .
PARAMETERS : p_logsys TYPE tbdlst-logsys.
DATA : gen_segment1 LIKE edidd-segnam VALUE 'ZYZSEG1',
gen_segment2 LIKE edidd-segnam VALUE 'ZYZSEG2',
gen_segment3 LIKE edidd-segnam VALUE 'ZYZSEG3'.
DATA : control_dat LIKE edidc,
gen_data1 LIKE zcustomers,
gen_data2 LIKE zsoheaders,
gen_data3 LIKE zsoitems.
TABLES : zcustomers, zsoheaders, zsoitems.
DATA : BEGIN OF intab1 OCCURS 0.
INCLUDE STRUCTURE zcustomers.
DATA : END OF intab1.
DATA : BEGIN OF intab2 OCCURS 0.
INCLUDE STRUCTURE zsoheaders.
DATA : END OF intab2.
DATA : BEGIN OF intab3 OCCURS 0.
INCLUDE STRUCTURE zsoitems.
DATA : netwr LIKE vbap-netwr,
zmeng LIKE vbap-zmeng.
data : END OF intab3.
DATA : int_edidd LIKE edidd OCCURS 0 WITH HEADER LINE,
int_edidc LIKE edidc OCCURS 0 WITH HEADER LINE.
SELECT vbeln kunnr
INTO CORRESPONDING FIELDS OF TABLE intab2
FROM vbak
WHERE vbeln = '0000005016'.
IF sy-subrc NE 0.
MESSAGE 'no data' TYPE 'l'.
EXIT.
ENDIF.
SELECT kunnr name1 ort01 land1
INTO CORRESPONDING FIELDS OF TABLE intab1
FROM kna1
FOR ALL ENTRIES IN intab2
WHERE kunnr = intab2-kunnr.
IF sy-subrc NE 0.
MESSAGE 'no data' TYPE 'l'.
EXIT.
ENDIF.
SELECT vbeln posnr matnr netwr zmeng waerk zieme
INTO CORRESPONDING FIELDS OF TABLE intab3
FROM vbap
FOR ALL ENTRIES IN intab2
WHERE vbeln = intab2-vbeln.
IF sy-subrc NE 0.
MESSAGE 'no data' TYPE 'l'.
EXIT.
ENDIF.
LOOP AT intab3.
WRITE intab3-netwr TO intab3-netwr_d.
WRITE intab3-zmeng TO intab3-zmeng_d.
MODIFY intab3.
ENDLOOP.
control_dat-mestyp = 'ZYZSO_MT'.
control_dat-idoctp = 'ZYZORDER'.
control_dat-rcvpor = '810'.
control_dat-rcvprt = 'LS'.
control_dat-rcvprn = p_logsys.
LOOP AT intab1.
MOVE-CORRESPONDING intab1 TO gen_data1.
int_edidd-segnam = gen_segment1.
int_edidd-sdata = gen_data1.
APPEND int_edidd.
CLEAR intab1.
ENDLOOP.
LOOP AT intab2.
MOVE-CORRESPONDING intab2 TO gen_data2.
int_edidd-segnam = gen_segment2.
int_edidd-sdata = gen_data2.
APPEND int_edidd.
CLEAR intab2.
ENDLOOP.
LOOP AT intab3.
gen_data3-vbeln = intab3-vbeln.
gen_data3-posnr = intab3-posnr.
gen_data3-matnr = intab3-matnr.
gen_data3-netwr_d = intab3-netwr_d.
gen_data3-zmeng_d = intab3-zmeng_d.
gen_data3-waerk = intab3-waerk.
gen_data3-zieme = intab3-zieme.
int_edidd-segnam = gen_segment3.
int_edidd-sdata = gen_data3.
APPEND int_edidd.
CLEAR intab3.
ENDLOOP.
CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'
EXPORTING
master_idoc_control = control_dat
* OBJ_TYPE = ''
* CHNUM = ''
TABLES
communication_idoc_control = int_edidc
master_idoc_data = int_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.
ELSE.
LOOP AT int_edidc.
WRITE :/ 'IDOC GENERATED',int_edidc-docnum.
ENDLOOP.
COMMIT WORK.
ENDIF.
|