create table invdife
( cod_articulo varchar2(25),
  cod_bodega   varchar2(3),
  cantidad     number(14,4),
  existe       number(14,4));

declare 
  cursor art is
  select a.cod_bodega,a.cod_articulo,sum(decode(a.tip_movto,'E',a.can_articulo,-a.can_articulo)) cantidad
  from inv_detmovimiento a
  where a.cod_cia  = '001'
  and   a.sucursal = '001'
  and   a.estado='D'
  group by a.cod_bodega,a.cod_articulo;
  vcanexiste number:=0;
begin
   for a in art
   loop
    begin
     select can_existe into vcanexiste 
     from inv_artic_bodega
     where cod_cia    ='001'
     and cod_bodega   =a.cod_bodega
     and cod_articulo = a.cod_articulo;
     exception
       when no_data_found then
           vcanexiste:=0;
    end;
    if  vcanexiste<>a.cantidad then
       insert into invdife values(a.cod_articulo,a.cod_bodega,a.cantidad,vcanexiste);
    end if;
   end loop;
end;

update inv_detmovimiento
set estado='D'
where (cod_cia,sucursal,tip_movto,cod_movto,num_docto,cod_articulo) in
(select  a.cod_cia,a.sucursal,a.tip_movto,a.cod_movto,a.num_docto,a.cod_articulo
from inv_detmovimiento a,inv_encabmovimiento b
where a.cod_cia='001'
and   b.cod_cia='001'
and   a.sucursal=b.sucursal
and   a.tip_movto=b.tip_movto
and   a.cod_movto=b.cod_movto
and   a.num_docto=b.num_docto
and   a.estado<>b.estado);

declare cursor art is
select * from invdife
where cod_bodega='001';
begin
   for a in art
   loop
     update inv_artic_bodega
     set can_existe=can_existe+(a.cantidad-a.existe)
     where cod_cia='001'
     and cod_bodega='001'
     and cod_articulo=a.cod_articulo;

     update inv_lote_artic_bodega
     set can_entrada=can_entrada+(a.cantidad-a.existe)
     where cod_cia='001'
     and cod_bodega='001'
     and cod_articulo=a.cod_articulo;
   end loop;
end;