MUNDOSAP

Regresar   MUNDOSAP > DESARROLLO > Programación ABAP IV
Nombre de Usuario
Contraseña
Home Descargas Registrar FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




 
Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Viejo 12/08/08, 12:49:07
Avatar de melerogalan
melerogalan melerogalan is offline
Senior Member
 
Fecha de Ingreso: nov 2006
Localización: Murcia
Mensajes: 142
Question Campo obligatorio en ALV OO

Hola:
Tengo un ALV OO, en el hay un campo editable, quiero que ese campo sea obligatorio, que el usuario no pueda salir del alv si no rellena este campo. El problema que el alv tiene muchos eventos.

Alguien ha echo algo parecido.

Gracias de antemano.
Responder Con Cita
  #2  
Viejo 12/08/08, 13:29:35
ibecerra
 
Mensajes: n/a
utiliza el metodo siguiente.

class lcl_event_receiver definition.
public section.
METHODS handle_toolbar
FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object e_interactive.
.
.
.
methods handle_data_changed "metodo para saber si has hecho una entrada al " alv
for event data_changed of cl_gui_alv_grid
endclass.
class lcl_event_receiver implementation.
METHOD handle_toolbar.
PERFORM handle_toolbar CHANGING e_object.
ENDMETHOD. "handle_toolbar
method handle_data_changed.
perform data_changed using er_data_changed.
ENDMETHOD.
endclass. "lcl_event_receiver IMPLEMENTATION
****
FORM data_changed USING p_data_changed
TYPE REF TO cl_alv_changed_data_protocol.
DATA: d_mod_cells TYPE lvc_s_modi.
DATA: w_buenas TYPE i.
DATA: w_modif TYPE i.
DATA: NRCONST LIKE ZTFCONSTDET-NRCONST.
data: d_stable like lvc_s_stbl.
DATA:
S_ROW TYPE LVC_S_ROW,
S_COL TYPE LVC_S_COL,
S_ROI TYPE LVC_S_ROID,
T_ROW TYPE LVC_T_ROW,
T_ROID TYPE LVC_T_ROID,
CELL TYPE LVC_T_CELL.
S_ROW = 3.
*------verifica si habido algun cambio en las celdad
* Clear: L_NRCE, L_FCER , L_IMRT, L_DMBTR.
LOOP AT p_data_changed->mt_mod_cells INTO d_mod_cells
WHERE NOT value IS INITIAL.
EXIT.
ENDLOOP.
**
CHECK sy-subrc EQ 0.
*--identifica el campo q ha recibido una entrada
CASE d_mod_cells-fieldname.
WHEN 'NRCONST'.
*----se evalua el valor del campo ingresado
CALL METHOD p_data_changed->get_cell_value
EXPORTING
i_row_id = d_mod_cells-row_id
i_fieldname = d_mod_cells-fieldname
IMPORTING
e_value = NRCONST.
IF NRCONST IS INITIAL OR NRCONST = 0. .
CALL METHOD p_data_changed->add_protocol_entry
EXPORTING
i_msgid = '0K'
i_msgno = '000'
i_msgty = 'E'
i_msgv1 = text-m01
i_fieldname = d_mod_cells-fieldname
i_row_id = d_mod_cells-row_id.
ELSE.
READ TABLE TI_ZTFACTRET INDEX
d_mod_cells-row_id.
IF SY-SUBRC EQ 0.
CONCATENATE 'CD|' NRCONST '/'
p_fecde+6(2) '.' p_fecde+4(2) '.'
p_fecde(4)
INTO TI_ZTFACTRET-BKTXT.
replace '|' WITH ' ' INTO TI_ZTFACTRET-BKTXT.
TI_ZTFACTRET-ICON = ICON_GREEN_LIGHT.
MODIFY TI_ZTFACTRET
INDEX d_mod_cells-row_id.

* Inicio IBF02 31.08.2007
d_stable-row = 'X'.
d_stable-col = 'X'.
CALL METHOD grid1->refresh_table_display
EXPORTING
is_stable = d_stable
i_soft_refresh = 'X'.
ENDIF.
ERROR = 0.
LOOP AT TI_ZTFACTRET ASSIGNING <ZTFACTRET>.
IF <ZTFACTRET>-BKTXT = ''.
ERROR = 1.
ENDIF.
ENDLOOP.
ENDIF.
ENDCASE.
ENDFORM. "data_changed
Responder Con Cita
  #3  
Viejo 13/08/08, 06:43:27
Avatar de melerogalan
melerogalan melerogalan is offline
Senior Member
 
Fecha de Ingreso: nov 2006
Localización: Murcia
Mensajes: 142
CALL METHOD p_data_changed->get_cell_value
EXPORTING
i_row_id = d_mod_cells-row_id
i_fieldname = d_mod_cells-fieldname
IMPORTING
e_value = NRCONST.

?¿? Esto que significa que el campo no esta relleno
IF NRCONST IS INITIAL OR NRCONST = 0. .
?¿?
!!!
Este método te muestra un error, y el campo en un cuadro rojo, pero te deja continuar haciendo otros eventos, yo quiero que se me que de pillado hasta que lo rellene. L oque es un campo obligatorio.
!!!

CALL METHOD p_data_changed->add_protocol_entry
EXPORTING
i_msgid = '0K'
i_msgno = '000'
i_msgty = 'E'
i_msgv1 = text-m01
i_fieldname = d_mod_cells-fieldname
i_row_id = d_mod_cells-row_id.

?¿?¿? Si el campo esta relleno, que es lo que hace aquí(podrías explicarlo), podrías poner la declaración de la variables que se utiliza
ELSE.
¿?¿??¡

READ TABLE TI_ZTFACTRET INDEX
d_mod_cells-row_id.
IF SY-SUBRC EQ 0.
CONCATENATE 'CD|' NRCONST '/'
p_fecde+6(2) '.' p_fecde+4(2) '.'
p_fecde(4)
INTO TI_ZTFACTRET-BKTXT.
replace '|' WITH ' ' INTO TI_ZTFACTRET-BKTXT.
TI_ZTFACTRET-ICON = ICON_GREEN_LIGHT.
MODIFY TI_ZTFACTRET
INDEX d_mod_cells-row_id.

* Inicio IBF02 31.08.2007
d_stable-row = 'X'.
d_stable-col = 'X'.
CALL METHOD grid1->refresh_table_display
EXPORTING
is_stable = d_stable
i_soft_refresh = 'X'.
ENDIF.
ERROR = 0.
LOOP AT TI_ZTFACTRET ASSIGNING <ZTFACTRET>.
IF <ZTFACTRET>-BKTXT = ''.
ERROR = 1.
ENDIF.
ENDLOOP.
ENDIF.
ENDCASE.
ENDFORM. "data_changed


Muchas gracias por todos
Responder Con Cita
  #4  
Viejo 13/08/08, 12:49:40
ibecerra
 
Mensajes: n/a
esto es un ejmplo no significa que lo debes hacer igual.
NRCONST es una varible x que he declarado.

¿? Esto que significa que el campo no esta relleno
IF NRCONST IS INITIAL OR NRCONST = 0. .
*--> asi significa que la variable no esta llena
*-- y si no esta llena mandas un mensaje de error y punto

Saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Reglas de Mensajes
no puedes crear nuevos temas
no puedes responder temas
no puedes adjuntar archivos
no puedes editar tus mensajes

El código vB está On
Las caritas están On
Código [IMG] está On
Código HTML está Off
Saltar a Foro


Husos Horarios son GMT. La hora en este momento es 16:08:18.


www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web