#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. |
#2
|
|||
|
|||
Lo encontré.
Ya lo tengo . La unidad de medida se asigna en
BAPISDITM-SALES_UNIT Saludos!! |
Herramientas | Buscar en Tema |
Desplegado | |
|
|