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
Muy buen aporte, lástima que solo soy un usuario SAP y no tengo permisos para cambiar el código SAP :,(
Cualquier cosa puedes contactarme ya que brindamos servicios de consultoría funcional y técnica para poder asesorarte y resolver tu caso. Un saludo!