sábado, 27 de octubre de 2012

Factura de un pedido de compras.


Problema: Tengo un pedido de compras (transacciones ME21N, ME22N, ME23N) y me piden el importe de la factura. De hecho en el caso del cliente para el que me lo piden tenemos facturas por compras (MIR4) “normales” y facturas con compras de costes indirectos de adquisición (transportista).

Resolución:  Hablando con mi consultor de guardia para SD me ha explicado que esto se ve yendo a las ME23N, en posición, pestaña Historial de Pedido.
En nuestro caso tenemos 2 facturas, las de costes de adquisición lo tenemos en la EKBZ, por pedido posición podemos ver y comparando podemos saber por qué campos también cribar (vgabe y bewtp), ya que sigue todo el “flujo” de documentos. Tendremos la factura en BELNR y el importe en moneda local en DMBTR.
Análogamente para EKBE tendremos las facturas normales.
En nuestro caso como sólo necesitamos importe lo hemos sumado usando la siguiente subrutina. Quizás tenga que depurarla un poco más, pero todo se andará.

FORM f_imp_factura      USING    p_ebeln TYPE ebeln
                                 p_ebelp 
TYPE ebelp
                        
CHANGING p_imp_factura TYPE DMBTR.

  DATAw_dmbtr TYPE dmbtr,
        w_shkzg 
TYPE shkzg.
  
CLEARp_imp_factura .

* 1.- Activ. Cost.ind.ad.log.fac.
  
SELECT dmbtr FROM  ekbz CLIENT SPECIFIED
    
INTO w_dmbtr
         
WHERE  mandt  sy-mandt
         
AND    ebeln  p_ebeln
         
AND    ebelp  p_ebelp
         
AND    vgabe  2
         
AND    bewtp  'M' OR bewtp  'P' ).
    
IF w_shkzg 'H'.
      
SUBTRACT w_dmbtr FROM p_imp_factura.
    
ELSE." 'S'
      
ADD w_dmbtr TO p_imp_factura.
    
ENDIF.
  
ENDSELECT.
*
* 2.- Activ. Recepción facturas
  
CLEARw_dmbtr.
  
SELECT dmbtr shkzg FROM  ekbe CLIENT SPECIFIED
    
INTO (w_dmbtrw_shkzg)
         
WHERE  mandt  sy-mandt
         
AND    ebeln  p_ebeln
         
AND    ebelp  p_ebelp
         
AND    vgabe  2
         
AND    bewtp  'Q' OR bewtp  'N' ).
    
IF w_shkzg 'H'.
      
SUBTRACT w_dmbtr FROM p_imp_factura.
    
ELSE." 'S'
      
ADD w_dmbtr TO p_imp_factura.
    
ENDIF.
  
ENDSELECT.

ENDFORM.  

No hay comentarios:

Publicar un comentario