MUNDOSAP

Regresar   MUNDOSAP > DESARROLLO > Programación ABAP IV
Nombre de Usuario
Contraseña
Home Descargas Registrar FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




 
Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Viejo 20/04/17, 20:44:56
jessiepeque jessiepeque is offline
Junior Member
 
Fecha de Ingreso: sep 2009
Mensajes: 7
error en creacion pedido de servicio

Hola a todos

Tengo que crear un pedido de servicio mediante la BAPI_PO_CREATE1, con varias posiciones y estas asociadas a uno ó mas servicios.
He logrado crear un pedido de servicio con 3 posiciones y cada una de estas con 3 servicios asociados,
El problema que tengo que intento crear una cuarta posición y me arroja el siguiente error :.

E - BAPI - 001 - No se ha creado ninguna instancia de tipo objeto PurchaseOrder; ref.externa: - PurchaseOrd
E - MEPO - 000 - El pedido todavía contiene posiciones erróneas -
E - SE - 518 - No existe ninguna imputación para la línea de servicios 0000000010 - 0000000010


La idea es, crear una posicion por cada mes del año y sus respectivos servicios, es decir, deben ir 12 posiciones.

Adjunto programa

include zceros_materiales.

tables : ekko.

Data: Begin Of tab_grilla Occurs 0,
marca,
asnum Like zt001wservicios-asnum, " numero de servicio
fecini Like zt001wservicios-fecini,
fecter Like zt001wservicios-fecter,
waers Like zt001wservicios-waers,
asktx Like asmdt-asktx,
enero Type P Decimals 3,
febrero Type P Decimals 3,
marzo Type P Decimals 3,
abril Type P Decimals 3,
mayo Type P Decimals 3,
junio Type P Decimals 3,
julio Type P Decimals 3,
agosto Type P Decimals 3,
septiembre Type P Decimals 3,
octubre Type P Decimals 3,
noviembre Type P Decimals 3,
diciembre Type P Decimals 3,
* datos que no se muestran en la grilla
tbtwr Like zt001wservicios-tbtwr,
End of tab_grilla.

Data: Begin Of tab_pedido Occurs 0,
monat Type monat,
asnum Like zt001wservicios-asnum, " numero de servicio
waers Like zt001wservicios-waers,
asktx Like asmdt-asktx,
netwr Type P Decimals 3,
texto Type TXZ01,
End of tab_pedido.

DATA: w_poheader LIKE bapimepoheader,
w_poheaderx LIKE bapimepoheaderx.

DATA: gv_pedido LIKE bapimepoheader-po_number.

DATA: poaccount LIKE bapimepoaccount OCCURS 0 WITH HEADER LINE,
poaccountx LIKE bapimepoaccountx OCCURS 0 WITH HEADER LINE,
po_item LIKE bapimepoitem OCCURS 0 WITH HEADER LINE,
po_itemx LIKE bapimepoitemx OCCURS 0 WITH HEADER LINE,
service LIKE bapiesllc OCCURS 0 WITH HEADER LINE,
srvaccessvalues LIKE bapiesklc OCCURS 0 WITH HEADER LINE,
poextensionin TYPE bapiparex OCCURS 0 WITH HEADER LINE,
pocond LIKE bapimepocond OCCURS 0 WITH HEADER LINE,
pocondx LIKE bapimepocondx OCCURS 0 WITH HEADER LINE.

DATA: return LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
DATA : purchaseorder LIKE BAPIMEPOHEADER-PO_NUMBER,
lc_resp.

data : lc_mensaje TYPE string,
short_text_w Type TXZ01.

data : w_lt_services_line_no LIKE bapiesllc-line_no.

data : x_monat Type monat.
data : x_ebelp Like ekpo-ebelp,
x_ebelp_s Like ekpo-ebelp,
x_matkl Like mara-matkl,
x_total TYPE ukurs,
x_serial(02) Type n,
x_pckg Type packno,
s_pckg Type packno,
x_line_no(10) Type n,
l_extrow TYPE extrow.

* criterios de seleccion
SELECTION-SCREEN BEGIN OF BLOCK block03 WITH FRAME TITLE text-001.
PARAMETERS : x_bukrs Type bukrs DEFAULT 'BP01'.
PARAMETERS : x_bsart Like ekko-bsart DEFAULT 'ZARR'.
PARAMETERS : x_ekorg Like ekko-ekorg DEFAULT 'OC01'.
PARAMETERS : x_ekgrp Like ekko-ekgrp DEFAULT 'G04'.
PARAMETERS : x_waers Like ekko-waers DEFAULT 'UF'.
PARAMETERS : x_ernam Like ekko-ernam. " DEFAULT 'JVELASQUEZ'.
PARAMETERS : x_werks Like zt001wcontrato-werks. " DEFAULT 'CD00'.
PARAMETERS : x_kostl Like zt001wcontrato-kostl. " DEFAULT 'BP01145002'.
PARAMETERS : x_lifnr Like ekko-lifnr. " DEFAULT '1000004332'.
PARAMETERS : x_gjahr Type gjahr.
SELECTION-SCREEN END OF BLOCK block03.

START-OF-SELECTION.
perform traspaso_servicios.
If tab_pedido[] is not initial.
perform crear_cabecera.
perform CREAR_ORDEN_SERVICIO.
EndIf.
END-OF-SELECTION.

form traspaso_servicios.

refresh : tab_grilla, tab_pedido.

IMPORT tab_grilla FROM MEMORY ID 'Z010_C'.

Loop AT tab_grilla.

If tab_grilla-enero is not initial.
tab_pedido-monat = '01'.
tab_pedido-netwr = tab_grilla-enero.
tab_pedido-texto = 'Enero'.
tab_pedido-asnum = tab_grilla-asnum.
tab_pedido-asktx = tab_grilla-asktx.
tab_pedido-waers = tab_grilla-waers.
append tab_pedido.
EndIf.
If tab_grilla-febrero is not initial.
tab_pedido-monat = '02'.
tab_pedido-netwr = tab_grilla-febrero.
tab_pedido-texto = 'Febrero'.
tab_pedido-asnum = tab_grilla-asnum.
tab_pedido-asktx = tab_grilla-asktx.
tab_pedido-waers = tab_grilla-waers.
append tab_pedido.
EndIf.
If tab_grilla-marzo is not initial.
tab_pedido-monat = '03'.
tab_pedido-netwr = tab_grilla-marzo.
tab_pedido-texto = 'Marzo'.
tab_pedido-asnum = tab_grilla-asnum.
tab_pedido-asktx = tab_grilla-asktx.
tab_pedido-waers = tab_grilla-waers.
append tab_pedido.
EndIf.
If tab_grilla-abril is not initial.
tab_pedido-monat = '04'.
tab_pedido-netwr = tab_grilla-abril.
tab_pedido-texto = 'Abril'.
tab_pedido-asnum = tab_grilla-asnum.
tab_pedido-asktx = tab_grilla-asktx.
tab_pedido-waers = tab_grilla-waers.
append tab_pedido.
EndIf.
If tab_grilla-mayo is not initial.
tab_pedido-monat = '05'.
tab_pedido-netwr = tab_grilla-mayo.
tab_pedido-texto = 'Mayo'.
tab_pedido-asnum = tab_grilla-asnum.
tab_pedido-asktx = tab_grilla-asktx.
tab_pedido-waers = tab_grilla-waers.
append tab_pedido.
EndIf.
If tab_grilla-junio is not initial.
tab_pedido-monat = '06'.
tab_pedido-netwr = tab_grilla-junio.
tab_pedido-texto = 'Junio'.
tab_pedido-asnum = tab_grilla-asnum.
tab_pedido-asktx = tab_grilla-asktx.
tab_pedido-waers = tab_grilla-waers.
append tab_pedido.
EndIf.
If tab_grilla-julio is not initial.
tab_pedido-monat = '07'.
tab_pedido-netwr = tab_grilla-julio.
tab_pedido-texto = 'Julio'.
tab_pedido-asnum = tab_grilla-asnum.
tab_pedido-asktx = tab_grilla-asktx.
tab_pedido-waers = tab_grilla-waers.
append tab_pedido.
EndIf.
If tab_grilla-agosto is not initial.
tab_pedido-monat = '08'.
tab_pedido-netwr = tab_grilla-agosto.
tab_pedido-texto = 'Agosto'.
tab_pedido-asnum = tab_grilla-asnum.
tab_pedido-asktx = tab_grilla-asktx.
tab_pedido-waers = tab_grilla-waers.
append tab_pedido.
EndIf.
If tab_grilla-septiembre is not initial.
tab_pedido-monat = '09'.
tab_pedido-netwr = tab_grilla-septiembre.
tab_pedido-texto = 'Septiembre'.
tab_pedido-asnum = tab_grilla-asnum.
tab_pedido-asktx = tab_grilla-asktx.
tab_pedido-waers = tab_grilla-waers.
append tab_pedido.
EndIf.
If tab_grilla-octubre is not initial.
tab_pedido-monat = '10'.
tab_pedido-netwr = tab_grilla-octubre.
tab_pedido-texto = 'Octubre'.
tab_pedido-asnum = tab_grilla-asnum.
tab_pedido-asktx = tab_grilla-asktx.
tab_pedido-waers = tab_grilla-waers.
append tab_pedido.
EndIf.
* If tab_grilla-noviembre is not initial.
tab_pedido-monat = '11'.
tab_pedido-netwr = tab_grilla-noviembre.
tab_pedido-texto = 'Noviembre'.
tab_pedido-asnum = tab_grilla-asnum.
tab_pedido-asktx = tab_grilla-asktx.
tab_pedido-waers = tab_grilla-waers.
append tab_pedido.
EndIf.
If tab_grilla-diciembre is not initial.
tab_pedido-monat = '12'.
tab_pedido-netwr = tab_grilla-diciembre.
tab_pedido-texto = 'Diciembre'.
tab_pedido-asnum = tab_grilla-asnum.
tab_pedido-asktx = tab_grilla-asktx.
tab_pedido-waers = tab_grilla-waers.
append tab_pedido.
EndIf.
EndLoop.
endform.

form crear_cabecera.

* Carga datos de Cabecera del pedido de Compra
CLEAR w_poheader.

w_poheader-doc_type = x_bsart. " Clase de documento de compras
w_poheader-vendor = x_lifnr. " Número de cuenta del proveedor
w_poheader-langu = sy-langu. " Clave de idioma
w_poheader-purch_org = x_ekorg. " Organización de compras
w_poheader-pur_group = x_ekgrp. " Grupo de compras
w_poheader-currency = x_waers. " Clave de moneda
w_poheader-comp_code = x_bukrs. " Sociedad
w_poheader-creat_date = sy-datum. " Fecha de creación del registro
w_poheader-created_by = sy-uname. " Nombre del responsable que ha añadido el objeto

CLEAR w_poheaderx.

* Marca los campos para que se tomen.
w_poheaderx-doc_type = 'X'.
w_poheaderx-vendor = 'X'.
w_poheaderx-purch_org = 'X'.
w_poheaderx-pur_group = 'X'.
w_poheaderx-currency = 'X'.
w_poheaderx-comp_code = 'X'.
w_poheaderx-creat_date = 'X'.
w_poheaderx-created_by = 'X'.
endform.

FORM CREAR_ORDEN_SERVICIO.

x_matkl = '096001001'.
x_ebelp = 10.
x_monat = 1.
x_pckg = 1.

While x_monat <= 12.

read table tab_pedido with key monat = x_monat.
If Sy-Subrc eq 0.
clear short_text_w.

concatenate 'Arriendo' tab_pedido-texto x_gjahr into short_text_w separated by space.

*Posiciones de pedido
po_item-po_item = x_ebelp. " Número de posición del documento de compras
po_item-short_text = short_text_w. " Texto breve
po_item-distrib = space. " Distribución
po_item-part_inv = space. " Indicador de factura parcial
po_item-plant = x_werks. " Centro
po_item-matl_group = x_matkl. " Grupo Artículos
po_item-pckg_no = x_pckg. " Nº paquete 2748
po_item-po_unit = 'ST'. " Unidad de medida de pedido
po_item-acctasscat = 'S'. " Tipo de imputación
po_item-item_cat = 'F'. " Tipo de posición del documento de compras
po_item-conv_num1 = '1'. " Numerador para la conversión UMPRP en UMP
po_item-conv_den1 = '1'. " Denominador para la conversión UMPRP en UMP
po_item-price_unit = '1'. " cantidad base
po_item-prnt_price = 'X'. " Impresión de precio
po_item-unlimited_dlv = 'X'. " Indicador: Exceso de suministro ilimitado
po_item-gr_ind = 'X' . " Indicador de entrada de mercancías
po_item-ir_ind = 'X' . " Indicador de recepción de factura
po_item-gr_basediv = 'X'. " Indicador p.verificación de facturas sobre la base de la EM
po_item-preq_name = sy-uname. " Nombre del solicitante
po_item-quantity = 1.
append po_item.

CLEAR po_item.

*Flags de Posiciones de pedido
po_itemx-po_item = x_ebelp.
po_itemx-po_itemx = 'X'.
po_itemx-short_text = 'X'.
po_itemx-distrib = 'X'.
po_itemx-part_inv = 'X'.
po_itemx-plant = 'X'.
po_itemx-matl_group = 'X'.
po_itemx-pckg_no = 'X'.
po_itemx-acctasscat = 'X'.
po_itemx-item_cat = 'X'.
po_itemX-po_unit = 'X'.
po_itemx-conv_num1 = 'X'.
po_itemx-conv_den1 = 'X'.
po_itemx-price_unit = 'X'.
po_itemx-prnt_price = 'X'.
po_itemx-unlimited_dlv = 'X'.
po_itemx-gr_ind = 'X' .
po_itemx-ir_ind = 'X' .
po_itemx-gr_basediv = 'X'.
po_itemx-preq_name = 'X'.
po_itemx-quantity = 'X'.
append po_itemx.

CLEAR po_itemx.

EndIf.

x_ebelp_s = 10.
x_serial = 1.
x_line_no = 1.
s_pckg = x_pckg.
l_extrow = 0.

sort tab_pedido by monat asnum.
Loop AT tab_pedido Where monat eq x_monat.

*Imputacion de pedido
poaccount-po_item = x_ebelp_s. " Número de posición del documento de compras
poaccount-serial_no = x_serial. "'01'. " Número actual de la imputación
poaccount-profit_ctr = ''. "x_kostl. " centro de beneficio
poaccount-creat_date = sy-datum . " Fecha de creación del registro
poaccount-quantity = 1. " cantidad
poaccount-costcenter = x_kostl. " Centro de coste
poaccount-distr_perc = '0'.
append poaccount.

CLEAR poaccount.

*Flags de imputacion
poaccountx-po_item = x_ebelp_s.
poaccountx-po_itemx = 'X' .
poaccountx-serial_no = x_serial.
poaccountx-serial_nox = 'X'.
poaccountx-profit_ctr = 'X'.
poaccountx-creat_date = 'X'.
poaccountx-quantity = 'X'.
poaccountx-costcenter = 'X'.
poaccountx-distr_perc = 'X'.
append poaccountx.
CLEAR poaccountx.

****** Datos del Encabezado del servicio ******
add : 1 to l_extrow.
s_pckg = x_pckg + 1.
If x_line_no = 1.
service-pckg_no = x_pckg. " 2748
service-line_no = x_line_no. "‘0000000001’.
service-ext_line = '0000000000'. " x_ebelp_s
service-outl_ind = 'X'.
service-subpckg_no = s_pckg. " 2749
service-from_line = '1'.
service-distrib = space. " 2
append service.
CLEAR service.

x_line_no = x_line_no + 1.
EndIf.

****** Servicio asociado al encabezado ******
perform ceros_izquierda using tab_pedido-asnum.

service-pckg_no = s_pckg.
service-line_no = x_line_no.
service-ext_line = l_extrow.
service-subpckg_no = '000000000'.
service-quantity = '1' .
service-short_text = tab_pedido-asktx.
service-service = matnr_w. " Nro de Servicio (ESLL-SRVPOS)
service-gr_price = tab_pedido-netwr.
service-distrib = space.
append service.
CLEAR service .

****** Datos de asignaciones de cuentas – Imputación (en este caso es imputación simple)******
* Si fuera imputación múltiple hay que agregar más registros, uno por cada distribución
s_pckg = x_pckg + 1.
perform Ceros_Izquierda_pos using s_pckg.

srvaccessvalues-pckg_no = codsap_w.
srvaccessvalues-line_no = x_line_no. " '0000000002'
srvaccessvalues-serial_no = x_serial. " '01'
srvaccessvalues-serno_line = x_serial.
srvaccessvalues-percentage = '0'.
srvaccessvalues-quantity = '1'.
append srvaccessvalues.
CLEAR srvaccessvalues.

add : 10 to x_ebelp_s.
add : 10 to x_serial,
10 to x_line_no.

EndLoop.

add : 10 to x_ebelp.
add : 10 to x_pckg.
add : 1 to x_monat.
EndWhile.

*Creamos el Pedido de Servicio
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader = w_poheader
poheaderx = w_poheaderx
no_price_from_po = 'X'
IMPORTING
exppurchaseorder = purchaseorder
TABLES
return = return
poitem = po_item
poitemx = po_itemx
poaccount = poaccount
poaccountx = poaccountx
poservices = service
posrvaccessvalues = srvaccessvalues
extensionin = poextensionin.
IF NOT purchaseorder IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.

Do 20 TIMES.
SELECT SINGLE *
FROM ekko client specified
WHERE mandt eq sy-mandt
And ebeln eq purchaseorder.
If sy-subrc = 0.
EXIT.
Else.
WAIT UP TO 3 SECONDS.
EndIf.
EndDo.

CONCATENATE 'Generado pedido:' purchaseorder ' ' INTO lc_mensaje.
MESSAGE : lc_mensaje TYPE 'I'.
EXPORT purchaseorder TO MEMORY ID 'Z011_C'.

Else.

*revierte acciones bapi
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

*notifica error
CLEAR lc_resp.

CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
defaultoption = 'Y'
textline1 = 'Error al generar documento.'
textline2 = '¿Visualiza el LOG de ejecución?'
titel = 'Confirmación'
start_column = 20
start_row = 12
cancel_display = space
IMPORTING
answer = lc_resp.

If lc_resp = 'J'. "respuesta ‘SI’
perform visualiza_log_ejecucion.
EndIf.
ENDIF.
ENDFORM.

FORM visualiza_log_ejecucion.

DATA: lt_log TYPE TABLE OF string WITH HEADER LINE.

*PREPARA LOG
CLEAR lt_log[].

LOOP AT return.

CLEAR lt_log.

CONCATENATE return-type(1)
'-'
return-id(20)
'-'
return-number(3)
'-'
return-message(100)
'-'
return-message_v1(50)
INTO lt_log SEPARATED BY space.
APPEND lt_log.

ENDLOOP. "F1_RETURN

*MUESTRA LOG
CALL FUNCTION 'POPUP_WITH_TABLE'
EXPORTING
endpos_col = 170
endpos_row = 20
startpos_col = 10
startpos_row = 5
titletext = 'LOG de ejecución'
TABLES
valuetab = lt_log
EXCEPTIONS
break_off = 1
OTHERS = 2.

ENDFORM. "visualiza_log_ejecución

Espero que alguien me pueda ayudar.
Saludos
__________________
Jessie
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Reglas de Mensajes
no puedes crear nuevos temas
no puedes responder temas
no puedes adjuntar archivos
no puedes editar tus mensajes

El código vB está On
Las caritas están On
Código [IMG] está On
Código HTML está Off
Saltar a Foro


Husos Horarios son GMT. La hora en este momento es 14:47:26.


www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web