Ver Mensaje Individual
  #7  
Antiguo 10-07-2003
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Reputación: 21
Giniromero Va por buen camino
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.
Responder Con Cita