Page 1 of 1

Browse de Hernan

Posted: Fri Aug 15, 2008 4:06 pm
by jvargas
Hola Amigos
Estoy haciendo pruebas con el Brw de Hernan y modificado por Rossine, hice algunos arreglos a un ejemplo de entrada de datos, hasta que resultó el modelo que yo quería y me funciona muy bien.
Al usar ese modelo como base para un prg de mi aplicación me devuelve:
Application
===========
Path and name: C:\ALW\XL.EXE (32 bits)
Size: 1,944,576 bytes
Time from start: 0 hours 0 mins 57 secs
Error occurred at: 15/08/2008, 10:43:48
Error description: Error BASE/1066 Argument error: conditional
Args:
[ 1] = U

Stack Calls
===========
Called from: TGET.PRG => TGET:LVALID(0)
Called from: CONTROL.PRG => TGET:FWLOSTFOCUS(0)
Called from: CONTROL.PRG => TCONTROL:HANDLEEVENT(0)
Called from: TGET.PRG => TGET:HANDLEEVENT(0)
Called from: WINDOW.PRG => _FWH(0)
Called from: => SYSREFRESH(0)
Called from: CONTROL.PRG => TCONTROL:KEYCHAR(0)
Called from: TGET.PRG => TGET:KEYCHAR(0)
Called from: => TWINDOW:HANDLEEVENT(0)
Called from: CONTROL.PRG => TCONTROL:HANDLEEVENT(0)
Called from: TGET.PRG => TGET:HANDLEEVENT(0)
Called from: WINDOW.PRG => _FWH(0)
Called from: => DIALOGBOXINDIRECT(0)
Called from: DIALOG.PRG => TDIALOG:ACTIVATE(0)
Called from: x.prg => AL721(181)
Called from: al0.prg => MAIN(90)

He modificado el programa para hacer el seguimiento del error poniendo solo una columna e igual me da el mismo error.
Ya tengo bastante tiempo tratando de encontrarle solución
A alguien le ha pasado esto?, es error de Brw?
Lo que me confunde es que en el ejemplo funciona bien todo.
Les agradecería su ayuda
Saludos y gracias por anticipado
Jorge Vargas

Posted: Fri Aug 15, 2008 6:38 pm
by Antonio Linares
El problema viene de un GET que estás usando cuyo VALID no devuelve un valor lógico

Posted: Sat Aug 16, 2008 4:58 pm
by jvargas
Hola Antonio.
Muchas gracias por responder. Hasta ahí he llegado. Eso se desprende del msg.
La rutina es bastante simple, da el msg de línea 255, luego el de la línea 257, regresa de la rutina de edición con .F. y cancela. Lo mismo si saldría después de hacer el msg de 262.

If ! lContinue .and. aDatos[nAt,TNue] // Se agregado un nuevo Item !!!
?"255 lContinue=.f. ", aDatos[nAt,TNue], oLbx:nat, oLbx:nLastKey
if oLbx:nLastkey=38 &&' ok se dio Up en edit de col1
?"257 oLbx:nLastKey=38"
return .f.
endif
?"262 oLbx:nLastKey<>38"
return .f. // error de ?? que sale con .F. y entra otra vez a EditCell

* EndIf
EndIf
?"269 Exit"
Exit //Sale por cada Col

Lo que más me confunde es que esta misma rutina trabaja bien en el ejemplo que modifiqué y por mas que reviso no encuentro el error
Agradecería cualquier ayuda, estoy entrampado en esto.
Saludos y Gracias otra vez
Jorge Vargas

Posted: Sat Aug 16, 2008 7:34 pm
by Antonio Linares
Jorge,

Aqui:

Code: Select all

?"269 Exit" 
Exit //Sale por cada Col 
estás saliendo sin devolver un valor lógico

Posted: Mon Aug 18, 2008 1:18 pm
by jvargas
Hola Antonio
Otra vez gracias por tu ayuda.
Me faltó poner algo mas de código para mejor entendimiento. El hecho es que se debe abandonar la rutina por la línea 257 que tiene ‘Return .F.’ cuando hay un nLastKey=38 o por la línea 260 por un <> 38.
Solo llega a la línea 263 cuando no se cumple la condición de la línea 254 y la rutina sale por ‘Return lContinue’ final, que no es lo que se quiere en este punto porque nLastKey es 38 y debería salir por la línea 257 para que el oLbx tome el control.

Estoy usando esta rutina de lectura:
oLbx:bEdit:= {|nCol, cBuffer, lFirstEdit|; &&' loop si fin, hasta dar Esc
AL721EditaCelda( nCol, cBuffer, lFirstEdit )}
Que llama a:

Function AL721EditaCelda( nCol, cBuffer, lFirstEdit )
LOCAL bValid, nColReal:= nCol
...........
Case nCol == 1
bValid:= {|| ValidCol1() }
If lContinue:= oLbx:lEditCol( nColReal, @uBuffer, ;
"@ZE 99999", bValid,,CLR_YELLOW )
aDatos[nAt,nCol]:=uBuffer
else
?"223 else Col1",lContinue,lfirstEdit,oLbx:nLastKey
// si se da Esc o F2 o KUp en lEditCol... lContinue es .f.
EndIf
// otras columnas……

*?"205 FinCol4",lContinue,lFirstEdit
Case nCol==len(oLbx:aColSizes) .and. Len(T)==nAt .and. ; // Ult Col y Ult Fila
! lFirstEdit
AL721AdiTab( .f. ) &&' adiciona reg al final

EndCase

?"253 EndCase",nat,nCol,lContinue,lFirstEdit // x,y , .t. , 1Vez=.t.
If ! lContinue .and. aDatos[nAt,TNue] // Se agregó un nuevo Item !!!
?"255 lContinue=.f. ", aDatos[nAt,TNue], oLbx:nat, oLbx:nLastKey
if oLbx:nLastkey=38 &&' ok se dio Up en edit de col1
?"257 oLbx:nLastKey=38" ; Return .F. // sale por acá y cancela
endif

?"260 oLbx:nLastKey<>38"
return .f. // error ?? que sale con .F.
EndIf
?"263 Exit"
Exit //Sale por cada Col

EndDo

If Len( aDatos ) > 0
AL721TotDoc() &&' acumula y muestra totales
EndIf

?"279 CasiFin EditCell lContinue",lContinue, "nAt",nAt, "nCol",nCol, "oLbx:nLastKey", oLbx:nlastkey
If lContinue
Do Case
Case oLbx:nLastKey == VK_UP
return If( !GetKeyState(VK_SHIFT), -1, -3 )
Case oLbx:nLastKey == VK_DOWN // 40
return If( !GetKeyState(VK_SHIFT), 3, 2 )
Case oLbx:nLastKey == VK_TAB // 9
return If( GetKeyState(VK_SHIFT), -1, 1 )
EndCase
EndIf
?"299 Fin editCell lContinue ",lContinue,"nAt",nAt,"nCol ",nCol
return lContinue // fin AL721EditaCelda
*
esta rutina no es nada del otro mundo.
Los valores de Return que acepta la rutina son .T., .F., 1, 2, 3, -1, -2, -3 según el Método __Xedit y los valores numéricos no los estoy usando.

La funcion ValidCol1 siempre devuelve .t. por lo tanto no es alli el problema
Al llegar a la linea 257 ya salió del Get, tampoco es alli.

Si funciona bien el ejemplo entonces el problema es totalmente mio.

Mi pregunta en concreto es cómo saber qué valor recibe oLbx:bEdit para que cancele?. Los msgs no me dicen mucho y al parecer debo seguir rastreando en el método lEditCol donde hay gets.
Entonces seguiré buscando.
Muchas gracias por toda la ayuda
Jorge Vargas

Posted: Mon Aug 18, 2008 6:55 pm
by jvargas
Hola Amigos:
Ya encontré el error. No tenia nada que ver con el Brw, era de un Get anterior que en el Valid buscaba los datos para llenar el Brw y alli solo hacia el ‘Return’
Lo que me confundía era que el Brw empezaba a pedir datos en varias columnas y lineas y todo iba bien hasta salir del Brw donde me esperaba el Valid.
Había revisado 30 veces esta parte pero no vi la diferencia con el ejemplo original.
Ya se que uno no ve no solo porque le falla la vista sino porque se está molesto y preocupado
Les agradezco su tiempo y su ayuda
Jorge Vargas.