Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Outbound IDoc

Former Member
0 Likes
824

Hi abap gurus,

I am trying to create one FM to generate an outbound idoc . I have the segments and fields with me . my question is : how to send the values to the IDOC segments from the sap system ?

Thanks in advance .

3 REPLIES 3
Read only

Former Member
0 Likes
639

Plz. see this sample code..may be it will give hint to meet ur requirement...

  • POPULATE THE CONTROL INFORMATION TO BE SENT TO THE OUTGOING IDOC IN AN INTERNAL TABLE

  • Local variable to hold own logical system name

data: l_logsys like tbdls-logsys.

  • Internal table to hold the value for sending and receiving system

data: i_model like bdi_mmodel occurs 0 with header line.

  • Internal table to hold sending logical system name

data: begin of i_snd_sys occurs 0.

include structure bdi_logsys.

data: end of i_snd_sys.

  • Call function OWN_LOGICAL_SYSTEM_GET to retrieve own logical

  • system name

CALL FUNCTION 'OWN_LOGICAL_SYSTEM_GET'

IMPORTING

OWN_LOGICAL_SYSTEM = l_logsys

EXCEPTIONS

OWN_LOGICAL_SYSTEM_NOT_DEFINED = 1

OTHERS = 2.

IF SY-SUBRC = 0.

  • Populate sending logical system name in i_snd_sys

i_snd_sys-logsys = l_logsys.

append i_snd_sys.

clear i_snd_sys.

  • Call function MMODEL_INT_VALID_GET to retrieve the

  • receiving logical system names

CALL FUNCTION 'MMODEL_INT_VALID_GET'

EXPORTING

MESTYP = 'Z2SDBATCHSTATCHGX001'

TABLES

SND_SYSTEM = i_snd_sys

MODEL = i_model.

if not i_model[] is initial.

  • Read the entry in the table i_model

loop at i_model

where rcvsystem = 'X1217TRANS'.

x_edidc-mandt = sy-mandt.

x_edidc-docrel = 46C.

x_edidc-direct = '1'.

x_edidc-rcvprt = 'LS'.

x_edidc-sndprt = 'LS'.

x_edidc-rcvprn = i_model-rcvsystem.

x_edidc-sndprn = i_model-sndsystem.

x_edidc-doctyp = 'Z2BSTATC'.

x_edidc-mestyp = 'Z2SDBATCHSTATCHGX001'.

x_edidc-sndpfc = 'LS'.

endloop.

endif.

  • POPULATE THE DATA INFORMATION TO BE SENT TO THE OUTGOING IDOC IN AN INTERNAL TABLE

  • g_z1chgstock : Its structure is same as the segment 'Z1CHGSTOCK'

  • Populate message type

g_z1chgstock-z2mestyp = 'CSS'.

  • Populate company code

g_z1chgstock-z2compcd = '1217'.

  • Populate material number

g_z1chgstock-z2matcd = g_viqmel-matnr.

  • Populate plant

g_z1chgstock-z2werks = g_viqmel-mawerk.

  • Populate batch

g_z1chgstock-z2batch = g_viqmel-charg.

  • Populate quantity

g_z1chgstock-z2quant = g_viqmel-rkmng.

  • Populate old primary quarantine code

g_z1chgstock-z2oldpqc = 'RE'.

  • Populate new primary quarantine code

g_z1chgstock-z2newpqc = 'UN'.

  • Populate material slip

g_z1chgstock-z2refnum = g_mat_slip.

  • Move all information to i_edidd

i_edidd-mandt = sy-mandt.

i_edidd-segnam = c_segnam.

i_edidd-sdata = g_z1chgstock.

append i_edidd.

clear i_edidd.

  • SEND IDOC

  • Send IDoc

CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'

EXPORTING

MASTER_IDOC_CONTROL = x_edidc

TABLES

COMMUNICATION_IDOC_CONTROL = i_comm_idoc_contrl

MASTER_IDOC_DATA = i_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 S000 WITH 'IDoc created'.

  • Close LUW

commit work.

ELSE.

MESSAGE ID W000 WITH 'Error in IDoc creation'.

ENDIF.

Regards,

Joy.

Read only

Former Member
0 Likes
639

Hi

first u get ur logiscal system path and reciver path after then u assign the vales to segments . then u distuebute the idoc.

see below coding

FORM GET_SERVER_RECVR_PARTNER_PRC .

DATA : L_LSND TYPE TBDLS-LOGSYS.

CLEAR: L_LSND, V_SNDPRN, V_RCVPRN.

CALL FUNCTION 'OWN_LOGICAL_SYSTEM_GET'

IMPORTING

OWN_LOGICAL_SYSTEM = L_LSND

EXCEPTIONS

OWN_LOGICAL_SYSTEM_NOT_DEFINED = 1

OTHERS = 2.

IF SY-SUBRC <> 0.

MESSAGE E001 WITH 'Logical System not defined'(T09).

ELSE.

V_SNDPRN = L_LSND.

ENDIF.

**? GET PARTNER NUMBER OF RECEIVER

CALL FUNCTION 'ALE_MODEL_INFO_GET'

EXPORTING

MESSAGE_TYPE = C_MESTYP

SENDING_SYSTEM = V_SNDPRN

VALIDDATE = SY-DATUM

TABLES

MODEL_DATA = I_BDI_MODEL

EXCEPTIONS

NO_MODEL_INFO_FOUND = 1

OWN_SYSTEM_NOT_DEFINED = 2

OTHERS = 3.

IF SY-SUBRC NE 0.

MESSAGE E001 WITH

'Error in Retrieving Partner number of receiver'(T10).

ELSE.

IF NOT I_BDI_MODEL[] IS INITIAL.

READ TABLE I_BDI_MODEL INTO WA_BDI_MODEL INDEX 1

TRANSPORTING RCVSYSTEM.

IF SY-SUBRC EQ 0.

V_RCVPRN = WA_BDI_MODEL-RCVSYSTEM.

ENDIF.

ENDIF.

ENDIF.

WA_EDIDC-IDOCTP = C_IDOCTP.

WA_EDIDC-DIRECT = 1.

WA_EDIDC-MESTYP = C_MESTYP.

WA_EDIDC-RCVPOR = V_RCVPRN.

WA_EDIDC-RCVPRN = V_RCVPRN.

WA_EDIDC-SNDPRN = V_SNDPRN.

WA_EDIDC-SNDPRT = C_LS.

WA_EDIDC-RCVPRT = C_LS.

MOVE WA_EDIDC TO WA_CONTROL_RECORD_OUT.

CLEAR WA_EDIDC.

ENDFORM. " GET_SERVER_RECVR_PARTNER_PRC

&----


*& Form FILL_IDOC_SEGMENT_PRC

&----


FORM FILL_IDOC_SEGMENT_PRC .

DATA: L_IDOCFG TYPE C, "Flag for new header segment

L_DISTFG TYPE C. "Flag for end of customer Code

CLEAR V_FLAG.

SORT I_FINAL BY CUSCD WERKS LGORT MATNR.

LOOP AT I_FINAL INTO WA_FINAL.

*Insert the Header segment for Each customer code

AT NEW CUSCD.

L_IDOCFG = C_X.

ENDAT.

IF L_IDOCFG = C_X.

  • populate header segement

PERFORM POPULATE_HEADER_SEG.

CLEAR L_IDOCFG.

ENDIF.

*For Each Storage Location create a segment.

AT NEW LGORT.

V_FLAG = C_X.

ENDAT.

IF V_FLAG = C_X.

  • populate item segment level1

PERFORM POPULATE_ITEM_SEG1.

CLEAR V_FLAG.

ENDIF.

PERFORM POPULATE_ITEM_SEG2.

  • fill Output display details

PERFORM FORMAT_OUTPUT_DISPLAY_PRC USING WA_FINAL.

AT END OF CUSCD.

L_DISTFG = C_X.

ENDAT.

IF L_DISTFG = C_X.

  • distribute idoc

  • PERFORM DISTRIBUTE_IDOC_PRC.

CLEAR L_DISTFG.

REFRESH I_EDIDD.

ENDIF.

ENDLOOP.

ENDFORM. " FILL_IDOC_SEGMENT_PRC

&----


*& Form populate_header_seg

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM POPULATE_HEADER_SEG .

CLEAR: WA_EDIDD, WA_ZINVHDR.

WA_EDIDD-SEGNAM = C_ZINVHDR.

WA_ZINVHDR-LABOR = WA_FINAL-LABOR.

WA_ZINVHDR-WERKS = WA_FINAL-WERKS.

WA_ZINVHDR-KUNNR = WA_FINAL-KUNNR.

MOVE WA_ZINVHDR TO WA_EDIDD-SDATA.

APPEND WA_EDIDD TO I_EDIDD.

CLEAR : WA_ZINVHDR,WA_EDIDD.

ENDFORM. " populate_header_seg

&----


*& Form populate_item_seg1

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM POPULATE_ITEM_SEG1 .

CLEAR WA_ZINVSIT1.

WA_EDIDD-SEGNAM = C_ZINVSIT1.

WA_ZINVSIT1-LGORT = WA_FINAL-LGORT.

WA_ZINVSIT1-LGOBE = WA_FINAL-LGOBE.

MOVE WA_ZINVSIT1 TO WA_EDIDD-SDATA.

APPEND WA_EDIDD TO I_EDIDD.

CLEAR : WA_ZINVSIT1,WA_EDIDD.

ENDFORM. " populate_item_seg1

&----


*& Form populate_item_seg2

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM POPULATE_ITEM_SEG2 .

DATA: L_MENGE(13) TYPE C,

L_LABST(13) TYPE C,

L_KLABS(13) TYPE C,

L_INSME(13) TYPE C,

L_KINSM(13) TYPE C,

L_SPEME(13) TYPE C,

L_KSPEM(13) TYPE C.

*

L_MENGE = WA_FINAL-MENGE.

L_LABST = WA_FINAL-LABST.

L_KLABS = WA_FINAL-KLABS.

L_INSME = WA_FINAL-INSME.

L_KINSM = WA_FINAL-KINSM.

L_SPEME = WA_FINAL-SPEME.

L_KSPEM = WA_FINAL-KSPEM.

CONDENSE: L_MENGE, L_LABST, L_KLABS, L_INSME, L_KINSM, L_SPEME, L_KSPEM.

*

CLEAR WA_ZINVSIT2.

WA_EDIDD-SEGNAM = C_ZINVSIT2.

WA_ZINVSIT2-MATNR = WA_FINAL-MATNR.

WA_ZINVSIT2-MTART = WA_FINAL-MTART.

  • wa_zinvsit2-kdmat = wa_final-kdmat.

  • wa_zinvsit2-groes = wa_final-groes.

WA_ZINVSIT2-PRCTR = WA_FINAL-PRCTR.

WA_ZINVSIT2-MENGE = L_MENGE.

WA_ZINVSIT2-LABST = L_LABST.

WA_ZINVSIT2-KLABS = L_KLABS.

WA_ZINVSIT2-INSME = L_INSME.

WA_ZINVSIT2-KINSM = L_KINSM.

WA_ZINVSIT2-SPEME = L_SPEME.

WA_ZINVSIT2-KSPEM = L_KSPEM.

MOVE WA_ZINVSIT2 TO WA_EDIDD-SDATA.

APPEND WA_EDIDD TO I_EDIDD.

CLEAR : WA_ZINVSIT2,WA_EDIDD,L_MENGE,L_LABST,L_KLABS,L_INSME,L_KINSM,

L_SPEME, L_KSPEM.

ENDFORM. " populate_item_seg2

&----


*& Form format_output_display_prc

&----


FORM FORMAT_OUTPUT_DISPLAY_PRC USING P_WA_FINAL TYPE T_FINAL.

WA_STATUS-WERKS = P_WA_FINAL-WERKS.

WA_STATUS-MATNR = P_WA_FINAL-MATNR.

WA_STATUS-MTART = P_WA_FINAL-MTART.

  • wa_status-groes = p_wa_final-groes.

WA_STATUS-GROES = P_WA_FINAL-KDMAT.

WA_STATUS-PRCTR = P_WA_FINAL-PRCTR.

WA_STATUS-MENGE = P_WA_FINAL-MENGE.

WA_STATUS-LABST = P_WA_FINAL-LABST.

WA_STATUS-KLABS = P_WA_FINAL-KLABS.

WA_STATUS-INSME = P_WA_FINAL-INSME.

WA_STATUS-KINSM = P_WA_FINAL-KINSM.

WA_STATUS-SPEME = P_WA_FINAL-SPEME.

WA_STATUS-KSPEM = P_WA_FINAL-KSPEM.

WA_STATUS-KUNNR = P_WA_FINAL-KUNNR.

WA_STATUS-LGORT = P_WA_FINAL-LGORT.

WA_STATUS-LGOBE = P_WA_FINAL-LGOBE.

WA_STATUS-LABOR = P_WA_FINAL-LABOR.

APPEND WA_STATUS TO I_STATUS.

CLEAR WA_STATUS.

ENDFORM. " format_output_display_prc

&----


*& Form distribute_idoc_prc

&----


FORM DISTRIBUTE_IDOC_PRC .

REFRESH I_CTRL_COMM.

CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'

EXPORTING

MASTER_IDOC_CONTROL = WA_CONTROL_RECORD_OUT

TABLES

COMMUNICATION_IDOC_CONTROL = I_CTRL_COMM

MASTER_IDOC_DATA = I_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.

COMMIT WORK.

CLEAR WA_EDIDC.

READ TABLE I_CTRL_COMM INTO WA_EDIDC INDEX 1.

IF SY-SUBRC = 0.

LOOP AT I_STATUS INTO WA_STATUS WHERE KUNNR = WA_FINAL-CUSCD.

WA_STATUS-DOCNUM = WA_EDIDC-DOCNUM.

WA_STATUS-STATUS = WA_EDIDC-STATUS.

MODIFY I_STATUS FROM WA_STATUS TRANSPORTING

DOCNUM STATUS." idoctp mestyp direct rcvpor action.

CLEAR WA_STATUS.

ENDLOOP.

ENDIF.

ENDIF.

ENDFORM. " distribute_idoc_prc

&----


*& Form fill_fieldcatlog_prc

&----


FORM fill_fieldcatlog_prc .

PERFORM append_fieldcat USING 'DOCNUM' '01' 'Idoc No.'(t11) '16'.

  • PERFORM append_fieldcat USING 'LABOR' '02' 'Lab Office'(t12) '10'.

PERFORM append_fieldcat USING 'WERKS' '03' 'Plant'(t13) '5'.

PERFORM append_fieldcat USING 'KUNNR' '04' 'Cust.Code'(t14) '13'.

PERFORM append_fieldcat USING 'LGORT' '05'

'St.Loc.'(t15) '16'.

PERFORM append_fieldcat USING 'LGOBE' '06'

'St.Loc.Desc'(t16) '28'.

PERFORM append_fieldcat USING 'MATNR' '07' 'Material'(t17) '18'.

PERFORM append_fieldcat USING 'MTART' '08' 'Mat.Typ'(t18) '13'.

PERFORM append_fieldcat USING 'GROES' '09'

'Cust. Material'(t19) '32'.

PERFORM append_fieldcat USING 'PRCTR' '10' 'Profit Center'(t20) '13'.

PERFORM append_fieldcat USING 'MENGE' '11'

'Total Quantity'(t21) '14'.

PERFORM append_fieldcat USING 'LABST' '12'

'Unrest.Stock'(t22) '22'.

PERFORM append_fieldcat USING 'KLABS' '13'

'Unrest.Consig.Stock'(t23) '34'.

PERFORM append_fieldcat USING 'INSME' '14'

'Stock.QA.Insp.'(t24) '27'.

PERFORM append_fieldcat USING 'KINSM' '15'

'Consig.stock.QA.Insp.'(t25) '39'.

PERFORM append_fieldcat USING 'SPEME' '16' 'Blocked Stock'(t26) '13'.

PERFORM append_fieldcat USING 'KSPEM' '17'

'Blocked Consig.Stock'(t27) '24'.

PERFORM append_fieldcat USING 'STATUS' '19' 'Status'(t29) '06'.

ENDFORM. " fill_fieldcatlog_prc

&----


*& Form display_results_prc

&----


FORM display_results_prc .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

i_bypassing_buffer = 'X'

it_fieldcat = i_fieldcat

i_callback_program = sy-repid

TABLES

t_outtab = i_status

EXCEPTIONS

program_error = 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.

ENDFORM. " display_results_prc

&----


*& Form free_memory

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM free_memory .

FREE: i_pgmi,i_mara,i_marc,i_mard,i_final,i_status,i_bdi_model,

i_ctrl_comm,i_fieldcat.

ENDFORM. " free_memory

&----


*& Form append_fieldcat

&----


FORM append_fieldcat USING p_fldname TYPE lvc_s_fcat-fieldname

p_pos TYPE lvc_s_fcat-col_pos

p_fldtxt TYPE lvc_s_fcat-coltext

p_dlen TYPE lvc_s_fcat-outputlen.

CLEAR l_fieldcat.

  • CLEAR : wa_fieldcat.

l_fieldcat-col_pos = p_pos.

l_fieldcat-fieldname = p_fldname.

l_fieldcat-seltext_l = p_fldtxt.

l_fieldcat-outputlen = p_dlen.

APPEND l_fieldcat TO i_fieldcat.

ENDFORM. " append_fieldcat

Read only

Former Member
0 Likes
639

Hi,

There are two steps involved in it.

1. First populate the values of the segments in the internal table of the structure of ur segment( which includes a header, segment, etc................)

Then assign to the output internal table of structure EDIDD(data record).

***Note: Tables parameter of the fm

2. Similarly populate the idoc control information into the internal table which uses the structure EDIDC.(ex: sender port no, receiver port no, etc......)

    • Note click on the edidc structure and give the required field values.

****Note: Exporting parameter of the fm

Reward if helpful