procedure TFormRptConsultaMantenimientos.tCalculoFormulasSumatorio( sender: TObject; Var Value: String );
begin
If ListaFormatoCampos.Strings[ ( Sender As TppVariable ).Tag ] <> '' Then
Value := FormatFloat( ListaFormatoCampos.Strings[ ( Sender As TppVariable ).Tag ],
StrToFloat( ListaTotalesSumados.Strings[ ( Sender As TppVariable ).Tag ] ) )
Else
Value := ListaTotalesSumados.Strings[ ( Sender As TppVariable ).Tag ];
end;
procedure TFormRptConsultaMantenimientos.tFormateadoCampo( sender: TObject; Var Value: String );
Var
Valor : String;
ValoresFormato : String;
PosicionComa : LongInt;
ValorFinal : String;
EncontradoComa : Boolean;
PosicionValor : LongInt;
i : LongInt;
begin
Valor := Value; ValoresFormato := ListaValoresSustituir.Strings[ ( Sender As TppDBText ).Tag ];
If ( ValoresFormato <> '' ) Then
Begin
ValorFinal := Value;
EncontradoComa := FALSE;
PosicionValor := Pos( Valor, ValoresFormato );
If PosicionValor <> 0 Then
For i := PosicionValor To Length( ValoresFormato ) Do
If ( Copy( ValoresFormato, i, 1 ) = ']' ) Then
Break
Else If ( Copy( ValoresFormato, i, 1 ) <> ',' ) And EncontradoComa Then
ValorFinal := ValorFinal + Copy( ValoresFormato, i, 1 )
Else If ( Copy( ValoresFormato, i, 1 ) = ',' ) Then
Begin
EncontradoComa := TRUE;
ValorFinal := '';
End;
Value := Trim( ValorFinal );
End;
end;
function TFormRptConsultaMantenimientos.CalcularExpresion( Expresion : String ) : String;
var
i, j : LongInt;
Posicion : LongInt;
Operandos : String;
CampoTabla : String;
Variable : Char;
ExpresionObtenida : String;
SubExpresion : String;
SubValor : String;
Caracter : String;
begin
Try
Expresion := Trim( Expresion );
i := 1;
Calculadora.Expression := '';
Variable := 'A';
ExpresionObtenida := '';
While i <= Length( Expresion ) Do
Begin
Expresion := Trim( Expresion );
If ( Pos( '[', Expresion ) <> 0 ) Then
Begin
Posicion := Pos( '[', Expresion ) - 1;
Operandos := Trim( Copy( Expresion, i , Posicion ) );
Delete( Expresion, i, Posicion );
If ( Operandos <> '' ) Then
Begin
SubExpresion := '';
SubValor := '';
j := 0;
While j < Length( Operandos ) Do
Begin
Inc( j );
Caracter := Copy( Operandos, j, 1 );
If ( Caracter <> ' ' ) Then
If ( ( Caracter >= '0' ) And ( Caracter <= '9' ) ) Or
( Caracter = '.' ) Then
SubValor := SubValor + Caracter
Else
Begin
If ( SubValor <> '' ) Then
Begin
Calculadora.SetVariable( Variable, StrToFloat( SubValor ) );
SubExpresion := SubExpresion + '(' + Variable + ')';
Variable := Chr( Ord( Variable ) + 1 );
SubValor := '';
End;
SubExpresion := SubExpresion + Caracter;
End;
End;
If ( SubValor <> '' ) Then
Begin
Calculadora.SetVariable( Variable, StrToFloat( SubValor ) );
SubExpresion := SubExpresion + '(' + Variable + ')';
Variable := Chr( Ord( Variable ) + 1 );
SubValor := '';
End;
ExpresionObtenida := ExpresionObtenida + SubExpresion;
End;
i := 1;
Expresion := Trim( Expresion );
If ( Copy( Expresion, i, 1 ) = '[' ) Then
Begin
Posicion := Pos( ']', Expresion );
CampoTabla := Trim( Copy( Expresion, i+1 , Posicion-2 ) );
Delete( Expresion, i, Posicion );
i := 0;
Calculadora.SetVariable( Variable, tTablaConsulta.FieldByName( CampoTabla ).AsFloat );
ExpresionObtenida := ExpresionObtenida + '(' + Variable + ')';
Variable := Chr( Ord( Variable ) + 1 );
End
End
Else
Begin
If ( Expresion <> '' ) Then
Begin
SubExpresion := '';
SubValor := '';
j := 0;
While j < Length( Expresion ) Do
Begin
Inc( j );
Caracter := Copy( Expresion, j, 1 );
If ( Caracter <> ' ' ) Then
If ( ( Caracter >= '0' ) And ( Caracter <= '9' ) ) Or
( Caracter = '.' ) Then
SubValor := SubValor + Caracter
Else
Begin
If ( SubValor <> '' ) Then
Begin
Calculadora.SetVariable( Variable, StrToFloat( SubValor ) );
SubExpresion := SubExpresion + '(' + Variable + ')';
Variable := Chr( Ord( Variable ) + 1 );
SubValor := '';
End;
SubExpresion := SubExpresion + Caracter;
End;
End;
If ( SubValor <> '' ) Then
Begin
Calculadora.SetVariable( Variable, StrToFloat( SubValor ) );
SubExpresion := SubExpresion + '(' + Variable + ')';
Variable := Chr( Ord( Variable ) + 1 );
SubValor := '';
End;
ExpresionObtenida := ExpresionObtenida + SubExpresion;
Expresion := '';
End;
i := 0;
End;
Inc( i );
End;
Calculadora.Expression := ExpresionObtenida;
Result := FloatToStr( Calculadora.Value );
Except
Result := '0';
End;
end;
procedure TFormRptConsultaMantenimientos.ppVariable2GetText(
Sender: TObject; var Text: String);
begin
Text := NombreEmpresaCtb;
end;
procedure TFormRptConsultaMantenimientos.tBuscarDatoCampoRelacionado(Sender: TObject; var Text: String);
Var
PosicionArray : LongInt;
TablaRelacionada : String;
IndiceRango : String;
CamposMaestro : String;
CamposRelacionado : String;
CampoDevolver : String;
PosicionPuntoComa : LongInt;
CampoRangoMaestro : String;
CampoRangoRelacionado : String;
begin
PosicionArray := ( Sender As TppDBText ).Tag;
CamposMaestro := ListaTablasRelacionadasCamposMaestro[ PosicionArray ];
CamposRelacionado := ListaTablasRelacionadasCamposRelacionado[ PosicionArray ];
CampoDevolver := ListaTablasRelacionadasCampoDevolver[ PosicionArray ];
Text := '';
Try
ListaTablasRelacionadas[ PosicionArray ].SetRangeStart;
While Length( CamposRelacionado ) > 0 Do
Begin
PosicionPuntoComa := Pos( ';', CamposMaestro );
If PosicionPuntoComa = 0 Then
PosicionPuntoComa := Length( CamposMaestro ) + 1;
CampoRangoMaestro := Trim( Copy( CamposMaestro, 1, PosicionPuntoComa - 1 ) );
Delete( CamposMaestro, 1, PosicionPuntoComa );
PosicionPuntoComa := Pos( ';', CamposRelacionado );
If PosicionPuntoComa = 0 Then
PosicionPuntoComa := Length( CamposRelacionado ) + 1;
CampoRangoRelacionado := Trim( Copy( CamposRelacionado, 1, PosicionPuntoComa - 1 ) );
Delete( CamposRelacionado, 1, PosicionPuntoComa );
If tTablaConsulta.FieldByName( CampoRangoMaestro ).DataType = ftString Then
ListaTablasRelacionadas[ PosicionArray ].FieldByName( CampoRangoRelacionado ).AsString :=
tTablaConsulta.FieldByName( CampoRangoMaestro ).AsString
Else If tTablaConsulta.FieldByName( CampoRangoMaestro ).DataType = ftInteger Then
ListaTablasRelacionadas[ PosicionArray ].FieldByName( CampoRangoRelacionado ).AsInteger :=
tTablaConsulta.FieldByName( CampoRangoMaestro ).AsInteger
Else If tTablaConsulta.FieldByName( CampoRangoMaestro ).DataType = ftSmallInt Then
ListaTablasRelacionadas[ PosicionArray ].FieldByName( CampoRangoRelacionado ).AsInteger :=
tTablaConsulta.FieldByName( CampoRangoMaestro ).AsInteger
Else If tTablaConsulta.FieldByName( CampoRangoMaestro ).DataType = ftFloat Then
ListaTablasRelacionadas[ PosicionArray ].FieldByName( CampoRangoRelacionado ).AsFloat :=
tTablaConsulta.FieldByName( CampoRangoMaestro ).AsFloat
Else If tTablaConsulta.FieldByName( CampoRangoMaestro ).DataType = ftDateTime Then
ListaTablasRelacionadas[ PosicionArray ].FieldByName( CampoRangoRelacionado ).AsDateTime :=
tTablaConsulta.FieldByName( CampoRangoMaestro ).AsDateTime
Else If tTablaConsulta.FieldByName( CampoRangoMaestro ).DataType = ftDate Then
ListaTablasRelacionadas[ PosicionArray ].FieldByName( CampoRangoRelacionado ).AsDateTime :=
tTablaConsulta.FieldByName( CampoRangoMaestro ).AsDateTime
Else If tTablaConsulta.FieldByName( CampoRangoMaestro ).DataType = ftTime Then
ListaTablasRelacionadas[ PosicionArray ].FieldByName( CampoRangoRelacionado ).AsDateTime :=
tTablaConsulta.FieldByName( CampoRangoMaestro ).AsDateTime;
End;
CamposMaestro := ListaTablasRelacionadasCamposMaestro[ PosicionArray ];
CamposRelacionado := ListaTablasRelacionadasCamposRelacionado[ PosicionArray ];
ListaTablasRelacionadas[ PosicionArray ].SetRangeEnd;
While Length( CamposRelacionado ) > 0 Do
Begin
PosicionPuntoComa := Pos( ';', CamposMaestro );
If PosicionPuntoComa = 0 Then
PosicionPuntoComa := Length( CamposMaestro ) + 1;
CampoRangoMaestro := Trim( Copy( CamposMaestro, 1, PosicionPuntoComa - 1 ) );
Delete( CamposMaestro, 1, PosicionPuntoComa );
PosicionPuntoComa := Pos( ';', CamposRelacionado );
If PosicionPuntoComa = 0 Then
PosicionPuntoComa := Length( CamposRelacionado ) + 1;
CampoRangoRelacionado := Trim( Copy( CamposRelacionado, 1, PosicionPuntoComa - 1 ) );
Delete( CamposRelacionado, 1, PosicionPuntoComa );
If tTablaConsulta.FieldByName( CampoRangoMaestro ).DataType = ftString Then
ListaTablasRelacionadas[ PosicionArray ].FieldByName( CampoRangoRelacionado ).AsString :=
tTablaConsulta.FieldByName( CampoRangoMaestro ).AsString
Else If tTablaConsulta.FieldByName( CampoRangoMaestro ).DataType = ftInteger Then
ListaTablasRelacionadas[ PosicionArray ].FieldByName( CampoRangoRelacionado ).AsInteger :=
tTablaConsulta.FieldByName( CampoRangoMaestro ).AsInteger
Else If tTablaConsulta.FieldByName( CampoRangoMaestro ).DataType = ftSmallInt Then
ListaTablasRelacionadas[ PosicionArray ].FieldByName( CampoRangoRelacionado ).AsInteger :=
tTablaConsulta.FieldByName( CampoRangoMaestro ).AsInteger
Else If tTablaConsulta.FieldByName( CampoRangoMaestro ).DataType = ftFloat Then
ListaTablasRelacionadas[ PosicionArray ].FieldByName( CampoRangoRelacionado ).AsFloat :=
tTablaConsulta.FieldByName( CampoRangoMaestro ).AsFloat
Else If tTablaConsulta.FieldByName( CampoRangoMaestro ).DataType = ftDateTime Then
ListaTablasRelacionadas[ PosicionArray ].FieldByName( CampoRangoRelacionado ).AsDateTime :=
tTablaConsulta.FieldByName( CampoRangoMaestro ).AsDateTime
Else If tTablaConsulta.FieldByName( CampoRangoMaestro ).DataType = ftDate Then
ListaTablasRelacionadas[ PosicionArray ].FieldByName( CampoRangoRelacionado ).AsDateTime :=
tTablaConsulta.FieldByName( CampoRangoMaestro ).AsDateTime
Else If tTablaConsulta.FieldByName( CampoRangoMaestro ).DataType = ftTime Then
ListaTablasRelacionadas[ PosicionArray ].FieldByName( CampoRangoRelacionado ).AsDateTime :=
tTablaConsulta.FieldByName( CampoRangoMaestro ).AsDateTime;
End;
ListaTablasRelacionadas[ PosicionArray ].ApplyRange;
If ( ListaTablasRelacionadas[ PosicionArray ].RecordCount <> 0 ) Then
If ListaFormatoCampos.Strings[ PosicionArray ] <> '' Then
Text := FormatFloat( ListaFormatoCampos.Strings[ PosicionArray ],
ListaTablasRelacionadas[ PosicionArray ].FieldByName( CampoDevolver ).AsFloat )
Else
Text := ListaTablasRelacionadas[ PosicionArray ].FieldByName( CampoDevolver ).AsString;
Finally
End;
end;