Problemas con Refresh
Moderator: Rathinagiri
Problemas con Refresh
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.
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.
-
Leopoldo Blancas
- Posts: 388
- Joined: Wed Nov 21, 2012 7:14 pm
- Location: México
Re: Problemas con Refresh
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).
Espero te ayude...
Polo
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
Polo
Re: Problemas con Refresh
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?
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?
- Pablo César
- Posts: 4059
- Joined: Wed Sep 08, 2010 1:18 pm
- Location: Curitiba - Brasil
Re: Problemas con Refresh
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.
LOCAL nReg := Win_x01.Grid_2.Cell(aSelec[1],1)
Eso debe ocurrir porque tu grid está como SET NAVIGATION .F.
HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
-
Leopoldo Blancas
- Posts: 388
- Joined: Wed Nov 21, 2012 7:14 pm
- Location: México
Re: Problemas con Refresh
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
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
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
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
-
Leopoldo Blancas
- Posts: 388
- Joined: Wed Nov 21, 2012 7:14 pm
- Location: México
Re: Problemas con Refresh
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
Si no de otra manera se vuelve difícil a la hora de corregir o seguir la lógica de tu rutina...
Saludos
Polo
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
Saludos
Polo
-
Leopoldo Blancas
- Posts: 388
- Joined: Wed Nov 21, 2012 7:14 pm
- Location: México
Re: Problemas con Refresh
Hola Gabriel...
Y sobre tu forma de solucionarlo.... respetable...
Pero estas haciendo trabajo de más.
Saludos
Polo
Y sobre tu forma de solucionarlo.... respetable...
Pero estas haciendo trabajo de más.
Saludos
Polo
Re:Acepto con agrado sus recomendaciones
Hola leopoldo es grato y beneficioso encontrar personas que lo corrigen para bien, con gusto pondre sus recomendaciones inmediatamente para mejorar mi programacion, GRACIAS