PDA

Ver la Versión Completa : ayuda con eliminacion y actualizacion de tablas


josi
08-09-2008, 17:45:46
Hola a todos
a ver si me pueden ayudada con esto.

Estoy tratando de hacer una aplicacion de manejo de prestamos
pero ahora me he enfrentado con un problemita y es el siguiente:

Realizo un prestamo el cual el cliente debe pagar por cuotas ya sea semanal,
quincenal o mensual. si el usuario por error hace un pago de cuota ese pago
se debe cancelar ejemplo: un cliente debe 30,000 y un usuario por error hace un pago
de 3,000 le rentan 27,000 lo que quiero es que cuando se elimine ese pago se le sume
a la deuda los 3,000 para que sean los 30,000 de la deuda .

Tengo un form que se llama pagos que es dond se cobran las cuotas estoy unsando
la base de datos access, En este form tengo un boton que me muestra un pequeño form
de donde busco el prestamo por numero de prestamo al cual se le va cobrar la cuota
correspondiente despues que se encuentra el prestamo los datos de ese prestamo se
cargan en el form pagos osea cada edit del frmpagos se llena con los datos que
le corresponden.Este es el codigo del boton realizar pago:procedure TFrmpagos.SpeedButton3Click(Sender: TObject);
var
a:double;
b:double;
c:double;
begin
a:=strtofloat(edit11.Text);//cuota
b:=strtofloat(edit12.Text);//pago avanzado
c:=strtofloat(edit15.Text);//notascredito
pagosquery1.Insert;
pagosquery1.FieldByName('Num_prestamo').AsString:=edit1.Text;
pagosquery1.FieldByName('cedula').AsString:=edit2.Text;
pagosquery1.FieldByName('Nombre').AsString:=edit3.Text;
pagosquery1.FieldByName('Direccion').AsString:=edit4.Text;
pagosquery1.FieldByName('telefono').AsString:=edit5.Text;
pagosquery1.FieldByName('formadepago').AsString:=edit8.Text;

pagosquery1.FieldByName('cuota').AsString:=edit11.Text;
pagosquery1.FieldByName('recargo').AsString:=edit13.Text;
pagosquery1['Cuotaspagas']:=frmbusca.estadoprestamoQuery1['CUOTAS PAGAS']+1; //aqui se genera el numero de la cuota

if checkbox1.Checked=false then //este checkbox es si se va hacer un pago major a la cuota
pagosquery1.FieldByName('Pagoavanzado').Text:='0'
else
pagosquery1.FieldByName('Pagoavanzado').Text:=edit12.Text;

pagosquery1.FieldByName('totalpagado').AsString:=edit16.Text;
pagosquery1.FieldByName('efectivo').AsString:=edit18.Text;

if checkbox2.Checked=false then //este checkbox es si se va cobrar notas de creditos y debito
pagosquery1.FieldByName('notacredito').Text:= ('0')
else
pagosquery1.FieldByName('notacredito').Text:= edit15.Text;
if checkbox2.Checked=false then //este checkbox es si se va cobrar notas de creditos y debito
pagosquery1.FieldByName('notadebito').Text:= ('0')
else
pagosquery1.FieldByName('notadebito').Text:=edit14.Text;
pagosquery1.FieldByName('totalpagado').AsString:=edit16.Text;
pagosquery1.FieldByName('efectivo').AsString:=edit18.Text;
pagosquery1.FieldByName('cambio').AsString:=edit12.Text;
pagosquery1.FieldByName('cambio').AsString:=edit17.Text;
if checkbox2.Checked=true then //si se van van a calcular las notas de debito y credito
pagosquery1['balance']:=frmbusca.estadoprestamoQuery1['balanceactual']-a-b-c // aqui es donde se calcula el balance de la deuda a=cuota,b=pago avanzado.c=notas de credito y debito
else
pagosquery1['balance']:=frmbusca.estadoprestamoQuery1['balanceactual']-a-b;
pagosquery1.Post;
SpeedButton3.Enabled:=false
end;

Pero ahora quiero cancelar pagos hechos por error en un frmcancelacion en cual tengo dos adoquery,
un boton de buscar el pago por numero de recibo que se va a cancelar este es el codigo de busueda:

procedure TFrmcancel.BitBtn1Click(Sender: TObject);
var sql: string;
begin
pagosQuery2.CLOSE;
pagosQuery2.sql.clear;


IF LENGTH (EDIT1.TEXT) > 0 THEN
SQL:= 'SELECT * FROM pagos WHERE Num_recibo =' + (EDIT1.TEXT)
ELSE
SQL:= 'SELECT * FROM pagos';

pagosQuery2.SQL.ADD (SQL);
pagosQuery2.ACTIVE := TRUE;
IF
pagosQuery2.RECORDCOUNT <= 0 THEN
BEGIN
SHOWMESSAGE ('NO HAY PAGOS CON ESTE NUMERO');
END
ELSE
EDIT1.TEXT:= pagosQuery2.FIELDVALUES ['num_prestamo'];

begin
estadoQuery2.CLOSE;
estadoQuery2.sql.clear;


IF LENGTH (EDIT1.TEXT) > 0 THEN
SQL:= 'SELECT * FROM Estadodeprestamos WHERE Numprestamo =' + (EDIT1.TEXT)
ELSE
SQL:= 'SELECT * FROM pagos';

estadoQuery2.SQL.ADD (SQL);
estadoQuery2.ACTIVE := TRUE;
IF
estadoQuery2.RECORDCOUNT <= 0 THEN
BEGIN
SHOWMESSAGE ('NO HAY PAGOS CON ESTE NUMERO');
END
ELSE
EDIT1.TEXT:= estadoQuery2.FIELDVALUES ['numprestamo'];
BitBtn3.Enabled:=true;
BitBtn3.SetFocus;


end;
end;

si miran bien aqui hay dos busquedas en un mismo boton una es la que me busca el pago por numero de recibo(pagosquery2) a cancelar
y la otra es para buscar el prestamo por numero de pretamo(estadoquery2) al cual se le va a sumar la cantidad del pago eliminado
no es lo correcto, pero lo hago asi porque si hago la busqueda solo por el numero de pago a la hora de sumar la
cantidad del pago eliminado al numero prestamo correspondiente se le suma solo al ultimo registro de la tabla prestamos
osea si hay dos prestamos, el prestamo 01 y el prestamo 02,Si el prestamo 01 tiene un pago por error de 600
y se elimina el pago los 600 se le suma al prestamo 02 por eso
lo hago asi lo unico es que en el edit donde pongo el numero de recibo para buscarlo luego que lo en cuentra
en el edit se me cambia el numero de recibo por el numero de prestamo.

Este es el codigo de eliminar el pago lo coloque en el evento beforedelete del adoquerypagos2
procedure TFrmcancel.pagosQuery2BeforeDelete(DataSet: TDataSet);
var
sql:string;
begin
estadoquery2.edit;

estadoQuery2.FieldByName('balanceactual').AsString:=estadoQuery2['balanceactual']+pagosquery2['cuota']+pagosquery2['pagoavanzado']+pagosquery2['notacredito'];
estadoQuery2.Post;
end;
La intencion de esto es si me pueden decir otro metodo de hacerlo, he pensado hacerlo con locate pero no se usarlo bien.


gracias.........

felipe88
08-09-2008, 20:10:40
si el usuario por error hace un pago de cuota ese pago
se debe cancelar ejemplo: un cliente debe 30,000 y un usuario por error hace un pago
de 3,000 le rentan 27,000 lo que quiero es que cuando se elimine ese pago se le sume
a la deuda los 3,000 para que sean los 30,000 de la deuda .
A decir verdad me dio pereza leer bien el mensaje al ver tanto codigo :cool:... sin hembargo, para esta parte en mención podrias usar una tabla "abonos", o usar el UndoLastChange... como sea, sea uno para consultar el ultimo abono o el otro para deshacer la actualización.


PD: Ando un poco distraido asi que perdonenme si me equivoco :eek:...

marcoszorrilla
08-09-2008, 20:12:24
A mí personalmente me gusta más la idea de la tabla abonos, así queda constancia de que hubo una equivocación.

Un Saludo.

josi
10-09-2008, 00:43:13
gracias.......