AAAAA

Lo MeJoR De Lo MeJoR TiPs.
Este blog esta Pensado para aportar tips y ejemplos de Programas SAP - ABAP.

martes, 6 de marzo de 2018

5. Fecha liberación Orden de compra (SAP) (Pedido de compra)

Muchas veces se requiere obtener la fecha de liberación de una Orden de compra (pedido de compra),
ME21N, funciona para bienes y servicios.

En caso se haya modificado más de 1 vez la liberación final también funciona.

Para ello NO se tiene un campo especifico, de forma estándar. así que para obtener la fecha de la liberación final se obtendrá del Log de modificación de la Orden de compra.

Tablas a utilizar.
EKKO    = Cabecera del documento de compras
CDHDR = Cabecera del documento de modificación
CDPOS  = Posiciones en el documento de modificación

Este código Abap esta con HANA, pero fácilmente puede ser cambiado a forma ABAP sin Hana.

1. Para este caso tenemos una orden de compra que requiere 3 aprobaciones. 
el campo "Ind.liberación" será de gran importancia.


2. Visualizar Log de modificación de cabecera.


El valor a obtener es el marcado.



3. Código ABAP

REPORT ycrprueba2.

"Camp de la tabla EKKO
"FRGKE SI esta vacío  "No tiene estrategia de liberación"
"FRGKE Si igual a 'X' "No esta liberado".
"FRGKE si igual a '1' "Liberado completamente".

"Revisamos si esta liberado, para luego buscar su fecha de liberación final.
SELECT SINGLE ebelnfrgke
  INTO @DATA(lw_ekko)
  FROM ekko
 WHERE ebeln '4500308595'  "Ingresar su Orden de compra
   AND frgke '1'.           "Valor que vemos en Orden compra "Ind.liberación"

IF sy-subrc 0.      "Pedido esta liberado

"Obtener detalle de los cambios para el campo de liberación
  SELECT *
    INTO TABLE @DATA(lt_cdpos)
    FROM cdpos
   WHERE objectclas 'EINKBELEG'
     AND tabname    'EKKO'
     AND fname      'FRGKE'
     AND objectid   @lw_ekko-ebeln.

  IF lt_cdpos[] IS NOT INITIAL.
    SORT lt_cdpos[] BY changenr DESCENDING.

" Nos quedamos con la actualización final.
    DELETE ADJACENT DUPLICATES FROM lt_cdpos COMPARING objectid.
    READ TABLE lt_cdpos INDEX INTO DATA(lw_cdpos).

" Obtener el cambio a nivel de cabecera para obtener fecha requerida.
    SELECT SINGLE *
      INTO @DATA(lw_cdhdr)
      FROM cdhdr
     WHERE objectclas 'EINKBELEG'
       AND change_ind 'U'
       AND objectid @lw_cdpos-objectid
       AND changenr @lw_cdpos-changenr.

    WRITE'Usuario de liberación:'.
    WRITE/ lw_cdhdr-username.
    WRITE'Fecha de liberación:'.
    WRITE/ lw_cdhdr-udate.
    WRITE'Hora de liberación:'.
    WRITE/ lw_cdhdr-utime.

  ENDIF.

ENDIF.


Fotos de las tablas

Si les fue útil, comentan.


3 comentarios: