en

MSGuayaquil

Recursos esenciales para el desarrollador .NET

Resolviendo Fórmulas Definidas por el usuario

Último post 06-26-2008 8:08 AM escrito por Nathaly_ec. 3 respuestas.
Página 1 de 1 (4 elementos)
Ordenar mensajes: Anterior Siguiente
  • 06-09-2008 10:49 AM

    • byronProg
    • Contribuyente Top 50
    • Se unió el 05-02-2007
    • Envíos: 7
    • Puntos: 45

    Resolviendo Fórmulas Definidas por el usuario

    Hola a todos, tengo un problema que necesito darle solución ya, pero me come el tiempo y no le veo salida clara, espero que uds, me  puedan dar ayuda, se los agradesco muchisimo.

    El problema q tengo es obteniendo valores para una Fórmula(!Sueldo+0,08+@PORCENTAJE) desde distintos origenes(Objetos de Negocio y Campos de Base de Datos)

    Como ven en el ejemplo necesito resolver esta fórmula, y para eso necesito los valores de las variables,  los valores pueden estar en 2 ubicaciones, las variables q empiecen con "!" son de un objeto de mi proyecto, por ejemplo (EnEmpleado.Sueldo) y las q empiecen con "@" son de un campo de una tabla de mi BD, por ejemplo (el campo "Porcentaje" de la tabla "Parametros"), ahora bien en una List(Of String) almaceno las variables desglozadas de la fórmula original, por ejemplo

    Dim listVariables as List(Of String)

    ......... 

    listVariables[0] = "!Sueldo"

    listVariables[1] = "@PORCENTAJE"

    ya tengo intanciado el objeto EnEmpleado, y su propiedad Sueldo ya tiene un valor, como hago para hacer referencia a esta propiedad(Sueldo) desde el elemento "!Sueldo" para obtener su valor??'

    • Puntos de post: 20
  • 06-11-2008 3:22 PM en respuesta a

    Re: Resolviendo Fórmulas Definidas por el usuario

    Hola, mmm bueno con la informacion que nos das:

    Sabes con anticipacion la lista de variables

    No se si hay mas objetos o campos que se deban reemplazar en tu formula 

    De lo que entiendo el problema es: tienes una cadena de caracteres que es la formula, ya sabes las posibles variables que intervienen, tienes N objetos cuya propiedad Valor debe ir en su respectiva variable, cada variable representa un objeto distinto, lo mismo para lo que viene de la bdd, al final debes tener la formula con los valores que tengan los objetos.

    Para la solucion se me ocurre que puedes hacer algo asi en el caso de los objetos (si te sirve pueden encapsular lo que venga de la bdd en un objeto):

    1. Define una interfaz:

    IOperando

    {

    string Variable {get; set;}

    double Valor {get; set;}

    }

    2. Quita la propiedad Valor (si ya la tienen) de tus objetos e implementa en cada uno esta interfaz.

    Cada objeto en la propiedad Valor debera retornar obviamente el valor numerico que debera ir en la formula

    En la propiedad Variable debe ir el nombre de la variable que el objeto representa (ej "!Sueldo")

    3. Crea una List<IOperandos> y agregale todos los objetos (ej listaOperandos).

    4. Actualiza la formula asi:

    foreach (IOperando opr in listaOperandos)

    {

    formula = formula.Replace(opr.Variable, opr.Valor.ToString());

    }

    Donde formula = "!Sueldo+0,08+@PORCENTAJE"

    El codigo no lo he compilado, asi que no recomiendo Copy&Paste. Pero esto deberia hacer el cambio de las variables por los valores, es lo primero que se me ocurre basando en lo que entiendo del problema.

    http://blackout360.wordpress.com/
    • Puntos de post: 20
  • 06-11-2008 6:36 PM en respuesta a

    • byronProg
    • Contribuyente Top 50
    • Se unió el 05-02-2007
    • Envíos: 7
    • Puntos: 45

    Re: Resolviendo Fórmulas Definidas por el usuario

    Que tal Cesarin2006, te agradesco mucho por la colaboración, pero creo q no me explique muy bien, y te pido disculpas, a estas alturas te comento q ya resolví el problema, puede q no sea la solución más elegante pero ya tengo algo para más adelante mejorar, veras lo q pasaba con mi proble era lo siguiente:En un rol hay datos que se denominan "rubros(Subsidio Familiar x ejemplo)" que pueden tener : un valor fijo, una fórmula, o un valor q le asigne un usuario, según el rubro, estos rubros son calculados en el momento de generar el rol, ahora, para los rubros ó transacciones como yo les llamo, emplee un objeto algo parecido a esto:

    Transaccion: Id(bigint), Descripcion(varchar), Abreviatura(varchar), ValorFijo(decimal), Formula(Varchar), Vigente(bool), etc....

    "Transaccion" es el objeto y el resto son las Propiedades del objeto transaccion

    en la Propiedad Fórmula almaceno la formula para calcular ese rubro, en caso de tener Fórmula, entonces, cuando genere el rol escoge al primer empleado, y recorre una por una las transacciones, verifica que tipo de valor guarda(Formula ó  Valor Fijo), para el caso de q sea Fórmula la desgloza para solo tener las variables q usa, las variables pueden ser la propiedad de un objeto, estas variables las identifico por que delante de ellas poseen el simbolo ( "!" por ejemplo "!Sueldo" ), entonces, debe ubicar la instancia del objeto, recorrer las propiedades de ese objeto para comparala con la Propiedad, obviamente sin el simbolo ("!"), y devolveme el valor q tenga, para usarlo en el cálculo...no se si con esto aclaro mi problema...pero ya lo tengo resuelto, lo que hice fue:

    1: obtener el tipo de la instancia del objeto q identifiqué q posee la Propiedad,

    2:del tipo, obtuve las propiedades con GetProperties y las almacene en una variable lista de PropertyInfo() ,

    3:recorri la lista para ubicar la propiedad por el nombre,

    4:y obtuve su valor, esto era todo lo q necesitaba hacer, y yo estaba rompiendome la cabeza pensando en otras cosas, igual te agradezco la cooperación hay algunos datos interesantes q me pueden servir para mejorar mi solución...Saludos y Exitos...Yes

    • Puntos de post: 20
  • 06-26-2008 8:08 AM en respuesta a

    • Nathaly_ec
    • Contribuyente Top 10
    • Se unió el 04-22-2007
    • Envíos: 63
    • Puntos: 1,460

    Re: Resolviendo Fórmulas Definidas por el usuario

    aaa

    • Puntos de post: 5
Página 1 de 1 (4 elementos)
© 2007 MSGuayaquil. Todos los derechos reservados.
Powered By IIS 6 Powered By ASP.NET 2.0 Ofrecido por Community Server (Commercial Edition) Powered By SQL Server 2005
Creado y Administrado por Julio Casal