Difference between revisions of "SAP ABAP DICTIONARY"
From SapWiki
(→Tablas) |
|||
(8 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
==Tablas== | ==Tablas== | ||
===Eventos en SE11-->Utilidades-->Generador actualiz.tab.=== | ===Eventos en SE11-->Utilidades-->Generador actualiz.tab.=== | ||
− | + | Ver tabla TVIMF | |
+ | ==== Ejemplo Evento 01 - Antes de grabar los datos en la base de datos==== | ||
<nowiki> | <nowiki> | ||
FORM check_resolucion_ini. | FORM check_resolucion_ini. | ||
− | TYPES: BEGIN OF ty_data, | + | TYPES: BEGIN OF ty_data, "campos de Mi tabla |
perca TYPE zseg_ds67_1000-perca, | perca TYPE zseg_ds67_1000-perca, | ||
nresini TYPE zseg_ds67_1000-nresini, | nresini TYPE zseg_ds67_1000-nresini, | ||
Line 74: | Line 75: | ||
</nowiki> | </nowiki> | ||
− | + | ==== Ejemplo evento 05 - Al crear una entrada nueva==== | |
− | < | + | <nowiki> |
FORM check_resolucion_ini_new. | FORM check_resolucion_ini_new. | ||
TYPES: BEGIN OF ty_total. | TYPES: BEGIN OF ty_total. | ||
− | INCLUDE STRUCTURE zseg_ds67_1000. | + | INCLUDE STRUCTURE zseg_ds67_1000. "Mi tabla |
INCLUDE STRUCTURE vimtbflags. | INCLUDE STRUCTURE vimtbflags. | ||
TYPES: END OF ty_total. | TYPES: END OF ty_total. | ||
Line 127: | Line 128: | ||
ENDFORM. | ENDFORM. | ||
</nowiki> | </nowiki> | ||
+ | |||
+ | <nowiki> | ||
+ | FORM check_new_entry. | ||
+ | |||
+ | TYPES: BEGIN OF ty_total_c_oc_prcdef. | ||
+ | INCLUDE STRUCTURE z_my_table. | ||
+ | INCLUDE STRUCTURE vimtbflags. | ||
+ | TYPES: END OF ty_total_c_oc_prcdef. | ||
+ | |||
+ | DATA l_f TYPE abap_bool. | ||
+ | |||
+ | FIELD-SYMBOLS: <ls_data> TYPE z_my_table, | ||
+ | <ls_total> TYPE ty_total_c_oc_prcdef. | ||
+ | |||
+ | ASSIGN <table1> TO <ls_data>. | ||
+ | IF sy-subrc IS INITIAL AND <ls_data> IS ASSIGNED. | ||
+ | LOOP AT total ASSIGNING <ls_total> CASTING. | ||
+ | * verificar si registro ya fue borrado | ||
+ | IF <ls_total>-vim_action = geloescht | ||
+ | AND <ls_total>-usernw = <ls_data>-usernw | ||
+ | AND <ls_total>-rut = <ls_data>-rut. | ||
+ | l_f = abap_true. | ||
+ | EXIT. | ||
+ | ENDIF. | ||
+ | ENDLOOP. | ||
+ | |||
+ | IF l_f = abap_false. | ||
+ | SELECT COUNT(*) FROM z_my_table | ||
+ | WHERE usernw = <ls_data>-usernw | ||
+ | AND rut = <ls_data>-rut. | ||
+ | IF sy-subrc = 0. | ||
+ | MESSAGE e000(0k) WITH 'Entrada ya existe'. | ||
+ | ENDIF. | ||
+ | ENDIF. | ||
+ | |||
+ | LOOP AT total ASSIGNING <ls_total> CASTING. | ||
+ | IF <ls_total>-vim_action NE geloescht. | ||
+ | IF <ls_total>-usernw = <ls_data>-usernw | ||
+ | AND <ls_total>-rut = <ls_data>-rut. | ||
+ | MESSAGE e000(0k) WITH 'Entrada ya existe'. | ||
+ | ENDIF. | ||
+ | ENDIF. | ||
+ | ENDLOOP. | ||
+ | |||
+ | ENDIF. | ||
+ | |||
+ | ENDFORM.</nowiki> | ||
+ | |||
+ | ====ejemplo evento AA - en lugar de la rutina estándar para cargar datos==== | ||
+ | <nowiki> | ||
+ | FORM read_z_my_table. | ||
+ | |||
+ | DATA lt_z_my_table TYPE TABLE OF z_my_table. | ||
+ | DATA ra_user TYPE TABLE OF zbptaxnum_rango. | ||
+ | |||
+ | REFRESH total. | ||
+ | |||
+ | IMPORT ra_user FROM MEMORY ID 'Z_MY_TABLE'. | ||
+ | |||
+ | SELECT * INTO TABLE lt_z_my_table FROM z_my_table WHERE usernw IN ra_user. | ||
+ | IF sy-subrc = 0 AND lt_z_my_table[] IS NOT INITIAL. | ||
+ | LOOP AT lt_z_my_table INTO DATA(wa). | ||
+ | * append missing entry | ||
+ | <vim_total_struc> = wa. | ||
+ | APPEND total. | ||
+ | ENDLOOP. | ||
+ | * ensure correct sorting | ||
+ | SORT total BY <vim_xtotal_key>. | ||
+ | ENDIF. | ||
+ | ENDFORM. </nowiki> | ||
+ | |||
+ | programa para actualizar tabla | ||
+ | <nowiki> | ||
+ | DATA wa TYPE z_my_table. | ||
+ | |||
+ | *--------------------------------------------------------------------* | ||
+ | SELECT-OPTIONS: ra_user FOR wa-usernw. | ||
+ | *--------------------------------------------------------------------* | ||
+ | |||
+ | *--------------------------------------------------------------------* | ||
+ | START-OF-SELECTION. | ||
+ | *--------------------------------------------------------------------* | ||
+ | * ver eventos en mantenedor de tabla z_my_table (trn SE11) | ||
+ | EXPORT ra_user TO MEMORY ID 'Z_MY_TABLE'. | ||
+ | |||
+ | CALL FUNCTION 'VIEW_MAINTENANCE_CALL' | ||
+ | EXPORTING | ||
+ | action = 'U' | ||
+ | view_name = 'Z_MY_TABLE' | ||
+ | no_warning_for_clientindep = 'X' | ||
+ | EXCEPTIONS | ||
+ | OTHERS = 15. | ||
+ | |||
+ | IF sy-subrc <> 0. | ||
+ | MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno | ||
+ | WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. | ||
+ | |||
+ | ENDIF.</nowiki> | ||
+ | |||
+ | ===Bloquear Tablas=== | ||
+ | <nowiki> | ||
+ | data l_VARKEY TYPE RSTABLE-VARKEY. | ||
+ | |||
+ | l_varkey = sy-mandt. | ||
+ | |||
+ | CALL FUNCTION 'ENQUEUE_E_TABLEE' | ||
+ | EXPORTING | ||
+ | * MODE_RSTABLE = 'E' | ||
+ | TABNAME = 'T7RUSCHOOL' | ||
+ | VARKEY = l_varkey | ||
+ | * X_TABNAME = ' ' | ||
+ | * X_VARKEY = ' ' | ||
+ | * _SCOPE = '2' | ||
+ | * _WAIT = ' ' | ||
+ | * _COLLECT = ' ' | ||
+ | EXCEPTIONS | ||
+ | FOREIGN_LOCK = 1 | ||
+ | SYSTEM_FAILURE = 2 | ||
+ | OTHERS = 3 | ||
+ | . | ||
+ | IF sy-subrc <> 0. | ||
+ | * Implement suitable error handling here | ||
+ | ENDIF. | ||
+ | |||
+ | CALL FUNCTION 'DEQUEUE_E_TABLE' | ||
+ | EXPORTING | ||
+ | * MODE_RSTABLE = 'E' | ||
+ | TABNAME = 'T7RUSCHOOL' | ||
+ | VARKEY = l_varkey | ||
+ | * X_TABNAME = ' ' | ||
+ | * X_VARKEY = ' ' | ||
+ | * _SCOPE = '3' | ||
+ | * _SYNCHRON = ' ' | ||
+ | * _COLLECT = ' ' | ||
+ | . | ||
+ | </nowiki> | ||
+ | |||
+ | ===Log de Modificaciones=== | ||
+ | Trn. SCU3 - Reporte RSTBHIST : Evaluación de objetos Customizing y tablas grabados en log |
Latest revision as of 21:01, 18 October 2024
Contents
Tablas
Eventos en SE11-->Utilidades-->Generador actualiz.tab.
Ver tabla TVIMF
Ejemplo Evento 01 - Antes de grabar los datos en la base de datos
FORM check_resolucion_ini. TYPES: BEGIN OF ty_data, "campos de Mi tabla perca TYPE zseg_ds67_1000-perca, nresini TYPE zseg_ds67_1000-nresini, nresfin TYPE zseg_ds67_1000-nresfin, END OF ty_data. DATA lt_data TYPE TABLE OF ty_data. DATA lt_data2 TYPE TABLE OF ty_data. DATA ls_data LIKE LINE OF lt_data. DATA ls_data2 LIKE LINE OF lt_data. DATA: fieldname1 TYPE fieldname VALUE 'PERCA'. DATA: fieldname2 TYPE fieldname VALUE 'NRESINI'. DATA: fieldname3 TYPE fieldname VALUE 'NRESFIN'. FIELD-SYMBOLS: <fs1> TYPE any. FIELD-SYMBOLS: <fs2> TYPE any. FIELD-SYMBOLS: <fs3> TYPE any. LOOP AT total. ASSIGN COMPONENT fieldname1 OF STRUCTURE <vim_total_struc> TO <fs1>. ASSIGN COMPONENT fieldname2 OF STRUCTURE <vim_total_struc> TO <fs2>. ASSIGN COMPONENT fieldname3 OF STRUCTURE <vim_total_struc> TO <fs3>. ls_data-perca = <fs1>. ls_data-nresini = <fs2>. ls_data-nresfin = <fs3>. APPEND ls_data TO lt_data. ENDLOOP. SORT lt_data BY perca. DATA: l_string TYPE string, l_string2 TYPE string. * verificar Nr.Res.Fin >= Nr.Res.Ini LOOP AT lt_data INTO ls_data. IF ls_data-nresfin < ls_data-nresini and ls_data-nresfin is NOT INITIAL. l_string = |Para Período { ls_data-perca } Nr.Res.Fin { ls_data-nresfin } menor a|. MESSAGE e000(0k) WITH l_string 'Nr.Res.Ini' ls_data-nresini. vim_abort_saving = 'X'. ENDIF. ENDLOOP. CLEAR sy-subrc. lt_data2[] = lt_data[]. SORT lt_data2 BY perca DESCENDING. SORT lt_data BY perca ASCENDING. * verificar Nr.Res.Ini > Nr.Res.Fin de períodos anteriores LOOP AT lt_data INTO ls_data. LOOP AT lt_data2 INTO ls_data2 WHERE perca < ls_data-perca. if ls_data2-nresfin is INITIAL. ls_data2-nresfin = ls_data2-nresini. endif. IF ls_data-nresini <= ls_data2-nresfin. l_string = |Para Período { ls_data-perca } Nr.Res.Ini { ls_data-nresini } menor/igual a|. l_string2 = |Nr.Res.Fin { ls_data2-nresfin } de Período { ls_data2-perca }|. MESSAGE e000(0k) WITH l_string l_string2. ENDIF. ENDLOOP. ENDLOOP. ENDFORM.
Ejemplo evento 05 - Al crear una entrada nueva
FORM check_resolucion_ini_new. TYPES: BEGIN OF ty_total. INCLUDE STRUCTURE zseg_ds67_1000. "Mi tabla INCLUDE STRUCTURE vimtbflags. TYPES: END OF ty_total. TYPES: BEGIN OF ty_data, perca TYPE zseg_ds67_1000-perca, nresini TYPE zseg_ds67_1000-nresini, nresfin TYPE zseg_ds67_1000-nresfin, END OF ty_data. DATA lt_data TYPE TABLE OF ty_data. DATA ls_data LIKE LINE OF lt_data. DATA: l_string TYPE string. DATA: l_string2 TYPE string. FIELD-SYMBOLS: <ls_data> TYPE zseg_ds67_1000, <ls_total> TYPE ty_total. ASSIGN <table1> TO <ls_data>. IF <ls_data>-nresfin < <ls_data>-nresini and <ls_data>-nresfin is NOT INITIAL. l_string = |Para Período { <ls_data>-perca } Nr.Res.Fin { <ls_data>-nresfin } menor a|. MESSAGE e000(0k) WITH l_string 'Nr.Res.Ini' <ls_data>-nresini. ENDIF. LOOP AT total ASSIGNING <ls_total> CASTING. MOVE-CORRESPONDING <ls_total> TO ls_data. APPEND ls_data TO lt_data. ENDLOOP. SORT lt_data BY perca DESCENDING. data l_res type ZSEG_DS67_1000-nresfin. LOOP AT lt_data INTO ls_data WHERE perca < <ls_data>-perca. if ls_data-nresfin is INITIAL. ls_data-nresfin = ls_data-nresini. endif. IF <ls_data>-nresini <= ls_data-nresfin. l_string = |Para Período { <ls_data>-perca } Nr.Res.Ini { <ls_data>-nresini } menor/igual a|. l_string2 = |Nr.Res.Fin { ls_data-nresfin } de Período { ls_data-perca }|. MESSAGE e000(0k) WITH l_string l_string2. ENDIF. ENDLOOP. ENDFORM.
FORM check_new_entry. TYPES: BEGIN OF ty_total_c_oc_prcdef. INCLUDE STRUCTURE z_my_table. INCLUDE STRUCTURE vimtbflags. TYPES: END OF ty_total_c_oc_prcdef. DATA l_f TYPE abap_bool. FIELD-SYMBOLS: <ls_data> TYPE z_my_table, <ls_total> TYPE ty_total_c_oc_prcdef. ASSIGN <table1> TO <ls_data>. IF sy-subrc IS INITIAL AND <ls_data> IS ASSIGNED. LOOP AT total ASSIGNING <ls_total> CASTING. * verificar si registro ya fue borrado IF <ls_total>-vim_action = geloescht AND <ls_total>-usernw = <ls_data>-usernw AND <ls_total>-rut = <ls_data>-rut. l_f = abap_true. EXIT. ENDIF. ENDLOOP. IF l_f = abap_false. SELECT COUNT(*) FROM z_my_table WHERE usernw = <ls_data>-usernw AND rut = <ls_data>-rut. IF sy-subrc = 0. MESSAGE e000(0k) WITH 'Entrada ya existe'. ENDIF. ENDIF. LOOP AT total ASSIGNING <ls_total> CASTING. IF <ls_total>-vim_action NE geloescht. IF <ls_total>-usernw = <ls_data>-usernw AND <ls_total>-rut = <ls_data>-rut. MESSAGE e000(0k) WITH 'Entrada ya existe'. ENDIF. ENDIF. ENDLOOP. ENDIF. ENDFORM.
ejemplo evento AA - en lugar de la rutina estándar para cargar datos
FORM read_z_my_table. DATA lt_z_my_table TYPE TABLE OF z_my_table. DATA ra_user TYPE TABLE OF zbptaxnum_rango. REFRESH total. IMPORT ra_user FROM MEMORY ID 'Z_MY_TABLE'. SELECT * INTO TABLE lt_z_my_table FROM z_my_table WHERE usernw IN ra_user. IF sy-subrc = 0 AND lt_z_my_table[] IS NOT INITIAL. LOOP AT lt_z_my_table INTO DATA(wa). * append missing entry <vim_total_struc> = wa. APPEND total. ENDLOOP. * ensure correct sorting SORT total BY <vim_xtotal_key>. ENDIF. ENDFORM.
programa para actualizar tabla
DATA wa TYPE z_my_table. *--------------------------------------------------------------------* SELECT-OPTIONS: ra_user FOR wa-usernw. *--------------------------------------------------------------------* *--------------------------------------------------------------------* START-OF-SELECTION. *--------------------------------------------------------------------* * ver eventos en mantenedor de tabla z_my_table (trn SE11) EXPORT ra_user TO MEMORY ID 'Z_MY_TABLE'. CALL FUNCTION 'VIEW_MAINTENANCE_CALL' EXPORTING action = 'U' view_name = 'Z_MY_TABLE' no_warning_for_clientindep = 'X' EXCEPTIONS OTHERS = 15. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF.
Bloquear Tablas
data l_VARKEY TYPE RSTABLE-VARKEY. l_varkey = sy-mandt. CALL FUNCTION 'ENQUEUE_E_TABLEE' EXPORTING * MODE_RSTABLE = 'E' TABNAME = 'T7RUSCHOOL' VARKEY = l_varkey * X_TABNAME = ' ' * X_VARKEY = ' ' * _SCOPE = '2' * _WAIT = ' ' * _COLLECT = ' ' EXCEPTIONS FOREIGN_LOCK = 1 SYSTEM_FAILURE = 2 OTHERS = 3 . IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. CALL FUNCTION 'DEQUEUE_E_TABLE' EXPORTING * MODE_RSTABLE = 'E' TABNAME = 'T7RUSCHOOL' VARKEY = l_varkey * X_TABNAME = ' ' * X_VARKEY = ' ' * _SCOPE = '3' * _SYNCHRON = ' ' * _COLLECT = ' ' .
Log de Modificaciones
Trn. SCU3 - Reporte RSTBHIST : Evaluación de objetos Customizing y tablas grabados en log