De acuerdo, trataré de explicarlo mejor.
Detalle de artículo -> stock -> movimientos: La primera fila de la tabla, columna movimiento. Si pone +1, el valor de la columna cantidad final entiendo que ha de ser +1 también, debido a que es la primera fila y parto de un stock inicial de 0 (en ningún sitio he puesto, corrígeme, que tuviera un stock inicial != 0). En las siguientes filas va sumando o restando el valor de la columna movimiento y calculando el valor de la columna cantidad final correctamente. Sin embargo el desfase inicial lo arrastra. En la captura que adjunto, cuál es la causa para que en la primera fila en verde "cantidad final" no tenga el valor 1 en lugar de 2? Si recalculo stock no cambia el comportamiento.
Por otro lado he hecho una consulta en bbdd en la que yo espero que los campos con alias numDiferencia y stock coincidan.
select prov.ref as referencia, prov.num as numComprados, cli.num as numVendidos, prov.num - cli.num as numDiferencia, s.num as stock from (select referencia as ref, sum(cantidad) as num from gestion.lineasfacturasprov group by referencia) prov
inner join
(select referencia as ref, sum(cantidad) as num from gestion.lineasfacturascli group by referencia) cli
on prov.ref = cli.ref
inner join
(select referencia as ref, disponible as num, cantidad from gestion.stocks group by referencia) s
on s.ref = cli.ref
where (prov.num - cli.num) != s.num;
Gracias por su amabilidad y su rápida respuesta.
imagen