FORM data_list.
CALL SCREEN '0100'.
ENDFORM.
FORM eve_start_of_selection_o..
ENDFORM.
FORM eve_initialization.
s_fecha = 'IBT'.
data(l_num) = sy-datum mod 7.
if l_num = 7.
clear l_num.
else.
l_num -= 2.
endif.
s_fecha-low = sy-datum - l_num.
s_fecha-high = s_fecha-low + 6.
append s_fecha.
ENDFORM.
FORM f4_dir CHANGING p_dir.
ENDFORM.
FORM data_load.
refresh t_tab_01.
SELECT * FROM zxx_horas INTO CORRESPONDING FIELDS OF table t_tab_01
WHERE fecha in s_FECHA
AND uname in s_UNAME
AND proyecto in s_PROYE
AND modulo in s_MODUL
AND descr in s_DESCR..
sort t_tab_01 by fecha uname INDICE.
SELECT domvalue_l as valor,
ddtext as txt
FROM dd07t
into table @data(T_keys)
WHERE ( domname = 'ZXX_D_PROYECTO' or
domname = 'ZXX_D_STATUS' or
domname = 'ZXX_D_MODULO' )
AND ddlanguage = @sy-langu.
SELECT f~BNAME, F~bname && ' ' && P~name_first && ' ' && p~name_last as nombre
INTO table @data(T_lusers)
FROM usr21 AS F INNER JOIN adrp AS P ON F~PERSNUMBER = P~PERSNUMBER.
loop at t_tab_01 ASSIGNING FIELD-SYMBOL(<f>).
*--[ Esto se puede optimizar, luego, ahora tengo prisa
try.
<f>-uname_txt = t_lusers[ bname = <f>-uname ]-nombre.
catch cx_root. clear sy-subrc. endtry.
try.
<f>-asignado_txt = t_lusers[ bname = <f>-asignado ]-nombre.
catch cx_root. clear sy-subrc. endtry.
try.
<f>-modulo_txt = t_keys[ valor = <f>-modulo ]-txt.
catch cx_root. clear sy-subrc. endtry.
try.
<f>-proyecto_txt = t_keys[ valor = <f>-proyecto ]-txt.
catch cx_root. clear sy-subrc. endtry.
try.
<f>-status_txt = t_keys[ valor = <f>-status ]-txt.
catch cx_root. clear sy-subrc. endtry.
endloop.
t_tab_02[] = t_tab_01[]. "<-- BackUp
ENDFORM.
FORM pbo_0100.
IF sy-tcode = 'SE38'.
REFRESH t_fcode.
ELSE.
ENDIF.
SET PF-STATUS 'MAIN0100' EXCLUDING t_fcode.
SET TITLEBAR 'TIT01' WITH ''.
IF cc_01 IS INITIAL.
gs_layout-cwidth_opt = 'X'.
gs_layout-sel_mode = 'A'.
gs_layout-zebra = abap_true.
gs_variant-report = sy-repid.
CREATE OBJECT cc_01
EXPORTING
container_name = cm_01
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5.
CREATE OBJECT grid_01 EXPORTING i_parent = cc_01.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = 'ZXX_ST_HORAS'
i_buffer_active = abap_false
i_client_never_display = abap_true
i_bypassing_buffer = abap_true
CHANGING
ct_fieldcat = t_fcat_01[]
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
DATA: ls_fcat LIKE LINE OF t_fcat_01.
* CLEAR ls_fcat.
* ls_fcat-fieldname = 'FECHA'.
** ls_fcat-ref_table = 'SCARR'.
** ls_fcat-type = 'DAT'.
* ls_fcat-col_pos = lines( t_fcat_01 ) + 1.
** insert new line before CARRID (do not forget MANDT!).
** insert ls_fcat into p_fieldcat index 1.
* APPEND ls_fcat TO t_fcat_01.
data(t_fcat_02) = t_fcat_01.
refresh t_fcat_02.
loop at t_fcat_01 ASSIGNING FIELD-SYMBOL(<f>) where fieldname np '*_TXT'.
append <f> to t_fcat_02.
data(l_name) = <f>-fieldname && '_TXT'.
read table t_fcat_01 ASSIGNING FIELD-SYMBOL(<ff>) with key fieldname = l_name.
check sy-subrc eq 0.
append <ff> to t_fcat_02.
endloop.
t_fcat_01[] = t_fcat_02[].
LOOP AT t_fcat_01 ASSIGNING <f>.
<f>-col_pos = sy-tabix.
<f>-edit = abap_true.
CASE <f>-fieldname.
WHEN 'NAME'.
<f>-scrtext_s =
<f>-scrtext_m =
<f>-coltext = <f>-seltext =
<f>-scrtext_l = TEXT-c01.
<f>-outputlen = 100.
when 'INDICE'.
<f>-no_out = abap_true.
ENDCASE.
if <f>-fieldname cp '*TXT'.
<f>-scrtext_s =
<f>-scrtext_m =
<f>-coltext = <f>-seltext =
<f>-scrtext_l = TEXT-c02.
<f>-edit = abap_false.
endif.
ENDLOOP.
PERFORM alv_remove_buttons.
CALL METHOD grid_01->set_table_for_first_display
EXPORTING
* i_structure_name = 'ZAVL_CP_ALV_ALV_ADMIN'
* i_SAVE = 'A'
is_variant = gs_variant
is_layout = gs_layout
i_save = 'A'
it_toolbar_excluding = gt_toolbar
CHANGING
it_fieldcatalog = t_fcat_01 "gt_field
it_outtab = t_tab_01.
call method grid_01->register_edit_event exporting
i_event_id = cl_gui_alv_grid=>mc_evt_modified.
call method grid_01->register_edit_event exporting
i_event_id = cl_gui_alv_grid=>mc_evt_enter.
ENDIF.
ENDFORM.
FORM alv_remove_buttons.
CLEAR gt_toolbar.
* APPEND cl_gui_alv_grid=>mc_fg_edit TO gt_toolbar.
** append CL_GUI_ALV_GRID=>MC_FG_SORT to gt_toolbar.
* APPEND cl_gui_alv_grid=>mc_mb_subtot TO gt_toolbar.
* APPEND cl_gui_alv_grid=>mc_mb_sum TO gt_toolbar.
* APPEND cl_gui_alv_grid=>mc_mb_variant TO gt_toolbar.
* APPEND cl_gui_alv_grid=>mc_fc_detail TO gt_toolbar.
ENDFORM.
FORM pai_0100.
DATA(l_okcode) = g_okcode.
CLEAR g_okcode.
CASE l_okcode.
WHEN 'SAVE'. PERFORM boton_save.
WHEN 'BACK'. PERFORM boton_exit_program.
* WHEN 'SAVE'. PERFORM DaTA_save.
ENDCASE.
ENDFORM.
form boton_save.
grid_01->CHECK_CHANGED_DATA( ).
*--[ Buscamos los borrados
loop at t_tab_02 into data(l_02).
data(l_tabix) = sy-tabix.
try.
data(l_01) = t_tab_01[ FECHA = l_02-fecha
UNAME = l_02-uname
INDICE = l_02-indice ].
catch cx_root.
DELETE from zxx_horas
WHERE fecha = l_02-FECHA
AND uname = l_02-UNAME
AND indice = l_02-INDICE.
delete t_tab_02 index sy-tabix.
ENDTRY.
endloop.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Arreglamos índices
sort t_tab_01 by fecha uname INDICE DESCENDING.
loop at t_tab_01 ASSIGNING FIELD-SYMBOL(<f>) where INDICE is INITIAL.
loop at t_tab_01 into data(l_f) where fecha = <f>-fecha and
uname = <f>-uname and
not indice is INITIAL.
<f>-INDICE = l_f-indice + 1.
exit.
endloop.
if <f>-INDICE is INITIAL.
<f>-indice = 1.
endif.
endloop.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Quitamos tabla de textos, para grabar sólo lo que toca...
data: t_tmp type STANDARD TABLE OF ZXX_HORAS,
l_tmp like LINE OF t_tmp.
refresh t_tmp.
loop at t_tab_01 into l_tab_01.
clear l_tmp.
MOVE-CORRESPONDING l_tab_01 to l_tmp.
append l_tmp to t_tmp.
endloop.
modify ZXX_HORAS from TABLE t_tmp. "t_tab_01.
sort t_tab_01 by fecha uname INDICE.
t_tab_02[] = t_tab_01[]. "<-- BackUp
grid_01->REFRESH_TABLE_DISPLAY( ).
endform.
FORM boton_exit_program.
*--[ Destruir controladores y ALVs
* data:l_resp(1). perform confirmar_salida using l_resp. check l_resp eq abap_true.
cc_01->free( ).
FREE: cc_01.
CLEAR: cc_01, grid_01.
LEAVE TO SCREEN 0.
ENDFORM.