Você está na página 1de 6

Log de Modificações - CDHDR e CDPOS

* Eae Pessoal, trabalhamos de corpo e alma num projeto quando estamos


* no
começo, mas ABAP Junior é como um Estagiário no mundo SAP, portanto
* sempre haverá uns caras que vão falar que você fez merda, como apaga
r
* dados da 'MARA' ou usou alguma transação de forma errada onde acabou
* Modificando alguns dados mestres, mas pra vocês não ficarem a merce
* desses Bullings estou postando esse programa que mostra todas as
* modificações conforme o user, agora na próxima vez você executa esse
* programinha e isso retorna o log de modificações provando sua
inocência.

* O problema é que só será gravado os logs das tabelas que tiverem


* um 'flag' para registrar isso, para verificar se a tabela cria log d
e
* modificações é só entrar nele clicar no Botão 'Configurações técnica
s'
* e olhar na ultima linha da tela que vão ver o Flag lá.

*&--------------------------------------------------------------------
-*
REPORT cdhdr_cdpos.

TYPE-POOLS :
slis.
TYPES:
BEGIN OF ty_out,
objectclas TYPE cdhdr-objectclas,
objectid TYPE cdhdr-objectid,
changenr TYPE cdhdr-changenr,
username TYPE cdhdr-username,
udate TYPE cdhdr-udate,
utime TYPE cdhdr-utime,
tcode TYPE cdhdr-tcode,
tabname TYPE cdpos-tabname,
tabkey TYPE cdpos-tabkey,
fname TYPE cdpos-fname,
chngind TYPE cdpos-chngind,
text_case TYPE cdpos-text_case,
unit_old TYPE cdpos-unit_old,
unit_new TYPE cdpos-unit_new,
cuky_old TYPE cdpos-cuky_old,
cuky_new TYPE cdpos-cuky_new,
value_new TYPE cdpos-value_new,
value_old TYPE cdpos-value_old,
END OF ty_out
.

DATA :
it_cdhdr TYPE TABLE OF cdhdr,
st_cdhdr TYPE cdhdr,
it_cdpos TYPE TABLE OF cdpos,
st_cdpos TYPE cdpos,
it_out TYPE TABLE OF ty_out,
st_out TYPE ty_out,
st_layout TYPE slis_layout_alv,
it_fcat TYPE TABLE OF slis_fieldcat_alv,
st_fcat TYPE slis_fieldcat_alv.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.


SELECT-OPTIONS :
s_user FOR sy-uname.
SELECTION-SCREEN END OF BLOCK b1.

START-OF-SELECTION.

PERFORM : z_selects,
z_trata_dados,
z_alv.

*&--------------------------------------------------------------------
-*
*& Form Z_SELECTS
*&--------------------------------------------------------------------
-*
FORM z_selects .

SELECT *
FROM cdhdr
INTO TABLE it_cdhdr
WHERE username IN s_user.

IF sy-subrc IS INITIAL.
SELECT *
FROM cdpos
INTO TABLE it_cdpos
FOR ALL ENTRIES IN it_cdhdr
WHERE objectclas = it_cdhdr-objectclas
AND objectid = it_cdhdr-objectid
AND changenr = it_cdhdr-changenr
.
ENDIF.

ENDFORM. " Z_SELECTS

*&--------------------------------------------------------------------
-*
*& Form Z_ALV
*&--------------------------------------------------------------------
-*
FORM z_alv .

PERFORM z_fieldcat USING :


'OBJECTCLAS' 'CDHDR' 'Classe de objetos' ' ' ' '
1 ,
'OBJECTID' 'CDHDR' 'Valor do objeto' ' ' ' '
2 ,
'CHANGENR' 'CDHDR' 'Nº modificação do documento' ' ' ' '
3 ,
'USERNAME' 'CDHDR' 'Nome usuário' ' ' ' '
4 ,
'UDATE' 'CDHDR' 'Data da modificação' ' ' ' '
5 ,
'UTIME' 'CDHDR' 'Hora da modificação' ' ' ' '
6 ,
'TCODE' 'CDHDR' 'Transação' ' ' ' '
7 ,
'TABNAME' 'CDPOS' 'Nome da tabela' ' ' ' '
8 ,
'TABKEY' 'CDPOS' 'Chave da linha de tabela modificada' ' ' ' '
9 ,
'FNAME' 'CDPOS' 'Nome do campo' ' ' ' '
10 ,
'CHNGIND' 'CDPOS' 'Tipo da modificação (U, I, E, D)' ' ' ' '
11 ,
'TEXT_CASE' 'CDPOS' 'Código: X = modificação de texto' ' ' ' '
12 ,
'UNIT_OLD' 'CDPOS' 'Unidade antiga' ' ' ' '
13 ,
'UNIT_NEW' 'CDPOS' 'Unidade Nova' ' ' ' '
14 ,
'CUKY_OLD' 'CDPOS' 'Moeda Antiga' ' ' ' '
15 ,
'CUKY_NEW' 'CDPOS' 'Moeda Nova' ' ' ' '
16 ,
'VALUE_NEW' 'CDPOS' 'Valor Novo' ' ' ' '
17 ,
'VALUE_OLD' 'CDPOS' 'valor Antigo' ' ' ' '
18
.

st_layout-zebra = 'X'.
st_layout-colwidth_optimize = 'X'.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'


EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
i_callback_program = sy-repid
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* i_structure_name = 'CDPOS'
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
is_layout = st_layout
it_fieldcat = it_fcat
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
* I_SAVE = ' '
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* I_HTML_HEIGHT_TOP =
* I_HTML_HEIGHT_END =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = it_out
EXCEPTIONS
program_error = 1
OTHERS = 2
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

ENDFORM. " Z_ALV

*&--------------------------------------------------------------------
-*
*& Form Z_TRATA_DADOS
*&--------------------------------------------------------------------
-*
FORM z_trata_dados .

LOOP AT it_cdpos INTO st_cdpos.


st_out-objectclas = st_cdpos-objectclas.
st_out-objectid = st_cdpos-objectid.
st_out-changenr = st_cdpos-changenr.
st_out-tabname = st_cdpos-tabname.
st_out-tabkey = st_cdpos-tabkey.
st_out-fname = st_cdpos-fname.
st_out-chngind = st_cdpos-chngind.
st_out-text_case = st_cdpos-text_case.
st_out-unit_old = st_cdpos-unit_old.
st_out-unit_new = st_cdpos-unit_new.
st_out-cuky_old = st_cdpos-cuky_old.
st_out-cuky_new = st_cdpos-cuky_new.
st_out-value_new = st_cdpos-value_new.
st_out-value_old = st_cdpos-value_old.

READ TABLE it_cdhdr INTO st_cdhdr


WITH KEY objectclas = st_cdpos-objectclas
objectid = st_cdpos-objectid
changenr = st_cdpos-changenr.

IF sy-subrc IS INITIAL.
st_out-username = st_cdhdr-username.
st_out-udate = st_cdhdr-udate.
st_out-utime = st_cdhdr-utime.
st_out-tcode = st_cdhdr-tcode.
APPEND st_out TO it_out.
ENDIF.

CLEAR st_out.
ENDLOOP.

BREAK-POINT.

ENDFORM. " Z_TRATA_DADOS

*&--------------------------------------------------------------------
-*
*& Form Z_FIELDCAT
*&--------------------------------------------------------------------
-*
FORM z_fieldcat USING fieldname
TAB
seltext_m
checkbox
edit
col_pos .

st_fcat-fieldname = fieldname. " Nome do campo


st_fcat-tabname = tab.
st_fcat-seltext_m = seltext_m. " texto do campo
st_fcat-
checkbox = checkbox. " se o campo é do tipo CheckBox
st_fcat-edit = edit. " se o campo pode ser editavel
st_fcat-col_pos = col_pos. "Em que posição fica a coluna

APPEND st_fcat TO it_fcat.


CLEAR st_fcat.

ENDFORM. " Z_FIELDCAT


Postado por Mauro Luiz Junior às 05:40
Enviar por e-mailBlogThis!Compartilhar no TwitterCompartilhar no
FacebookCompartilhar com o Pinterest
Marcadores: ABAP, Dicionário de dados, Diquinha do Dia
3 comentários:
1.

Marcos E. Ricchetti9 de abril de 2015 04:26

Bom dia.
Seria interessante ter mais opcoes na tela de seleção.
Tabela, data de modificação e transação.

Também foi feito um report pela SAP que faz isso.


RSSCD200

Abraço.

Marcos.
Responder

2.

Mauro Luiz Junior13 de abril de 2015 06:41


Mais opções seria melhor sim, mas dá pra brincar, mas pelo que vi
o programa RSSCD200 resolve a maioria desses problemas rsrs, Valeo
Pela Informação Marcos
Responder

3.

Unknown9 de novembro de 2018 06:42

Olá Mauro, estou começando neste mundo ABAP agora e seu blog esta
me ajudando muito.
Responder