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.
ENDFORM.
p_ebelp TYPE ebelp
CHANGING p_imp_factura TYPE DMBTR.
DATA: w_dmbtr TYPE dmbtr,
w_shkzg TYPE shkzg.
CLEAR: p_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
CLEAR: w_dmbtr.
SELECT dmbtr shkzg FROM ekbe CLIENT SPECIFIED
INTO (w_dmbtr, w_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.
w_shkzg TYPE shkzg.
CLEAR: p_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
CLEAR: w_dmbtr.
SELECT dmbtr shkzg FROM ekbe CLIENT SPECIFIED
INTO (w_dmbtr, w_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.
No hay comentarios:
Publicar un comentario