Validacion de un trigger

From: "Fernando Aguada" <fernandoaguada(at)yahoo(dot)com(dot)ar>
To: "Alvaro Herrera" <alvherre(at)dcc(dot)uchile(dot)cl>
Cc: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Validacion de un trigger
Date: 2005-03-07 19:35:20
Message-ID: 001101c5234c$d03d1d80$fb00a8c0@fernandoa
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola Alvaro,
Gracias por tu respuesta, pero la verdad que no pude resolverlo
El Tema es asi, yo utilizo Visual Foxpro y desde alli me comunico con
Postgres (Version 8.0.1 sobre windows 2000 server).
Yo tengo una carga de Cheques propios, que a su vez se conecta con una modificacion
de Cheques de Terceros, es decir doy de ALTA un CHEQUE PROPIO y a veces al mismo
tiempo doy de BAJA CHEQUES DE TERCERO.
Al principio cuando se inicia el proceso, desde Fox le mando un BEGIN
hago todo desde Fox y cuando confirmo todas las operaciones y se las mando
a Postgres, este ejecuta un trigger,(de la tabla cheques propios)
y si hay errores en los CHEQUES DE TERCERO dados de baja me los detecta,
pero es como que al ejecutarse la validacion los datos en los cheques de tercero
que di de baja vuelven al estado anterior.
No se si me explico, pero todo el trigger en cuestion es el siguiente,
(la ultima validacion, esta en negrita, es la que me genera el problema)

declare wrec int2;
declare wultcaj date;
declare wultiva date;
declare wcaja int2;
declare woper int2;
declare wsuma numeric;

begin
select ccierca into wcaja from paragral;
select cultcaja into wultcaj from paragral;
select cultivac into wultiva from paragral;
select coper into woper from tipocomp where cnume=new.ctipo;

--
-- Controla Fecha
--
if new.cfech='01/01/1900' or new.ccaja='01/01/1900' or new.ccobr='01/01/1900' then
raise exception 'La Fecha de Movimiento ó Caja ó Cobro no Pueden Estar Vacias';
end if;

---
-- Si Lleva Caja
---
if wcaja=1 then
if new.ccaja<=wultcaj then
raise exception 'La Fecha de Caja ya Fue Cerrada';
end if;
else
if new.cimpu>2 then
if new.ccaja<=wultiva then
raise exception 'La Fecha de Comprobante No Puede Ser Anterior o Igual al Ultimo Cierre IVA';
end if;
end if;

end if;

--
-- Controla que la Operacion Pertenezca a Bancos
--
if woper<>3 then
raise exception 'El Codigo de Operación del Comprobante no Pertenece a Bancos';
end if;

--
-- Controla el Banco
--
select count(*) into wrec from bancosp where cban=new.cbanc ;
if wrec<=0 then
raise exception 'El Banco No Existe';
end if;

--
-- Controla el Tipo de Comprobante
--
select count(*) into wrec from tipocomp where cnume=new.ctipo;
if not found then
raise exception 'El Tipo de Comprobante No Existe';
end if;

--
-- Controla la Imputacion
--
if new.cimpu<1 or new.cimpu>4 then
raise exception 'El Codigo de Imputación no es Valida';
end if;

--
-- Controla Retenciones
--
if new.crete<>0 then
if new.crete<>new.cimpret+new.cimpper+new.cretdgr+new.cretgan+new.cretotr then
raise exception 'El Detalle de Retenciones no Coincide con el Total';
end if;
end if;

--
-- Controla Total con Detalle de Formas de Pago si no viene de Compras
--
if new.ctracom=00 then
if new.cneto<>new.cimpefv+new.cimpcht+new.cimpotr then
raise exception 'El Total no Coincide con la Suma de las Formas de Pago';
end if;
end if;

--
-- Controla Cheques de Tercero
--
select count(*) into wrec from chequest where ctracom=new.cnumtra and cori='B';
if wrec>00 then
select sum(cimpo) into wsuma from chequest where ctracom=new.cnumtra and cori='B';

if wsuma<>new.cimpcht then
raise exception 'La Suma de Cheques Ingresados No Concide con el Importe en
Cheques';
end if;
end if;

return new;
end

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message PG&A Consulting 2005-03-07 20:05:49 SET AUTOCOMMIT TO OFF is no longer supported
Previous Message lluitador111 2005-03-07 19:34:24 sincronizar postgres desde oracle