Inventario


([N1] wmejiaro) #1

Hola amigos:

Tengo una tabla medicinas(maestro) y otra movimientos(plural), la tabla medicinas tiene un singular de plural por índice con resolución de variables locales de fecha como de almacén y modo de buscar menor, para elaborar un inventario a una fecha y a un almacén en particular ingresados en tiempo de ejecución, con un manejador de objeto:

Crear manejador de objeto (sql, proceso INV@Inv_app )
Set variable local de objeto (sql, FCH_INV, FCH_INV)
Set variable local de objeto (sql, ALM, ALM)
Disparar objeto (sql, 3° plano: Servidor (síncrono), BOK)
… ETC

Y el proceso:
Cargar lista medicinas
Recorrer lista lectura/escritura
----Cargar plurales (MOV_ART_FCH_TPO_ID)
------Añadir lista a la salida

Pero salen todos los registros sin respetar la fecha ni que solo debe salir un solo tipo de medicina por vez.

Como se hace en estos caso una simple relación de un singular de plural?

HELP


([N1] wikan) #2

Estás cargando todos los plurales de medicinas, es normal que te devuelva toda la lista.

En principio un enlace singular de plural por índice, resolviendo como menor y la fecha debería. Pero al añadirle el almacén, tienes que tener por fuerza siempre al menos un registro por almacén. Ya que si, al intentar obtener el almacén 2 a 16/09/2015, si o hubiera registro te devolverá un registro del almacén 1.

Tendrías que hacer un búsqueda de los plurales que te devuelva el último registro de movimientos, yo no usaría índices para estos casos.
Por ejemplo, una búsqueda de movimientos con los índices, artículo, almacén, y fecha entre límites. Te quedas solo con el último registro y lo devuelves.


([N1] wmejiaro) #3

Muchas gracias amigo Wikan lo hice tal como me sugeriste, quedo muy bien.

Saludos


([N1] wikan) #4

Me alegro.

Además del detalle de notificiar que lo solucionaste, así los que vienen detrás tienen una referencia.


([N1] wmejiaro) #5

Tienes razón amigo Wikan, pues aquí va para efectuar esto requerimos de una búsqueda (INV) con ID, almacen, fecha y medicina cada uno con sus respectivas partes izquierdas con unas variables, luego el manejador de evento con lo siguiente:
Cesta: Crear cesta local (MOV@Inv_dat, Cesta)
If FCH_INV=""
—Set (FCH_INV, currentDate())
Cargar lista (MEDICINAS@Inv_dat, ID, )
— Recorrer lista sólo lectura
-------Crear manejador de objeto (sql, Búsqueda INV@Inv_app )
-------Set variable local de objeto (sql, FCH_DESDE, setDate(2010,01,01))
-------Set variable local de objeto (sql, FCH_HASTA, FCH_INV)
-------Set variable local de objeto (sql, MED, #ID)
-------Cargar lista (PARAM@Inv_dat, ID, $PARAM@Inv_dat)
---------Recorrer lista sólo lectura
------------Set variable local de objeto (sql, ALM, #ALM.ID)
-------Disparar objeto (sql,BOK)
---------Seleccionar ficha por posición (sysListSize)
---------Leer ficha seleccionada
------------Cesta: Agregar ficha a la cesta (Cesta)
Interfaz: Procesar … etc

Espero que a alguno le sirva o quizás encuentren alguna otra mejora

Saludos


([N1] wikan) #6

Solo un tontería pero bueno, el cargar lista de PARAM lo puedes poner fuera del recorrer lista de medicinas. Una vez obtenido el id no varía y ahora los estás recogiendo cada vez que iteras en la lista de medicinas.


([N1] wmejiaro) #7

No me había percatado así estaría mejor:
Cesta: Crear cesta local (MOV@Inv_dat, Cesta)
Cargar lista (PARAM@Inv_dat, ID, $PARAM@Inv_dat)
——Recorrer lista sólo lectura
———Set (ALM, #ALM.ID)
If FCH_INV=””
-—Set (FCH_INV, currentDate())
Cargar lista (MEDICINAS@Inv_dat, ID, )
— Recorrer lista sólo lectura
——-Crear manejador de objeto (sql, Búsqueda INV@Inv_app )
——-Set variable local de objeto (sql, FCH_DESDE, setDate(2010,01,01))
——-Set variable local de objeto (sql, FCH_HASTA, FCH_INV)
——-Set variable local de objeto (sql, MED, #ID)
——-Set variable local de objeto (sql, ALM, ALM)
——-Disparar objeto (sql,BOK)
———Seleccionar ficha por posición (sysListSize)
———Leer ficha seleccionada
————Cesta: Agregar ficha a la cesta (Cesta)
Interfaz: Procesar …… etc

Gracias de nuevo