Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Sistema LaboratorioBioquimico (https://www.clubdelphi.com/foros/showthread.php?t=69344)

el-mono 11-08-2010 22:27:22

Sistema LaboratorioBioquimico
 
Hola querida gente como les va, voy a hacer una pregunta a ver si alguno me tira una idea ya que no me imagino por donde comenzar solo espero me puedan entender.


Me encargaron un sistema para un laboratorio bioquimico, este laboratorio cuenta con un sistema en DOS que quieren cambiar.
Mi primer escollo es una caracteristica que tiene este programejo y que es le da la posibilidad al usuario de armar y editar sus propios informes donde el bioquimico pondra las variables que se imprimiran (Hemoglobina = 25.36% y cosa asi)
como tambien los calculos que haran estas mostrando los resultados mas abajo algo asi como un Memo avanzado calculo (su version en windows)

La pregunta es existe algun componente (Memo) que me valla interpretando lo que escribo y me haga calculos como multiplicar una variable por otra ?

Lo que quiero es un Memo donde valla escribiendo las variables en las ubicaciones donde se imprimiran con sus mascaras y todo y definiendo los calculos que estas harán como multiplicarse por otra.

Espero me entiendan y si no tratare de explicarme mejor.


Saludos
Mario

Caral 11-08-2010 22:36:46

Hola
No creo que exista un componente Memo tan especifico.
Creo que lo mejor seria programar lo que hará el memo en tal caso.
Saludos

Chris 11-08-2010 22:50:55

De hecho yo estoy haciendo un sistema para laboratorios clínicos, del que espero me de de comer en un futuro jajaja. Sin embargo nunca he tenido en cuenta este tipo de interacción/funcionalidad. Estaré atento a seguir este hilo.

En relación a tu pregunta, existen interpretes de formulas como uno de los que viene incluido en la JEDI. Nunca lo he usando pero creo que podrías probarlo y si necesitas adaptarlo, hazlo! no será muy díficil. Sólo que no olvides publicar el código de tus modificaciones (por ley lo tienes que hacer).

saludos

Caral 11-08-2010 22:55:36

Hola
Cita:

Empezado por Chris (Mensaje 373237)
........ Sólo que no olvides publicar el código de tus modificaciones (por ley lo tienes que hacer).

saludos

La ley de los foros :D
Saludos

maeyanes 11-08-2010 22:57:46

Hola...

Aquí lo que necesitas es un gestor de reportes que tenga soporte para que el usuario pueda crear o modificar los reportes en tiempo de ejecución.

Existen varios, algunos de pago y otros opensource, algunos son, así de memoria:
  • ReportBuilder (pago)
  • FastReports (pago)
  • QuickReport (pago - no se si permita modificar en tiempo de ejecución)
  • ReportManager (opensource)
  • Crystal Reports (pago)


Saludos...

AzidRain 11-08-2010 22:59:45

Antes que nada...analiza cuanto vas a cobrar por tal desarrollo para que sobre eso hagas tus cuentas de lo que te vas a tardar en hacerlo con memo o sin memo. Estás partiendo del lugar equivocado pues no se empieza por la intreface (por aquello del memo) sino del proceso, como lo hacen, que resultado esperan, etc. no te bases mucho en que ya tienen un sistema basado en DOS. Es mejor preguntar que necesitan que no tienen ahorita y como les gustaría que funcionara el proceso. Si bien se puede programar algo así tan elaborado como planteas tienen su costo en tiempo (y por ende en dinero) y al final lo que el usuario quiere siempre es mucho menos que lo que los desarrolladores nos imaginamos.

donald shimoda 11-08-2010 23:15:36

Cita:

Empezado por Chris (Mensaje 373237)
Sólo que no olvides publicar el código de tus modificaciones (por ley lo tienes que hacer).

Dependiendo la licencia y el componente que modifique, puede cometer un delito por publicarlo...

Así que primero que consulte.

donald shimoda 11-08-2010 23:17:21

Cita:

Empezado por AzidRain (Mensaje 373240)
Antes que nada...analiza cuanto vas a cobrar por tal desarrollo para que sobre eso hagas tus cuentas de lo que te vas a tardar en hacerlo con memo o sin memo. Estás partiendo del lugar equivocado pues no se empieza por la intreface (por aquello del memo) sino del proceso, como lo hacen, que resultado esperan, etc. no te bases mucho en que ya tienen un sistema basado en DOS. Es mejor preguntar que necesitan que no tienen ahorita y como les gustaría que funcionara el proceso. Si bien se puede programar algo así tan elaborado como planteas tienen su costo en tiempo (y por ende en dinero) y al final lo que el usuario quiere siempre es mucho menos que lo que los desarrolladores nos imaginamos.

Pero te has vuelto loco??? Estas INSINUANDO que debe realizar un análisis de requerimientos???

:p

Chris 11-08-2010 23:20:09

Cita:

Empezado por donald shimoda (Mensaje 373242)
Dependiendo la licencia y el componente que modifique, puede cometer un delito por publicarlo...

Así que primero que consulte.

Sí lo sé. Pero en este caso me refería a que si fuese en el caso que utilizara los componente JEDI. Ya queda la aclaración :)

donald shimoda 11-08-2010 23:22:08

Cita:

Empezado por Chris (Mensaje 373245)
Sí lo sé. Pero en este caso me refería a que si fuese en el caso que utilizara los componente JEDI. Ya queda la aclaración :)

El que avisa no traiciona! ;)

José Luis Garcí 12-08-2010 09:24:25

Por lo que yo entiendo, del primer mensaje, lo que quiere es simplemente, pasar datos de una base de datos a un texto preparado, donde las mascaras sean cambiadas por los datos que ya tenemos, y en todo caso, por algunas variables que tengan el calculo de varios de estos datos, si es así, mírate en los foros, se que casimiro, dio una buena explicación de como hacerlo con word, pero no recuerdo el titulo del post.

En caso contrario, si te refieres a sistemas de formulación y estructuración química, lamento decirte que tendrás que hacerlo a pelo, la primera, aunque no es tan complicado, ya que solo es un listado de componentes y hacer sus cálculos, en cuanto a la estructuración esto es harina de otro costal, en formula matemática, no es tanto problema, en estructuración molecular, no conozco ningún componente que te lo permita, y en expresión científica, conozco uno de delphi que te permite su expresión pero no la tradicional sino en formato rejilla (queda como un Scrable) lo puedes en contrar en torry en las grids.

espero haber podido ayudarte.

Neftali [Germán.Estévez] 12-08-2010 11:36:30

Cita:

Empezado por el-mono (Mensaje 373235)
La pregunta es existe algun componente (Memo) que me valla interpretando lo que escribo y me haga calculos como multiplicar una variable por otra ?

Lo que quiero es un Memo donde valla escribiendo las variables en las ubicaciones donde se imprimiran con sus mascaras y todo y definiendo los calculos que estas harán como multiplicarse por otra.

Creo que el "enfoque" del escollo es incorrecto. Si la idea es que se imprima, meyanes te ha dado la solución.
El Gestor de Reports que selecciones debe tener la posibilidad (o el módulo) de que el usuario cree sus propios reports; No entiendo la necesidad de hacer esto en un memo. :confused::confused:
Si el usuario se configura sus reports podrá colocar los campos deonde desee, aplicar las máscaras que desee y realizar operaciones matemáticas con ellos si lo desea.

el-mono 12-08-2010 15:04:25

Sistema Laboratorio Bioquimico
 
Hola y gracias a todos por sus respuestas que tan amablemente me dieron.Voy a tratar de responde sus preguntas:

Analisis de requerimiento no hare porque el sistema anda muy bien (el anterior) y lo que quieren hacer es una copia fiel del que tienen pero para windows.
La idea de usar un Memo es porque estan acostumbrados a escribir las variables e ir ubicandolas en la posicion que deseen se impriman con las teclas TAB o la barra espaciadora les da mas versatilidad para diseñar sus informes.

Lo de usar Reportes (siempre uso Report Manager) deberia investigar porque la cosa es:
A una persona se le puede realizar varios Analisis entonces al momento de colocar los resultados y mandar a imprimirlos y para ahorrar hojas (imprimen sobre impresora matricial sobre papel continuo) este sistema le permite indicar al doctor sobre que columna desea imprimir cada Analisis (a la hoja la dividen de manera imaginaria en tres columnas) o sea puedo imprimir tres Analisis uno al lado del otro. Esa impresion es para uso interno y le llaman mesada el bioquimico con una regla luego corta el papel en tres y le entrega a quien hara ese Analisis.No se si usar reportes porque no se como hacer para mandarlos a imprimir unos al lado del otro en el mismo papel no se si se puede.

El sistema actualmente trabaja asi, estos son los comandos con los que cuenta el bioquimico para realizar sus informe:

# = Para indicar la cantidad de caracteres a imprimir, y la ubicacion en el informe.
?x = variable a imprimir y a usar para el calculo.
$x = indica una funcion.

Y lo usan asi:

==================== Informe ================================================

Estudio de Globulos en Sangre bla bla bla....

?1 Globulos Rojos = ####
?2 Globulos Blancos = ####

?3 = $1 (?2 - ?1)

Resultados = ?3 ml/g

================= Fin Informe ===============================================

Este seria un informe entonces lo guardan como plantilla, despues lo cargan y llenan las variables (?1 y ?2) y se calcula la ?3 en base a la funcion $1.

Lo que se me ocurrio es guardar esta plantilla y despues para usarla leer linea a linea y crear sobre un form tantos Tedit como variables tenga para hacer los calculos = tengo que hacer pruebas a ver que es lo mejor.

Bien espero haber aclarado mas el panorama.

Me despido con un fuerte abrazo y desde ya gracias por su interes.

Mario

donald shimoda 12-08-2010 15:18:19

Cita:

Empezado por el-mono (Mensaje 373301)
Analisis de requerimiento no hare porque el sistema anda muy bien (el anterior) y lo que quieren hacer es una copia fiel del que tienen pero para windows.

Si entiendes que debe hacer el sistema, ya lo hiciste... :)

el-mono 12-08-2010 17:07:15

Pero lo que necesito es copiar esa característica del programa de ser posible, si no puedo lo hare de otra manera y que el usuario se adapte a la nueva forma de trabajar.

Mario:D

AzidRain 12-08-2010 17:17:42

Nomás que hay pequeño detalle Donald, tal vez ya tenga el análisis, pero está basado en la aplicación DOS. Precisamente lo que hacen los usuarios es prácticamente escribir una plantilla para que el sistema llene los espacios, además de que está basado en el esquema de 80 columnas que corresponden con los 80 caracteres que caben en una impresora matricial.

Una sugerencia podría ser que el sistema les arroje el reporte tal cual, otra más que en lugar de llenarse de papel como lo hacen ahora (y es normal, así están acostumbradas muchas empresas) el bioquímico únicamente capture lo necesario y quien haga el análisis capture lo que le toca y así sucesivamente. En fin, soy medio terco.

Por otro lado, no siempre se puede hacer una copia "fiel" de un sistema basado en DOS y aunque en ocasiones se logra, la aplicación que se obtiene es bastante limitada. Ojo también con tus costos pues probablemente el cliente piense que como ya tiene un sistema y lo que vas a desarrollar se va a basar en eso le debes cobrar menos.

aarmalo 12-08-2010 19:56:06

Bueno en python y otros lenguajes existe algo que se llama expresiones regulares, probablemente puedas usar python detrás y sea el que te analice lo que escribiste en el memo, algo así rápido y simple para mostrar lo que te digo, sería:

Código:

import re

buf="Estudio de Globulos en Sangre bla bla bla...\n\n?1 Globulos Rojos = ####\n?2 Globulos Blancos = ####\n\n\n?3 = $1(?1-?2)\n\nResultados = ?3 mlg/g\n?4 = $2(?3-?2)\nOtro resultado ?4 mlg/g"

expresion=("\?([1-9]\s)[^=]")
r=re.compile(expresion,re.S)
var=r.findall(buf)
print var
expresion=("\?([1-9].)=(.*?)\n")
r=re.compile(expresion,re.S)
var=r.findall(buf)
print var

lo ejecutamos


python prb.py
['1 ', '2 ', '3 ', '4 '] <---Lista las variables
[('3 ', ' $1(?1-?2)'), ('4 ', ' $2(?3-?2)')] <-- Me dice que la variable 3 se va a cargar con la operación representada por ?1-?2 y 4 con la operación ?3-?2

Tienes la función replace, para cuando quieras sustituir las variables con su respectivo valor, en su defecto también puedes hacer uso de las expresiones regulares para reemplazar, es algo muy simple pero extremadamente potente

que tan sólo sería buf.replace("?1","3.141592......")

por ejemplo:
Código:

import re

var1=4.35
var2=2.5
buf="Estudio de Globulos en Sangre bla bla bla...\n\n?1 Globulos Rojos = ####\n?2 Globulos Blancos = ####\n?3 = (?1-?2)\n\nResultados = ?3 mlg/g\n?4 = (?3-?2)\nOtro resultado ?4 mlg/g"
print buf
expresion=("\?([1-9]\s)[^=]")
r=re.compile(expresion,re.S)
var=r.findall(buf)
print var
expresion=("\?([1-9].)= (.*?)\n")
r=re.compile(expresion,re.S)
var=r.findall(buf)
print var
funcion=var[0][1]
funcion=funcion.replace("?1",str(var1))
funcion=funcion.replace("?2",str(var2))
var3=eval(funcion)
print '?3 '
print var3
funcion=var[1][1]
funcion=funcion.replace("?3",str(var3))
funcion=funcion.replace("?2",str(var2))
var4=eval(funcion)
print '?4 '
print var4
bb='?'+var[0][0]+'= '+var[0][1]
buf=buf.replace(bb,'')
bb='?'+var[1][0]+'= '+var[1][1]
buf=buf.replace(bb,'')
buf=buf.replace("?1",str(var1))
buf=buf.replace("?2",str(var2))
buf=buf.replace("?3",str(var3))
buf=buf.replace("?4",str(var4))
print buf

En la salida de este programa tendrías:

Código:

python prb.py
Estudio de Globulos en Sangre bla bla bla...

?1 Globulos Rojos = ####
?2 Globulos Blancos = ####
?3 = (?1-?2)

Resultados = ?3 mlg/g
?4 = (?3-?2)
Otro resultado ?4 mlg/g
['1 ', '2 ', '3 ', '4 ']
[('3 ', '(?1-?2)'), ('4 ', '(?3-?2)')]
?3
1.85
?4
-0.65
Estudio de Globulos en Sangre bla bla bla...

4.35 Globulos Rojos = ####
2.5 Globulos Blancos = ####


Resultados = 1.85 mlg/g

Otro resultado -0.65 mlg/g

Ya es cuestión de echarle imaginación y hacerlo tan complejo como lo quieras hacer. Igual te puedes evitar mucho de esto teniendo una tabla de dos columnas donde la primer columna sean los nombres de las variables e la segunda su valor, de lado derecho o izquierdo de la tabla tener el Memo donde escriban el reporte, así se evitarían poner las formulas dentro de Memo, que despues tendrías que quitar a la hora de la impresión.

Si no te gusta la idea de la tabla bien podría ser sustituida por otro Memo donde ellos sólo escriban

Código:

var1=4
var2=5
var3=var1-var2
var4=var3-var1
etc....

y en el otro Memo

Código:

Reporte bla bla bla

var1 Globulos rojos
var2 Globulos blancos

Resultado var3 mlg/g

Otro resultado var4 mlg/g

También puede dar la opción de abrir una plantilla, la cual, ya sea con el otro memo o la tabla tendría listo las variables para que sólo las llenemos con su valor, por ejemplo que aparezca en el Memo o en la Tabla

var1=
var2=
var3=var1-var2
var4=var3-var1

Jejeje hay una infinidad de soluciones para resolver un problema

Si quieres usar completamente delphi, me imagino que en el foro debe de existir mas información sobre las expresiones regulares en delphi

Buscando rapidamente en internet encontré el siguiente enlace
http://www.latiumsoftware.com/es/articles/00009.php <--TRegExpr

Tal vez te sirva

ContraVeneno 12-08-2010 20:23:01

Cita:

Empezado por maeyanes (Mensaje 373239)
...QuickReport (pago - no se si permita modificar en tiempo de ejecución)...

Sí, si lo hace. El QRDesing te lo permite.

Cita:

Empezado por el-mono (Mensaje 373301)
...
Estudio de Globulos en Sangre bla bla bla....
?1 Globulos Rojos = ####
?2 Globulos Blancos = ####
?3 = $1 (?2 - ?1)
Resultados = ?3 ml/g
...

Lo que no entiendo es para que hacer que el usuario escriba la plantilla, cuando puede "tomar" cosas con el ratón y soltarlas donde quiera... me refiero a que no entiendo porque tiene que ser una "copia fiel" de un programa de DOS, cuando en windows tienes muchas otras facilidades que no se tenían en DOS.


Los reporteadores que te mencionó Maeyanes, tienen muchas opciones para editar un reporte.

el-mono 12-08-2010 20:55:38

Contra-Veneno tenes razon eso no lo discuto y esta mas que bien tus dichos, pero la persona que me encargo el sistema es un Bioquimico de 58 años y le gusta asi o sea la respuesta es por costumbre deberia ser asi, pero no descarto de pleno la opcion que mencionas.

aarmalo gracias me diste un par de ideas que las voy a investigar y esta muuuuy interesante como lo planteas.

En fin ... a trabajar.:rolleyes:

aarmalo 13-08-2010 08:23:39

Por ahí también mencionas, que suelen dividirlo en columnas, me imagino que te sería mas sencillo que la salida fuera en html, por ejemplo

Al principio le pones el número de columnas (de 1 a 2 en este caso) con:
columnas 2 (también se le podría agregar la opción de cuantas veces se repetirá cada reporte)

despues declaras las variables y en el memo de a lado escribes los reportes para cada grupo de variables (no importa si se repiten los nombres de las variables entre cada grupo)



Aquí muestro el código html generado (por lo pronto no interesa poner más que la parte de la tabla)



Y vemos el resultado en el navegador, o en su defecto lo mostramos en algun componente que permita visualizar archivos html



Así sólo te preocuparías por darle el formato adecuado a la tabla, que es mucho más fácil que estarle dando tabulaciones para ubicarlo en la columna que le corresponde.


La franja horaria es GMT +2. Ahora son las 20:49:11.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi