Está en la página 1de 7

Creación de un Idoc de Salida mediante programa

Creación de un Idoc de Salida (Versión de SAP ERP - 4.6B)


El dato que se tiene en el requerimiento es el tipo de mensaje = PREQCR y el nombre del
segmento E1BPEBANC.

Comprobar que el tipo de mensaje exista, para ello se debe ingresar a la transacción
we81. A veces el tipo de mensaje debe crearse, pero este no es el caso.

Ahora, para ver la relación entre tipo de mensaje y tipo base, se entra a la we82.

Elaborado por Gabriela Soria Aguilar – Abril 2011


xfiles1973@gmail.com Page 1
Creación de un Idoc de Salida mediante programa

Con el tipo base encontrado en esa relación (Tipo base = PREQCR01) se entra a la
WE30 y se obtienen los segmentos correspondientes a ese tipo Base

Si se da doble clic al nombre del segmento seleccionado se verá lo siguiente:

Elaborado por Gabriela Soria Aguilar – Abril 2011


xfiles1973@gmail.com Page 2
Creación de un Idoc de Salida mediante programa

Si se ingresa a la SE11 con el nombre del tipo de segmento, se puede visualizar que es
una estructura:

Y estos son los datos que se tienen que cargar en la tabla de datos del idoc de acuerdo
a lo que requiera el requerimiento.

Elaborado por Gabriela Soria Aguilar – Abril 2011


xfiles1973@gmail.com Page 3
Creación de un Idoc de Salida mediante programa

El código a modo de orientación es el siguiente:

Declaración de datos:
TYPES: BEGIN OF tys_idoc.
INCLUDE STRUCTURE edidc.
TYPES: END OF tys_idoc .

* Data
DATA: gt_comm_control LIKE edidc OCCURS 0 WITH HEADER LINE,
gt_idoc_data LIKE edidd OCCURS 0 WITH HEADER LINE.

* Estructuras
DATA: gs_idoc_control TYPE tys_idoc,
gs_e1bpebanc TYPE e1bpebanc.

* Constantes
CONSTANTS:
c_message_type TYPE edi_mestyp VALUE 'PREQCR',"Tipo mensaje
c_base_idoc_type TYPE edi_idoctp VALUE 'PREQCR01', "Tipo Idoc
c_invrev_segname(9) TYPE c VALUE 'E1BPEBANC'," Nombre segmento
c_rcvprn TYPE edi_rcvprn VALUE 'LSMW'. "Interl.dest. Este dato lo deben dar

*&---------------------------------------------------------------------*
*& Form GENERAR_IDOC
*&---------------------------------------------------------------------*
FORM generar_idoc.
* Llena los campos de control del IDOC.
PERFORM llenar_campos_control_idoc.
* Llena los campos de datos del idoc.
PERFORM llenar_datos_idoc.
* Llamar a la función Master IDoc Distribute
PERFORM llamar_función.
ENDFORM. " GENERAR_IDOC
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*& Form LLENAR_CAMPOS_CONTROL_IDOC
*&---------------------------------------------------------------------*
FORM llenar_campos_control_idoc.
CLEAR gs_idoc_control.

gs_idoc_control-doctyp = c_message_type.
gs_idoc_control-mestyp = c_message_type.
gs_idoc_control-idoctp = c_base_idoc_type.
gs_idoc_control-serial = space.
gs_idoc_control-direct = '1'.
gs_idoc_control-serial = sy-datum.
gs_idoc_control-serial+8 = sy-uzeit.
gs_idoc_control-rcvprn = c_rcvprn. "Nro de interlocutor destinatario
gs_idoc_control-rcvprt = 'US'. "Tipo interlocutor destinatario . Este dato lo deben dar

ENDFORM. " LLENAR_CAMPOS_CONTROL_IDOC


*&---------------------------------------------------------------------*
*& Form LLENAR_DATOS_IDOC
*&---------------------------------------------------------------------*
FORM llenar_datos_idoc.
CLEAR gs_eban.
LOOP AT gt_eban INTO gs_eban.

gt_idoc_data-segnam = c_invrev_segname.

CLEAR gs_e1bpebanc.

PERFORM eliminar_ceros_izq USING gs_eban-banfn

Elaborado por Gabriela Soria Aguilar – Abril 2011


xfiles1973@gmail.com Page 4
Creación de un Idoc de Salida mediante programa
CHANGING gs_e1bpebanc-preq_no.

gs_e1bpebanc-preq_no+0(1) = c_nueve.
gs_e1bpebanc-preq_item = gs_eban-bnfpo.
gs_e1bpebanc-doc_type = gs_eban-bsart.
gs_e1bpebanc-pur_group = gs_eban-ekgrp.
gs_e1bpebanc-preq_date = gs_eban-badat.
gs_e1bpebanc-material = gs_eban-matnr.
gs_e1bpebanc-plant = gs_eban-werks.
gs_e1bpebanc-store_loc = gs_eban-lgort.
gs_e1bpebanc-quantity = gs_eban-menge.
gs_e1bpebanc-unit = gs_eban-meins.
gs_e1bpebanc-deliv_date = gs_eban-lfdat.
* Transformar datos para ser leidos en 6.0
gs_e1bpebanc-des_vendor = gs_eban-lifnr.
gs_e1bpebanc-fixed_vend = gs_eban-flief.
* Se agrega 1 al campo purch_org.
gs_e1bpebanc-purch_org = gs_eban-ekorg.
* Según la descripción de la conversión, se agrega 1 al purch_org
ADD 1 TO gs_e1bpebanc-purch_org.

gt_idoc_data-sdata = gs_e1bpebanc.
APPEND gt_idoc_data.
ENDLOOP.

ENDFORM. " LLENAR_DATOS_IDOC

*&---------------------------------------------------------------------*
*& Form LLAMAR_FUNCIÓN
*&---------------------------------------------------------------------*
FORM llamar_función.
REFRESH: gt_comm_control.

CLEAR gv_flag.
CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'
EXPORTING
master_idoc_control = gs_idoc_control
TABLES
communication_idoc_control = gt_comm_control
master_idoc_data = gt_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 <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
COMMIT WORK.
gv_flag = 'X'.
ENDIF.

ENDFORM. " LLAMAR_FUNCIÓN

Una vez que se hace el envío del Idoc, se ingresará a la función we05 para visualizar el
número de idoc generado y el status del mismo.

Elaborado por Gabriela Soria Aguilar – Abril 2011


xfiles1973@gmail.com Page 5
Creación de un Idoc de Salida mediante programa

Análisis de errores en un Idoc de Salida.

(Texto extraído de la ayuda de SAP)


http://help.sap.com/saphelp_40b/helpdata/es/1a/0e3a09539911d1898b0000e8322d00/content.htm

Errores técnicos en el nivel de servicios ALE

Pueden ocurrir los siguientes errores en el nivel de servicios ALE:

 Error de sintaxis en el IDOC


 Ausencia de acuerdo entre interlocutores EDI
 El IDOC no se transfiere a RFC en la transmisión
 El IDOC no se transfiere a la aplicación a la hora de la recepción

De salida

Error de sintaxis del IDOC: Status del IDOC ‘07’

A la hora de transmitir o recibir IDOCs se verifica la sintaxis de cada uno. La sintaxis


se determina cuando se define el IDOC, incluyendo:

 los segmentos individuales de la clase de IDOC


 la relación entre cada segmento
 cuántos segmentos se pueden transmitir en un IDOC o con qué frecuencia se da
un segmento individual en un IDOC

Una verificación de la sintaxis de un IDOC se puede activar en el acuerdo entre


interlocutores EDI para una clase de IDOC y un determinado interlocutor, y nosotros
recomendamos hacerlo así, particularmente para cualquier IDOC que haya creado
usted mismo. De otra manera este error sólo se da, normalmente, en la ejecución de
test. Los IDOCs incorrectos no pueden ser reparados, así que tienen que ser
transmitidos otra vez, una vez se ha corregido la estructura del IDOC en el sistema
SAP.

Ausencia de acuerdo entre interlocutores EDI o acuerdo erróneo: Status del


IDOC ‘29’

Para transmitir un IDOC desde SAP al subsistema se debe definir el proceso de salida


de los acuerdos entre interlocutores EDI para la clase de IDOC (tipo de mensaje) y
todos los interlocutores relevantes. Encontrará una descripción más exacta de los
acuerdos entre interlocutores EDI en la documentación online para las Guías de
implementación (IMG). Si no se puede determinar el interlocutor (subsistema) para el
IDOC a ser transmitido, se seguirá el siguiente procedimiento:

 actualizar los acuerdos entre interlocutores EDI


 todos los IDOCs para la transmisión se deben fijar para la retransmisión. Como
este error ha activado un work item para la tarea estándar ‘ALE/EDI:
tratamiento de errores (de salida)’ y lo ha enviado a la bandeja de entrada del
usuario relevante, el IDOC erróneo se debe establecer para la siguiente
Elaborado por Gabriela Soria Aguilar – Abril 2011
xfiles1973@gmail.com Page 6
Creación de un Idoc de Salida mediante programa

transmisión desde la bandeja de entrada. En la transmisión siguiente el IDOC


incorrecto se indica con status ‘31’ y se copia a uno nuevo que se mejora con
datos del acuerdo entre interlocutores EDI y se transfiere a aRFC.

Normalmente los errores en los acuerdos entre interlocutores EDI se dan en la


ejecución de test.

El IDOC no se transfiere a aRFC en la transmisión : Status del IDOC ‘30’

A pesar de que el acuerdo entre interlocutores EDI se haya actualizado el IDOC no se


transfiere al aRFC, es decir, el IDOC se estructura pero no se envía. El subsistema
relevante no tiene ninguna entrada abierta en la evaluación de operaciones RFC
(SM58). A pesar de que el IDOC esté listo para la transmisión, tiene que estar
controlado explícitamente.

Esto tiene lugar mediante el informe RSEOUT00, que se puede planificar como un job
periódico o iniciado directamente utilizando el menú de transporte Logística  Ventas
y distribución  Transporte  Sistemas externos  Planificación de
transporte  Supervisión ALE  Trabajo periódico  IDoc, Salida ALE  Enviar.

Aquí se debería verificar el modo de salida para el IDOC relevante en el acuerdo entre
interlocutores EDI. En el modo de salida ‘2’ el IDOC creado se transmite directamente,
en ‘4’ los IDOCs se reúnen y se envían en dimensiones definidas de paquetes.
recomendamos que los IDOCs no se transmitan directamente para el modo ‘4’.

Normalmente el status ‘30’ en el IDOC sólo puede ocurrir si el modo de salida se fija
en ‘4’.

Elaborado por Gabriela Soria Aguilar – Abril 2011


xfiles1973@gmail.com Page 7

También podría gustarte