Voy a ver si consigo explicarme. Supongamos que tienes una tabla Pedidos, con Idpedido(Autonumérico), Cliente, ExistenciasIniciales(de ese producto), etc y una tabla Movimientos con idMovimieto, Idpedido(relacionado con el anterior uno a varios), producto, precio, entrada/salida, etc, Stock y Estado. Y que con ellas has hecho un formulario con subformulario. Supongamos que en el subformulario anotas algo y en el cuadro Stock te ha hecho la suma o la resta y en el control(que supongamos que es un cuadro de texto) has puesto proceso o enviado, y quieres que en caso de poner Cancelado, te "elimine" ese registro y te recalcule los stocks. En el evento Después de actualizar del cuadro de texto Estado puedes poner
If estado="cancelado" then
docmd.runsql"insert into Cancelados(producto,precio,etc)values('" & me.producto & "', " & me.precio & ",etc)"
end if
Y luego en el subformulario pondría un botón Actualizar stock y pondría
docmd.setwarnings false
domd.gotorecord,,acfirst
dim i as integer
for i=1 to me.movimientos.form.recordset.recordcount
stock=dlookup("exitenciasiniciales,"productos","producto='" & me.producto & "'")-dsum("salidas",Movimientos","producto='" & me.producto & "' and estado<>""cancelado"" and idmovimiento<=" & me.idmovimiento & "")
docmd.gotorecord,,acnext
next
Me explico, Vete al primer registro del subformulario y actualiza el control stock, en que restes al valor de las existencias iniciales de ese producto, la suma de las salidas en que el valor no sea cancelado y que sean menores que el valor de idmovimiento.
Como creo que me he explicado fatal, te propongo, si quieres, repito, si quieres, mándame un mensaje(sólo el mensaje) a [email protected] y te mando un ejemplo y sobre él hablamos. Si lo haces, en el asunto del mensaje pon tu alias Raúl, ya que si no sé quien me escribe ni los abro.