Page 1 of 1
Problemas con Refresh
Posted: Fri Mar 08, 2013 3:12 am
by gabrieloq
Hola a todos.
Tengo el siguiente codigo:
*-----
@ 280,210 GRID grid_2 ;
WIDTH 860 ;
HEIGHT 245 ;
HEADERS { 'Codigo','Detalle', 'Cant', 'Vr Unitario', 'Total', 'Iva', 'Peso' } ;
WIDTHS { 80, 350, 60, 120, 130, 80, 100 } ;
ROWSOURCE "TempKarx" ;
COLUMNFIELDS { 'Codigo','Nombre', 'Cant', 'Valor', 'Total', 'Iva', 'Peso' } ;
JUSTIFY { BROWSE_JTFY_LEFT, BROWSE_JTFY_LEFT, BROWSE_JTFY_RIGHT, BROWSE_JTFY_RIGHT, BROWSE_JTFY_RIGHT, BROWSE_JTFY_RIGHT, BROWSE_JTFY_LEFT, } ;
ON DBLCLICK ( AgregarVta2() )
*-----
Procedure Eliminar
If MsgYesNo ( 'Esta Seguro ?')
dbSelectArea("TempKarx" )
rblokado( 5, "TempKarx", cQuien ) // Bloquea el Registro ya que el archivo esta abierto Shared
delete
dbUnlock()
Win_x01.grid_2.Refresh
EndIf
*------
Existen 2 grid en la ventana activa (estoy trabajando en el detalle de la factura).
Lo hace bien cuando el grid tiene mas de dos items.
Cuando tiene 1 o 2 items muestra el item que yo deseo borrar y oculta el que deseo dejar, internamente en el archivo temporal marca bien el item a borrar.
Gracias de antemano x su ayuda.
Re: Problemas con Refresh
Posted: Fri Mar 08, 2013 3:37 am
by Leopoldo Blancas
Hola...
Bueno yo lo que hago es obtener el valor del registro con
GRID (Standard): Numeric (Row Selected).
GRID (Multiselect): Numeric Array (Rows Selected).
GRID (CellNavigation): Numeric Array (Row and col selected).
Code: Select all
LOCAL aSelec := Win_x01.Grid_2.VALUE // EN EL CASO DE GRID (CellNavigation)
LOCAL nReg := Win_x01.Grid_2.Cell(aSelec[1],1) // OBTENGO NUMERO DE CODIGO
dbSelectArea("TempKarx" )
DBGOTOP()
IF DBSEEK(TempKarx->nReg) // BUSCA EL CODIGO
IF MsgYesNo ( 'Esta Seguro ?') // PREGUNTAMOS SI LO BORRA
rblokado( 5, "TempKarx", cQuien ) // Bloquea el Registro ya que el archivo esta abierto Shared
delete
dbUnlock()
Win_x01.grid_2.Refresh
ENDIF
ENDIF
Espero te ayude...
Polo
Re: Problemas con Refresh
Posted: Fri Mar 08, 2013 4:00 am
by gabrieloq
Gracias por responder Leopoldo,
Hice las correciones sugeridas por Ud pero da error:
EN LA LINEA ==> LOCAL nReg := Win_x01.Grid_2.Cell(aSelec[1],1) // OBTENGO NUMERO DE CODIGO
Error BASE/1068 Error de argumento : acceso al array
llamado from _HMG_GETGRIDCELLVALUE(1551)
Que puedo hacer?
Re: Problemas con Refresh
Posted: Fri Mar 08, 2013 12:38 pm
by Pablo César
Remueve el numero 1 y la coma que está en rojo y pruebas nuevamente.
LOCAL nReg := Win_x01.Grid_2.Cell(aSelec[1],1)
Eso debe ocurrir porque tu grid está como SET NAVIGATION .F.
Re: Problemas con Refresh
Posted: Fri Mar 08, 2013 5:49 pm
by Leopoldo Blancas
Hola, así es Cesar...
Grabriel por eso puse... depende como estes trabajando:
GRID (Standard): Numeric (Row Selected).
GRID (Multiselect): Numeric Array (Rows Selected).
GRID (CellNavigation): Numeric Array (Row and col selected).
LOCAL aSelec := Win_x01.Grid_2.VALUE // EN EL CASO DE GRID (CellNavigation)
LOCAL nReg := Win_x01.Grid_2.Cell(aSelec[1],1) // OBTENGO NUMERO DE CODIGO
// Si es Stardard nReg := Win_x01.Grid_2.Cell(aSelec) // remplaza esta por la de arriba.
dbSelectArea("TempKarx" )
DBGOTOP()
IF DBSEEK(TempKarx->nReg) // BUSCA EL CODIGO
IF MsgYesNo ( 'Esta Seguro ?') // PREGUNTAMOS SI LO BORRA
rblokado( 5, "TempKarx", cQuien ) // Bloquea el Registro ya que el archivo esta abierto Shared
delete
dbUnlock()
Win_x01.grid_2.Refresh
ENDIF
ENDIF
Saludos
Polo
Posible solucion Problemas con Refresh
Posted: Wed Mar 13, 2013 9:38 pm
by gabrieloq
Hola Leopoldo, gracias por sus concejos,
No se si es la mejor manera de solucionar pero lo hice de esta manera:
If MsgYesNo ( 'Esta Seguro ?')
dbSelectArea("TempKarx" )
rblokado( 5, "TempKarx", cQuien ) // Bloquea el Registro ya que el archivo esta abierto Shared
delete
dbUnlock()
DELETE ITEM ALL FROM Grid_2 OF Win_x01 // borro todos elementos del Grid
Do While !EOF()
ADD ITEM { TempKarx->Codigo, TempKarx->Nombre, TempKarx->Cant, TempKarx->Valor, TempKarx->Total, TempKarx->Iva, TempKarx->Peso } TO Grid_2 of Win_x01 // agrego los elementos que quedan en el archivo temporal
DBsKIP()
END DO
Win_x01.grid_2.Refresh
EndIf
Re: Problemas con Refresh
Posted: Wed Mar 13, 2013 10:11 pm
by Leopoldo Blancas
Hola Gabriel...
Otra observación... trata de que tu forma de escribir tu código sea claro... el orden de los mandatos y funciones deben de tener una lógica...
1.- En algún lugar de tu aplicación esta la base abierta
dbSelectArea("TempKarx" ) por lo regular esta antes de hacer una búsqueda.
2.- Después de seleccionar el área debemos de hacer un
DBGoTop() Para asegurar que estamos al inicio.
3.- Buscas el registro a modificar o borrar.
IF DBSEEK(TempKarx->nReg) el
IF es por si lo encuentra....
4.- Preguntamos si lo queremos modificar o borrar...
IF MsgYesNo ( 'Esta Seguro ?')
5.- Si es
Shared lo bloqueamos...
rblokado( 5, "TempKarx", cQuien )
6.- Hacemos lo necesario para el registro...
Borramos, Modificamos...
delete
7.- Desbloqueamos....
dbUnlock()
8.- Refrescamos lo que haya cambiado de la pantalla...
Win_x01.grid_2.Refresh
Code: Select all
dbSelectArea("TempKarx" )
DBGOTOP()
IF DBSEEK(TempKarx->nReg) // BUSCA EL CODIGO
IF MsgYesNo ( 'Esta Seguro ?') // PREGUNTAMOS SI LO BORRA
rblokado( 5, "TempKarx", cQuien ) // Bloquea el Registro ya que el archivo esta abierto Shared
delete
dbUnlock()
ENDIF
Win_x01.grid_2.Refresh
ENDIF
Si no de otra manera se vuelve difícil a la hora de corregir o seguir la lógica de tu rutina...
Saludos
Polo
Re: Problemas con Refresh
Posted: Wed Mar 13, 2013 10:13 pm
by Leopoldo Blancas
Hola Gabriel...
Y sobre tu forma de solucionarlo.... respetable...
Pero estas haciendo trabajo de más.
Saludos
Polo
Re:Acepto con agrado sus recomendaciones
Posted: Wed Mar 13, 2013 10:52 pm
by gabrieloq
Hola leopoldo es grato y beneficioso encontrar personas que lo corrigen para bien, con gusto pondre sus recomendaciones inmediatamente para mejorar mi programacion, GRACIAS