Bapi para crar ordenes de venta

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • SilviaC
    Junior Member
    • oct
    • 9

    #1

    Bapi para crar ordenes de venta

    Hola amigos,

    Soy SD y estoy trabajando con un amigo abappero para hacer un programa que genere ordenes de venta. Estamos usando la BAPI_SALESORDER_CREATEFROMDAT2 y hasta ahora el resultado ha sido bastante bueno... pero tenemos un problema con la unidad de medida.

    La entrada de datos la estamos haciendo desde las mismas tablas de ventas. Un pedido de un tipo X genera un pedido de tipo Y...

    El problema es que no importa qué unidad de medida le suministremos al programa, las ordenes generadas vienen en la unidad de medida de venta del material y no en la unidad suministrada en la estructura. Les anexo el código por si alguien nos puede ayudar.
    *----------------------------------------------------------------------*
    ***INCLUDE ZSD_ORDEN_AP_RUTINAS .
    *----------------------------------------------------------------------*
    *&---------------------------------------------------------------------*
    *& Form LLENADATOS
    *&---------------------------------------------------------------------*
    * text
    *----------------------------------------------------------------------*
    * --> p1 text
    * <-- p2 text
    *----------------------------------------------------------------------*
    FORM LLENADATOS .
    *Buscar los datos de vbak que serviran de base.
    data: vbel like zorders-vbeln.



    select * from vbak into CORRESPONDING FIELDS OF TABLE it_vbak
    where AUART in ('ZAR','ZAC').


    *leer ahora lo que tiene zorders.

    SELECT * from zorders INTO CORRESPONDING FIELDS OF TABLE it_zorders.


    *si hay datos recorrer la tabla interna y borrar las coincidencias

    IF sy-subrc = 0.
    loop at it_zorders.

    delete it_vbak where vbeln = it_zorders-ebeln.


    ENDLOOP.
    ENDIF.

    ENDFORM. " LLENADATOS
    *&---------------------------------------------------------------------*
    *& Form CREAORDERS
    *&---------------------------------------------------------------------*
    * text
    *----------------------------------------------------------------------*
    * --> p1 text
    * <-- p2 text
    *----------------------------------------------------------------------*
    FORM CREAORDERS .

    data sub(3) type c.
    data it_vbap like STANDARD TABLE OF vbap WITH HEADER LINE.
    data prov like zinterco-lifnr.
    data reg like LINE OF it_zorders.
    data cent like vbap-werks.
    *recorrer la tabla interna para ir creando las ordenes
    WRITE 'Órdenes creadas'.
    LOOP AT it_vbak.

    if it_vbak-auart = 'ZAR'.
    header-doc_type = 'ZMR1'.
    elseif it_vbak-auart = 'ZAC'.
    header-doc_type = 'ZMC1'.
    ENDIF.

    header-sales_org = 'OV02'.
    header-distr_chan = 'C1'.
    header-division = 'S1'.
    sub = it_vbak-vkbur+1(3) .
    CONCATENATE 'B' sub INTO header-sales_off.
    *guardar el centro para usarlo mas delante
    cent = header-sales_off.
    *header-sales_off = 'B' + substr(it_VBAK-VKBUR ,2,3).
    header-doc_date = sy-datum.
    header-purch_date = sy-datum.
    header-po_dat_s = sy-datum.
    header-req_date_h = sy-datum.
    Header-purch_no_c = 'Pedido A en P'.


    *hacer un select a vbap.
    REFRESH it_vbap.
    refresh i_items.
    refresh I_SCHDL.
    select * from vbap into CORRESPONDING FIELDS OF TABLE it_vbap
    WHERE vbeln = it_vbak-vbeln.


    LOOP AT it_vbap.
    i_items-itm_number = it_VBAP-POSNR.
    i_items-material = it_VBAP-MATNR.
    sub = it_VBAP-WERKS+1(3) .
    CONCATENATE 'B' sub INTO i_items-plant.

    * i_items-plant = 'B' + substr(it_VBAP-WERKS,2,3).
    i_items-target_qty = it_VBAP-KWMENG.
    * I_items-target_qu = it_VBAP-ZIEME.
    I_items-target_qu = it_VBAP-vrkme. *****aqui asigna u/m*****
    i_items-comp_quant = it_VBAP-KWMENG.
    append i_items.

    I_SCHDL-itm_number = it_vbap-posnr.
    I_SCHDL-req_qty = it_vbap-kwmeng.
    append I_SCHDL.

    ENDLOOP.


    CLEAR i_partners.
    i_partners-partn_role = 'AG'.
    *buscar de zinterco el lifnr correspondiente.
    *preparar una condicion para la busqueda

    select single lifnr into prov from ZCLICPD where
    werks = cent.
    i_partners-partn_numb = prov.
    append i_partners.

    CLEAR i_partners.
    i_partners-partn_role = 'VE'.
    i_partners-partn_numb = '0000000620'.
    append i_partners.





    CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
    EXPORTING
    SALESDOCUMENTIN = salesdocument
    ORDER_HEADER_IN = header

    IMPORTING
    SALESDOCUMENT = salesdocument_ex
    TABLES
    RETURN = i_return
    ORDER_ITEMS_IN = i_items
    ORDER_SCHEDULES_IN = I_SCHDL

    ORDER_PARTNERS = i_partners

    .

    reg-mandt = sy-mandt.
    reg-bsart = it_vbak-AUART.
    reg-ebeln = it_vbak-VBELN.

    IF it_vbak-AUART = 'ZAC'.
    reg-auart = 'ZMC1'.
    else.
    reg-auart = 'ZRM1'.
    ENDIF.
    reg-vbeln = salesdocument_ex.

    insert into zorders values reg.

    COMMIT WORK AND WAIT.

    write: / salesdocument_ex.

    ENDLOOP.

    MESSAGE i398(00) WITH text-i01.
    ENDFORM. " CREAORDERS
    *---------------------------------------------------------------

    Si alguno ha utilizado esta BAPI y sabe en qué estamos fallando con la unidad de medida, desde ya muchas gracias por su ayuda.
  • SilviaC
    Junior Member
    • oct
    • 9

    #2
    Lo encontré.

    Ya lo tengo . La unidad de medida se asigna en

    BAPISDITM-SALES_UNIT


    Saludos!!

    Comentario

    Trabajando...