Hola a todos:
La situación que hace dias se me presenta es la siguiente:
Organizando parte del código de mi aplicación decidi desglozar gran parte del mismo utilizando consultas como se ve a continuación
Código Delphi
[-]
procedure TDMLiquidacion.liquidaTarifa(pCodigoSuscriptor : Integer);
var QAuxiliarLiquidacion_temporal : TQuery;
codigoServicio_local, codigoRango_local : Integer;
begin
QAuxiliarLiquidacion_temporal:= CrearConsulta;
codigoServicio_local:= 0;
with QAuxiliarLiquidacion_temporal do
begin
Close;
Sql.Text:= ' Select * From Tarifas '+
' where CodigoRango not in (1,2,3,5,6) '+
' And CodigoPeriodoPago =' + IntToStr(getCampo('DatosLiquidacion','CodigoPeriodo')) +
' And CodigoAno =' + IntToStr(getCampo('DatosLiquidacion','CodigoAno')) +
' And CodigoTipoServicio = ' + IntToStr(ObtenerTipoServicio(pCodigoSuscriptor)) +
' And Estrato = ' + IntToStr(obtenerEstrato(pCodigoSuscriptor));
open;
while not eof do
begin
codigoServicio_local:= FieldByName('CodigoServicio').AsInteger;
codigoRango_local:= FieldByName('CodigoRango').AsInteger;
if verificaEstadoSuscriptor(pCodigoSuscriptor) then
if verificaServicioSuscriptor(pCodigoSuscriptor,codigoServicio_local) then
AdicionarRegistro('HistoricoPagos',' NumeroFactura,CodigoSuscriptor,Codigoservicio,CodigoReferencia,' +
' CodigoPeriodo,CodigoAno,CodigoPeriodoOrigen,CodigoAnoOrigen, Clase, Valor,' +
' ValorSubsidio, FechaDePago, Estado, Movimiento, ControlFacturacion, '+
' NumeroFacturaOrigen, CodigoAnoPeriodo,CodigoRango',
IntToStr(0) + ',' + IntToStr(pCodigoSuscriptor) + ','+ IntToStr(codigoServicio_local) + ',' + IntToStr(codigoServicio_local) +
',' + IntToStr(GetCampo('DatosLiquidacion','CodigoPeriodo')) + ',' + IntToStr(GetCampo('DatosLiquidacion','CodigoAno')) +
',' + IntToStr(GetCampo('DatosLiquidacion','CodigoPeriodo')) + ',' + IntToStr(GetCampo('DatosLiquidacion','CodigoAno')) +
',0,' + FloatToStr(obtenerTarifa(codigoServicio_local,codigoRango_local,pCodigoSuscriptor)) +
',' + FloatToStr(obtenerTarifa(codigoServicio_local,codigoRango_local,pCodigoSuscriptor) * obtenerFactorSubsidio(codigoServicio_local,codigoRango_local,pCodigoSuscriptor)) +
',NULL, FALSE,' + chr(39) + 'C' + chr(39) + ',NULL, 0,' + obtenerCodigoAnoPeriodo + ' ,' + IntToStr(codigoRango_local));
next;
end
End;
FreeAndNil(QAuxiliarLiquidacion_temporal);
end;
en orden de ideas varios de los procedimientos se presentan de la forma anterior formando algo así:
Código Delphi
[-]procedure TDMLiquidacion.LiquidarPeriodo(pZona : String; PProgresoGeneral, PProgresoParcial : TGauge );
Var QlistadoSuscriptoresLiquidacion_temporal: TQuery;
CodigoSuscriptor_local, pCodigoSuscriptor : Integer;
PBProgreso_local, PBParcial_local : TGauge;
begin
PBProgreso_local:= TGauge.Create(PProgresoGeneral);
PBParcial_local:= TGauge.Create(PProgresoParcial);
QlistadoSuscriptoresLiquidacion_temporal:= CrearConsulta;
if not verificarCritica then
with QlistadoSuscriptoresLiquidacion_temporal do
begin
Close;
sql.Text:= ' Select codigoSuscriptor ' +
' From Suscriptores '+
' Where Zona in (' + pZona + ')';
open;
PBProgreso_local.MaxValue:= RecordCount;
QlistadoSuscriptoresLiquidacion_temporal.DisableControls;
While not eof do
begin
pCodigoSuscriptor:= FieldByName('CodigoSuscriptor').AsInteger;
borraLiquidacion(pCodigoSuscriptor);
divideLecturas(pCodigoSuscriptor);
liquidaInteresDiario(pCodigoSuscriptor);
liquidaTarifa(pCodigoSuscriptor);
liquidaTarifa(pCodigoSuscriptor,1,GetCampo('Lecturas','Basico','CodigoSuscriptor = ' + IntToStr(pCodigoSuscriptor)));
liquidaTarifa(pCodigoSuscriptor,2,GetCampo('Lecturas','Complementario','CodigoSuscriptor = ' + IntToStr(pCodigoSuscriptor)));
liquidaTarifa(pCodigoSuscriptor,3,GetCampo('Lecturas','Suntuario','CodigoSuscriptor = ' + IntToStr(pCodigoSuscriptor)));
liquidaTarifa(pCodigoSuscriptor,5,GetCampo('Lecturas','Multado','CodigoSuscriptor = ' + IntToStr(pCodigoSuscriptor)));
liquidaPorcentaje(pCodigoSuscriptor);
liquidaNovedadesPeriodo(pCodigoSuscriptor);
liquidaNovedadesFinanciadas(pCodigoSuscriptor);
liquidaSaldoPrepago(pCodigoSuscriptor);
asignaNumeroFactura(pCodigoSuscriptor);
asignaNumeroFacturaOrigen(pCodigoSuscriptor);
PBProgreso_local.Progress:= PBProgreso_local.Progress + 1;
next;
end;
actulizaEstadoLiquidacion(true);
end;
FreeAndNil(QlistadoSuscriptoresLiquidacion_temporal);
end;
bien la cosa que surge es la siguiente como se puede ver se toma una consulta y partiendo de los registro devueltos por la misma se realiza la ejecución de los procesos mensionados; como se dijo al inicio los procesos se guardan en un módulo de datos y los procesos son llamados en una forma con dos barras de Progresos para el caso TGauge, pero no se ve el progreso reflejado en las barras.
en lo que he encontrado relacionado con el tema he encontrado que el BDE (que el lo que utilizo para el trabajo de datos) no tiene sesiones multihilo y que tiende a dar ejecución a lo demás una vez termina.
agradezco de antemano cualquier colaboracion y ayuda
gertorresm
colombia