posible bug en clausula WHEN de GET (Solucionado)
posible bug en clausula WHEN de GET (Solucionado)
Buenos Dias Sr. Antonio:
Experimento cierto extraño comportamiento
al momento de poner clausulas WHEN en dialogo con varios GETS
tengo un primer get cuyo VALID llama a otro dialogo
y cuando el retorno debe seguir y entrar al segundo get de parada se pasa de largo
y si en el siguiente get hay un when perdio totalmente el foco.
mi pregunta
es posible controlar el comportamiento de clausula WHEN?
Muchas gracias por vuestra respuesta.
Julio César Gómez Cortéz
Godryc Experiencias
Lima Perú
Experimento cierto extraño comportamiento
al momento de poner clausulas WHEN en dialogo con varios GETS
tengo un primer get cuyo VALID llama a otro dialogo
y cuando el retorno debe seguir y entrar al segundo get de parada se pasa de largo
y si en el siguiente get hay un when perdio totalmente el foco.
mi pregunta
es posible controlar el comportamiento de clausula WHEN?
Muchas gracias por vuestra respuesta.
Julio César Gómez Cortéz
Godryc Experiencias
Lima Perú
Last edited by Maggiro on Sun May 22, 2016 12:43 am, edited 1 time in total.
- Antonio Linares
- Site Admin
- Posts: 42513
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 31 times
- Been thanked: 73 times
- Contact:
Re: posible bug en clausula WHEN de GET
Julio César,
Este ejemplo aqui funciona correctamente. Puedes probarlo ?
Este ejemplo aqui funciona correctamente. Puedes probarlo ?
Code: Select all | Expand
#include "FiveWin.ch"
function Main()
local oDlg, c1 := Space( 10 ), c2 := Space( 10 ), c3 := Space( 10 )
DEFINE DIALOG oDlg
@ 1, 1 GET c1 OF oDlg VALID Segundo()
@ 2, 1 GET c2 OF oDlg VALID Segundo()
@ 3, 1 GET c3 OF oDlg VALID Segundo() WHEN .T.
ACTIVATE DIALOG oDlg CENTERED
return nil
function Segundo()
local oDlg
DEFINE DIALOG oDlg
ACTIVATE DIALOG oDlg CENTERED
return .T.
Re: posible bug en clausula WHEN de GET
Buenos Dias Sr. Antonio:
La Rutina que me congela el dialogo:
y el recurso es :
Saludos
Julio César Gómez Cortéz
Godryc Experiencias
Lima Perú
La Rutina que me congela el dialogo:
Code: Select all | Expand
#include "FiveWin.ch"
MEMVAR k01,k02,k03,k04,k05,k06,k07,k08,k09,k10
MEMVAR k11,k12,k13,k14,k15,k16,k17,k18,k19,k20
MEMVAR k21,k22,k23
MEMVAR kvf3
FUNCTION Main()
LOCAL DiProb,GeProb
SetGetColorFocus( RGB(247,208,136) )
STOR SPAC(1) TO k07,k08,k23
k15=SPAC(2)
STOR SPAC(4) TO k03,k16
k01=SPAC(6)
k06=SPAC(7)
k17=SPAC(8)
STOR SPAC(10) TO k04,k05
k09=SPAC(28)
STOR SPAC(50) TO k02,k10
STOR 0 TO k11,k12,k13,k14,k18,k19,k20,k21,k22
DEFINE DIALOG DiProb NAME '#2003'
REDEFINE GET GeProb VAR k01 ID 201 OF DiProb PICTURE '999999' UPDATE VALID Segu(DiProb)
REDEFINE GET GeProb VAR k02 ID 202 OF DiProb UPDATE
REDEFINE GET GeProb VAR k03 ID 203 OF DiProb PICTURE '999!' UPDATE WHEN k03=SPAC(4) VALID Terc(DiProb)
REDEFINE GET GeProb VAR k04 ID 204 OF DiProb UPDATE
REDEFINE GET GeProb VAR k05 ID 205 OF DiProb UPDATE
REDEFINE GET GeProb VAR k06 ID 206 OF DiProb UPDATE
REDEFINE GET GeProb VAR k07 ID 207 OF DiProb UPDATE
REDEFINE GET GeProb VAR k08 ID 208 OF DiProb PICTURE '9' UPDATE WHEN k08=SPAC(1)
REDEFINE GET GeProb VAR k09 ID 209 OF DiProb UPDATE
REDEFINE GET GeProb VAR k10 ID 210 OF DiProb UPDATE WHEN k08='4' .AND. k10=SPAC(50)
REDEFINE GET GeProb VAR k11 ID 211 OF DiProb PICTURE '9999' UPDATE
REDEFINE GET GeProb VAR k12 ID 212 OF DiProb PICTURE '9999' UPDATE
REDEFINE GET GeProb VAR k13 ID 213 OF DiProb PICTURE '9999' UPDATE WHEN k19==0
REDEFINE GET GeProb VAR k14 ID 214 OF DiProb PICTURE '9999' UPDATE WHEN k19==0
REDEFINE GET GeProb VAR k15 ID 215 OF DiProb PICTURE '@!' UPDATE
REDEFINE GET GeProb VAR k16 ID 216 OF DiProb PICTURE '9999' UPDATE
REDEFINE GET GeProb VAR k17 ID 217 OF DiProb PICTURE '99999999' UPDATE
REDEFINE GET GeProb VAR k18 ID 218 OF DiProb PICTURE '9999' UPDATE
REDEFINE GET GeProb VAR k19 ID 219 OF DiProb PICTURE '9999' UPDATE
REDEFINE GET GeProb VAR k20 ID 220 OF DiProb PICTURE '9999' UPDATE
REDEFINE GET GeProb VAR k21 ID 221 OF DiProb PICTURE '9999' UPDATE
REDEFINE GET GeProb VAR k22 ID 222 OF DiProb PICTURE '9999' UPDATE
REDEFINE GET GeProb VAR k23 ID 223 OF DiProb PICTURE '9' UPDATE WHEN ROUND(k22,2)>0.00
REDEFINE BUTTON ID 301 OF DiProb
ACTIVATE DIALOG DiProb
RETU nil
FUNCTION Segu(DiProb)
LOCAL DiSegu
DEFINE DIALOG DiSegu
ACTIVATE DIALOG DiSegu
k01='000001'
k02='Soy un nuevo alumno'
DiProb:Update()
RETU .T.
FUNCTION Terc(DiProb)
LOCAL DiTerc
DEFINE DIALOG DiTerc
ACTIVATE DIALOG DiTerc
k03='113A'
k04='DIURNO'
k05='INICIAL'
k06='3 AÑOS'
k07='A'
k08='1'
k09='Nuevo'
DiProb:Update()
RETU .T.
y el recurso es :
Code: Select all | Expand
// RESOURCE SCRIPT generated by "Pelles C for Windows, version 7.00".
#include <windows.h>
#include <commctrl.h>
#include <richedit.h>
LANGUAGE LANG_SPANISH,SUBLANG_SPANISH_PERU
2003 DIALOGEX DISCARDABLE 14, 68, 353, 222
STYLE DS_SHELLFONT|WS_POPUP|WS_VISIBLE
FONT 8, "Tahoma", 0, 0, 1
{
CONTROL "", 401, "Static", SS_GRAYFRAME|SS_CENTERIMAGE, 4, 4, 344, 16
CONTROL "", 402, "Static", SS_GRAYFRAME|SS_CENTERIMAGE, 4, 20, 60, 16
CONTROL "", 403, "Static", SS_GRAYFRAME|SS_CENTERIMAGE, 64, 20, 68, 16
CONTROL "", 404, "Static", SS_GRAYFRAME|SS_CENTERIMAGE, 132, 20, 72, 16
CONTROL "", 405, "Static", SS_GRAYFRAME|SS_CENTERIMAGE, 204, 20, 68, 16
CONTROL "", 406, "Static", SS_GRAYFRAME|SS_CENTERIMAGE, 272, 20, 56, 16
CONTROL "", 407, "Static", SS_GRAYFRAME|SS_CENTERIMAGE, 328, 20, 20, 16
CONTROL "", 408, "Static", SS_GRAYFRAME|SS_CENTERIMAGE, 4, 36, 156, 16
CONTROL "", 409, "Static", SS_GRAYFRAME|SS_CENTERIMAGE, 160, 36, 188, 16
CONTROL "", 410, "Static", SS_GRAYFRAME|SS_CENTERIMAGE, 4, 52, 52, 32
CONTROL "", 411, "Static", SS_GRAYFRAME|SS_CENTERIMAGE, 56, 52, 84, 16
CONTROL "", 412, "Static", SS_GRAYFRAME|SS_CENTERIMAGE, 140, 52, 28, 32
CONTROL "", 413, "Static", SS_GRAYFRAME|SS_CENTERIMAGE, 168, 52, 84, 32
CONTROL "", 414, "Static", SS_GRAYFRAME|SS_CENTERIMAGE, 252, 52, 96, 16
CONTROL "", 415, "Static", SS_GRAYFRAME|SS_CENTERIMAGE, 56, 68, 84, 16
CONTROL "", 416, "Static", SS_GRAYFRAME|SS_CENTERIMAGE, 252, 68, 96, 16
CONTROL "", 417, "Static", SS_GRAYFRAME|SS_CENTERIMAGE, 4, 84, 112, 16
CONTROL "", 418, "Static", SS_GRAYFRAME|SS_CENTERIMAGE, 116, 84, 88, 16
CONTROL "", 419, "Static", SS_GRAYFRAME|SS_CENTERIMAGE, 204, 84, 60, 16
CONTROL "", 420, "Static", SS_GRAYFRAME|SS_CENTERIMAGE, 264, 84, 84, 16
CONTROL "", 421, "Static", SS_GRAYFRAME|SS_CENTERIMAGE, 4, 108, 56, 48
CONTROL "", 422, "Static", SS_GRAYFRAME|SS_CENTERIMAGE, 60, 108, 84, 16
CONTROL "", 423, "Static", SS_GRAYFRAME|SS_CENTERIMAGE, 180, 108, 68, 48
CONTROL "", 424, "Static", SS_GRAYFRAME|SS_CENTERIMAGE, 248, 108, 100, 16
CONTROL "", 425, "Static", SS_GRAYFRAME|SS_CENTERIMAGE, 60, 124, 84, 16
CONTROL "", 426, "Static", SS_GRAYFRAME|SS_CENTERIMAGE, 248, 124, 100, 16
CONTROL "", 427, "Static", SS_GRAYFRAME|SS_CENTERIMAGE, 60, 140, 84, 16
CONTROL "", 428, "Static", SS_GRAYFRAME|SS_CENTERIMAGE, 248, 140, 100, 16
CONTROL "Alumno :", 101, "Static", SS_RIGHT|WS_GROUP, 8, 8, 30, 8
CONTROL "Salon :", 102, "Static", SS_RIGHT|WS_GROUP, 8, 24, 24, 8
CONTROL "Turno :", 103, "Static", SS_RIGHT|WS_GROUP, 68, 24, 24, 8
CONTROL "Nivel :", 104, "Static", SS_RIGHT|WS_GROUP, 136, 24, 22, 8
CONTROL "Grado :", 105, "Static", SS_RIGHT|WS_GROUP, 208, 24, 25, 8
CONTROL "Sección :", 106, "Static", SS_RIGHT|WS_GROUP, 276, 24, 32, 8
CONTROL "Situación :", 107, "Static", SS_RIGHT|WS_GROUP, 8, 40, 35, 8
CONTROL "Procedencia :", 108, "Static", SS_RIGHT|WS_GROUP, 164, 40, 45, 8
CONTROL "Tarifa Inicial :", 109, "Static", SS_RIGHT|WS_GROUP, 8, 56, 43, 8
CONTROL "Matricula S/.", 110, "Static", SS_RIGHT|WS_GROUP, 60, 56, 42, 8
CONTROL "Pension S/.", 111, "Static", SS_RIGHT|WS_GROUP, 60, 72, 42, 8
CONTROL "Descuento Concedido :", 112, "Static", SS_RIGHT|WS_GROUP, 172, 56, 76, 8
CONTROL "Por Matricula S/.", 113, "Static", SS_RIGHT|WS_GROUP, 256, 56, 55, 8
CONTROL "Por Pension S/.", 114, "Static", SS_RIGHT|WS_GROUP, 256, 72, 55, 8
CONTROL "Comprobante de Pago Emitido :", 115, "Static", SS_RIGHT|WS_GROUP, 8, 88, 101, 8
CONTROL "Tipo Documento :", 116, "Static", SS_RIGHT|WS_GROUP, 120, 88, 57, 8
CONTROL "Serie :", 117, "Static", SS_RIGHT|WS_GROUP, 208, 88, 22, 8
CONTROL "Número :", 118, "Static", SS_RIGHT|WS_GROUP, 268, 88, 30, 8
CONTROL "Transacción :", 119, "Static", SS_RIGHT|WS_GROUP, 8, 112, 45, 8
CONTROL "Importe S/.", 120, "Static", SS_RIGHT|WS_GROUP, 64, 112, 43, 8
CONTROL "A Cuenta S/.", 121, "Static", SS_RIGHT|WS_GROUP, 64, 128, 43, 8
CONTROL "Resta S/.", 122, "Static", SS_RIGHT|WS_GROUP, 64, 144, 43, 8
CONTROL "Detalle de Cobro :", 123, "Static", SS_RIGHT|WS_GROUP, 184, 112, 58, 8
CONTROL "Pago Caja S/.", 124, "Static", SS_RIGHT|WS_GROUP, 252, 112, 60, 8
CONTROL "Vuelto S/.", 125, "Static", SS_RIGHT|WS_GROUP, 252, 128, 60, 8
CONTROL "[1]Créd [2]Redo :", 126, "Static", SS_RIGHT|WS_GROUP, 252, 144, 60, 8
CONTROL "", 201, "Edit", WS_TABSTOP, 40, 8, 30, 8
CONTROL "", 202, "Edit", 0x00000000, 76, 8, 268, 8
CONTROL "", 203, "Edit", WS_TABSTOP, 36, 24, 24, 8
CONTROL "", 204, "Edit", 0x00000000, 96, 24, 32, 8
CONTROL "", 205, "Edit", 0x00000000, 160, 24, 40, 8
CONTROL "", 206, "Edit", 0x00000000, 236, 24, 30, 8
CONTROL "", 207, "Edit", 0x00000000, 312, 24, 12, 8
CONTROL "", 208, "Edit", WS_TABSTOP, 48, 40, 12, 8
CONTROL "", 209, "Edit", 0x00000000, 64, 40, 90, 8
CONTROL "", 210, "Edit", WS_TABSTOP, 212, 40, 132, 8
CONTROL "", 211, "Edit", 0x00000000, 108, 56, 25, 8
CONTROL "", 212, "Edit", 0x00000000, 108, 72, 25, 8
CONTROL "", 213, "Edit", WS_TABSTOP, 316, 56, 25, 8
CONTROL "", 214, "Edit", WS_TABSTOP, 316, 72, 25, 8
CONTROL "", 215, "Edit", WS_TABSTOP, 184, 88, 16, 8
CONTROL "", 216, "Edit", WS_TABSTOP, 232, 88, 25, 8
CONTROL "", 217, "Edit", WS_TABSTOP, 300, 88, 40, 8
CONTROL "", 218, "Edit", 0x00000000, 112, 112, 25, 8
CONTROL "", 219, "Edit", 0x00000000, 112, 128, 25, 8
CONTROL "", 220, "Edit", 0x00000000, 112, 144, 25, 8
CONTROL "", 221, "Edit", 0x00000000, 316, 112, 25, 8
CONTROL "", 222, "Edit", 0x00000000, 316, 128, 25, 8
CONTROL "", 223, "Edit", WS_TABSTOP, 316, 144, 16, 8
CONTROL "Registrar", 301, "Button", WS_TABSTOP, 152, 172, 48, 16
}
Saludos
Julio César Gómez Cortéz
Godryc Experiencias
Lima Perú
- karinha
- Posts: 7933
- Joined: Tue Dec 20, 2005 7:36 pm
- Location: São Paulo - Brasil
- Been thanked: 3 times
- Contact:
Re: posible bug en clausula WHEN de GET
Code: Select all | Expand
Borland Resource Compiler Version 5.40
Copyright (c) 1990, 1999 Inprise Corporation. All rights reserved.
Error congela.RC 14 25: Expecting BEGIN
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
- Antonio Linares
- Site Admin
- Posts: 42513
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 31 times
- Been thanked: 73 times
- Contact:
Re: posible bug en clausula WHEN de GET
El problema surge cuando salgo del valid en el tercer GET (segundo tabstop) "salon"
y lo que he apreciado es que Fivewin
1 Marca el siguiente tabstop antes de abrir el tercer dialogo
2 Cuando regresa y la siguiente variable no ha cambiado internamente en su valor
SI se posiciona en el siguiente Get con tabstop (el que marcó antes)
3 Cuando regresa y la siguiente variable si ha cambiado internamente en su valor
el When no permite la entrada
4 En el caso 3 esperaba que el When, dado que no permite la entrada, obligue al dialogo
a que pase a leer el siguiente tabstop disponible, y entonces, me di
con la sorpresa que la no permision rebota hacia el valid del get anterior haciendo repetir
la operacion interna (lo que me duplicaba acumulacion de valores en variables) y congelando
el dialogo.
y lo que he apreciado es que Fivewin
1 Marca el siguiente tabstop antes de abrir el tercer dialogo
2 Cuando regresa y la siguiente variable no ha cambiado internamente en su valor
SI se posiciona en el siguiente Get con tabstop (el que marcó antes)
3 Cuando regresa y la siguiente variable si ha cambiado internamente en su valor
el When no permite la entrada
4 En el caso 3 esperaba que el When, dado que no permite la entrada, obligue al dialogo
a que pase a leer el siguiente tabstop disponible, y entonces, me di
con la sorpresa que la no permision rebota hacia el valid del get anterior haciendo repetir
la operacion interna (lo que me duplicaba acumulacion de valores en variables) y congelando
el dialogo.
- Antonio Linares
- Site Admin
- Posts: 42513
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 31 times
- Been thanked: 73 times
- Contact:
Re: posible bug en clausula WHEN de GET (Solucionado)
Sr. Antonio:
Solucione el problema quitando las clausulas WHEN en todos los GETS con TABSTOP
cuyas variables podrían cambiar su valor internamente
y Redirigiendo el foco directamente al próximo GET donde debería detenerse.
Muchas gracias por su atención!!
Saludos
Julio César Gómez Cortéz
Godryc Experiencias
Lima Perú
Solucione el problema quitando las clausulas WHEN en todos los GETS con TABSTOP
cuyas variables podrían cambiar su valor internamente
y Redirigiendo el foco directamente al próximo GET donde debería detenerse.
Muchas gracias por su atención!!
Saludos
Julio César Gómez Cortéz
Godryc Experiencias
Lima Perú
-
- Posts: 768
- Joined: Sun Jun 15, 2008 7:47 pm
- Location: Sevilla
- Been thanked: 5 times
- Contact:
Re: posible bug en clausula WHEN de GET (Solucionado)
Julio Cesar el problema puede que sea la sobrecarga del "=", como bien sabes vale para asignar y para comparar...
Desde la epoca de clipper 5.3 yo me he acostumbrado a usar ":=" para asignar y "==" para comparar, de este modo te quitas de muchos problemas
prueba a cambiar
REDEFINE GET GeProb VAR k03 ID 203 OF DiProb PICTURE '999!' UPDATE WHEN k03=SPAC(4) VALID Terc(DiProb)
por
REDEFINE GET GeProb VAR k03 ID 203 OF DiProb PICTURE '999!' UPDATE WHEN k03==SPAC(4) VALID Terc(DiProb)
salvo que quisieras asignar espacios a k03, si es asi cambia a esto
REDEFINE GET GeProb VAR k03 ID 203 OF DiProb PICTURE '999!' UPDATE WHEN ( k03:=SPAC(4), .t. ) VALID Terc(DiProb)
lo demás cambialo en ese sentido...
Aunque tarde espero haberte aclarado algo
![Rolling Eyes :roll:](./images/smilies/icon_rolleyes.gif)
PD: para saber si un valor está vacio es mejor usar la funcion empty( k03 ), quedaria de esta manera así:
REDEFINE GET GeProb VAR k03 ID 203 OF DiProb PICTURE '999!' UPDATE WHEN empty( k03 ) VALID Terc(DiProb)
Desde la epoca de clipper 5.3 yo me he acostumbrado a usar ":=" para asignar y "==" para comparar, de este modo te quitas de muchos problemas
![Very Happy :D](./images/smilies/icon_biggrin.gif)
prueba a cambiar
REDEFINE GET GeProb VAR k03 ID 203 OF DiProb PICTURE '999!' UPDATE WHEN k03=SPAC(4) VALID Terc(DiProb)
por
REDEFINE GET GeProb VAR k03 ID 203 OF DiProb PICTURE '999!' UPDATE WHEN k03==SPAC(4) VALID Terc(DiProb)
salvo que quisieras asignar espacios a k03, si es asi cambia a esto
REDEFINE GET GeProb VAR k03 ID 203 OF DiProb PICTURE '999!' UPDATE WHEN ( k03:=SPAC(4), .t. ) VALID Terc(DiProb)
lo demás cambialo en ese sentido...
Aunque tarde espero haberte aclarado algo
![Laughing :lol:](./images/smilies/icon_lol.gif)
![Rolling Eyes :roll:](./images/smilies/icon_rolleyes.gif)
PD: para saber si un valor está vacio es mejor usar la funcion empty( k03 ), quedaria de esta manera así:
REDEFINE GET GeProb VAR k03 ID 203 OF DiProb PICTURE '999!' UPDATE WHEN empty( k03 ) VALID Terc(DiProb)
______________________________________________________________________________
Sevilla - Andalucía
Sevilla - Andalucía