De todas formas, gracias por tu ayuda Charly.
Este es el código de mis amarguras.
Algunos trozos de código no figura, por que esas partes funcionan bien, y no tienen nada que ver con el resto. Lo he quitado para no alargarme, y no liar.
En el form desde el que se abre el que tiene este código, y antes de abrirlo, se ha insertado un nuevo registro, usando append, en
FrmFxMain.TbEcono. Ese registro es el que me da problemas cuando hago post.
//procedure que se activa al pulsar el botón "Aceptar"
procedure TFrmEfePago.BitBtn1Click(Sender: TObject);
var cEmpresa, cRecibo, cAuxRecibo : string;
var lEmpresa, lSigue : boolean;
var nAux : Currency;
var cCodigo : integer;
var dbPos, dbPos2, dbPos3 : TBookMark;
begin
//=====1 COMPROBAMOS SI SE HA SELECCIONADO ALGÚN REGISTRO PARA PAGAR.
// si no hay ninguno seleccionado al pulsar aceptar, salimos sin hacer nada
//=====2 COMPROBAMOS SI SE HA SELECCIONADO ALGUNA FORMA DE PAGO
//=====3 SI LA FORMA DE PAGO ES COMPENSACIÓN,
//nos aseguramos que haya dinero suficiente en el pasivo
//si no hay suficiente dinero en pasivo, lo avisamos y salimos del procedure
//=====4 SI HAY FORMA DE PAGO SELECCIONADA, Y REGISTROS MARCADOS PARA SER PAGADOS
//========AVERIGUAMOS LA EMPRESA QUE LO VA A FACTURAR
//según el código anterior vemos que empresa lo factura
TRY
//ponemos una marca en el registro actual de la tabla TbEcono, que es el del
//registro antiguo que ahora estamos pagando
dbPos2 := TbEcono.GetBookmark;
TbEcono.DisableControls;
// esta tabla, es la que tiene los posibles registros que puedo pagar
TbEcono.First;
While Not TbEcono.EOF Do Begin
//si el campo ASIENTO es igual a 1, es un pago que se ha seleccionado para ser pagado
if TbEconoASIENTO.Value = 1 then begin
//si lEmpresa está como true
IF lEmpresa THEN BEGIN
//la empresa que lo paga es la que está en EMPASO
cEmpresa := TbEmpresasEMPASO.Value;
END
ELSE BEGIN
//la empresa que lo paga es la que está en CODIGO
cEmpresa := TbEmpresasCODIGO.Value;
END;
break;
end;
TbEcono.Next;
End;
FINALLY
TbEcono.GotoBookmark(dbPos2);
TbEcono.FreeBookmark(dbPos2);
TbEcono.EnableControls;
END;
//=====5 CALCULAMOS EL NÚMERO DE RECIBO DE LA TRANSACCIÓN
TbEmpresasAux.Locate('codigo',(cEmpresa), [locaseInsensitive]);
TbForPago.Locate('codigo',(FrmFxMain.TbEconoFORPAGO.AsVariant), [locaseInsensitive]);
{Calcular el número de recibo que vamos a asignar a TbEconoRECIBO}
if TbForPagoNONUMERAR.Value ='T' then begin
cRecibo := 'No Emitido';
end
else begin
cRecibo := TbEmpresasAuxNUMRECIBO.Value;
showmessage ('Recibo anterior' + cRecibo );
cAuxRecibo := '0000000' + inttostr(strtoint(Copy(cRecibo, 4, 7)) + 1);
cAuxRecibo := Copy(cAuxRecibo, length(cAuxRecibo)-6, 7 );
TbEmpresasAux.Edit;
TbEmpresasAuxNUMRECIBO.Value := Copy(cRecibo, 1, 3) +
cAuxRecibo;
showmessage ('recibo próximo' + TbEmpresasAuxNUMRECIBO.AsString );
TbEmpresasAux.Post;
TbEmpresasAux.Refresh;
end;
//guardamos los datos introducidos al abrir este Form para que se nos genere el
//valor del campo CODIGO, y poder trabajar con él después
FrmFxMain.TbEcono.Post;
dbPos3 := FrmFxMain.TbEcono.getbookmark;
FrmFxMain.TbEcono.Refresh;
FrmFxMain.TbEcono.GotoBookmark(dbPos3); //me va siempre al último registro, no al registro en el que estaba
//después tomamos el valor que para este registro tenemos en la tabla econo
cCodigo := FrmFxMain.TbEconoCODIGO.Value;
FrmFxMain.TbEcono.Edit;
//guardamos los cambios de los datos que hemos añadido en la tabla TbEcono, de fxMain
FrmFxMain.TbEconoASIENTO.Value := cCodigo;
FrmFxMain.TbEconoRECIBO.Value := cRecibo;
FrmFxMain.TbEcono.Post;
FrmFxMain.TbEcono.Refresh;
//=====6 SI LA F.P. ERA 90, RESTO AL PASIVO LO QUE SE HA ABONADO
//====7 GUARDO EL NÚMERO DE RECIBO, Y ASIENTO ADECUADO TbEcono
TRY
TbEcono.DisableControls;
TbEcono.First;
While not TbEcono.EOF do begin
if TbEconoASIENTO.Value = 1 then begin
//edito el registro antiguo que estamos pagando
TbEcono.Edit;
//guardo en la tablaEcono, en el campo ASIENTO, el mismo que tenga
//el registro que está abonando
TbEconoASIENTO.Value := cCodigo;
TbEconoRECIBO.Value := cRecibo;
TbEcono.Post;
TbEcono.Refresh;
end;
TbEcono.Next;
end;
FINALLY
TbEcono.EnableControls;
FrmFxMain.TbEcono.Refresh;
END;
end;
__________________
Sonrie al mundo, y el mundo te sonreirá :)
Última edición por Giniromero fecha: 10-07-2003 a las 15:05:48.
|