#1
|
|||
|
|||
pedido de servicio con mas de una linea
Hola a Todos
Favor, solicito la ayuda de alguien. Tengo que crear un pedido de servicio mediante la BAPI_PO_CREATE1. La creación del pedido me funciona, el problema que tengo que NO me lo crea con mas de una linea. Es decir, solo me lo crea con una posición. Adjunto el programa para que me indiquen donde tengo el error. En el programa agrego a dos registros a una tabla interna ( solo para probar ). De antemano agradezco la ayuda. FORM CREAR_ORDEN_SERVICIO. data : x_ebelp Like ekpo-ebelp, x_matkl Like mara-matkl, x_total TYPE ukurs, x_pckg Type packno, s_pckg Type packno, x_line_no(10) Type n. x_matkl = '096001001'. x_total = 210. x_pckg = 2748. refresh tab_grilla. * IMPORT tab_grilla FROM MEMORY ID 'Z010_C'. tab_grilla-asnum = '3000201'. tab_grilla-waers = 'UF'. tab_grilla-asktx = 'primer servicio'. tab_grilla-enero = 2100. append tab_grilla. *tab_grilla-asnum = '3000202'. *tab_grilla-waers = 'UF'. *tab_grilla-asktx = 'segundo servicio'. *tab_grilla-enero = 110. *append tab_grilla. tab_grilla-asnum = '3000203'. tab_grilla-waers = 'UF'. tab_grilla-asktx = 'tercer servicio'. tab_grilla-enero = 200. append tab_grilla. x_ebelp = 10. * 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 * Marca los campos para que se tomen. CLEAR w_poheaderx. 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'. *Posiciones de pedido po_item-po_item = x_ebelp. " Número de posición del documento de compras po_item-quantity = '1'. " Cantidad de pedido po_item-po_unit = 'ST'. " Unidad de medida de pedido po_item-short_text = 'ARRIENDO PRUEBA'. " Texto breve po_item-acctasscat = 'S'. " Tipo de imputación po_item-item_cat = 'F'. " Tipo de posición del documento de compras po_item-matl_group = '096001001'. " Grupo Artículos po_item-plant = 'CD00'. " Centro po_item-quantity = '1' . " Cantidad de pedido 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-pckg_no = x_pckg. " Nº paquete 2748 po_item-preq_name = sy-uname. " Nombre del solicitante append po_item. CLEAR po_item. *Flags de Posiciones de pedido po_itemx-po_item = x_ebelp. po_itemx-quantity = 'X'. po_itemx-short_text = 'X'. po_itemx-acctasscat = 'X'. po_itemx-item_cat = 'X'. po_itemX-po_unit = 'X'. po_itemx-matl_group = 'X'. po_itemx-plant = 'X'. po_itemx-quantity = '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-pckg_no = 'X'. po_itemx-preq_name = 'X'. append po_itemx. CLEAR po_itemx. sort tab_grilla by asnum. Loop AT tab_grilla. *read table tab_grilla with key asnum = '3000203'. poaccount-po_item = x_ebelp. " Número de posición del documento de compras poaccount-serial_no = '01'. " Número actual de la imputación poaccount-creat_date = sy-datum . " Fecha de creación del registro poaccount-costcenter = x_kostl. " Centro de coste append poaccount. CLEAR poaccount. *Flags de imputacion poaccountx-po_item = x_ebelp. poaccountx-po_itemx = 'X' . poaccountx-serial_no = 'X'. poaccountx-creat_date = 'X' . poaccountx-costcenter = 'X'. append poaccountx. CLEAR poaccountx. *Imputacion de pedido perform Ceros_Izquierda_pos using x_pckg. * Distribucion de imputacion srvaccessvalues-pckg_no = codsap_w. " '0000002748' " Nº paquete srvaccessvalues-line_no = '0000000001' . " Número de línea srvaccessvalues-serno_line = '01'. " Número correlativo asign. imputación línea de servicio srvaccessvalues-percentage = '50'. " Porcentaje de repartición del valor de imputación srvaccessvalues-serial_no = '01'. " Número actual de la imputación srvaccessvalues-net_value = tab_grilla-enero. " Valor neto de la posición srvaccessvalues-quantity = tab_grilla-enero. " Cantidad con signo +/- append srvaccessvalues. CLEAR srvaccessvalues. s_pckg = x_pckg + 1. perform ceros_izquierda_pos using s_pckg. srvaccessvalues-pckg_no = codsap_w. " '0000002749' " Nº paquete srvaccessvalues-line_no = '0000000002' . " Número de línea srvaccessvalues-serno_line = '01'. " Número correlativo asign. imputación línea de servicio srvaccessvalues-percentage = '25'. " Porcentaje de repartición del valor de imputación srvaccessvalues-serial_no = '01'. " Número actual de la imputación srvaccessvalues-net_value = '53'. " Valor neto de la posición srvaccessvalues-quantity = '53'. " Cantidad con signo +/- append srvaccessvalues. CLEAR srvaccessvalues. add 1 to s_pckg. perform ceros_izquierda_pos using s_pckg. srvaccessvalues-pckg_no = codsap_w. " '0000002750' srvaccessvalues-line_no = '0000000003' . srvaccessvalues-serno_line = '01'. srvaccessvalues-percentage = '25'. srvaccessvalues-serial_no = '01'. srvaccessvalues-net_value = '53'. srvaccessvalues-quantity = '53'. append srvaccessvalues. CLEAR srvaccessvalues. * Servicios encabezado s_pckg = x_pckg + 1. add 1 to x_line_no. service-pckg_no = x_pckg. " 2748 " Nº paquete " 2748 service-line_no = x_line_no. " '0000000001' . " Número de líneas interno service-ext_line = '0000000000' . " Número de línea service-outl_level = '0'. " Nivel jerárquico del grupo service-outl_no = ' '. " Nivel de estructura service-outl_ind = 'X'. " Indicador línea de estructuración service-subpckg_no = s_pckg. " 2749 " Número de subpaquete service-edition = '0000' . " Edición del ámbito de servicio service-ovf_tol = '0'. " Tolerancia de sobrecumplimiento service-gr_price = '0'. " Precio bruto service-from_line = '1'. " Límite inferior service-DISTRIB = '2'. " Indicador de distribución en la imputación múltiple service-short_text = 'texto'. " Texto breve append service. CLEAR service. perform ceros_izquierda using tab_grilla-asnum. s_pckg = x_pckg + 1. * servicio 1 asociado al encabezado add 1 to x_line_no. service-pckg_no = s_pckg. " 2749 " Nº paquete service-line_no = x_line_no. " '0000000002' . " Número de líneas interno service-ext_line = x_ebelp. " '10' . " Número de línea service-outl_level = '0'. " Nivel jerárquico del grupo service-subpckg_no = '0000000000'. " Número de subpaquete service-edition = '0000' . " Número de subpaquete service-base_uom = 'ST' . " Unidad de medida base service-quantity = '1' . " Cantidad con signo +/- service-price_unit = '1' . " Cantidad base service-ovf_tol = '0' . " Tolerancia de sobrecumplimiento service-short_text = tab_grilla-asktx. service-gr_price = tab_grilla-enero. " Precio bruto service-matl_group = '096001001'. " Grupo Artículos service-service = matnr_w. " Nro de Servicio (ESLL-SRVPOS) append service. CLEAR service . add : 10 to x_ebelp. add : 10 to x_pckg. endloop. x_pckg = 0. *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. 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'. 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
__________________
Jessie |
Herramientas | Buscar en Tema |
Desplegado | |
|
|