Ver Mensaje Individual
  #2  
Viejo 24/11/10, 08:52:55
agv1976 agv1976 is offline
Member
 
Fecha de Ingreso: jun 2006
Mensajes: 66
Pedidos

Hola hay tienes el codigo, yo no lo hice con limites, pero esta todo lo demas, tu problema esta resuelto ya con esto, si tienes dudas me dices

CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader = mepoheader
poheaderx = mepoheaderx
* POADDRVENDOR =
testrun = p_test
* MEMORY_UNCOMPLETE =
* MEMORY_COMPLETE =
* POEXPIMPHEADER =
* POEXPIMPHEADERX =
* VERSIONS =
* NO_MESSAGING =
* NO_MESSAGE_REQ =
* NO_AUTHORITY =
* no_price_from_po = no_price_from_po
IMPORTING
exppurchaseorder = porder
* EXPHEADER =
* EXPPOEXPIMPHEADER =
TABLES
return = it_return
poitem = mepoitem
poitemx = mepoitemx
poaddrdelivery = addrdelivery
poschedule = meposchedule
poschedulex = meposchedulx
poaccount = mepoaccount
* POACCOUNTPROFITSEGMENT =
poaccountx = mepoaccountx
* POCONDHEADER =
* POCONDHEADERX =
* POCOND =
* POCONDX =
* POLIMITS =
* POCONTRACTLIMITS =
poservices = esllc
posrvaccessvalues = esklc
* POSERVICESTEXT =
* EXTENSIONIN =
* EXTENSIONOUT =
* POEXPIMPITEM =
* POEXPIMPITEMX =
potextheader = mepotextheader
* POTEXTITEM =
* ALLVERSIONS =
popartner = ekkop.

*&---------------------------------------------------------------------*
*& Form header
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*

FORM header.

* Sociedad
mepoheader-comp_code = wa_ped-bukrs.

IF NOT mepoheader-comp_code IS INITIAL.
mepoheaderx-comp_code = 'X'.
ELSE.
mepoheaderx-comp_code = ' '.
ENDIF.

* Lenguaje
* mepoheader-langu = sy-langu.
*
* IF NOT mepoheader-langu IS INITIAL.
* mepoheaderx-langu = 'X'.
* ELSE.
* mepoheaderx-langu = ''.
* ENDIF.

* Moneda
* mepoheader-currency = wa_ped-waers.
*
* IF NOT mepoheader-currency IS INITIAL.
* mepoheaderx-currency = 'X'.
* ELSE.
* mepoheaderx-currency = ''.
* ENDIF.

* Clase documento compras
mepoheader-doc_type = wa_ped-bsart.

IF NOT mepoheader-doc_type IS INITIAL.
mepoheaderx-doc_type = 'X'.
ELSE.
mepoheaderx-doc_type = ' '.
ENDIF.

* Proveedor
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_ped-lifnr
IMPORTING
output = mepoheader-vendor.

IF NOT mepoheader-vendor IS INITIAL.
mepoheaderx-vendor = 'X'.
ELSE.
mepoheaderx-vendor = ' '.
ENDIF.

* Org. compras
mepoheader-purch_org = wa_ped-ekorg.

IF NOT mepoheader-purch_org IS INITIAL.
mepoheaderx-purch_org = 'X'.
ELSE.
mepoheaderx-purch_org = ' '.
ENDIF.

* Grupo compras
mepoheader-pur_group = wa_ped-ekgrp.

IF NOT mepoheader-pur_group IS INITIAL.
mepoheaderx-pur_group = 'X'.
ELSE.
mepoheaderx-pur_group = ' '.
ENDIF.

* Fecha del documento de compras
mepoheader-doc_date = sy-datum.

IF NOT mepoheader-doc_date IS INITIAL.
mepoheaderx-doc_date = 'X'.
ELSE.
mepoheaderx-doc_date = ' '.
ENDIF.

CALL FUNCTION 'BAPI_PO_GETDETAIL'
EXPORTING
purchaseorder = wa_ped-ebeln
header_texts = 'X'
TABLES
po_header_texts = header_texts[].

* Texto cabecera

CLEAR mepotextheader.
REFRESH mepotextheader.

tdline = 'COPIADO DEL PEDIDO Nº:'.

IF header_texts[] IS INITIAL.

CONCATENATE tdline wa_ped-ebeln INTO mepotextheader-text_line.

APPEND mepotextheader.
CLEAR mepotextheader.

ELSE.

LOOP AT header_texts INTO wa_header_texts.

IF wa_header_texts-text_line CS 'COPIA' OR wa_header_texts-text_line CS 'COPIADO'.

CLEAR wa_header_texts-text_line.

CONCATENATE wa_header_texts-text_line '-' 'COPIADO DEL PEDIDO Nº:' wa_ped-ebeln
INTO mepotextheader-text_line.

MODIFY mepotextheader INDEX sy-tabix.

ENDIF.

MOVE-CORRESPONDING wa_header_texts TO mepotextheader.

APPEND mepotextheader.

ENDLOOP.

CONCATENATE tdline wa_ped-ebeln INTO mepotextheader-text_line.

APPEND mepotextheader.
CLEAR mepotextheader.

ENDIF.

* Funciones interlocutor
* Partner
IF NOT wa_ped-lifn2 IS INITIAL.

ekkop-partnerdesc = 'DP'. "Dirección de pedido

* Clave de idioma
ekkop-langu = sy-langu.

* Direc. pedido
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_ped-lifn2
IMPORTING
output = ekkop-buspartno.

APPEND ekkop.
CLEAR ekkop.

ENDIF.

ENDFORM. " header

*&---------------------------------------------------------------------*
*& Form item
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*

FORM item.

PERFORM bapi_get_detail_item.

* Nº pos. doc. compras
mepoitem-po_item = wa_ped-ebelp.

mepoitemx-po_item = wa_ped-ebelp.
mepoitemx-po_itemx = 'X'.

* Texto posición
mepoitem-short_text = wa_ped-txz01.

IF NOT mepoitem-short_text IS INITIAL.
mepoitemx-short_text = 'X'.
ELSE.
mepoitemx-short_text = ''.
ENDIF.

* Distribución
mepoitem-distrib = wa_ped-vrtkz.

IF NOT mepoitem-distrib IS INITIAL.
mepoitemx-distrib = 'X'.
ELSE.
mepoitem-distrib = ''.
ENDIF.

* Indicador de factura parcial
mepoitem-part_inv = wa_ped-twrkz.

IF NOT mepoitem-part_inv IS INITIAL.
mepoitemx-part_inv = 'X'.
ELSE.
mepoitemx-part_inv = ''.
ENDIF.

* Centro
mepoitem-plant = wa_ped-werks.

IF NOT mepoitem-plant IS INITIAL.
mepoitemx-plant = 'X'.
ELSE.
mepoitemx-plant = ' '.
ENDIF.

* Almacén
mepoitem-stge_loc = wa_ped-lgort.

IF NOT mepoitem-stge_loc IS INITIAL.
mepoitemx-stge_loc = 'X'.
ELSE.
mepoitemx-stge_loc = ''.
ENDIF.

* Material
* mepoitem-material = wa_ped-matnr.
*
* IF NOT mepoitem-material IS INITIAL.
* mepoitemx-material = 'X'.
* ELSE.
* mepoitemx-material = ''.
* ENDIF.

* Necesidad
mepoitem-trackingno = wa_ped-bednr.

IF NOT mepoitem-trackingno IS INITIAL.
mepoitemx-trackingno = 'X'.
ELSE.
mepoitemx-trackingno = ' '.
ENDIF.

* Cantidad pedido
* mepoitem-quantity = wa_ped-peinh.
*
* IF NOT mepoitem-quantity IS INITIAL.
* mepoitemx-quantity = 'X'.
* ELSE.
* mepoitemx-quantity = ''.
* ENDIF.

* Unidad medida
* IF NOT wa_ped-meins IS INITIAL.
*
* CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
* EXPORTING
* input = wa_ped-meins
* language = sy-langu
* IMPORTING
* output = mepoitem-po_unit.
*
* ENDIF.
*
* IF NOT mepoitem-po_unit IS INITIAL.
* mepoitemx-po_unit = 'X'.
* ELSE.
* mepoitemx-po_unit = ''.
* ENDIF.

* Unidad medida precio
* mepoitem-orderpr_un = wa_ped-bprme.
*
* IF NOT mepoitem-orderpr_un IS INITIAL.
* mepoitemx-orderpr_un = 'X'.
* ELSE.
* mepoitemx-orderpr_un = ''.
* ENDIF.

* Grp. art.
mepoitem-matl_group = wa_ped-matkl.

IF NOT mepoitem-matl_group IS INITIAL.
mepoitemx-matl_group = 'X'.
ELSE.
mepoitemx-matl_group = ' '.
ENDIF.

* Packno
READ TABLE g_it_bapiekpo_item WITH KEY po_item = wa_ped-ebelp.

mepoitem-pckg_no = g_it_bapiekpo_item-pckg_no.

IF NOT mepoitem-pckg_no IS INITIAL.
mepoitemx-pckg_no = 'X'.
ELSE.
mepoitemx-pckg_no = ''.
ENDIF.

CLEAR: lwert, netpr.

SELECT * FROM essr INTO TABLE it_essr
WHERE ebeln EQ wa_ped-ebeln AND ebelp EQ wa_ped-ebelp.

LOOP AT it_essr INTO wa_essr.

IF wa_essr-loekz NE 'X'.
lwert = lwert + wa_essr-lwert.
ENDIF.

ENDLOOP.

IF lwert GT wa_ped-netpr.
netpr = lwert - wa_ped-netpr.
ELSE.
netpr = wa_ped-netpr - lwert.
ENDIF.

IF netpr EQ 0.

CLEAR l_mensaje.

linea = linea + 1.

CONCATENATE ' Pedido:'wa_ped-ebeln'Pos:'wa_ped-ebelp text-e08
INTO l_mensaje SEPARATED BY space.

insert_log it_error l_mensaje 'PED' 'E' space linea sy-datum sy-uzeit.

err_tot = 'X'.

CLEAR: mepoitem, mepoitemx.

EXIT.

ENDIF.

IF netpr LT 1 AND netpr NE 0.

CLEAR l_mensaje.

linea = linea + 1.

CONCATENATE ' Pedido:'wa_ped-ebeln'Pos:'wa_ped-ebelp text-e15
INTO l_mensaje SEPARATED BY space.

insert_log it_error l_mensaje 'PED' 'E' space linea sy-datum sy-uzeit.

err_tot = 'X'.

CLEAR: mepoitem, mepoitemx.

EXIT.

ENDIF.

mepoitem-net_price = netpr.

IF NOT mepoitem-net_price IS INITIAL.
mepoitemx-net_price = 'X'.
ELSE.
mepoitemx-net_price = ''.
ENDIF.

* Tipo pos. doc. compras
mepoitem-item_cat = wa_ped-pstyp.

IF NOT mepoitem-item_cat IS INITIAL.
mepoitemx-item_cat = 'X'.
ELSE.
mepoitemx-item_cat = ''.
ENDIF.

imputac = wa_ped-knttp.

* Tipo imputación
mepoitem-acctasscat = imputac.

IF NOT imputac IS INITIAL.
mepoitemx-acctasscat = 'X'.
ELSE.
mepoitemx-acctasscat = ' '.
ENDIF.

* Indicador impuestos
mepoitem-tax_code = wa_ped-mwskz.

IF NOT mepoitem-tax_code IS INITIAL.
mepoitemx-tax_code = 'X'.
ELSE.
mepoitemx-tax_code = ''.
ENDIF.

APPEND mepoitem.
CLEAR mepoitem.

APPEND mepoitemx.
CLEAR mepoitemx.

* Repartos
* Línea pedido
meposchedule-po_item = wa_ped-ebelp.
meposchedulx-po_item = wa_ped-ebelp.
meposchedulx-po_itemx = 'X'.

* Línea reparto
meposchedule-sched_line = '0001'.
meposchedulx-sched_line = '0001'.
meposchedulx-sched_linex = 'X'.

* Fecha entrega
WRITE p_fecha TO meposchedule-delivery_date.

IF NOT meposchedule-delivery_date IS INITIAL.
meposchedulx-delivery_date = 'X'.
ELSE.
meposchedulx-delivery_date = ''.
ENDIF.

* Cantidad
meposchedule-quantity = wa_ped-menge.

IF NOT meposchedule-quantity IS INITIAL.
meposchedulx-quantity = 'X'.
ELSE.
meposchedulx-quantity = ''.
ENDIF.

APPEND meposchedule.
CLEAR meposchedule.

APPEND meposchedulx.
CLEAR meposchedulx.

ENDFORM. " item

*&---------------------------------------------------------------------*
*& Form srv
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*

FORM srv.

CLEAR esllc.
REFRESH esllc.

LOOP AT services INTO wa_services.

esllc-pckg_no = wa_services-pckg_no.
esllc-subpckg_no = wa_services-subpckg_no.
esllc-line_no = wa_services-line_no.
esllc-ext_line = wa_services-ext_line.
esllc-outl_level = wa_services-outl_level.
esllc-outl_no = wa_services-outl_no.
esllc-outl_ind = wa_services-outl_ind.
esllc-pln_pckg = wa_services-pln_pckg.
esllc-pln_line = wa_services-pln_line.
esllc-uom_iso = wa_services-uom_iso.
esllc-tax_code = wa_services-tax_code.

* Srv
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_services-service
IMPORTING
output = esllc-service.

* Calculamos el precio para los servicios
IF wa_services-outl_ind NE 'X'.

CLEAR: act_wert, brtwr, act_menge.

SELECT SINGLE act_wert brtwr act_menge INTO (act_wert, brtwr, act_menge)
FROM esll WHERE packno EQ wa_services-pckg_no AND extrow EQ wa_services-ext_line.

IF wa_services-gr_price NE 1.

esllc-quantity = brtwr - act_wert.
esllc-gr_price = 1.

ELSE.

esllc-quantity = wa_services-quantity - act_wert.
esllc-gr_price = wa_services-gr_price.

ENDIF.

ENDIF.

APPEND esllc.
CLEAR esllc.

ENDLOOP.

CLEAR esklc.
REFRESH esklc.

LOOP AT srv_values INTO wa_srvalues.

esklc-pckg_no = wa_srvalues-pckg_no.
esklc-line_no = wa_srvalues-line_no.
esklc-percentage = wa_srvalues-percentage.
esklc-serno_line = wa_srvalues-serno_line.
esklc-serial_no = wa_srvalues-serial_no.

CLEAR: act_wert, brtwr, act_menge.

SELECT SINGLE act_wert brtwr act_menge INTO (act_wert, brtwr, act_menge)
FROM esll WHERE packno EQ wa_srvalues-pckg_no.

IF wa_srvalues-net_value NE 1.

esklc-quantity = brtwr - act_wert.
esklc-net_value = 1.

ELSE.

esklc-quantity = wa_srvalues-quantity - act_wert.
esklc-net_value = wa_srvalues-net_value.

ENDIF.

APPEND esklc.
CLEAR esklc.

ENDLOOP.

ENDFORM. " srv

*&---------------------------------------------------------------------*
*& Form account
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*

FORM account.

REFRESH it_ekkn.
CLEAR it_ekkn.

SELECT * INTO TABLE it_ekkn FROM ekkn
WHERE ebeln = wa_ped-ebeln AND ebelp = wa_ped-ebelp.

LOOP AT it_ekkn INTO wa_ekkn.

CLEAR knttp.

SELECT SINGLE knttp INTO knttp FROM ekpo
WHERE ebeln EQ wa_ekkn-ebeln AND ebelp EQ wa_ekkn-ebelp.

IF knttp EQ 'P'.

* PEP
CALL FUNCTION 'CONVERSION_EXIT_ABPSP_OUTPUT'
EXPORTING
input = wa_ekkn-ps_psp_pnr
IMPORTING
output = mepoaccount-wbs_element.

IF NOT mepoaccount-wbs_element IS INITIAL.
mepoaccountx-wbs_element = 'X'.
ELSE.
mepoaccountx-wbs_element = ' '.
ENDIF.

ENDIF.

IF knttp EQ 'K'.

* CeCo
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_ekkn-kostl
IMPORTING
output = mepoaccount-costcenter.

IF NOT mepoaccount-costcenter IS INITIAL.
mepoaccountx-costcenter = 'X'.
ELSE.
mepoaccountx-costcenter = ' '.
ENDIF.

ENDIF.

* Imputaciones
* Línea
mepoaccount-po_item = wa_ekkn-ebelp.
mepoaccountx-po_item = wa_ekkn-ebelp.
mepoaccountx-po_itemx = 'X'.

* Imputacion

mepoaccount-serial_no = wa_ekkn-zekkn.

mepoaccountx-serial_no = wa_ekkn-zekkn.
mepoaccountx-serial_nox = 'X'.

* Centro Beneficio
mepoaccount-profit_ctr = wa_ekkn-prctr.

IF NOT mepoaccount-profit_ctr IS INITIAL.
mepoaccountx-profit_ctr = 'X'.
ELSE.
mepoaccountx-profit_ctr = ''.
ENDIF.

* Indicador IVA
mepoaccount-tax_code = wa_ekkn-mwskz.

IF NOT mepoaccount-tax_code IS INITIAL.
mepoaccountx-tax_code = 'X'.
ELSE.
mepoaccountx-tax_code = ''.
ENDIF.

* Cantidad
mepoaccount-quantity = wa_ekkn-menge.

IF NOT mepoaccount-quantity IS INITIAL.
mepoaccountx-quantity = 'X'.
ELSE.
mepoaccountx-quantity = ''.
ENDIF.

* Número de la cuenta de mayor
mepoaccount-gl_account = wa_ped-sakto.

IF NOT mepoaccount-gl_account IS INITIAL.
mepoaccountx-gl_account = 'X'.
ELSE.
mepoaccountx-gl_account = ''.
ENDIF.

* Pos. Presupuestaria
mepoaccount-cmmt_item = wa_ped-fipos.

IF NOT mepoaccount-cmmt_item IS INITIAL.
mepoaccountx-cmmt_item = 'X'.
ELSE.
mepoaccountx-cmmt_item = ''.
ENDIF.

* Soc. CO
mepoaccount-co_area = wa_ekkn-kokrs.

IF NOT mepoaccount-co_area IS INITIAL.
mepoaccountx-co_area = 'X'.
ELSE.
mepoaccountx-co_area = ' '.
ENDIF.

* Centro gestor
mepoaccount-funds_ctr = wa_ekkn-fistl.

IF NOT mepoaccount-funds_ctr IS INITIAL.
mepoaccountx-funds_ctr = 'X'.
ELSE.
mepoaccountx-funds_ctr = ' '.
ENDIF.

* Porcentaje distribucion imputación multiple
mepoaccount-distr_perc = wa_ekkn-vproz.

IF NOT mepoaccount-distr_perc IS INITIAL.
mepoaccountx-distr_perc = 'X'.
ELSE.
mepoaccountx-distr_perc = ' '.
ENDIF.

APPEND mepoaccount.
CLEAR mepoaccount.

APPEND mepoaccountx.
CLEAR mepoaccountx.

ENDLOOP.

ENDFORM. " account
Responder Con Cita