Clarion - Debugg de un Procedimiento o Source

 
Vista:
Imágen de perfil de Pablo Dante

Debugg de un Procedimiento o Source

Publicado por Pablo Dante (95 intervenciones) el 26/03/2024 15:31:23
Buen día foro.
Necesitaría saber como debuguear un procedimiento o source en Clarion!?
Tengo una rutina que verifica que un CUIL/CUIT sea correcto o válido, y, con algunas claves me indica que es incorrecto y deseo ir iterando por cada dígito del CUIL ingresado.
De que forma se hace el Debugg!?
Es para ver como es el tratamiento del dato ingresado.
El Source retorna un Bolleano (False, True).
Cualquier Tips me ayuda.
Estoy trabajando con Clarion 8.
Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Pablo Dante

Debugg de un Procedimiento o Source

Publicado por Pablo Dante (95 intervenciones) el 27/03/2024 12:27:53
Hola Marcelo, buen día.
Gracias por el .zip, lo miro ahora.
Yo ya tenía una rutina para controlar el CUIL/CUIT. Pero tengo inconvenientes y lo tengo que ver más detenidamente.
Te hago una consulta para definir una variable local de tipo "vector" está bien que la defina de esta forma:

Loc:Operador
STRING
1
Dim. 10
@s1

Saludos
Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 403
Oro
Ha mantenido su posición en Clarion (en relación al último mes)
Gráfica de Clarion

Debugg de un Procedimiento o Source

Publicado por Marcelo Madelón (332 intervenciones) el 27/03/2024 12:45:04
Te paso otra imagen

En la imagen de la izquierda te muestro una variable con Dimension
En la de la derecha defino la defino Group y le agrego las variables que la componen con Dimension = 10
Gráficamente quedaría algo así:

LOC:Operador (group)
.........Var_1 String(4) Dimension (10)
..........Var_N Decimal (12.2) Dimension(10)







Con_Dimension
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Pablo Dante

Debugg de un Procedimiento o Source

Publicado por Pablo Dante (95 intervenciones) el 27/03/2024 14:09:45
Hola Marcelo
Una pregunta respecto del Source "ValidaCuit".
Las variables:
Hay que definirlas!!??
Me traen el siguiente Error:
Error : Expected: <statement> <INT> <REAL> <DECIMAL> <STRING> <LINEBREAK> ( ; ACCEPT ASSERT CHOOSE RAISE TRY BEGIN

Y... otra consulta
La línea de código "IF C"<'0' OR C">'9' THEN CYCLE." es lo mismo que:
"IF C"<'0' OR C">'9'
CYCLE
END"
!!??
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 403
Oro
Ha mantenido su posición en Clarion (en relación al último mes)
Gráfica de Clarion

Debugg de un Procedimiento o Source

Publicado por Marcelo Madelón (332 intervenciones) el 27/03/2024 20:15:29
Las variables que se crean en el momento de ejecución y solo para esa porción de código pueden ser definidas con los caracteres #, $ y "

V# (LONG)
V$ (REAL)
V" (STRING)

En el help podrás ver:

The Clarion language provides three types of implicit variables:
# A label terminated by a # names an implicit LONG.
$ A label terminated by a $ names an implicit REAL.
" A label terminated by a " names an implicit STRING(32).

Con respecto a tu pregunta le vamos a poner espacios para que lo veas más claro:
IF C" < '0' OR C" > '9' THEN CYCLE. (Este punto final equivale a escribir END)

C" es una variable implícita String
'0' como pregunta sobre un string debe usar las comillas simples
'9' igual a '0'

a la pregunta anterior podrías escribirla así:

IF C" < '0' OR C" > '9'
CYCLE
END



DV#=0;N#=2;C"=''
LOOP I#=LEN(CLIP(Cuit))-1 TO 1 BY -1 ! Hace un loop desde el primer caracter desde la derecha. Desde el último hasta el primero.
C"=SUB(Cuit,I#,1) ! Carga el valor que se encuentra en la posición I# y que toma 1 caracter, va de 1 en 1 desde atrás al principio
IF C"<'0' OR C">'9' THEN CYCLE. ! si C" es < a 0 y mayor a 9 regresa al loop
DV#+=(C"*N#) ! Suma a DV# el valor de C" * N#
N#+=1 ! Suma 1 a N#
IF N#>7 THEN N#=2. ! Hace la validación y le da valor 2 si N# es > 7
END ! Fin del Loop
DV#=11-(DV#%11) ! Obtiene el módilo de 11 y resta 11 - el módulo
IF DV#>9 THEN DV#=0. ! Si DV# es > 9 le carga 0 a DV#
IF CLIP(Cuit)=SUB(CLIP(Cuit),1,LEN(CLIP(Cuit))-1)&FORMAT(DV#,@n1)
RETURN 1
ELSE
RETURN 0
END
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 403
Oro
Ha mantenido su posición en Clarion (en relación al último mes)
Gráfica de Clarion

Debugg de un Procedimiento o Source

Publicado por Marcelo Madelón (332 intervenciones) el 27/03/2024 21:45:15
Pablo

algo que olvidé comentar es que la rutina que valida el cuit y el cbu reciben parámetros y devuelven un Byte

En valida cuit fíjate en parameter

(STRING Cuit),BYTE ! Recibe un STRING e internamente la vas a llamar CUIT y devolverá un BYTE

En ValidaCbu también recibe parámetros

(STRING Cbu),BYTE


Por lo tanto en el código donde ves Cuit se refiere al string que recibiste

LOOP I# = LEN(CLIP(Cuit)) -1 TO 1 BY -1 ! hace el loop mientras I# sea = al largo de la variable Cuit menos 1 hasta 1 y de a -1
C" = SUB(Cuit,I#,1)
IF C" <'0' OR C" > '9' THEN CYCLE. ! Acá regresa al loop si no encuentra un número. Puede venir con guiones
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Pablo Dante

Debugg de un Procedimiento o Source

Publicado por Pablo Dante (95 intervenciones) el 03/04/2024 13:35:09
Hola Marcelo buen día
Si estendí perfectamente tu explicación.
Algo estoy haciendo mal lo voy a revisar y te comento como me fue.
Saludos y muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 403
Oro
Ha mantenido su posición en Clarion (en relación al último mes)
Gráfica de Clarion

Debugg de un Procedimiento o Source

Publicado por Marcelo Madelón (332 intervenciones) el 03/04/2024 15:13:03
LLAMAR ASI:

En el ejemplo CLI:Cuit y CLI:CBU Son campos de un archivo y lo uso en el Form de Cliente

IF ValidaCuit(CLI:Cuit)=0
MESSAGE('CUIT Inválido!')
SELECT(?CLI:Cuit) ! Regresa al campo CLI:Cuit
CYCLE
END


IF ValidaCbu(CLI:Cbu)=0
MESSAGE('CUIT Inválido!')
SELECT(?CLI:CBU) ! Regresa al campo CLI:CBU
CYCLE
END
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Pablo Dante

Debugg de un Procedimiento o Source

Publicado por Pablo Dante (95 intervenciones) el 04/04/2024 18:50:06
Hola Marcelo
Buen día
Necesito hacerte una consulta...
Pero antes te explico lo que me sucede.
Replique el código (digo el archivo) que me pasaste los otros días.
Defini un Form con un Campo y un Botón para validar.
Tuve alguno inconvenientes pero los solucioné; en resumen ahora valida el CUIL/T que ingreso correctamente.

Cuando lo hago en la App real el mismo código con los parámetros que me indicaste, etc. ... El mismo Source que Valida el CUIT/CUIL siempre me indica que es incorrecto, así lo ingrese bien. No sé que puede estar pasando.
Mi consulta o pregunta es...
El Campo "CLI:Cuit" en tu archivo o tabla de "Cliente" ... cómo lo definiste !!!?
Me refiero a lo siguiente: Data Type, Characters, Screen Picture, etc.
Por qué al campo en mi tabla lo debo haber definido mal ... no sé!?
Cualquier indicación que me puedas brindar me sirve.

Ah !!! me olvidaba cuando tenía esto: VD#;N#;C'' me tiraba error tuve que hacer lo siguiente definirlas localmente o sea Loc:DV de tipo LONG y así con las otras... parece que en la Vers. 8 las cosas funcionana distinto o no sé por que en los ejemplos de la Clarion Wiki pareciera que todo anda sobre rieles. :(

Saludos y gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 403
Oro
Ha mantenido su posición en Clarion (en relación al último mes)
Gráfica de Clarion

Debugg de un Procedimiento o Source

Publicado por Marcelo Madelón (332 intervenciones) el 05/04/2024 00:13:15
Pablo

La definí como Numérica de 11 con cero decimal

Te paso una imagen


CamposCUIT_CBU
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Pablo Dante

Debugg de un Procedimiento o Source

Publicado por Pablo Dante (95 intervenciones) el 05/04/2024 17:28:12
Hola Marcelo
Gracias por la ayuda.
Pero sigo con el mismo problema... siempre el CUIL ingresado es incorrecto y no sé que puede ser.

Por ejemplo mi CUIL es 20222109486 lo ingreso en el Entry del Form y me da Error o sea no es válido...
Pero si lo ingreso de esta forma 20222109480 guarda el registro si problemas o sea no valida el último dígito.
Lo mismo pasa con el CUIL de mi señora igual. La verdad no entiendo.

Seguí todos los pasos que me indicaste tal cual me dijiste y no logro hacer que funciones...

El ódigo del Surce que valida es el siguinte:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
! Rutina de validación CUIL/CUIT
    Loop I# = LEN(CLIP(pinCUILoT)) - 1 To 1 By -1
        Loc:C = Sub(pinCUILoT, I#, 1)
        If Loc:C > '0' Or Loc:C > '9' Then Cycle.
        Loc:DV += (Loc:C * Loc:N)
        Loc:N += 1
        If Loc:N > 7 Then Loc:N = 2.
    End
    Loc:DV = 11 - (Loc:DV%11)
 
If Loc:DV > 9 Then Loc:DV = 0.
 
!Loc:Longitud = LEN(CLIP(pinCUILoT))
 
If CLIP(pinCUILoT) = Sub(CLIP(pinCUILoT),1,LEN(CLIP(pinCUILoT))-1)&FORMAT(Loc:DV,@n1)
        RETURN 1
Else
        RETURN 0
End

En la propiedad Prototype = (STRING pinCUILoT),BYTE y el parámetro en el Actions (STRING pinCUILoT) esto del lado del Source(ABC).

En el Form de ingreso de los datos en Accepted del Entry VEN:CUIL tengo lo siguiente:
1
2
3
4
5
6
!Validar CUIL o CUIT
IF ValidarCUILoT(VEN:CUIL) = 0
    MESSAGE('EL CUIL INGRESADO ES INCORRECTO.','Atención',ICON:EXCLAMATION)
    SELECT(?VEN:CUIL)
    CYCLE
END
Y del lado del DCT, en la Tabla, cambie el tipo de dato del campo como me recomendaste.
La verdad no le puedo encontrar la vuelta... algo estoy haciendo mal o me falta definir ...
Una conslta más ... Cuándo cambias el Tipo de Dato de un campo en la Tabla; eso; te afecta en este caso el Entry en el Form de carga!!!?
Me refiero a que antes al campo CUIL lo tenía como STRING y lo cambie a DECIMAL eso afecta en algo del lado de la App!!!???
Por que hice los cambios e impacte nuevamente en el DCT y la App y no me generó nigún error... por eso pregunto
Saludos y gracias por la paciencia sigo investigando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 403
Oro
Ha mantenido su posición en Clarion (en relación al último mes)
Gráfica de Clarion

Debugg de un Procedimiento o Source

Publicado por Marcelo Madelón (332 intervenciones) el 05/04/2024 23:12:06
Pablo

He probado con el cuit 20222109486 y no me da inválido.

En el form lo tengo en punto embebido:

TakeEvent
....... Top of CYCLE/BREAK support
.............. Parent call

! Por acá pasa cada vez que aceptas un campo, un botón, etc
CASE ACCEPTED()
OF ?PRF:Cuit ! Cuando acepta el Cuit
IF ValidaCuit(PRF:Cuit) = 0 ! llama a ValidaCuit enviando como parámetro el campo PRF:Cuit que es el cuit del Profesional
MESSAGE('CUIT Inválido!')
SELECT(?PRF:Cuit)
CYCLE
END
OF ?PRF:CBU ! Cuando acepta el Cbu
IF ValidaCbu(PRF:Cbu) = 0 ! llama a ValidaCbut enviando como parámetro el campo PRF:Cbu que es el cbu del profesional
MESSAGE('CUIT Inválido!')
SELECT(?PRF:CBU)
CYCLE
END
END


! En ValidaCuit en Prototype no tienes que tocar nada. debe quedar así:

(STRING Cuit),BYTE ! eso te dice que estás recibiendo un string y que internamente se va a llamar Cuit

! Lo mismo para ValidaCbu

(STRING Cbu),BYTE


! A ValidaCuit y ValidaCbu no debes modificarle nada.

Cualquier cosa nos conectamos por remoto y lo vemos.


Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 403
Oro
Ha mantenido su posición en Clarion (en relación al último mes)
Gráfica de Clarion

Debugg de un Procedimiento o Source

Publicado por Marcelo Madelón (332 intervenciones) el 06/04/2024 23:54:49
Te paso una imagen.
No debes modificar en nada los sources que te pasé.
En la llamada debes reemplazar el Cuit tuyo y esperar la respuesta.

Saludos
Valida
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Pablo Dante

Debugg de un Procedimiento o Source

Publicado por Pablo Dante (95 intervenciones) el 08/04/2024 16:11:59
Hola Marcelo.
Buen día
Tengo todo como me indicás en las respuestas del 06/04 , tal cual.
No sé con qué Vers. de Clarion estás trabajando, yo creo que la Vers. 8 EE tiene quilombo con la delcaración o asignación de esas variables o algo le pasa !!??
El error es siempre el mismo
"Expected: <statement> <INT> <REAL> <DECIMAL> <STRING> <LINEBREAK> ( ; ACCEPT ASSERT CHOOSE RAISE TRY BEGIN - C:\empresa\Empresa004.clw:24,4"
Y cuando accedo a la línea me marca como que DV#=0 no le gusta como está asignado.
No lo hace así, con la validación del Email por ejemplo, que es un código que copie de la wiki de Clarion y valida perfectamente...
Me tiene desconcertado ... :(
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 403
Oro
Ha mantenido su posición en Clarion (en relación al último mes)
Gráfica de Clarion

Debugg de un Procedimiento o Source

Publicado por Marcelo Madelón (332 intervenciones) el 08/04/2024 16:53:46
Hola Foro

Les paso un zip con una App y dct donde podrán ver las validaciones.

Cualquier duda avisen.

Saludos desde Venado Tuerto.

Pablo si se te complica nos conectamos por remoto y lo vemos.
Ahora tengo un poco mas de tiempo.

Estoy investigando como calcular el CRC de un String
calculado de acuerdo con el estándar ISO/IEC 13239 usando el polinomio '1021' (hex) y un valor inicial 'FFFF' (hex).

Si alguien sabe algo de esto se los agradeceré.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Pablo Dante

Debugg de un Procedimiento o Source

Publicado por Pablo Dante (95 intervenciones) el 08/04/2024 19:06:15
Hola Marcelo
Yo de nuevo....
No me preguntés qué hice ... qué pasó ... por qué ni yo sé que songo hice!!!?? :D
Me fijé en el Clarion Wilki que había otro código que valida:
(igual tuve que cambiar varias cosas porque me tira el error antes mensionado)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
! Rutina de validación CUIL/CUIT
! DV#=0; N# = 1; C" = pinCUILoT <<-------- Esto a CL 8 no le gusta así .... ???
 
! Loop I# = LEN(CLIP(pinCUILoT)) - 1 To 1 By -1
Loop I# = LEN(CLIP(pinCUILoT)) To 1 By -1
        C" = pinCUILoT !<<----- Acá lo asigna sin problemas ....
        !C" = Sub(pinCUILoT, I#, 1)
        !If C" > '0' Or C" > '9' Then Cycle.
        !DV# += (C" * N#)
        N# += 1
        !If N# > 7 Then N# = 2.
        If N# > 7
            N# = 2
        End
        DV# += C"[I#] * N#
End
    !DV# = 11 - (DV#%11)
    D# = DV#%11
!If DV# > 9 Then DV# = 0.
 
If D# = 10
    D# = 0
End
 
!If CLIP(pinCUILoT) = Sub(CLIP(pinCUILoT),1,LEN(CLIP(pinCUILoT))-1)&FORMAT(DV#,@n1)
!        RETURN 1
!Else
!        RETURN 0
!End
 
Return (D#)

Generé y verifique en la App y no tuve inconvenientes valida correctamente el CUIL, verifique con el mio el de mi señora y el de un Jubilado y lo valida...
La verdad no sé que tiene el código que me pasaste porque lo verifiqué en otra app con un Form hecho a mano y valida perfectamente. Pero en la App que hice no... raro.
Bueno Marcelo voy a ahora ver lo del CBU y voy a seguir dandole a Clarion.
No te dije que hagamos un Zoom porque como en el laburo tengo todo practico desde acá.
Estamos en contacto
Saludos y muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar