lo siento en la vista previa se veia diferente, lo vuelvo a intentar:
Código Delphi
[-]
unit RptConsultaMantRB;
interface
uses
Forms, SysUtils, Dialogs, Graphics, Provider, SqlExpr, DBXpress, SimpleDS, DB, TXComp, ppDB, ppDBPipe, DBClient, DBLocal, DBLocalS,
ppParameter, ppVar, ppBands, ppMemo, ppStrtch, ppRegion, ppCtrls, ppPrnabl, ppClass, ppCache, Classes, ppComm, ppRelatv, ppProd,
ppReport, ppTypes, Printers, ppRichTx, Parser10, ppWWRichEd,
TXRB;
type
TFormRptConsultaMantenimientos = class(TForm)
ppReportConsultaMant: TppReport;
DSTablaConsulta: TDataSource;
ppCabecera: TppHeaderBand;
ppDetalle: TppDetailBand;
ppPiePagina: TppFooterBand;
ppLabelTituloListado: TppLabel;
ppSystemVariable1: TppSystemVariable;
ppSystemVariable2: TppSystemVariable;
ppLine1: TppLine;
ppLine2: TppLine;
ppLabel2: TppLabel;
ppVariable1: TppVariable;
Calculadora: TParser;
tContabilidades: TSQLClientDataSet;
tEmpresasContables: TSQLClientDataSet;
tLogoClientes: TSQLClientDataSet;
tEmpresasComercial: TSQLClientDataSet;
tParamClientes: TSQLClientDataSet;
ppDBPipeline1: TppDBPipeline;
ppLabel1: TppLabel;
ppVariable2: TppVariable;
ExtraOptions1: TExtraOptions;
tSQLConexionGeneral: TSQLConnection;
tSQLConexionGestion: TSQLConnection;
tSQLConexionContabilidad: TSQLConnection;
tTablaConsulta: TSimpleDataSet;
tTablaRelacionada: TSimpleDataSet;
ppParameterList1: TppParameterList;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure DarDeAltaCamposEnReport( TamanyoFuente : Double );
procedure ppVariable1GetText(Sender: TObject; var Text: String);
procedure ppReportConsultaMantPreviewFormCreate(Sender: TObject);
procedure ppVariable2GetText(Sender: TObject; var Text: String);
private
TituloDelReport : String;
ListaCampos : tStringList;
ListaTitulos : tStringList;
ListaFormulas : tStringList;
ListaFormulasExpresion : tStringList;
ListaLongitud : tStringList;
ListaAlineacion : tStringList;
ListaFormatoCampos : tStringList;
ListaSumados : tStringList;
ListaCamposConRango : tStringList;
ListaRangosDesde : tStringList;
ListaRangosHasta : tStringList;
ListaValoresSustituir : tStringList;
ListaTablasRelacionadasSQL : tStringList;
ListaTotalesSumados : tStringList;
MostratPiePagina : Boolean;
NombreEmpresa, NombreEmpresaCtb : String;
CamposMaestroAux : String;
CamposRelacionadoAux : String;
ListaTablasRelacionadas : Array[ 0..10 ] Of TSimpleDataSet;
ListaTablasRelacionadasCamposMaestro : Array[ 0..10 ] Of String;
ListaTablasRelacionadasCamposRelacionado : Array[ 0..10 ] Of String;
ListaTablasRelacionadasCampoDevolver : Array[ 0..10 ] Of String;
function CalcularExpresion( Expresion : String ) : String;
Procedure ActivarConexionesModuloDeDatos( Const tSQLConexionGeneralOrigen, tSQLConexionGestionOrigen, tSQLConexionContabilidadOrigen : tSQLConnection );
Procedure DesactivarConexionesModuloDeDatos( Const tSQLConexionGeneralOrigen, tSQLConexionGestionOrigen, tSQLConexionContabilidadOrigen : tSQLConnection );
Procedure ActivarConexionGeneral;
Procedure ActivarConexionGestion;
Procedure ActivarConexionContabilidad;
Procedure DesactivarConexionGeneral;
Procedure DesactivarConexionGestion;
Procedure DesactivarConexionContabilidad;
protected
procedure tCalculoFormulas( sender: TObject; Var Value: String );
procedure tCalculoFormulasSumatorio( sender: TObject; Var Value: String );
procedure tFormateadoCampo(sender: TObject; var Value: String);
procedure tBuscarDatoCampoRelacionado(Sender: TObject; var Text: String);
procedure ppEtiquetaCampoClick(Sender, aDrawCommand: TObject);
public
end;
procedure EjecutarRptConsultaMantenimientos(
vGlobales : tVariablesGlobales;
Const auxSQLConexionGestion: TSQLConnection;
Const auxSQLConexionGeneral: TSQLConnection;
Const auxSQLConexionContabilidad: TSQLConnection;
Titulo : String;
BaseDeDatos : Integer;
ConsultaTablaSQL : String;
Apaisado : Boolean;
TamanyoFuente : Double;
LstCampos : tStringList;
LstTitulos : tStringList;
LstFormulas : tStringList;
LstFormulasExpresion : tStringList;
LstLongitud : tStringList;
LstAlineacion : tStringList;
LstFormatoCampos : tStringList;
LstSumados : tStringList;
LstCamposConRango : tStringList;
LstRangosDesde : tStringList;
LstRangosHasta : tStringList;
LstValoresSustituir : tStringList;
LstTablasRelacionadasSQL : tStringList;
EmpresaActual, EmpresaCtb, CtbActual : String;
NombreEmpresaActual, NombreEmpresaCtbActual : String ); far; Export;
var
FormRptConsultaMantenimientos: TFormRptConsultaMantenimientos;
FilaTitulos : Integer;
implementation
procedure EjecutarRptConsultaMantenimientos(
vGlobales : tVariablesGlobales;
Const auxSQLConexionGestion: TSQLConnection;
Const auxSQLConexionGeneral: TSQLConnection;
Const auxSQLConexionContabilidad: TSQLConnection;
Titulo : String;
BaseDeDatos : Integer;
ConsultaTablaSQL : String;
Apaisado : Boolean;
TamanyoFuente : Double;
LstCampos : tStringList;
LstTitulos : tStringList;
LstFormulas : tStringList;
LstFormulasExpresion : tStringList;
LstLongitud : tStringList;
LstAlineacion : tStringList;
LstFormatoCampos : tStringList;
LstSumados : tStringList;
LstCamposConRango : tStringList;
LstRangosDesde : tStringList;
LstRangosHasta : tStringList;
LstValoresSustituir : tStringList;
LstTablasRelacionadasSQL : tStringList;
EmpresaActual, EmpresaCtb, CtbActual : String;
NombreEmpresaActual, NombreEmpresaCtbActual : String ); far; Export;
Var
i : LongInt;
TieneFiltros : Boolean;
PosicionNombreEmpresa : LongInt;
PosicionArray : LongInt;
Parametros : String;
auxBaseDeDatos : String;
TablaRelacionada : String;
IndiceRango : String;
CamposMaestro : String;
CamposRelacionado : String;
CampoDevolver : String;
PosicionCorchete : LongInt;
PosicionPuntoComa : LongInt;
CampoRangoMaestro : String;
CampoRangoRelacionado : String;
TipoBaseDatos : LongInt;
Begin
AsignacionValoresGlobales( vGlobales );
FilaTitulos := 60;
If ( Pos( '( ' + NombreEmpresaActual + ' )', Titulo ) <> 0 ) Then
Delete( Titulo, Pos( '( ' + NombreEmpresaActual + ' )', Titulo ), Length( '( ' + NombreEmpresaActual + ' )' ) );
AsignarLaConfiguracionDeLasAplicaciones;
setEmpresaActual := EmpresaActual;
setEmpresaContable := EmpresaCtb;
Try
setContabilidad := StrToInt( CtbActual );
Except
setContabilidad := -1;
End;
Application.CreateForm( tFormRptConsultaMantenimientos, FormRptConsultaMantenimientos );
With FormRptConsultaMantenimientos Do
Try
ActivarConexionesModuloDeDatos( auxSQLConexionGeneral, auxSQLConexionGestion, auxSQLConexionContabilidad );
tContabilidades.DBConnection := tSQLConexionGeneral;
tEmpresasContables.DBConnection := tSQLConexionGeneral;
tLogoClientes.DBConnection := tSQLConexionGeneral;
tEmpresasComercial.DBConnection := tSQLConexionGeneral;
tParamClientes.DBConnection := tSQLConexionGeneral;
tContabilidades.Active := TRUE;
tEmpresasContables.Active := TRUE;
tLogoClientes.Active := TRUE;
tEmpresasComercial.Active := TRUE;
tParamClientes.Active := TRUE;
ppReportConsultaMant.BeginUpdate;
TituloDelReport := Titulo;
ppLabelTituloListado.Caption := TituloDelReport;
ppReportConsultaMant.PrinterSetup.DocumentName := TituloDelReport;
ppReportConsultaMant.ShowAutoSearchDialog := FALSE;
ppReportConsultaMant.Units := utScreenPixels;
If Apaisado Then
Begin
ppReportConsultaMant.PrinterSetup.Orientation := poLandscape;
ppLabelTituloListado.Width := ppReportConsultaMant.PrinterSetup.PaperWidth - 50;
ppLine2.Width := ppLabelTituloListado.Width;
ppSystemVariable2.Left := ppLabelTituloListado.Width - ppSystemVariable2.Width;
End;
ListaCampos.AddStrings( LstCampos );
ListaTitulos.AddStrings( LstTitulos );
ListaFormulas.AddStrings( LstFormulas );
ListaFormulasExpresion.AddStrings( LstFormulasExpresion );
ListaLongitud.AddStrings( LstLongitud );
ListaAlineacion.AddStrings( LstAlineacion );
ListaFormatoCampos.AddStrings( LstFormatoCampos );
ListaSumados.AddStrings( LstSumados );
ListaCamposConRango.AddStrings( LstCamposConRango );
ListaRangosDesde.AddStrings( LstRangosDesde );
ListaRangosHasta.AddStrings( LstRangosHasta );
ListaValoresSustituir.AddStrings( LstValoresSustituir );
ListaTablasRelacionadasSQL.AddStrings( LstTablasRelacionadasSQL );
For i := 0 To ( ListaCampos.Count - 1 ) Do
Begin
ListaFormulas.Strings[ i ] := UpperCase( Trim( ListaFormulas.Strings[ i ] ) );
ListaAlineacion.Strings[ i ] := UpperCase( Trim( ListaAlineacion.Strings[ i ] ) );
ListaSumados.Strings[ i ] := UpperCase( Trim( ListaSumados.Strings[ i ] ) );
ListaCamposConRango.Strings[ i ] := UpperCase( Trim( ListaCamposConRango.Strings[ i ] ) );
ListaTotalesSumados.Add( '0' );
End;
For i := 0 To ( ListaTablasRelacionadasSQL.Count - 1 ) Do
Begin
Parametros := ListaTablasRelacionadasSQL.Strings[ i ];
If Parametros <> '' Then
Begin
PosicionCorchete := Pos( ']', Parametros );
auxBaseDeDatos := Copy( Parametros, 2, ( PosicionCorchete - 2 ) );
Delete( Parametros, 1, PosicionCorchete );
Try
TipoBaseDatos := StrToInt( auxBaseDeDatos );
Except
TipoBaseDatos := 1;
End;
PosicionCorchete := Pos( '[', Parametros );
Delete( Parametros, 1, ( PosicionCorchete - 1 ) );
PosicionCorchete := Pos( ']', Parametros );
TablaRelacionada := Copy( Parametros, 2, ( PosicionCorchete - 2 ) );
Delete( Parametros, 1, PosicionCorchete );
PosicionCorchete := Pos( '[', Parametros );
Delete( Parametros, 1, ( PosicionCorchete - 1 ) );
PosicionCorchete := Pos( ']', Parametros );
IndiceRango := Copy( Parametros, 2, ( PosicionCorchete - 2 ) );
Delete( Parametros, 1, PosicionCorchete );
PosicionCorchete := Pos( '[', Parametros );
Delete( Parametros, 1, ( PosicionCorchete - 1 ) );
PosicionCorchete := Pos( ']', Parametros );
CamposMaestro := Copy( Parametros, 2, ( PosicionCorchete - 2 ) );
Delete( Parametros, 1, PosicionCorchete );
PosicionCorchete := Pos( '[', Parametros );
Delete( Parametros, 1, ( PosicionCorchete - 1 ) );
PosicionCorchete := Pos( ']', Parametros );
CamposRelacionado := Copy( Parametros, 2, ( PosicionCorchete - 2 ) );
Delete( Parametros, 1, PosicionCorchete );
PosicionCorchete := Pos( '[', Parametros );
Delete( Parametros, 1, ( PosicionCorchete - 1 ) );
PosicionCorchete := Pos( ']', Parametros );
CampoDevolver := Copy( Parametros, 2, ( PosicionCorchete - 2 ) );
Delete( Parametros, 1, PosicionCorchete );
ListaTablasRelacionadas[ i ] := TSimpleDataSet.Create( FormRptConsultaMantenimientos );
ListaTablasRelacionadasCamposMaestro[ i ] := CamposMaestro;
ListaTablasRelacionadasCamposRelacionado[ i ] := CamposRelacionado;
ListaTablasRelacionadasCampoDevolver[ i ] := CampoDevolver;
Case TipoBaseDatos Of
0 :
Begin
ListaTablasRelacionadas[ i ].Connection := tSQLConexionGeneral;
End;
1 :
Begin
ListaTablasRelacionadas[ i ].Connection := tSQLConexionGestion;
End;
2 :
Begin
ListaTablasRelacionadas[ i ].Connection := tSQLConexionGestion;
End;
3 :
Begin
ListaTablasRelacionadas[ i ].Connection := tSQLConexionContabilidad;
End;
End;
ListaTablasRelacionadas[ i ].DataSet.CommandText := TablaRelacionada;
ListaTablasRelacionadas[ i ].Open;
End;
End;
MostratPiePagina := FALSE;
For i := 0 To ( ListaSumados.Count - 1 ) Do
If ( ListaSumados.Strings[ i ] = 'S' ) Then
MostratPiePagina := TRUE;
TieneFiltros := FALSE;
For i := 0 To ( LstCamposConRango.Count - 1 ) Do
If ( LstCamposConRango.Strings[ i ] = 'S' ) Then
TieneFiltros := TRUE;
With tTablaConsulta Do
Begin
Case BaseDeDatos Of
0 :
Connection := tSQLConexionGeneral;
1 :
Connection := tSQLConexionGestion;
2 :
Connection := tSQLConexionGestion;
3 :
Connection := tSQLConexionContabilidad;
End;
DataSet.CommandText := ConsultaTablaSQL;
Try
If Not Active Then
Open;
Except
on E: Exception do ShowMessage( E.Message );
End;
End;
If BaseDeDatos = 3 Then
Begin
FilaTitulos := FilaTitulos + 20;
ppCabecera.Height := ppCabecera.Height + 20;
End;
Try
DarDeAltaCamposEnReport( TamanyoFuente );
Finally
ppReportConsultaMant.EndUpdate;
tTablaConsulta.EnableControls;
End;
With tTablaConsulta Do
Try
If Not Active Then
Open;
Except
on E: Exception do ShowMessage( E.Message );
End;
Case BaseDeDatos Of
0, 1, 2 :
Begin
With tEmpresasComercial Do
If FindKey( [ EmpresaActual ] ) Then
NombreEmpresa := FieldByName( 'Nombre' ).AsString
Else
NombreEmpresa := NombreEmpresaActual;
NombreEmpresaCtb := '';
ppLabel1.Visible := FALSE;
ppVariable2.Visible := FALSE;
End;
3 :
Begin
With tEmpresasContables Do
If FindKey( [ EmpresaCtb ] ) Then
NombreEmpresa := FieldByName( 'DESCRIPCION' ).AsString
Else
NombreEmpresa := NombreEmpresaActual;
With tContabilidades Do
If FindKey( [ EmpresaCtb, CtbActual ] ) Then
NombreEmpresaCtb := FieldByName( 'DESCRIPCION' ).AsString
Else
NombreEmpresaCtb := NombreEmpresaCtbActual;
End;
End;
ppReportConsultaMant.Print;
ChDir( setRutaEjecutable );
Finally
DesactivarConexionesModuloDeDatos( auxSQLConexionGeneral, auxSQLConexionGestion, auxSQLConexionContabilidad );
Free;
End;
End;