En el estándar de SAP existe una parametrización para validar siempre que la referencia en una factura recibida no se duplique, ésta validación muchas veces no aplica por necesidades del negocio, en algunos casos de interfaces o uso de ESKER o VIM necesitamos para algunas clases de documento, poder incluir la misma referencia en más de una ocasión, por lo que deberemos validar que solo en algunas clases de documento se valide la referencia duplicada.
Si tienes muchas compañías y empiezan por el mismo código puedes usar * o si no empiezan por el mismo nombre crear un set, hay una entrada en el blog para crear sets.
En el prerrequisito el ZSETCREADOPORNOSOTROS deberá ser creado, hay una entrada en el blog que indica como crear sets, lo suyo sería llamarlo algo parecido a esto ZFI-AP_DUPL-REF
No olvides que estás haciendo una validación de posición.
prerrequisito.
BKPF-BUKRS LIKE 'EMP*' AND
BKPF-BLART IN ZSETCREADOPORNOSOTROS AND
BSEG-KOART = 'K' AND
BKPF-XREVERSING <> 'X'
Código Chexk EXITXX (XX=Número de la exit)
FORM zuxx USING b_result. " Validar Ref duplicada.
DATA : lt_dfkkbptaxnum_1 TYPE TABLE OF dfkkbptaxnum,
lt_dfkkbptaxnum_2 TYPE TABLE OF dfkkbptaxnum,
ls_dfkkbptaxnum TYPE dfkkbptaxnum,
lt_bseg TYPE TABLE OF bseg,
ls_bseg TYPE bseg,
lt_bkpf TYPE TABLE OF bkpf,
ls_bkpf TYPE bkpf.
b_result = b_true.
* Get all VAT number of the vendor
SELECT *
FROM dfkkbptaxnum
INTO TABLE lt_dfkkbptaxnum_1
WHERE partner = bseg-lifnr.
CHECK sy-subrc IS INITIAL.
SORT lt_dfkkbptaxnum_1 BY taxnum.
DELETE ADJACENT DUPLICATES FROM lt_dfkkbptaxnum_1 COMPARING taxnum.
* Get all vendor affiliated to the VAT number
SELECT *
FROM dfkkbptaxnum
INTO TABLE lt_dfkkbptaxnum_2
FOR ALL ENTRIES IN lt_dfkkbptaxnum_1
WHERE taxnum = lt_dfkkbptaxnum_1-taxnum.
CHECK sy-subrc IS INITIAL.
SORT lt_dfkkbptaxnum_2 BY partner.
DELETE ADJACENT DUPLICATES FROM lt_dfkkbptaxnum_2 COMPARING partner.
* Get all FI document of the vendor
SELECT bukrs belnr gjahr
FROM bseg
INTO CORRESPONDING FIELDS OF TABLE lt_bseg
FOR ALL ENTRIES IN lt_dfkkbptaxnum_2
WHERE lifnr = lt_dfkkbptaxnum_2-partner
AND bukrs = bseg-bukrs
AND gjahr = bseg-gjahr.
CHECK sy-subrc IS INITIAL.
* Check if the reference already exist
SELECT bukrs belnr gjahr xblnr
FROM bkpf
INTO CORRESPONDING FIELDS OF TABLE lt_bkpf
FOR ALL ENTRIES IN lt_bseg
WHERE bukrs = lt_bseg-bukrs
AND belnr = lt_bseg-belnr
AND gjahr = lt_bseg-gjahr
AND xblnr = bkpf-xblnr
AND stblg EQ space.
* Delete current document to manage change on current document
DELETE lt_bkpf WHERE bukrs = bkpf-bukrs
AND belnr = bkpf-belnr
AND gjahr = bkpf-gjahr.
IF NOT lt_bkpf[] IS INITIAL.
b_result = b_false.
ENDIF.
ENDFORM.
Mensaje.
Texto, crea un nuevo mensaje pulsando el lápiz con este texto.
Duplicate check: Duplicate check: A doc already exist in &1-&2 with ref &3 for VAT &4
incluye en las variales los campos
1 BKPF-BUKRS
2 BKPF-GJAHR
3 BKPF-LIFNR
4 BKPF-XBLNR
No olvides que hay otra entrada en el blog para indicar como se incluyen las validaciones en una orden de transporte.
Espero haberte ayudado!
No hay comentarios:
Publicar un comentario