Anidar varios filtros a la Query de un Formulario

Hilo iniciado por Javier Ríos el 31 de agosto de 2016

Viendo 9 entradas - de la 1 a la 9 (de un total de 9)
  • Autor
    Entradas
  • #9587
    RangoJavier RíosJavier Ríos
    Participante
    APRENDIZ
    999 Rincoins

    Hola,

    ¿Existe alguna forma de filtrar la query original de un formulario para que filtre por varios campos que no pueden estar vacíos?. Es decir, sobre el formulario InventOnhandItem estoy tratando de anular el método executequery del Datasource InventSum para que me muestre todos aquellos registros que tengan algun valor en alguno de los campos PhysicalInvent, ReservPhysical, Picked, AvailPhysical, OrderedSum. Y en caso de que algún registro tenga todos esos campos sin valor de forma simultánea, no mostrar dicho registro en el formulario.

    Entiendo que debo filtrar para que si todos los campos mencionados anteriormente sean distintos de vacío, pero desconozco si se pueden anidar SysQuery y cómo hacerlo. O en caso de tener que utilizar Addrange, cómo anidarlos también.

    Un saludo

    #9588
    RangoXBBXBB
    Participante
    PARTICIPANTE
    1.049 Rincoins

    Deberias utilizar una query Or revisa el siguiente enlace

    http://www.axaptapedia.com/Expressions_in_query_ranges

    Entiendo que en la consulta que te crees deberia ser algo como

    PhysicalInvent != null or  ReservPhysical, != null ……….asi te tomaria todos los registros que tienen algun valor rellenado

    #9589
    RangoJavier RíosJavier Ríos
    Participante
    APRENDIZ
    999 Rincoins

    Sería algo así, pero No se trataría de un OR, sino de un AND. Aunque viendo tu respuesta, creo que puede funcionar.

    Por otro lado, he creado un Display para mostrar el valor de un campo de la InventTable en el Grid pasándole como parámetro el valor de los campos ItemId e InventBatchId. He creado el método Display bajo el Datasource InventBatch, creado los campos en el Grid y estableciendo el valor Datamethod al nombre del método, y el valor Datasource a InventBatch. Cuando ejecuto el formulario, sólo me muestra el valor en el campo Display sobre el primer registro del formulario. Y cuando cambio de registro, vuelve a ejecutar el método Display para ese registro seleccionado, pero mostrándomelo también en el primer registro. ¿Porqué puede ser? ¿qué hago mal?.

    #9590
    RangoXBBXBB
    Participante
    PARTICIPANTE
    1.049 Rincoins

    Si tu metodo esta en el datasource le has tenido que pasar el datasource también por parametros, lo has hecho?

    https://msdn.microsoft.com/en-us/library/aa595058.aspx

    Mirate si quieres el formulario invnetTrans en su dataSource inventTrans, mira el discAmount

    #9591
    RangoJavier RíosJavier Ríos
    Participante
    APRENDIZ
    999 Rincoins

    Sí le he pasado el Datasource por parámetro, pero el Display me pinta siempre el valor obtenido para el primer registro, tambien sobre el resto de registros del formulario (es decir, todos los registros muestran el mismo valor en el campo Display, y no debería ser así). Además, al abrir el formulario no muestra ningún valor en el Display. Es al pasar el puntero del raton sobre cada registro cuando va pintándolos. Eso sí, con valores erróneos correspondientes al primer registro.

    #9592
    RangoXBBXBB
    Participante
    PARTICIPANTE
    1.049 Rincoins

    Le has asignado el dataSource correcto a

    #9593
    RangoJavier RíosJavier Ríos
    Participante
    APRENDIZ
    999 Rincoins

    El método es el siguiente:

    Display Days Maduracion(InventBatch _InventBatch)
    {
        variable = InventBatch::ObtenerMaduracion(_InventBatch.itemid);

        return variable;
    }

    El datasource es el InventBatch, y el método está en el nodo Methods del datasource InventBatch.

    La variable “variable” está declarada en el ClassDeclaration del formulario.

    El control agregado al Grid, tiene configurado el DataMethod a Maduracion, y el datasource a InventBatch.

    El método ObtenerMaduracion, es un metodo estático creado en la tabla InventBatch que consulta a la tabla InventTable y obtiene los días que tarda en madurar un producto parándole por parámetro el ItemId (los días de maduración están introducidos a mano en un campo creado en la InventTable).

    Por lo visto, el problema está en lo que muestra realmente el formulario InventOnHandItem… Se trata de agrupaciones de campos, y por lo tanto el método Display no obtiene los datos correctamente cuando se utilizan dimensiones. He visto diversos artículos sobre el tema, pero creo que debido a las versiones que utilizan, no consigo adaptarlos a mi propósito. ¿Estoy haciendo algo mal?. ¿Alguna forma de hacerlo que funcione actualmente?. Tengo la versión 2012 R3 CU10.

    #9594
    RangoJavier RíosJavier Ríos
    Participante
    APRENDIZ
    999 Rincoins

    Aquí está la solución al Display sobre el formulario InventOnHandItem. Tanto en el propio artículo, como a través de los métodos propuestos en los comentarios de Nickneem y Martin Walker. Los tres métodos funcionan:

    http://daxmusings.codecrib.com/2011/10/forum-advanced-display-method-querying.html

    Respecto a la query mediante la cual pueda anidar rangos mediante AND, aún estoy intentando obtener una solución…

    #9595
    RangoJavier Cumbreño DoradoJavier Cumbreño Dorado
    Participante
    APRENDIZ
    999 Rincoins

    Prueba a decirle lo siguiente: solo pon el rango si campo INVETSUM.CLOSED = NO, entonces tiene valores en esos campos y solo te saldrán los registros que tu quieres.

Viendo 9 entradas - de la 1 a la 9 (de un total de 9)
  • Debes estar registrado para responder a este debate.
Carrito de compra