Todos somos junior, por más experiencia que tengas, siempre habrá retos.

Buscar este blog

11 feb 2021

Validar referencia duplicada en algunas facturas de proveedor.

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