PDA

Ver la Versión Completa : Determinar posicion completada en Purchase Order


andresf02
17/01/11, 17:18:32
Buenas Tardes.

Estoy realizando un reporte a la medida similar a la transaccion ME2M (filtro Alcance de la lista = ALV). Lo que quiero es traer todos los pedidos de compras (Purchase Orders) cuyas posciones esten pendientes de entregas (Cantidad pedida > Cantidad Entregada).

Ya descarté que la posicion en el pedido de compra no este marcada para borrar, y que no tenga el flag de Entrega Final. Pero, he encontrado que existen algunos pedidos de compra que a pesar de estar completados 100% no tienen marcado el Flag de Entrega final y mi reporte los muestra como pendientes obviamente, lo cual es un error.

Que campo (supongo que en la tabla EKPO) me dice que la poscion de un pedido de compras esta completada, es decir, que la cantidad que se pidió del material fue la misma que ingresó al almacen. Me refiero a si existe algun campo adicional que me pueda ayudar a determinar si una posicion continua pendiente por entregas o no.

Mi opcion hasta ahora seria luego de bajar la informacion, comparar si la cantidad pedida es = a la entregada y borrar dicha linea del reporte ya que estaria completada; pero no quieri hacerlo de este modo porque implicaria tener que buscar un monton de registros para despues tener que borrarlos haciendo lento mi reporte.


Gracias de antemano.

aldape
24/01/11, 17:10:23
Bueno, tu reporte sera lento de todas formas... pero tienes que jugar con los Indices de SAP y agragar unos cuantos a las tablas para que te genere este reporte mas rapidamente... te paso este query...

Te trae lo que esta en una orden de compra doc_compras, cuanto esta recepcionado y de pasada.. cuanto esta facturado por si te sirve....

la estructura Z_TAB_CONREPORT, no es mas que una estructura con la info que necesitas... como EBELP (posicion de OC) BUKRS (sociedad) GSBER( division) LIFNR ( proveedor )... etc, etc.....

que lo disfrutes!

data reporte type z_tab_conreport.
data line type zconreport.

select
ekko~ebeln ekpo~ebelp ekko~bedat ekko~bukrs ekkn~zekkn prps~pspnr
ekko~submi ekko~lifnr lfa1~name1 eskl~menge eskl~netwr eskl~act_menge as menge_r
eskl~act_wert as netwr_r s2~packno s2~introw s2~srvpos s2~ktext1
ekkn~menge as e_menge
into corresponding fields of table reporte from ekko
inner join ekpo on ekpo~ebeln = ekko~ebeln
inner join lfa1 on lfa1~lifnr = ekko~lifnr
inner join esll as s1 on s1~mandt = ekpo~mandt and s1~packno = ekpo~packno
inner join esll as s2 on s2~mandt = s1~mandt and s2~packno = s1~sub_packno
inner join eskl on eskl~packno = s2~packno and eskl~introw = s2~introw
inner join ekkn on ekkn~ebeln = ekpo~ebeln and ekkn~ebelp = ekpo~ebelp and ekkn~zekkn = eskl~zekkn
inner join prps on prps~pspnr = ekkn~ps_psp_pnr
inner join proj on proj~pspnr = prps~psphi
where ekko~ebeln = doc_compras and ekpo~loekz = '' and s1~del = '' and s2~del = ''.

select
ekko~ebeln ekpo~ebelp ekko~bedat ekko~bukrs ekkn~zekkn prps~pspnr
ekko~submi ekko~lifnr lfa1~name1 eskl~menge eskl~netwr eskl~act_menge as menge_r
eskl~act_wert as netwr_r s2~packno s2~introw s2~srvpos s2~ktext1
ekkn~menge as e_menge
appending corresponding fields of table reporte from ekko
inner join ekpo on ekpo~ebeln = ekko~ebeln and ekpo~loekz = ''
inner join lfa1 on lfa1~lifnr = ekko~lifnr
inner join esll as s1 on s1~mandt = ekpo~mandt and s1~packno = ekpo~packno and s1~del = ''
inner join esll as s2 on s2~mandt = s1~mandt and s2~packno = s1~sub_packno and s2~del = ''
inner join eskl on eskl~packno = s2~packno and eskl~introw = s2~introw
inner join ekkn on ekkn~ebeln = ekpo~ebeln and ekkn~ebelp = ekpo~ebelp and ekkn~zekkn = eskl~zekkn
inner join aufk on aufk~aufnr = ekkn~nplnr
inner join prps on prps~pspnr = aufk~pspel
inner join proj on proj~pspnr = prps~psphi
where ekko~ebeln = doc_compras and ekpo~loekz = '' and s1~del = '' and s2~del = ''.

loop at reporte into line.
data ekbe_wrbtr type wrbtr.
data essr_netwr type netwr.
data esll_netwr type netwr.
data ekbe_shkzg type shkzg.

clear line-netwr_r.

select essr~lblni esll~netwr essr~netwr into (line-lblni, esll_netwr, essr_netwr ) from esll
inner join esll as s4 on s4~sub_packno = esll~packno
inner join essr on essr~packno = s4~packno
where esll~pln_packno = line-packno and esll~pln_introw = line-introw and esll~del = '' and s4~del = '' and essr~loekz = ''.

line-netwr_r = line-netwr_r + esll_netwr.

select shkzg wrbtr into (ekbe_shkzg, ekbe_wrbtr) from ekbe where lfbnr = line-lblni and vgabe = 2.
if ekbe_shkzg = 'S'.
line-facturado = line-facturado + ( esll_netwr / essr_netwr ) * ekbe_wrbtr.
else.
line-facturado = line-facturado - ( esll_netwr / essr_netwr ) * ekbe_wrbtr.
endif.
endselect.
endselect.

modify reporte from line index sy-tabix.
clear line.
endloop.

t_conreport = reporte.

andresf02
15/02/11, 18:44:05
Muchas gracias por la respuesta, me sirvió muchisimo.!!!