You are on page 1of 9

*&---------------------------------------------------------------------*

*& Include Z_ALV_EDITABLE_F01


*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form SELECCIONAR_DATOS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SELECCIONAR_DATOS .

DATA: ls_color TYPE lvc_s_scol, "Variable interna para el color de una celda
iv_cont TYPE I,
v_lines(3) type c.

*Seleccionar Datos
CLEAR: ti_zekpo, v_lines.
REFRESH ti_zekpo.

SELECT * UP TO 50 ROWS
FROM Zekpo
INTO CORRESPONDING FIELDS OF TABLE ti_zekpo.

******Pintar Filas***
*********************
*** LOOP AT ti_zekpo INTO wa_zekpo.
*** IF wa_zekpo-menge GE 20.
*** wa_zekpo-icono_estado = '@08@'. " Icono Verde
**** Asignamos un color a una fila
*** wa_zekpo-color = 'C510'. "Color de la Fila. "C100 = Azul, C300 = Amarillo,
C400 = Verde Claro, C500 = Verde Medio, C600 = Rojo Medio, C700 = Rojo Claro, C200
= Gris Claro C800 = Gris Medio
*** MODIFY ti_zekpo FROM wa_zekpo TRANSPORTING color icono_estado WHERE EBELN
EQ wa_zekpo-ebeln AND EBELP EQ wa_zekpo-ebelp.
*** ELSE.
*** wa_zekpo-icono_estado = '@0A@'. " Icono Rojo
*** CLEAR ls_color.
*** ls_color-fname = 'EBELN'.
*** ls_color-color-col = '1'. "Color de la celda ('6' = ROJO, '3' = AMARILLO,
'1' = AZUL, '2' = Gris, '5' = Verde, '7' Naranja)
*** ls_color-color-int = '1'. "('1' = INTENSO, '0' = OPACO)
*** ls_color-color-inv = '0'. "( 0 = Color Celda, 1 = Color Letras)
*** APPEND ls_color TO wa_zekpo-cellcolors.
*** MODIFY ti_zekpo FROM wa_zekpo TRANSPORTING cellcolors icono_estado WHERE
EBELN EQ wa_zekpo-ebeln AND EBELP EQ wa_zekpo-ebelp.
*** ENDIF.
*** ENDLOOP.
*********************

ENDFORM.
*&---------------------------------------------------------------------*
*& Form LAYOUT_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM LAYOUT_ALV .

*Configuramos el layout
CLEAR st_layout.
st_layout-grid_title = 'Reporte'. "Titulo Ventana Principal
st_layout-zebra = 'X'. "Emite patron de rayas
st_layout-cwidth_opt = 'X'. "Si es 'X' todas los anchos de las columnas
son optimizados.
st_layout-info_fname = 'COLOR'. "Pintar lineas
st_layout-ctab_fname = 'CELLCOLORS'. "Pintar Celda especifica
* st_layout-no_headers = 'X'. "Si es 'X' no muestra la columna de
cabecera.
* st_layout-no_toolbar = 'X'. "Si es 'X' esconde la barra de
herramientas.
* st_layout-totals_bef = 'X'. "Si es 'X' muestra los totales antes de la
primera l�nea.
st_layout-edit = 'X'. "Filas editables
st_layout-stylefname = 'CELLTAB'. "Celdas editables

ENDFORM.
*&---------------------------------------------------------------------*
*& Form ARMAR_CATALOGO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ARMAR_CATALOGO .

CLEAR: lt_fieldcat, ls_fieldcat.


REFRESH lt_fieldcat.

* Estructura del catalogo


clear ls_fieldcat.
ls_fieldcat-tabname = 'IT_EKPO'.
ls_fieldcat-fieldname = 'MATNR'.
* ls_fieldcat-do_sum = ' '.
* ls_fieldcat-checkbox = ' '.
ls_fieldcat-key = 'X'.
ls_fieldcat-scrtext_s = 'MATERIAL'.
ls_fieldcat-scrtext_m = 'MATERIAL'.
ls_fieldcat-scrtext_l = 'MATERIAL'.
* ls_fieldcat-decimals_out = ' '.
ls_fieldcat-datatype = ' '.
ls_fieldcat-outputlen = 25.
ls_fieldcat-just = 'C'.
* ls_fieldcat-emphasize = 'C300'.
* ls_fieldcat-col_pos = 1.
append ls_fieldcat to lt_fieldcat.

clear ls_fieldcat.
ls_fieldcat-tabname = 'IT_EKPO'. "Tabla usada
* ls_fieldcat-ref_tabname = 'EKPO'. "Tabla estandar para cabecera
automatica
ls_fieldcat-fieldname = 'EBELN'. "Campo de la tabla (Siempre
en May�sculas)
* ls_fieldcat-do_sum = ' '. "Sumar campo para subtotal
(Valor X)
* ls_fieldcat-key = 'X'. "Columna clave
ls_fieldcat-scrtext_s = 'DOC.COMPRAS'. "Descripci�n corta Cabecera
ls_fieldcat-scrtext_m = 'DOCUMENTOS COMPRAS'. "Descripci�n media Cabecera
ls_fieldcat-scrtext_l = 'DOCUMENTOS DE COMPRAS'. "Descripci�n larga Cabecera
ls_fieldcat-outputlen = 15. "Ancho de la columna
ls_fieldcat-just = 'C'. "Alineaci�n
* ls_fieldcat-emphasize = 'C700'. "Color de la Fila. "C100 =
Azul, C300 = Amarillo, C400 = Verde Claro, C500 = Verde Medio, C600 = Rojo Medio,
C700 = Rojo Claro, C200 = Gris Claro C800 = Gris Medio
* ls_fieldcat-col_pos = 1. "Posici�n de salida en la
tabla
append ls_fieldcat to lt_fieldcat.

clear ls_fieldcat.
ls_fieldcat-tabname = 'IT_EKPO'.
ls_fieldcat-fieldname = 'EBELP'.
* ls_fieldcat-do_sum = ' '.
* ls_fieldcat-key = ' '.
ls_fieldcat-scrtext_s = 'POSICI�N'.
ls_fieldcat-scrtext_m = 'POSICI�N'.
ls_fieldcat-scrtext_l = 'POSICI�N'.
ls_fieldcat-outputlen = 20.
* ls_fieldcat-just = 'L'.
* ls_fieldcat-emphasize = 'C300'.
* ls_fieldcat-col_pos = 1.
append ls_fieldcat to lt_fieldcat.

clear ls_fieldcat.
ls_fieldcat-tabname = 'IT_EKPO'.
ls_fieldcat-fieldname = 'KTMNG'.
* ls_fieldcat-do_sum = 'X'.
ls_fieldcat-scrtext_s = 'CTD. PREVISTA'.
ls_fieldcat-scrtext_m = 'CTD. PREVISTA'.
ls_fieldcat-scrtext_l = 'CTD. PREVISTA'.
ls_fieldcat-outputlen = 20.
* ls_fieldcat-just = 'R'.
* ls_fieldcat-emphasize = 'C300'.
* ls_fieldcat-col_pos = 1.
append ls_fieldcat to lt_fieldcat.

clear ls_fieldcat.
ls_fieldcat-tabname = 'IT_EKPO'.
ls_fieldcat-fieldname = 'MENGE'.
* ls_fieldcat-do_sum = 'X'.
ls_fieldcat-scrtext_s = 'PEDIDO'.
ls_fieldcat-scrtext_m = 'CANTIDAD PEDIDO'.
ls_fieldcat-scrtext_l = 'CANTIDAD PEDIDO'.
ls_fieldcat-outputlen = 20.
* ls_fieldcat-just = 'R'.
* ls_fieldcat-emphasize = 'C300'.
* ls_fieldcat-col_pos = 1.
append ls_fieldcat to lt_fieldcat.

* clear ls_fieldcat.
* ls_fieldcat-tabname = 'IT_EKPO'.
* ls_fieldcat-fieldname = 'ICONO_ESTADO'.
** ls_fieldcat-do_sum = 'X'.
* ls_fieldcat-scrtext_s = 'ESTADO'.
* ls_fieldcat-scrtext_m = 'ESTADO'.
* ls_fieldcat-scrtext_l = 'ESTADO'.
* ls_fieldcat-outputlen = 20.
** ls_fieldcat-just = 'R'.
** ls_fieldcat-emphasize = 'C300'.
** ls_fieldcat-col_pos = 1.
* append ls_fieldcat to lt_fieldcat.
*************************

ENDFORM.
*&---------------------------------------------------------------------*
*& Form CREATE_SORT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CREATE_SORT .
*Ordenar tabla de salida

wa_sort-fieldname = 'MATNR'. "Campo por el cual se agrupa la suma


wa_sort-spos = 1.
wa_sort-subtot = 'X'.
wa_sort-up = 'X'.
APPEND wa_sort to it_sort.

* wa_sort-fieldname = 'EBELN'. "Campo por el cual se agrupa la suma


* wa_sort-spos = 2.
* wa_sort-subtot = 'X'.
* wa_sort-up = 'X'.
* APPEND wa_sort to it_sort.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form CREATE_EXCLUDE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CREATE_EXCLUDE .

CLEAR lt_exclude.
REFRESH lt_exclude.

*Quitar botones Standard del ALV


* ls_exclude = cl_gui_alv_grid=>mc_fc_info.
* APPEND ls_exclude TO lt_exclude.
APPEND cl_gui_alv_grid=>mc_fc_info TO lt_exclude.
APPEND cl_gui_alv_grid=>mc_fc_graph TO lt_exclude.
APPEND cl_gui_alv_grid=>mc_fc_find TO lt_exclude.
APPEND cl_gui_alv_grid=>mc_fc_view_excel TO lt_exclude.
APPEND cl_gui_alv_grid=>mc_fc_print_prev TO lt_exclude.
APPEND cl_gui_alv_grid=>mc_fc_select_all TO lt_exclude.
APPEND cl_gui_alv_grid=>mc_fc_loc_copy_row TO lt_exclude.
APPEND cl_gui_alv_grid=>mc_fc_loc_delete_row TO lt_exclude.
APPEND cl_gui_alv_grid=>mc_fc_loc_insert_row TO lt_exclude.
APPEND cl_gui_alv_grid=>mc_fc_loc_move_row TO lt_exclude.
APPEND cl_gui_alv_grid=>mc_fc_loc_copy TO lt_exclude.
APPEND cl_gui_alv_grid=>mc_fc_loc_cut TO lt_exclude.
APPEND cl_gui_alv_grid=>mc_fc_loc_paste TO lt_exclude.
APPEND cl_gui_alv_grid=>mc_fc_loc_paste_new_row TO lt_exclude.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form EJECUTAR_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM EJECUTAR_ALV .

**Crear dynpro 0100 de 200x255 y ajustar el container al tama�o marcando en el


mismo resizing vertical e horizontal**
CALL SCREEN 0100. "Dympro 0100 (Definir los metodos PBO(MODULE STATUS_0100,
MODULE CREAR_OBJETOS_0100), PAI(MODULE USER_COMMAND_0100)
**Starting at 1 1. (Hacer ALV POPUP = CALL SCREEN 0100 starting at 1 1)

ENDFORM.
*&---------------------------------------------------------------------*
*& Form SWITCH_EDIT_MODE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SWITCH_EDIT_MODE .

*Hacer filas editables


IF o_grilla->is_ready_for_input( ) EQ 0.
CALL METHOD o_grilla->set_ready_for_input
EXPORTING
i_ready_for_input = 1. "Editable
ELSE.
CALL METHOD o_grilla->set_ready_for_input
EXPORTING
i_ready_for_input = 0. "Bloqueado
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form SAVE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SAVE_DATA .

data: l_valid type c.


* Check if any errors exist in protocol by using method
* CHECK_CHANGED_DATA of your ALV Grid instance.
* The method CHECK_CHANGED_DATA checks all new cells syntactically,
* raises event DATA_CHANGED and looks then for any entries
* in the error protocol. If any exist the parameter e_valid
* is initial ('X' in the other case).

CLEAR l_valid.
call method o_grilla->check_changed_data
importing
e_valid = l_valid.

if l_valid is initial.

* call function 'POPUP_TO_INFORM'


* exporting
* titel = text-i06
* txt1 = text-i07
* txt2 = text-i08
* txt3 = text-i09.
else.
perform update_database."Actualizar BD
endif.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form UPDATE_DATABASE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM UPDATE_DATABASE.

DATA: ld_row type i,


ld_col type i,
ld_value type char200,
lt_cols TYPE LVC_T_COL,
es_row_no TYPE LVC_S_ROID,
iv_msg TYPE C LENGTH 60,
i_row_no TYPE C LENGTH 6,
i_col_name TYPE C LENGTH 50.

CALL METHOD cl_gui_cfw=>flush.

CALL METHOD O_grilla->GET_CURRENT_CELL


IMPORTING
E_ROW = ld_row
E_col = ld_col
Es_row_no = es_row_no
E_value = ld_value.

check: es_row_no-row_id > 0.

READ TABLE ti_zekpo INTO wa_zekpo INDEX ld_row.

***Actualizo varios registros en la tabla ZEKPO


UPDATE ZEKPO SET KTMNG = wa_zekpo-KTMNG
WHERE EBELN = wa_zekpo-ebeln AND EBELP EQ wa_zekpo-ebelp.
IF sy-subrc EQ 0.

COMMIT WORK.

CLEAR: iv_msg, i_row_no.


i_row_no = ld_row.
CONDENSE i_row_no.

CONCATENATE 'Fila: ' i_row_no 'Actualizada correctamente' INTO iv_msg SEPARATED


BY SPACE.
CONDENSE iv_msg.
MESSAGE iv_msg TYPE 'S'.

ELSE.

ROLLBACK WORK.

CLEAR: iv_msg, i_row_no.


i_row_no = ld_row.
CONDENSE i_row_no.

CONCATENATE 'Error al actualizar datos de la fila: ' i_row_no INTO iv_msg


SEPARATED BY SPACE.
CONDENSE iv_msg.
MESSAGE iv_msg TYPE 'E'.

ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form SALIR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SALIR .

LEAVE PROGRAM.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form CELDAS_EDIT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CELDAS_EDIT .

DATA: lt_celltab TYPE lvc_t_styl,


ls_fcat type lvc_s_fcat,
l_index TYPE i.

LOOP AT ti_zekpo INTO wa_zekpo.


l_index = sy-tabix.
refresh lt_celltab.
if wa_zekpo-MENGE ge 20.
perform fill_celltab using 'RW'
changing lt_celltab.
else.
perform fill_celltab using 'RO'
changing lt_celltab.
endif.

wa_zekpo-celltab = lt_celltab.
MODIFY ti_zekpo FROM wa_zekpo TRANSPORTING celltab WHERE EBELN EQ wa_zekpo-
ebeln AND EBELP EQ wa_zekpo-ebelp.

ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FILL_CELLTAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0559 text
* <--P_LT_CELLTAB text
*----------------------------------------------------------------------*
FORM FILL_CELLTAB USING VALUE(p_mode)
CHANGING pt_celltab TYPE lvc_t_styl.

DATA: ls_celltab TYPE lvc_s_styl,


l_mode type raw4.

CLEAR: l_mode, ls_celltab.

* Bloquear / Desbloquear
IF p_mode EQ 'RW'.

l_mode = cl_gui_alv_grid=>mc_style_enabled. "Celda editable


ELSE. "p_mode eq 'RO'
l_mode = cl_gui_alv_grid=>mc_style_disabled. "Celda no editable
ENDIF.

***Campos de la tabla***

ls_celltab-fieldname = 'MATNR'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
INSERT ls_celltab INTO TABLE pt_celltab.
ls_celltab-fieldname = 'EBELN'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
INSERT ls_celltab INTO TABLE pt_celltab.
ls_celltab-fieldname = 'EBELP'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
INSERT ls_celltab INTO TABLE pt_celltab.
ls_celltab-fieldname = 'KTMNG'.
ls_celltab-style = l_mode. " Propiedad para Bloquear/Desbloquear Celda
* ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
INSERT ls_celltab INTO TABLE pt_celltab.
ls_celltab-fieldname = 'MENGE'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
INSERT ls_celltab INTO TABLE pt_celltab.
************************

ENDFORM.

You might also like