Inicio > ABAP/4 > Solicitud de Pedido – Obtener liberador y fecha de liberación

Solicitud de Pedido – Obtener liberador y fecha de liberación

Caso: Se desea obtener el usuario que liberó una solicitud de pedido de compras, junto a la fecha de realizada la liberación.

Solución: Se obtiene la info de las tablas de documentos de modificación (CDHDR y CDPOS), se debe tener en cuenta que podrían haber más de una liberación de la solicitud en este log, ya que puede un usuario liberar, otro desliberar (cancelar la liberación anterior) y luego liberar nuevamente, pero lo dejo como ejemplo para ver el tema.

Asimismo puede hacerse para otros documentos de modificación, puede verse el listado en la transacción SCDO. Para nuestro ejemplo utilizaremos BANF.

FORM obtener_liberador USING    p_banfn  TYPE banfn
					   p_bnfpo  TYPE bnfpo  
					   p_afnam  TYPE afnam  
 
                       CHANGING p_username TYPE cdhdr-username
					   p_udate    TYPE cdhdr-udate.
 
  DATA: lv_tabix       TYPE sy-tabix,
        lv_tabkey      TYPE cdpos-tabkey,
        lt_cdhdr       TYPE TABLE OF cdhdr,
        wa_cdhdr       TYPE cdhdr,
        lt_cdpos       TYPE TABLE OF cdpos,
        wa_cdpos       TYPE cdpos.
 
      REFRESH: lt_cdhdr[],
               lt_cdpos[].
 
      TRANSLATE p_afnam TO UPPER CASE.
 
      SELECT *
        INTO TABLE lt_cdhdr
        FROM cdhdr
        WHERE objectclas  = 'BANF'
          AND objectid    = lw_solpe-banfn
          AND langu       = sy-langu.
 
      IF lt_cdhdr IS NOT INITIAL.
        SELECT *
          INTO TABLE lt_cdpos
          FROM cdpos
          FOR ALL ENTRIES IN lt_cdhdr
          WHERE objectclas      = lt_cdhdr-objectclas
            AND objectid        = lt_cdhdr-objectid
            AND changenr        = lt_cdhdr-changenr
            AND chngind         = lt_cdhdr-change_ind
            AND tabname         = 'EBAN'
            AND fname           = 'FRGKZ'
            AND value_new       = '2'.
 
        IF sy-subrc EQ 0.
          CONCATENATE sy-mandt 
			    p_banfn
                      p_bnfpo
                      INTO lv_tabkey.
 
          READ TABLE lt_cdpos INTO wa_cdpos WITH KEY tabkey = lv_tabkey.
          IF sy-subrc EQ 0.
            READ TABLE lt_cdhdr INTO wa_cdhdr WITH KEY objectclas = wa_cdpos-objectclas
                                                       objectid   = wa_cdpos-objectid
                                                       changenr   = wa_cdpos-changenr.
            IF sy-subrc EQ 0.
              p_username  = wa_cdhdr-username.
              p_udate     = wa_cdhdr-udate.
            ENDIF.
          ENDIF.
        ENDIF.
 
      ENDIF.
 
    ENDLOOP.
 
  ENDIF.
 
ENDFORM.                    "obtener_liberador

 

Nota: el SELECT a la CDPOS debe evaluarse con respecto al campo “value_new” ya que el código de liberacón puede ser distinto según como esté configurada la estrategia de liberación. En mi caso estaba el 2 como “Liberado”. Verificarlo buscando en la tabla CDPOS con un ejemplo de Solicitud de Pedido ya liberada.

También pueden usar las funciones que aparecen en:
http://help.sap.com/saphelp_nw04/helpdata/EN/2a/fa01dd493111d182b70000e829fbfe/content.htm

O ver el código del programa estándar CHANGEDOCU_READ

Categorías:ABAP/4 Etiquetas: , , , , , , , , ,
  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: