#1
|
|||
|
|||
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 |
Herramientas | Buscar en Tema |
Desplegado | |
|
|