PDA

Ver la Versión Completa : Macros de clipper


ArtPortEsp
08-06-2018, 02:28:01
Hola...

los mas jovenes diran, "que diablos es eso?"; bueno les explico....

en aquellos lejanos dias de la programacion en DOS existia un lenguaje de programacion llamado Clipper que manejaba un tipo especial de dato llamado MACRO, en el podia uno guardar ciertas "formulas" que se resolvian al momento de ejecucion "invocando" el operador del macro.

Por ejemplo:

podia uno guardar algo como ((campo1*campo2)/campo3)*factor en un campo en una tabla de datos (ejemplo macro1) y en una parte de la ejecucion del programa, podias hacer algo como:

var = &macro1

Alguno de ustedes estimados profesionales de Delphi, saben si es posible hacer algo similar?

Saludos

ElKurgan
08-06-2018, 07:12:52
Mira los enlaces del final de la página. En concreto, en este (http://www.clubdelphi.com/foros/showthread.php?t=27320) se trató este mismo tema

Saludos

manelb
08-06-2018, 16:32:30
¿Que sistema de reportes empleas??

Lo digo porque yo utilizo quickreport y para lo que tu comentas utilizo una clase que lleva incorporada el componente qrexpression, y sirve precisamente para esto.

Puede que sea un poco rebuscado, pero durante muchos años lo he utilizado en muchas situaciones y me ha dado un magnifico resultado.

Si crees que puede ser de interés lo busco y intento explicarlo.

Saludos

duilioisola
08-06-2018, 20:03:01
Si utilizas bases de datos, puedes generar campos calculados en vistas o directamente en el SQL


SELECT ARTICULO, UNIDADES, PRECIO, (UNIDADES * PRECIO) AS TOTAL
FROM DETALLE_PEDIDO
WHERE
NRO_PEDIDO = :NRO_PEDIDO


Por otro lado puedes crear campos calculados en un Dataset.
Luego, en el evento OnGetText del campo puedes poner cualquier cosa que puedas hacer con Delphi.

procedure DataModule.DetallePedidosARTICULOGetText(...Text : string...);
begin
Text := UpperCase(DetallePedidosARTICULO.AsString);
end;


El Dataset también tiene un evento OnCalcFields en el que puedes dar valores a los campos calculados

procedure DataModule.DetallePedidosCalcFields(...);
begin
DetallePedidosCOMISION.AsFloat := DetallePedidosPRECIO.AsFloat * 20 /100;
DetallePedidosGANANCIA.AsFloat := DetallePedidosPRECIO.AsFloat - DetallePedidosPRECIO_COSTE.AsFloat;
end;

mamcx
08-06-2018, 20:17:47
Por ejemplo:

podia uno guardar algo como ((campo1*campo2)/campo3)*factor en un campo en una tabla de datos (ejemplo macro1) y en una parte de la ejecucion del programa, podias hacer algo como:

var = &macro1


Definitivamente.

Tu "macro"* es un micro compilador y/o interprete. Asi que un evaluador de formulas o componente de script como

https://www.remobjects.com/ps.aspx

es lo que buscas.

Tambien se puede embeder un lenguaje como Lua, Python (que es lo que he usado) o cualquier otro que este en modo interprete.

O hacer el tuyo propio, pero es mas trabajo :)

https://ruslanspivak.com/lsbasi-part1/


--

P.D*: Las "macros" en lenguajes de programacion se refiere mas a la habilidad de hacer meta-programacion (usar el lenguaje para programar el lenguaje), o en otras palabras, para en tiempo de compilacion/ejecucion manipular el "Abstract Syntax Tree" para generar codigo al vuelo, y no como lo que se expone aqui, que es interpretacion.

Puede parecerse a los pre-procesadores como en C, pero eso son unos adefesios diferentes...