Voy a tratar de explicarte los errores y cómo solucionarlos.
En primer lugar, como sabes, las tablas de stocks y movimientos han de estar cuadrados para que cuando se realizan inventarios, cierres y valoraciones los datos sean reales y el programa pueda realizar los cálculos correctamente.
Las tablas son:
Articulos_Stock, Articulos_Stock_Ubicaciones, Articulos_Almacenes_Lotes (solo si el artículo lleva lotes), Articulos_Nseries (solo si el artículo lleva números de serie).
Además, estan las tablas Almacen_Hist_Mov y Almacen_Hist_Mov_NSeries (solo si el artículo lleva series, en cuyo caso ambas tablas están enlazadas a través de IdDoc e IdDocmovAlm respectivamente)
Las cantidades que aparecen en la primera (Almacen_Hist_Mov ) deben cuadrar con el sumatorio, según el tipo de movimiento (entrada o salida), de los registros que aparecen en la segunda (Almacen_Hist_Mov_NSeries).
La cuestión es que todas las tablas deben proporcionar la misma información coherente del artículo. Si la información es incoherente y cada tabla nos dice una cosa, la regularización de inventarios no hará que las tablas cuadren. Y la valoración de inventarios también nos mostrará errores.
A continuación te explico las formas de proceder.
Forma de proceder
Lanzar ZZZ_CompruebaStocks. Procedimiento el cual devuelve todos los errores existentes actualmente en los stocks.
Para que sea mas fácil, se debe ir en los artículos uno a uno lanzando el procedimiento:
ZZZ_CompruebaStocks null,4,'Articulo' --parámetros: idalmacen, numdecimales, idarticulo
Se puede ir editando la stored ZZZ_CompruebaStocks y buscar la descripción de error.
A continuación, comprobar la consulta que se ejecuta para lanzar ese error y ejecutarla fuera, adaptándola al artículo y almacén en cuestión.
Explicación errores:
T1_DESCUADRE_MOVS_STOCKS: el sumatorio de los registros de Almacen_Hist_Mov para el artículo y almacén (SUM(Cantidad*Efecto)) difiere del Stock de Articulos_Stock.
T2_DESCUADRE_MOVS_STOCKS_UBICACIONES: el sumatorio de los registros de Almacen_Hist_Mov para el artículo y almacén (SUM(Cantidad*Efecto)) difiere del Stock de Articulos_Stock_Ubicaciones.
S5 Descuadres de Stock de series con Articulos_Stock_Ubicaciones: el sumatorio de las cantidades de Articulos_NSeries para el articulo y almacén (en estado 1,2,4) da diferente del Stock de Articulos_Stock_Ubicaciones.
S6 Descuadres de Stock de series con Articulos_Stock: el sumatorio de las cantidades de Articulos_NSeries para el articulo y almacén (en estado 1,2,4) difiere del Stock de Articulos_Stock.
S7 Movimientos que no cuadran con las cantidades de las series asociadas a él: la cantidad de Almacen_Hist_Mov para el articulo y almacén difiere del sumatorio de la cantidad de Almacen_Hist_Mov_NSeries.
S.8 MOVIMIENTOS DE SERIES VS ARTICULOS_NSERIES: el sumatorio de las cantidades de Almacen_Hist_Mov_NSeries para el articulo y almacén da diferente de la cantidad especificada en Articulos_NSeries.
S9 Movimientos de nº de series sin su correspondiente movimiento en Almacen_Hist_Mov_NSeries: hay registros en Almacen_Hist_Mov para ese artículo, que lleva series y falta el registro correspondiente en Almacen_Hist_Mov_NSeries.
T3_DESCUADRE_MOVS_STOCKS_Lotes: el sumatorio de la cantidad de Almacen_Hist_Mov para el artículo y almacén da diferente del sumatorio de unidades de Articulos_Almacenes_Lotes (hay que agrupar por lotes).
T4_DESCUADRE_MOVS_STOCKS_Propiedades: el sumatorio de la cantidad de Almacen_Hist_Mov para el articulo y almacén da diferente del del sumatorio de unidades de Articulos_Almacenes_Lotes (hay que agrupar por lotes y propiedades).
T5_Movimientos SIN lotes, de artículos CON lotes: Hay movimientos que no llevan lotes para el articulo y almacén y sin embargo el articulo esta marcado para trabajar con lotes.
T6_Movimientos CON lotes, de artículos SIN lotes: Hay movimientos que llevan lotes para el artículo y almacén y sin embargo el artículo no está marcado para trabajar con lotes.
T7_Movimientos SIN lotepropiedades, de artículos CON propiedades y SIN lotes: Hay movimientos que no llevan propiedades para el articulo y almacén y sin embargo el artículo está marcado para trabajar con propiedades
T8_Movimientos CON lotes, de artículos SIN propiedades SIN lotes: Hay movimientos que llevan propiedades para el articulo y almacén y sin embargo el articulo no esta marcado para trabajar con propiedades
T9_Diferencias Articulos_Stock con Articulos_Almacenes_lotes: el Stock de Articulos_Stock para el articulo y almacén da diferente que el sumatorio de unidades de Articulos_Almacenes_Lotes
T10_Diferencias entre Articulos_Stock y Articulos_Stock_Ubicaciones: el Stock de Articulos_Stock para el articulo y almacén da diferente que el sumatorio de stock de Stock de Articulos_Stock_Ubicaciones
T11_Diferencias entre Articulos_Stock_Ubicaciones y Articulos_Almacenes_Lotes: el Stock de Articulos_Stock_Ubicaciones para el articulo y almacén da diferente del sumatorio de las unidades de Articulos_Almacenes_Lotes (hay que agrupar por ubicación)
T12_Articulos Sin lote propiedades de artículos con propiedades: existen registros sin lotes y con propiedades en Articulos_Almacenes_Lotes para el articulo y almacén, que no tiene puesto el LotePropiedad (no trabaja con lotes)
T13_Articulos con lote de artículos sin propiedades ni lotes: existen registros sin lotes y sin propiedades en Articulos_Almacenes_Lotes para el articulo y almacén, que tienen puesto un lote.
S0 Articulos_Nseries sin almacén o ubicación informado: existen registros en Articulos_NSeries para el articulo que no tienen relleno el almacen o la ubicacion
S1 Artículos con series que no tienen series: existen registros en Articulos_NSeries para el articulo y el articulo no trabaja con series
S2. Movimientos con series de artículos que no tienen series: existen registros en Almacen_Hist_Mov_NSeries para el articulo y el articulo no trabaja con series
S3.Numeros de serie en almacén sin movimientos: existen registros en Articulos_NSeries para ese articulo de series en circulacion y no hay movimientos de almacén
S4 Descuadres de Stock de series con Articulos_Almacenes_Lotes: el sumatorio de la cantidad de Articulos_NSeries para el para el articulo y almacén, da diferente del sumatorio de unidades de Articulos_Almacenes_Lotes (agrupando por lote y ubicación).
Hay muchas formas de proceder, se pueden por ejemplo insertar los movimientos faltantes o borrar los sobrantes, eliminar movimientos requerirá desactivar triggers.
Hay casos en que un nº de serie está enlazado a un artículo en articulos_nseries y sin embargo los movimientos están con otro articulo (caso del articulo 0532018)
En los movimientos de almacén tenemos el objeto e iddocobjeto que los generó, podemos ir a las ubicaciones de los objetos y ver los lotes y los nº de serie, nos puede servir para tomar decisiones.
Ejemplo de arreglo de 2 de los errores de '0532018':
begin tran
alter table articulos_nseries disable trigger Articulos_NSeries_UTrig
update articulos_nseries set idarticulo= '99991303002' where nserie='180651-2'
alter table articulos_nseries enable trigger Articulos_NSeries_UTrig
exec zzz_compruebastocks null,4,'0532018'
rollback tran
¿Le ha sido útil este artículo?
¡Qué bien!
Gracias por sus comentarios
¡Sentimos mucho no haber sido de ayuda!
Gracias por sus comentarios
Sus comentarios se han enviado
Agradecemos su esfuerzo e intentaremos corregir el artículo