Access - Movimientos de inventario. Saldo del dia anterior como Inv inicial del nuevo dia.

 
Vista:
Imágen de perfil de vianney
Val: 29
Ha aumentado su posición en 4 puestos en Access (en relación al último mes)
Gráfica de Access

Movimientos de inventario. Saldo del dia anterior como Inv inicial del nuevo dia.

Publicado por vianney (15 intervenciones) el 03/08/2020 20:10:01
Saludos estimados señores estoy haciendo una aplicacion en access 2010 y necesito calcular la hoja de movimientos de inventario de un articulo. La tabla tiene los campos [Fecha],[Inventario_Inicial],[Ingresos_Inventario], [Egresos_Inventario] y [saldo]. Tengo el siguiente problema: necesito que el Intario inicial del dia 2 sea el saldo del inventario del dia 1. Estoy tratando de hacerlo como campo calculado de la tabla de datos, el tema es que no se como hacer referencia en el campo[ Inventario_Inicial] del dia 2 al campo [saldo] del dia 1. Si alguien me puede indicar como se puede hacer se los agradezco. Saludos a todos y gracias por su atencion.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Movimientos de inventario. Saldo del dia anterior como Inv inicial del nuevo dia.

Publicado por Anonimo (3316 intervenciones) el 03/08/2020 23:19:21
Si el campo 'Saldo' es un campo calculado, una referencia a el no es valida, se tiene que utilizar su origen de datos (la misma operación que da lugar a ese saldo).

La alternativa: recalcular ese dato (suma de entradas - salidas en el periodo que corresponda), es factible hacerlo con funciones de dominio que compartan los criterios (el criterio a compartir es el periodo de tiempo que se abarque)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de vianney
Val: 29
Ha aumentado su posición en 4 puestos en Access (en relación al último mes)
Gráfica de Access

Movimientos de inventario. Saldo del dia anterior como Inv inicial del nuevo dia.

Publicado por vianney (15 intervenciones) el 04/08/2020 13:25:51
Buen dia amigo. Gracias por tu respuesta. A ver si entendi. En el dia dos calcular el saldo con los datos del dia 1? Si entendi bien, la duda que tengo es como hago referencia el el dia 2 a los items del dia 1??? Gracias por tu pronta respuesta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Movimientos de inventario. Saldo del dia anterior como Inv inicial del nuevo dia.

Publicado por Ezel (50 intervenciones) el 04/08/2020 23:45:59
Gracias Anónimo por tu respuesta. Yo me he planteado ese mismo problema trabajando bases de datos de inventarios. Sería muy provechoso que publicaras un ejemplo de una función de dominio aplicada a este caso, en particular la parte de los criterios, que para mí son bastante enredados en este tipo de funciones. Abrazos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Movimientos de inventario. Saldo del dia anterior como Inv inicial del nuevo dia.

Publicado por Anonimo (3316 intervenciones) el 05/08/2020 00:44:17
Dado el tema que se trata (inventarios y funciones de dominio) y su amplitud, acepto que publiques un entorno (que puede ser ficticio) y en base a el se pueden plantear las diversas posibilidades y entre ellas las dudas que desees aclarar.

Ello permitiría la participación de mas usuarios de Access y con ellos mas puntos de vista, además permitiría contrastar los resultados (que todos pueden verificar y emular), lo que suele ayudar a entender los procesos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de vianney
Val: 29
Ha aumentado su posición en 4 puestos en Access (en relación al último mes)
Gráfica de Access

Movimientos de inventario. Saldo del dia anterior como Inv inicial del nuevo dia.

Publicado por vianney (15 intervenciones) el 06/08/2020 15:28:21
Buenos dias. gracias a los participantes. Voy a colocar un ejemplo ideal, use excel para hacer el calculo con la logica como debe quedar. Es una imagen JPG adjunta a este comentario. la tabla tiene la siguiente estructura: [CORRELATIVO] [FECHA] [INVENTARIO_INICIAL] [ENTREDAS] [SALIDAS] [SALDOS] el saldo es un campo calculado de la siguiente manera [SALDO] = [INVENTARIO_INICIAL] +[ENTREDAS] - [SALIDAS] El tema en cuestion es que el [INVENTARIO_INICIAL] en el dia 2 debe ser el [SALDO] del dia 1 o de la transaccion anterior. Y esa es mi duda, como hago en el campo calculado [INVENTARIO_INICIAL] del correlativo N°2 para hacer el calculo del saldo con los datos del correlativo N°1. Muchas gracias anonimo por tu colaboracion.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de jorge
Val: 1.039
Oro
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Movimientos de inventario. Saldo del dia anterior como Inv inicial del nuevo dia.

Publicado por jorge (304 intervenciones) el 06/08/2020 16:13:40
pon una imagen de tu formulario
para darnos una mejor idea saludos vianney.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de vianney
Val: 29
Ha aumentado su posición en 4 puestos en Access (en relación al último mes)
Gráfica de Access

Movimientos de inventario. Saldo del dia anterior como Inv inicial del nuevo dia.

Publicado por vianney (15 intervenciones) el 06/08/2020 17:23:46
Actualice el archivo adjunto con una imagen de la tabla de access y el propio archivo de prueba.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Movimientos de inventario. Saldo del dia anterior como Inv inicial del nuevo dia.

Publicado por Anonimo (3316 intervenciones) el 06/08/2020 18:41:00
Creo que tenemos que redefinir lo que es un inventario, y el concepto día, en lo que has enviado ambas cosas parecen ser lo mismo y no se respeta el ciclo del día (hay DOS apuntes por día no el resumen diario de las operaciones).

Si lo que se desea es tener visible el numero de elementos disponible actualizado (si son cajas de galletas, cuantas quedan para ver si se puede servir un nuevo pedido) yo no lo llamaría inventario, sino Stock o cantidad, la disponible y en tiempo real.

Necesitamos acordar que es cada cosa para que los números cuadren.

Con esos datos, se necesitara poder diferenciar el orden dentro del mismo ciclo (el día), esto es: tener fecha y hora (incluso con segundos si fuera necesario) con el fin de obtener un saldo real registro a registro (o todos los del mismo día compartirán los datos del día anterior).

Si se dispone de ese dato los cálculos -con funciones de dominio y basándonos en la fecha actual- la del sistema ya que se se supone trabajamos 'en tiempo real', se asemejaría a esto en un formulario:
Cuadro de texto 'inventario', su origen de datos:
= DSum( "[Entradas] - [Salidas]", "[movimientos_inventario]" , "[Fecha] < Now()")

Esto es: seria el saldo del registro anterior utilizando la fecha y la hora -por eso se utiliza NOW() --> Ahora()- para diferenciar los que puedan existir a lo largo de la jornada

Si no hay movimientos posteriores y para el calculo del campo saldo, bastaría quitar la condición:
= DSum( "[Entradas] - [Salidas]", "movimientos_inventario")

Si hay movimientos posteriores (estamos en un registro intermedio) se tiene que tener en cuenta ese detalle y la condición seria esta:
= DSum( "[Entradas] - [Salidas]", "movimientos_inventario" , "[Fecha] <= Now()")

Si se desea que presente los de un registro concreto, basta poner como condición la Fecha/hora de ese registro y el signo de igualdad.

Ojo con la s fechas, según donde se utilicen los cálculos (y si cambia la configuración regional) Access puede liar el mes y el día (hay formas de controlar este detalle).

Otro detalle en que puede interferir la configuración regional, es en el separador de expresiones (en España la coma simple es el separador decimal en lugar del punto y como separador de expresiones se utiliza el punto y coma)

Personalmente no haría cálculos en la tabla (ni con los campos calculados que tiene) , sumar y restar es una operación tan elemental, que hacerla en una consulta no supone esfuerzo y un campo calculado y guardado no seria fiel si por alguna circunstancia cualquier registro anterior llegase a modificarse.

Como se podrá apreciar, el mismo criterio (la fecha) es común a todos los cálculos

Nota, utilizar los nombres que Access considera 'palabras reservadas' (ejemplo fecha o date) puede complicar lo sencillo, utilizar como nombre 'algo mas' (L_Fecha , La_Fecha, Fecha1 .....) evita situaciones comprometidas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de vianney
Val: 29
Ha aumentado su posición en 4 puestos en Access (en relación al último mes)
Gráfica de Access

Movimientos de inventario. Saldo del dia anterior como Inv inicial del nuevo dia.

Publicado por vianney (15 intervenciones) el 07/08/2020 21:31:18
Buenas tardes a todos los participantes. Amigo ANONIMO Muchas gracias por disponer de tu tiempo para la asesoria y la ayuda que nos estas prestando. He analizado con detalle toda la explicacion anterior e hice mis pruebas y no obtuve resultados correctos. Por eso de nuevo subo un archivo de zip con fotos de las pantallas y el propio archivo access de prueba. Quiero aclarar varios item comentados anteriormente.

1.-El calculo del saldo se debe realizar por transaccion. Se pueden realizar el mismo dia a horas diferentes transacciones de entredas y salidas, por tal razon es que el saldo debe calcularse por cada transaccion.

2.-El calculo del saldo no puedo hacerlo desde un formulario, ya que deberia ser automatico, sin intervencion de un usuario. Por tal razon y entendiendo lo que tu muy bien explicaste intente hacerlo desde una consulta.

3.-Para hacer mis pruebas simplifique la tabla de datos. Solo con los campos [CORRELATIVO] [FECHA] [ENTRADAS] [SALIDAS] y añadi un campo calculado [CALCULAR] Ahora explico en que consiste el campo calcular. Tiene una funcion logica que verifica SI el correlativo es "1" establece el valor de [CALCULAR] en "NO", para el resto de valores lo establece en "SI".

4.-Voy a calcular el saldo del inventario usando una consulta. La consulta tiene todos los campos de la tabla de Datos, y adicionalmente tiene una columna con el nombre [INV_INICIAL] en esta columna con la siguiente formula:

INV_INICIAL: SiInm([CALCULAR]="NO","0",DSuma([ENTRADAS]-[SALIDAS],"Movimientos_Inventario2",[CALCULAR]="SI"))

Lo que pretendia es que SI el valor CALCULAR es "NO" la consulta asigna el valor de CERO "0". OJO ESTO SOLO VA A OCURRIR EN EL PRIMER CORRELATIVO. Si el valor [CALCULAR] es "SI" usar la funcion de DSUM para calcular el SALDO del dia anterior y que este resultado me quede en [INV_INICIAL] de manera que el saldo al final del dia en la consulta lo calculo con una resta simple [INV_INICIAL]+[ENTRADAS]-[SALIDAS]

Pero los resultados que me emite la consulta no se ajustan a lo que necesito conseguir y de verdad no se cual es la razon.

Agradezco su tiempo y comentarios, espero me puedan ayudar y asi compartir para toda la comunidad lo aqui aprendido.

GRACIAS.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Movimientos de inventario. Saldo del dia anterior como Inv inicial del nuevo dia.

Publicado por Anonimo (3316 intervenciones) el 08/08/2020 00:15:08
Creo que has ahorrado tinta donde no deberías....

Esta expresión esta mal construida (independiente de la lógica que se utilice):
INV_INICIAL: SiInm([CALCULAR]="NO";"0";DSuma([ENTRADAS]-[SALIDAS];"Movimientos_Inventario2";[CALCULAR]="SI"))

Las reglas (de Access) exigen que todos los parámetros de las funciones de dominio sean 'expresiones de texto' si me lo permites utilizare tus datos:
[ENTRADAS]-[SALIDAS] ==> MAL
"[ENTRADAS]-[SALIDAS]" ==> BIEN

Si no se cumplen las reglas los resultados (si devuelve alguno) serán imprevisibles (el motor de Access no será capaz de interpretar lo que se le solicita).

Tenemos una fecha, tenemos un autonumerico (o un dato correlativo ascendente), ambos son ascendentes y validos pero ambos imponen condiciones:

El autonumerico: (valor que por ser automático no es modificable ...) si se utiliza como referente y en cualquier momento aparece la necesidad de añadir un dato atrasado .... no dará un resultado correcto

La Fecha si permitirá añadir datos entre medias, pero para dar resultados correctos si hay mas de un dato el mismo dia .... necesitara diferenciarlos (solución: Fecha + hora.....incluso segundo)

Utilizando como referente para el calculo e dato numérico (y correlativo ascendente) lo he bautizado como 'Disponible_0':
1
Disponible_0: DSuma("[ENTRADAS]-[SALIDAS]";"Movimientos_Inventario2";"[correlativo] <=" & [correlativo])

Utilizando como referente para el calculo la fecha (no he puesto imaginación así que):"Disponible_1"
1
Disponible_1: DSuma("[ENTRADAS]-[SALIDAS]";"Movimientos_Inventario2";"[Fecha_mov] <=" & CDoble(CFecha([fecha_mov])))

Cópialos a la consulta y juega a añadir mas datos, con fechas correlativas, duplicando fechas y con fechas desordenadas (la consulta lo debería permitir)
Compara resultados y analiza cual se adapta mejor a tu aplicación

Unas notas:
En la condición (en ambas expresiones) se utiliza el referente 'dentro' y afuera de la expresión,
.- en el primer ejemplo ==> "[correlativo] <=" & [correlativo]

Access utilizara el que esta 'dentro de las comillas' ==> "[correlativo] <=" como el valor del conjunto de registros y el que esta afuera -unido con (&)- como el valor (del campo) del registro que este tratando (la consulta recorre uno a uno los registros)

La segunda, que utiliza la fecha como referente tiene un pequeño problema y es el formato regional, Access (internamente) utiliza para las fechas el formato regional americano, Access en español no y se genera una discordancia en los datos (mes y día intercambiados = resultados aleatorios)

La solución es consiste en 'traducir' la fecha española a la que Access espera encontrar y suelen utilizar el truco de darle formato ... personalmente (en base a que para Access una fecha es un numero... que luego 'disfraza' según el formato regional) utilizo el truco de darle el numero directamente (cuanto menos traductores, menos traidores) por ello al dato se le dan dos lavados, el primero -CFecha([fecha_mov])- traduce el texto en el idioma local a un dato fecha de Access (debería ser suficiente), pero es un texto y puede ser manipulable asi que a numero -CDoble( ........)- y asi los errores son infimos ==> CDoble(CFecha([fecha_mov]))

El valor de ese campo en el registro anterior, se puede obtener así:
1
Anterior: DSuma("[ENTRADAS]-[SALIDAS]";"Movimientos_Inventario2";"[correlativo] <" & [correlativo])

Pregunta: ¿vale la pena guardar datos que se pueden obtener en tiempo de ejecucion y Actualizados?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 6
Ha aumentado su posición en 2 puestos en Access (en relación al último mes)
Gráfica de Access

Movimientos de inventario. Saldo del dia anterior como Inv inicial del nuevo dia.

Publicado por Oswaldo Rodriguez (2 intervenciones) el 01/06/2021 00:06:03
Buen día estimado, yo te recomiendo que lo hagas con código ya que para esas funciones no se usan muchas líneas de código y queda mas profesional, si gustas me escribes al correo: [email protected] y te mando una aplicación para que copies el codigo fuente y te des una idea de como hacerlo.
Te adjunto un demo.
Si no te gusta hacer codigo pues la forma mas facil es que hagas un formulario relacional con el codigo del articulo y le jales de la opción campos existentes el campo saldo y luego con una sentencia if puedes actualizarlo cada vez que se haga un ingreso o egreso.
password de usuario: 12345
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar