Es un Formato SAP estándar para el intercambio electrónico de datos entre sistemas.
La sigla IDOC es “documento intermedio“ o “Intermediate Document”.
Los IDOCs permiten intercambiar información entre distintos sistemas. Se lo puede ver como un archivo de texto plano con registros.
Un IDOC esta compuesto por un “IDOC Basic Type” o “Tipo Básico” y “Segments” o “Segmentos”.
Composición de un IDOC:
Un segmento define el formato y estructura de un registro de datos. Los segmentos son reusables con lo cual se pueden usar en mas de un tipo básico de IDOC.
Un segmento consiste de varios campos que representan el dato a enviar.
En el ejemplo anterior si hacemos doble click sobre el segmento veremos lo siguiente:
El nombre, un campo indicando si es mandatorio o no, y un Máximo y Mínimo de cantidad de veces que se puede repetir el registro en el segmento.
Si hacemos click en “Segment Editor” podemos ver en mas detalle la composición.
En el editor de segmentos vemos como esta compuesto.
Vemos que tiene los campos con sus correspondientes tipo.
Un IDOC tiene los siguientes atributos técnicos:
•Dirección: Puede ser de Salida (Outbound) o de Entrada (Inbound)
•Status: El status actual del IDOC, OK, Error, etc.
•Tipo Básico: El tipo básico con el cual se definió el IDOC.
•Extensión (Opcional): Un IDOC ya existente se puede extender con campos de otro.
•Partner No: Un partner representa a un sistema, ya sea el que envía o recibe.
•Partner Type: Representa el tipo de sistema, por ejemplo, Sistema Lógico.
•Port: Un puerto es un nombre lógico que se usa en combinación con el Partner para definir a donde enviar o recibir un IDOC.
Por lo general un message type describe un documento de negocio, por ejemplo:
- INVOIC –> Factura
- ORDERS –> Sales / Purchase Orders
- WHSORD –> Stock Order
Los message types se crean de la transacción WE81
Con un Message Type y Basic Type definidos debemos asociarlos.
Esto se hace de la transacción WE82
Definir sistemas lógicos:
Un sistema lógica representa un ambiente al cual nos queremos conectar.
Se definen desde la transacción BD54.
En la imagen de abajo tenemos definidos dos sistemas lógicos, para este caso como solo tenemos un solo sistema, vamos a asumir que cada mandante representados por los sistemas lógicos A4HCLNT001 y A4HCLNT002 son sistemas diferentes.
Creación de un sistema Lógico:
1)Hacemos click en editar
2)Hacemos click en New Entries
3) Ingresamos los datos y hacemos click en guardar (Nos pedirá una orden de transporte)
Definimos los puertos:
Se definen desde la transacción WE21.
En la imagen de abajo tenemos definidos dos puertos, como vimos antes simulando sistemas separados.
Creación de un nuevo puerto:
1)Nos paramos sobre el tipo de puerto a crear, por ejemplo “Transactional RFC” y hacemos click en Nuevo.
2)En la siguiente ventana tenemos la opción de elegir un nombre para el puerto o que el mismo sea autogenerado.
3)Completamos la descripción, le asignamos una RFC y lo grabamos.
Las RFC o Remote Function Call, básicamente son modulos de funciones común y corrientes con la particularidad de
que estos se pueden llamar desde otro SAP.
Las RFC se crean y modifican desde la transacción SM59, por lo general la creación o modificación de una RFC es tarea del equipo de BASIS, pero se pueden dar casos donde también lo hagan los ABAPers.
Para configurar una RFC mínimamente debemos llenar los siguientes campos:
Usamos el Process Code para determinar a que modulo de función llamar en la WE20.
Los Process Code se pueden definir de dos transacciones diferentes dependiendo de si son de Inbound u Outbound
WE41 –> Outbound Process Code
WE42 –> Inbound Process Code
Partners:
Los partners se crean desde la transacción WE20.
Un partner puede tener asociado (Entre otras cosas) un sistema lógico, y a su vez, este sistema lógico tiene asociado:
Para Outbound: -Message Type: Un identificador. -Message Code/Variant: Son también identificadores que sirven para segregar mas la funcionalidad. -Message Function: Idem Anterior. -Port: El puerto del sistema remoto al que nos estaremos conectando. –
Para Inbound: -Message Type: Idem anterior. -Message Code/Variant: Idem anterior. -Message Function: Idem anterior -Process Code: Idem anterior. –
Ejemplo:
Podemos tener:
Message Type: INVOIC
Message Code: CRE
Message Function: FACT
Process Code: PR1
Message Type: INVOIC
Message Code: MOD
Message Function: FACT
Process Code: PR2
Partners:
Para ver o buscar IDOCs podemos usar las transacciones WE02 / WE05, desde la pantalla de selección podemos filtrar, por numero de IDOC, estado, fecha / hora, message type, etc.
Para copiar y procesar un IDOC ya existente podemos usar la transacción WE19, entre algunos de los parámetros que podemos usar esta el numero de IDOC, basic type, etc.
Dependiendo de si queremos procesar un Outbound o Inbound hacemos click en el botón correspondiente y confirmamos el popup que nos aparece.
Para reprocesar un IDOC se usa la transacción BD87, ingresando con un numero de IDOC.
Ejemplo de codigo de programa para enviar IDOCs:
REPORT zcrear_banco.
PARAMETERS: p_pais TYPE bnka-banks,
p_key TYPE bnka-bankl.
DATA: lwa_idoc_ctrl TYPE edidc,
lt_idoc_comm TYPE TABLE OF edidc,
lt_idoc_Data TYPE TABLE OF edidd,
lwa_idoc_data TYPE edidd,
lwa_E1BANK_CREATE TYPE e1bank_create,
lwa_dir TYPE e1bp1011_address.
lwa_idoc_ctrl-direct = 1. "Outbound.
lwa_idoc_ctrl-outmod = 1. "Transferir el IDOC inmediatamente.
lwa_idoc_ctrl-rcvpor = 'A000000002'. "Puerto de recepcion.
lwa_idoc_ctrl-rcvprt = 'LS'. "Partner type de recepcion.
lwa_idoc_ctrl-rcvprn = 'A4HCLNT002'. "Partner de recepcion.
lwa_idoc_ctrl-stdmes = 'BANK_CREATE'. "Message Type.
lwa_idoc_ctrl-mescod = 'BCR'. "Message Variant.
lwa_idoc_ctrl-mesfct = 'CRT'. "Message Function.
lwa_idoc_ctrl-sndprt = 'LS'. "Partner Type de envio.
lwa_idoc_ctrl-SNDPRn = 'A4HCLNT001'. "Partner de envio.
lwa_idoc_ctrl-mestyp = 'BANK_CREATE'. "Message Type.
lwa_idoc_ctrl-idoctp = 'BANK_CREATE01'. "Basic Type.
lwa_idoc_data-segnam = 'E1BANK_CREATE'. "Nombre del segmento.
lwa_e1bank_create-bank_ctry = p_pais.
lwa_e1bank_create-bank_key = p_key.
lwa_idoc_data-sdata = lwa_e1bank_create.
APPEND lwa_idoc_data TO lt_idoc_data.
CLEAR lwa_idoc_Data.
CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'
EXPORTING
master_idoc_control = lwa_idoc_ctrl
TABLES
communication_idoc_control = lt_idoc_comm
master_idoc_data = lt_idoc_data
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 EQ 0.
COMMIT WORK.
ENDIF.
END-OF-SELECTION.
Message Types:
Message Type | IDOC Type | Description |
BENREP | BENEFIT1 | Benefits Participation Benefits Retirement Plan |
CREADV | PEXR2001, PEXR2002 | Credit Memo Display |
DEBADV | PEXR2001, PEXR2002 | Debit Advice |
DELFOR | DELFOR01 | Delivery Schedule |
DELINS | DELFOR01 | Forecast Delivery Schedule |
DELJIT | DELFOR01 | Just-In-Time Delivery Schedule |
DELORD | ORDERS03, ORDERS04, ORDERS05 | Delivery Order (Pickup sheet) |
DESADV | DELVRY01, DELVRY02, DELVRY03 (previously: DESADV01) | Delivery Shipping Notification |
EXPINV | EXPINV01, EXPINV02, EXPINV03 | Foreign Trade Billing Document |
FINSTA | FINSTA01 | Bank Statement |
GSVERF | GSVERF01 | Self-Billing procedure |
IMPINV | IMPINV01 | Import Basis IDOC |
INVOIC | INVOIC01 | Invoice |
LOCKBX | FINSTA01 | Lockbox |
ORDCHG | ORDERS01, ORDERS02, ORDERS03, ORDERS04, ORDERS05 | Sales Order Change Purchase Order Change |
ORDERS | ORDERS01, ORDERS02, ORDERS03, ORDERS04, ORDERS05 | Sales Order Purchase Order |
ORDRSP | ORDERS01, ORDERS02, ORDERS03, ORDERS04, ORDERS05 | Sales Order Confirmation Purchase Order Confirmation |
PAYEXT | PEXR2001, PEXR2002 | Extended Payment Order |
PRICAT | PRICAT01 | Price List/Catalog |
PROACT | PROACT01 | Stock and Sales Data |
QUOTES | ORDERS01, ORDERS02, ORDERS03, ORDERS04, ORDERS05 | Quotation |
REMADV | PEXR2001, PEXR2002 | Payment Advice |
REQOTE | ORDERS01, ORDERS02, ORDERS03, ORDERS04, ORDERS05 | Inquiry |
SHPADV | SHPMNT03 | Shipping Notification |
SHPCON | DELVRY01 | Shipping Confirmation |
SHPMNT | SHPMNT01, SHPMNT02, SHPMNT03, SHPMNT04 | Shipment Notification |
SHPORD | DELVRY01 | Delivery: Dispatch Order |
TXTRAW | TXTRAW01, TXTRAW02 | Message for free text in SAP office format |
WHSORD | DELVRY01 | Delivery: Stock Order |
Programas:
• RBDMIDOC –> Generar IDOCs a partir de punteros modif.
• RSEOUT00 –> Proceso de todos los IDOCs seleccionados.
• RBDAPP01 –> Proceso de IDOCs entrantes dispuestos a ser transferidos.
• RSARFCEX –> Ejecutar llamadas aún no ejecutadas.
• RBDMOIND –> Conversión status si ejecución correcta del TRFC.
• RBDMANIN –> Lanzar tratamiento de errores para IDOCs no contabilizados.
Transacciones:
WE05: IDOC List Overview
WE19: Herramientas de test para el proceso de IDOC (Copia IDOCs)
WE20: Partners, destinos lógicos.
WE21: Puertos
WE30: Creación de Tipo Base/Extensión
WE31: Creación de segmentos
WE41: Outbound process code
WE42: Inbound process code
WE57: Asociar Basic Type, Message Type y Function Module
WE81: Creación de mensajes Lógicos
WE82: Asignación de mensaje Lógico, Tipo Base y Extensión
BD51: Inbound Function Modules
BD54: Definir sistemas logicos.
BD64: Distribution Model.
BD87: Inbound IDoc reprocessing.
BD88: Outbound IDoc reprocessing.
BDM2: IDoc Trace.
SM59: Creación / Modificación de RFCs.