/// <summary>
        /// Return report standard data
        /// </summary>
        /// <param name="record">RecReportStd</param>
        /// <returns></returns>
        public List<RecReportStd> LoadReport( RecReportStd record )
        {
            var company = Util.FactoryToCompany( record.Factory );
            var query = new ImpactQuery()
            {
                Select =
				{
					ImpReportStd.Factory,
					ImpReportStd.Project,
					ImpReportStd.ReportId,
					ImpReportStd.Name,
					ImpReportStd.ReportType,
					ImpReportStd.Filename,
					ImpReportStd.Foldername,
					ImpReportStd.PageMaxX,
					ImpReportStd.PageMaxY,
					ImpReportStd.ContinuousHeaderRow,
					ImpReportStd.ContinuousStartRow,
					ImpReportStd.ContinuousEndRow,
					ImpReportStd.ContinuousSumRow,

				},
                From = { ImpReportStd.As( "T1" ) },
                Where = { 
                            ImpReportStd.Factory.Equal( company ), 
                            ImpReportStd.Project.Equal( company ), // company, company 
                        }
            };

            if( !string.IsNullOrWhiteSpace( record.Name ) )
            {
                query.Where.Add( ImpReportStd.Name.Equal( record.Name ) );
            }

            if( record.ReportType > 0 )
            {
                query.Where.Add( ImpReportStd.ReportType.Equal( (int)record.ReportType ) );
            }

            var statement = query.ToString();

            List<RecReportStd> result;

            using( var database = new ImpactDatabase() )
            {
                result = database.GetAll( statement, ParseReport );
            }

            return result;
        }
        /// <summary>
        /// Returns report standard data and layout info
        /// </summary>
        /// <param name="userId"> </param>
        /// <param name="record">RecReportStd</param>
        /// <param name="factory"> </param>
        /// <param name="project"> </param>
        /// <returns>ReportTemplateData</returns>
        public ReportTemplateData LoadReportLayout( string factory, string project, string userId, RecReportStd record )
        {
            RecProject recProject = null;
            RecReportStd report = null;
            List<RecReportLayoutStd> layouts = null;
            var reports = LoadReport( record );
            if( null != reports && reports.Count > 0 )
            {
                report = reports[0];
                layouts = LoadReportDetails( report );

                var proj = new RecProject { Factory = factory, Project = project };

                var projs = LoadProject( proj );
                if( null != projs && projs.Count > 0 )
                {
                    recProject = projs[0];
                }
            }

            var folders = LoadFolder( new RecFolder() { Factory = factory, Project = project } );
            var recUser = LoadUser( userId );
            return new ReportTemplateData( recUser, recProject, report, layouts, folders );
        }
        /// <summary>
        /// Loads report layout
        /// </summary>
        /// <param name="record">RecReportStd</param>
        /// <returns>List<RecReportLayoutStd></returns>
        public List<RecReportLayoutStd> LoadReportDetails( RecReportStd record )
        {
            string company = Util.FactoryToCompany( record.Factory );
            ImpactQuery query = new ImpactQuery()
            {
                Select =
				{
					ImpReportLayoutStd.Factory,
					ImpReportLayoutStd.Project,
					ImpReportLayoutStd.ReportId,
					ImpReportLayoutStd.FieldName,
					ImpReportLayoutStd.CellX,
					ImpReportLayoutStd.CellY,
					ImpReportLayoutStd.FieldType,

				},
                From = { ImpReportLayoutStd.As( "T1" ) },
                Where = { 
                            ImpReportLayoutStd.Factory.Equal( company ), 
                            ImpReportLayoutStd.Project.Equal( company ),
                            ImpReportLayoutStd.ReportId.Equal( record.ReportId )
                        },
                OrderBy = { 
                            ImpReportLayoutStd.FieldType, 
                            ImpReportLayoutStd.CellX 
                          },
            };

            string statement = query.ToString();

            List<RecReportLayoutStd> result;

            using( ImpactDatabase database = new ImpactDatabase() )
            {
                result = database.GetAll( statement, Parselayout );
            }

            return result;
        }
 /// <summary>
 /// Parses one row in <see cref="System.Data.Common.DbDataReader"/> into
 /// a new instance of <see cref="Paths.Common.Records.RecReportStd"/>.
 /// </summary>
 /// <param name="dataReader">The data reader.</param>
 /// <returns>A new instance of <see cref="Paths.Common.Records.RecReportStd"/>.</returns>
 public static RecReportStd ParseReport( DbDataReader dataReader )
 {
     var record = new RecReportStd
                      {
                          Factory = dataReader[0].Cast<string>(),
                          Project = dataReader[1].Cast<string>(),
                          ReportId = dataReader[2].Cast<int>(),
                          Name = dataReader[3].Cast<string>(),
                          ReportType = dataReader[4].Cast<int>(),
                          Filename = dataReader[5].Cast<string>(),
                          Foldername = dataReader[6].Cast<string>(),
                          PageMaxX = dataReader[7].Cast<int>(),
                          PageMaxY = dataReader[8].Cast<int>(),
                          ContinuousHeaderRow = dataReader[9].Cast<int>(),
                          ContinuousStartRow = dataReader[10].Cast<int>(),
                          ContinuousEndRow = dataReader[11].Cast<int>(),
                          ContinuousSumRow = dataReader[12].Cast<int>()
                      };
     return record;
 }