‎2008 May 05 11:04 AM
Hi,
I have created the IDOC by using program.It successfully created the IDOC.But It doesn't update the database.I gave a new material number as input.Then i check in the database.It doesn't exist.Here i copied my codings check it out please...
TYPE-POOLS:TRUXS.
DATA:I TYPE I VALUE '1'.
DATA:IT_DATA TYPE TRUXS_T_TEXT_DATA.
DATA:BEGIN OF ITAB OCCURS 0,
MATNR LIKE E1MARAM-MATNR,
MBRSH LIKE E1MARAM-MBRSH,
MTART LIKE E1MARAM-MTART,
MAKTX LIKE E1MAKTM-MAKTX,
MEINS LIKE E1MARAM-MEINS,
END OF ITAB.
DATA:BEGIN OF ITAB1 OCCURS 0,
AMATNR LIKE E1MARAM-MATNR,
AMBRSH LIKE E1MARAM-MBRSH,
AMTART LIKE E1MARAM-MTART,
AMEINS LIKE E1MARAM-MEINS,
AMAKTX LIKE E1MAKTM-MAKTX,
END OF ITAB1.
DATA:ZE1MARAM LIKE E1MARAM OCCURS 0 WITH HEADER LINE.
DATA:ZE1MAKTM LIKE E1MAKTM OCCURS 0 WITH HEADER LINE.
DATA : S_CTRL_REC LIKE EDIDC OCCURS 0 WITH HEADER LINE.
DATA : T_EDIDD LIKE EDIDD OCCURS 0 WITH HEADER LINE.
DATA : T_COMM_IDOC LIKE EDIDC OCCURS 0 WITH HEADER LINE.
CONSTANTS :
C_ZRZSEG1 LIKE EDIDD-SEGNAM VALUE 'E1MARAM',
C_ZRZSEG2 LIKE EDIDD-SEGNAM VALUE 'E1MAKTM'.
DATA:C_MESTYP LIKE EDIDC-MESTYP VALUE 'MATMAS',
C_RCVPRT LIKE EDIDC-RCVPRT VALUE 'LS',
C_LOGSYS LIKE EDIDC-RCVPRN VALUE '810',
C_RCVPOR LIKE EDIDC-RCVPOR VALUE 'A000000041',
C_SNDPOR LIKE EDIDC-SNDPOR VALUE 'SAPTSI',
C_SNDPRN LIKE EDIDC-SNDPRN VALUE '800',
C_IDOCTP LIKE EDIDC-IDOCTP VALUE 'MATMAS05',
C_SNDPRT LIKE EDIDC-SNDPRT VALUE 'LS'.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
I_FIELD_SEPERATOR =
I_LINE_HEADER = 'X'
i_tab_raw_data = IT_DATA
i_filename = 'C:\Documents and Settings\User\Desktop\IDOC555.xls'
tables
i_tab_converted_data = ITAB.
EXCEPTIONS
CONVERSION_FAILED = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
LOOP AT ITAB.
ITAB1-AMATNR = ITAB-MATNR.
ITAB1-AMBRSH = ITAB-MBRSH.
ITAB1-AMTART = ITAB-MTART.
ITAB1-AMAKTX = ITAB-MAKTX.
ITAB1-AMEINS = ITAB-MEINS.
APPEND ITAB1.
ENDLOOP.
START-OF-SELECTION.
PERFORM GENERATE_CONTROL_RECORD.
PERFORM SEND_IDOC.
*&----
*& Form generate_control_record
*&----
FORM GENERATE_CONTROL_RECORD .
S_CTRL_REC-RCVPOR = C_RCVPOR. "Receiver Port
S_CTRL_REC-MESTYP = C_MESTYP. "Message type
S_CTRL_REC-IDOCTP = C_IDOCTP. "Basic IDOC type
S_CTRL_REC-RCVPRT = C_RCVPRT. "Partner type of receiver
S_CTRL_REC-SNDPOR = C_SNDPOR. "SENDER PORT
S_CTRL_REC-RCVPRN = C_LOGSYS. "Partner number of receiver
S_CTRL_REC-SNDPRT = C_SNDPRT. "Sender Partner type
S_CTRL_REC-SNDPRN = C_SNDPRN. "Sender Partner Number
APPEND S_CTRL_REC.
ENDFORM. " generate_control_record
*&----
*& Form send_idoc
*&----
FORM SEND_IDOC.
LOOP AT ITAB1.
READ TABLE ITAB1 INDEX I.
ZE1MARAM-MATNR = ITAB1-AMATNR.
ZE1MARAM-MBRSH = ITAB1-AMBRSH.
ZE1MARAM-MTART = ITAB1-AMTART.
ZE1MARAM-MEINS = ITAB1-AMEINS.
APPEND ZE1MARAM.
ZE1MAKTM-MAKTX = ITAB1-AMAKTX.
APPEND ZE1MAKTM.
T_EDIDD-SEGNAM = C_ZRZSEG1.
T_EDIDD-SDATA = ZE1MARAM.
APPEND T_EDIDD.
T_EDIDD-SEGNAM = C_ZRZSEG2.
T_EDIDD-SDATA = ZE1MAKTM.
APPEND T_EDIDD.
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 NE 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
LOOP AT T_COMM_IDOC.
WRITE:/ 'IDoc Generated - ', T_COMM_IDOC-DOCNUM.
ENDLOOP.
ENDIF.
I = I + 1.
ENDLOOP.
endform.
Help me.
Thank u,
Manjula Devi.D
‎2008 May 05 11:07 AM
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 NE 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
Do the Commit work
COMMIT WORKLOOP AT T_COMM_IDOC.
WRITE:/ 'IDoc Generated - ', T_COMM_IDOC-DOCNUM.
ENDLOOP.
ENDIF.
I = I + 1.
ENDLOOP.
Regards
Kannaiah
‎2008 May 05 11:07 AM
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 NE 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
Do the Commit work
COMMIT WORKLOOP AT T_COMM_IDOC.
WRITE:/ 'IDoc Generated - ', T_COMM_IDOC-DOCNUM.
ENDLOOP.
ENDIF.
I = I + 1.
ENDLOOP.
Regards
Kannaiah
‎2008 May 05 11:10 AM
Hi,
The code which you have written can be called as a Selection Program. Here you are sending the IDOC to the ALE layer of the sender system..(Distribution hence you used MASTER_IDOC_DISTRIBUTE) Check in Tables EDIDC and EDID4 for the IDOC which was created. You have to Post the Data using a Posting program in the Recieving System. You need to select the data from EDIDD and EDID4 in the recieving system and then Write a BDC to MM01 or a BAPI..only then a material is created.
santhosh
‎2008 May 06 2:41 PM
Hi,
I successfully updated in a database.but i cant updated in the different server.
I connected two clients in the same server 800 and 810.I successfully created the idoc and updated the material in 810.but i didnt get the same material in 800.what can i do for this.help me.
Thank u,
Manjula devi.D