pedido de servicio con mas de una linea

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • jessiepeque
    Junior Member
    • sep
    • 7

    #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
Trabajando...