Page 1 of 2

Como obtener el resultado de una formula (resuelto)

PostPosted: Mon Oct 02, 2023 6:46 pm
by jose_murugosa
Queridos miembros del foro:

La ruta de un archivo se encuentra guardada como una fórmula en un campo de texto que llamaremos oRs:RutaArchivo
oRs:RutaArchivo contiene esta fórmula tal cual: ".\XLSX\inf1_" + Dtos( dFecha ) + "-" + Substr( whoraini, 1, 2 ) + Substr(whoraini, 4, 2 ) + "-" + Substr( whorafin, 1, 2 ) + Substr(whorafin, 4, 2 ) + ".xlsx"

necesito levantar esa fórmula y convertirla en el nombre del archivo algo así como ".\XLSX\inf1_20231002-0900-0959.xlsx"

En el prg las variables dfecha, whoraini y whorafin están visibles.
Traté de obtener el resultado con macrosustitución o con un block de código, pero no lo logré, seguramente por mi torpeza.
Agradezco la orientación que me puedan brindar para resolverlo.
DESDE YA MUUUUCHAS GRACIAS. :D

Re: Como obtener el resultado de una formula

PostPosted: Mon Oct 02, 2023 8:05 pm
by paquitohm
Code: Select all  Expand view

Expande(oRs:RutaArchivo, dFecha, whoraini, whorafin)
RETURN

FUNCTION Expande
Local cDato
PARAMETERS c, dFecha, whoraini, whorafin

cDato:= &c
RETURN cDato

Re: Como obtener el resultado de una formula

PostPosted: Tue Oct 03, 2023 10:59 am
by jose_murugosa
Muchas gracias por contestar.
Este modo ya lo había probado, de todos modos volví a probar, pero con el mismo resultado.

En la función intercalé que mostrara whoraini así:

57 ?whoraini
58 cDato = &c

en la línea 57 me devuelve el valor correcto de whoraini
En la línea 58 me da el siguiente error:

Error BASE/1003 No existe la variable: WHORAINI
no puede resolver la variable dentro del macro. :(

Re: Como obtener el resultado de una formula

PostPosted: Tue Oct 03, 2023 12:04 pm
by paquitohm
¿ Es whoraini una variable o el nombre de un campo ?

Re: Como obtener el resultado de una formula

PostPosted: Tue Oct 03, 2023 12:35 pm
by JoseAlvarez
jose,

si colocas el codigo, es mucho mas facil ayudarte

Re: Como obtener el resultado de una formula

PostPosted: Tue Oct 03, 2023 12:41 pm
by jose_murugosa
Tienen razón, gracias..
pondré un ejemplo simplificado en unos segundos.

Re: Como obtener el resultado de una formula

PostPosted: Tue Oct 03, 2023 1:04 pm
by jose_murugosa
Code: Select all  Expand view

#include 'fivewin.ch'

FUNCTION test
     LOCAL RutaInforme, whoraini, whorafin, dfecha, warchiv
     dfecha      := Date()
     whoraini    :='13:00:00'
     whorafin    :='13:59:59'
     RutaInforme := '"inf1_" + Dtos( dFecha ) + "-" + Substr( whoraini, 1, 2 ) + Substr(whoraini, 4, 2 ) + "-" + Substr( whorafin, 1, 2 ) + Substr(whorafin, 4, 2 ) + ".xlsx"'
     
     warchiv := &Rutainforme
     
RETURN nil
 


Devuelve el error:
Application
===========
Path and name: D:\XBASE-PROYECTOS\EJEMPLO\SOURCE\EJEMPLO.exe (32 bits)
Size: 4,871,168 bytes
Compiler version: Harbour 3.2.0dev (r2104281802)
FiveWin version: FWH 22.10
C compiler version: Borland/Embarcadero C++ 7.0 (32-bit)
Windows 10 64 Bits, version: 6.2, Build 9200

Time from start: 0 hours 0 mins 0 secs
Error occurred at: 10/03/23, 10:08:40
Error description: Error BASE/1003 Variable does not exist: DFECHA

Stack Calls
===========
Called from: d:\xbase-proyectos\ejemplo\source\EJEMPLO.prg => TEST( 10 )

System
======
CPU type: Intel(R) Core(TM) i5-6400T CPU @ 2.20GHz 2208 Mhz
Hardware memory: 12063 megs

Free System resources: 90 %
GDI resources: 90 %
User resources: 90 %

Windows total applications running: 3
1 ,
2 , D:\XBASE-PROYECTOS\EJEMPLO\SOURCE\EJEMPLO.exe

Re: Como obtener el resultado de una formula

PostPosted: Tue Oct 03, 2023 1:53 pm
by paquitohm
Jose,

Me temo que no has probado mi ejemplo
El tuyo tambien funcionara cambiando LOCAL por PRIVATE

Todo se basa en que la tabla de simbolos tenga los simbolos necesarios para hacer la macro sustitucion

Re: Como obtener el resultado de una formula

PostPosted: Tue Oct 03, 2023 1:58 pm
by JoseAlvarez
Jose,

Solo debes quitarle las comillas simples al inicio y al final de la variable cRutaInforme.

no creo que sea necesario el uso de la macro

prueba y me comentas

Code: Select all  Expand view
RutaInforme := "inf1_" + Dtos( dFecha ) + "-" + Substr( whoraini, 1, 2 ) + Substr(whoraini, 4, 2 ) + "-" + Substr( whorafin, 1, 2 ) + Substr(whorafin, 4, 2 ) + ".xlsx"

Re: Como obtener el resultado de una formula

PostPosted: Tue Oct 03, 2023 2:30 pm
by paquitohm
no creo que sea necesario el uso de la macro



Atendiendo al post inicial, si es necesario

Re: Como obtener el resultado de una formula

PostPosted: Tue Oct 03, 2023 3:14 pm
by jose_murugosa
Code: Select all  Expand view
#include 'fivewin.ch'

FUNCTION test()
     LOCAL whoraini, whorafin, dfecha, warchiv, oRs
     
     FWCONNECT oCn HOST 'localhost' USER 'root' PASSWORD 'Sys' PORT 3306 DB 'prueba'
     oRs:=oCn:Rowset( 'Informes' )
     
     
     dfecha      := Date()
     whoraini    :='13:00:00'
     whorafin    :='13:59:59'
     RutaInforme := Alltrim( oRs:RutaInforme )
    warchiv := &RutaInforme    //linea 14
     
RETURN nil


Este código se ajusta mas a lo que hago.
el contenido de oRs:RutaInforme es: "inf1_" + Dtos( dFecha ) + "-" + Substr( whoraini, 1, 2 ) + Substr(whoraini, 4, 2 ) + "-" + Substr( whorafin, 1, 2 ) + Substr(whorafin, 4, 2 ) + ".xlsx"

y devuelve este error:
Application
===========
Path and name: D:\XBASE-PROYECTOS\EJEMPLO\ejemplo.exe (32 bits)
Size: 5,065,728 bytes
Compiler version: Harbour 3.2.0dev (r2104281802)
FiveWin version: FWH 22.10
C compiler version: Borland/Embarcadero C++ 7.0 (32-bit)
Windows 10 64 Bits, version: 6.2, Build 9200

Time from start: 0 hours 0 mins 0 secs
Error occurred at: 10/03/23, 12:15:17
Error description: Error BASE/1003 Variable does not exist: DFECHA

Stack Calls
===========
Called from: d:\xbase-proyectos\ejemplo\source\EJEMPLO.prg => TEST( 14 )

System
======
CPU type: Intel(R) Core(TM) i5-6400T CPU @ 2.20GHz 2208 Mhz
Hardware memory: 12063 megs

Free System resources: 90 %
GDI resources: 90 %
User resources: 90 %

Windows total applications running: 3
1 ,
2 , D:\XBASE-PROYECTOS\EJEMPLO\ejemplo.exe

Re: Como obtener el resultado de una formula

PostPosted: Tue Oct 03, 2023 3:33 pm
by JoseAlvarez
Jose,

Si quieres lo vemos por ANYDESK

Enviame tu codigo anydesk a: jalvarez AT neurosistema DOT online

estoy pendiente para cuando me llegue

Re: Como obtener el resultado de una formula

PostPosted: Tue Oct 03, 2023 3:40 pm
by jose_murugosa
Muchas gracias José.
Ahora me es imposible, pero más tarde cuando me reuna con mi máquina, te lo mando.
Gracias por tu buena voluntad para ayudar.

Re: Como obtener el resultado de una formula

PostPosted: Tue Oct 03, 2023 4:23 pm
by Armando
José Murugosa:

Quita los apóstrofos (') inicial y final y quita el signo del andpersand (&)

Code: Select all  Expand view

     RutaInforme := "inf1_" + Dtos( dfecha ) + "-" + Substr( whoraini, 1, 2 ) + Substr(whoraini, 4, 2 ) + "-" + Substr( whorafin, 1, 2 ) + Substr(whorafin, 4, 2 ) + ".xlsx"
     warchiv := RutaInforme
 


Saludos

Re: Como obtener el resultado de una formula

PostPosted: Tue Oct 03, 2023 4:45 pm
by jose_murugosa
Bueno, finalmente logré combinar todas las ideas aportadas y el uso de codeblock para resolver el problema.

En la tabla informes contiene el campo rutainforme = "inf1_" + Dtos( dFecha ) + "-" + Substr( whoraini, 1, 2 ) + Substr(whoraini, 4, 2 ) + "-" + Substr( whorafin, 1, 2 ) + Substr(whorafin, 4, 2 ) + ".xlsx"

Quedó así:

Code: Select all  Expand view

#include 'fivewin.ch'

FUNCTION test()
     LOCAL whoraini, whorafin, dfecha, warchiv, oRs
     
     FWCONNECT oCn HOST 'localhost' USER 'root' PASSWORD 'Sys' PORT 3306 DB 'prueba'
     oRs:=oCn:Rowset( 'Informes' )
     
     dfecha      := Date()
     whoraini    :='13:00:00'
     whorafin    :='13:59:59'
     RutaInforme := Alltrim( oRs:RutaInforme )
     blk := '{|dfecha, whoraini, whorafin| ' + RutaInforme + ' }'
     warchiv := Eval( &blk, dfecha, whoraini, whorafin )
     ?warchiv
     
RETURN nil
 


y el resultado es:
'inf1_20231003-1300-1359.xls'
el nombre real del archivo.

Gracias a todos por sus ideas.