예제 #1
0
 /// <summary>
 /// Рисует колонки таблицы лэйаута
 /// </summary>
 /// <remarks>Переопределяем стандартный метод</remarks>
 protected override void WriteColumns(tablelayoutClass LayoutProfile, ReportLayoutData LayoutData, DataTable oTable, TableLayout.LayoutColumns Columns)
 {
     base.WriteColumns(LayoutProfile, LayoutData, oTable, Columns);
     // создаем копию существующих столбцов
     // для накопления общих итогов только по помеченным строкам
     m_TotalColumns = cloneLayoutColumns(Columns);
 }
예제 #2
0
        /// <summary>
        /// Проверяет, нужно ли выводить дополнительный столбец
        /// и выводит его в случае необходимости
        /// </summary>
        /// <param name="LayoutProfile">профиль отчета</param>
        /// <param name="RepGen">репорт-райтер</param>
        /// <param name="Columns">описание колонок лэйаута</param>
        /// <param name="Params">параметры</param>
        /// <param name="CustomData">пользовательские данные</param>
        /// <param name="Vars">переменные фрагмента отчета</param>
        /// <param name="oDataColumn">дополнительный столбец, который нужно вывести</param>
        /// <param name="HiddenColumns">скрытые столбцы</param>
        /// <param name="FormattersNode">форматтеры для лэйаута по умолчанию</param>
        private void writeVarColumn(tablelayoutClass LayoutProfile, ReportLayoutData LayoutData, TableLayout.LayoutColumns Columns, DataColumn oDataColumn, string HiddenColumns, abstractformatterClass[] FormattersNode)
        {
            // нас интересуют только столбцы с названиями вида Expenses_yyyyMMdd
            // остальные столбцы пропускаем
            if (oDataColumn.ColumnName.IndexOf("Expenses_") < 0)
            {
                return;
            }

            colClass ColNode = new colClass();

            ColNode.aggregationfunction          = aggregationfunctiontype.sum;
            ColNode.aggregationfunctionSpecified = true;
            ColNode.data = "{#" + oDataColumn.ColumnName + "}";
            ColNode.t    = DateTime.ParseExact(oDataColumn.ColumnName.Substring(9), "yyyyMMdd", null).ToShortDateString();

            // пропишем форматтеры
            emptyvalueevaluatorClass formatter1 = new emptyvalueevaluatorClass();

            formatter1.value = "0";
            durationevaluatorClass formatter2 = new durationevaluatorClass();

            formatter2.format          = "{@TimeMeasureUnits}";
            formatter2.workdayDuration = "{#WorkdayDuration}";
            ColNode.formatters         = new abstractformatterClass[] { formatter1, formatter2 };

            InsertColumn(ColNode, null, LayoutProfile, LayoutData, Columns, HiddenColumns, FormattersNode);
        }
예제 #3
0
        /// <summary>
        /// Рисует колонки таблицы лэйаута
        /// </summary>
        /// <param name="LayoutProfile">профиль отчета</param>
        /// <param name="RepGen">репорт-райтер</param>
        /// <param name="oTable">ридер с данными</param>
        /// <param name="Columns">описание колонок лэйаута</param>
        /// <param name="Params">параметры</param>
        /// <param name="CustomData">пользовательские данные</param>
        /// <param name="Vars">переменные фрагмента отчета</param>
        protected override void WriteColumns(tablelayoutClass LayoutProfile, ReportLayoutData LayoutData, DataTable oTable, TableLayout.LayoutColumns Columns)
        {
            // строка с номерами скрытых колонок
            string HiddenColumns = string.Empty;

            if (LayoutProfile.hiddencolumnsparamname != null && LayoutProfile.hiddencolumnsparamname != "")
            {
                HiddenColumns = LayoutData.Params[LayoutProfile.hiddencolumnsparamname].ToString();
            }

            // приписываем с начала и с конца строки запятые для облегчения последующего поиска
            if (!HiddenColumns.StartsWith(","))
            {
                HiddenColumns = "," + HiddenColumns;
            }
            if (!HiddenColumns.EndsWith(","))
            {
                HiddenColumns += ",";
            }

            // xml-узел с профилями дефолтных для лэйаута эвалуаторов/форматтеров
            abstractformatterClass[] FormattersNode = LayoutProfile.formatters;

            if (LayoutProfile.col == null)
            {
                // если в профиле явно не описаны колонки отчета
                for (int i = 0; i < oTable.Columns.Count; i++)
                {
                    // добавляем колонку в коллекцию
                    Columns.Add(new LayoutColumn("{#" + oTable.Columns[i].ColumnName + "}", FormattersNode));
                    // добавлем колонку в отчет
                    LayoutData.RepGen.TAddColumn(oTable.Columns[i].ColumnName, align.ALIGN_CENTER, valign.VALIGN_MIDDLE, "TABLE_HEADER");
                }
            }
            else
            {
                // добавляем явно описанные колонки
                foreach (colClass ColNode in LayoutProfile.col)
                {
                    // рекурсивно добавляем колонки
                    InsertColumn(ColNode, null, LayoutProfile, LayoutData, Columns, HiddenColumns, FormattersNode);
                    //InsertColumn(ColNode, null, LayoutProfile, RepGen, Columns, Params, HiddenColumns, FormattersNode, CustomData, Vars);
                }

                // добавляем неявно описанные колонки
                foreach (DataColumn oDataColumn in oTable.Columns)
                {
                    writeVarColumn(LayoutProfile, LayoutData, Columns, oDataColumn, HiddenColumns, FormattersNode);
                }
            }

            // создаем копию существующих столбцов
            // для накопления общих итогов только по помеченным строкам
            m_TotalColumns = cloneLayoutColumns(Columns);
        }
예제 #4
0
        /// <summary>
        /// Рисует строку подведения итогов. Это может быть как строка с общими итогами, так и с промежуточными
        /// </summary>
        /// <remarks>Переопределяем стандартный метод</remarks>
        protected override void WriteTotalRow(tablelayoutClass LayoutProfile, Croc.XmlFramework.ReportService.Layouts.ReportLayoutData LayoutData, Croc.XmlFramework.ReportService.Layouts.TableLayout.LayoutColumns Columns, int CurrentRowNum, int CurrentColumnNum, bool SubTotals, DataTable oTable, int[] ColumnsRowspan, int nGroupedCellsCount, DataRow PreviousRow)
        {
            // вызываем базовый метод, но передаем ему столбцы для накопления итогов
            // только по помеченным строкам
            base.WriteTotalRow(LayoutProfile, LayoutData, TotalColumns, CurrentRowNum, CurrentColumnNum, SubTotals, oTable, ColumnsRowspan, nGroupedCellsCount, PreviousRow);

            // если выводим общие итоги, то больше ничего делать не надо
            if (!SubTotals)
            {
                return;
            }

            // получаем объект, с которым работают форматтеры и эвалуаторы
            ReportFormatterData FormatterData = new ReportFormatterData(LayoutData,
                                                                        ((int)PreviousRow["Expected"] - (int)PreviousRow["TotalSpent"]).ToString(),
                                                                        null,
                                                                        PreviousRow,
                                                                        -1,
                                                                        -1);

            durationevaluatorClass FormatterNode = new durationevaluatorClass();

            FormatterNode.workdayDuration = "{#WorkdayDuration}";
            FormatterNode.format          = "{@TimeMeasureUnits}";

            // просим объект у фабрики
            IReportFormatter Formatter = (IReportFormatter)ReportObjectFactory.GetInstance(FormatterNode.GetAssembly(), FormatterNode.GetClass());

            // делаем что-то
            Formatter.Execute(FormatterNode, FormatterData);

            // далее добавляем строку для вывода дисбаланса по сотруднику
            LayoutTable.AddRow();

            LayoutTable.CurrentRow.AddCell("<fo:block text-align='right'>Дисбаланс по сотруднику:</fo:block>", "string", 1, 3, "SUBTOTAL");
            LayoutTable.CurrentRow.CurrentCell.StartsColumnspanedCells = true;
            LayoutTable.CurrentRow.CurrentCell.IsAggregated            = true;

            LayoutTable.CurrentRow.AddCell(null, null, 1, 1);
            LayoutTable.CurrentRow.CurrentCell.IsFakeCell   = true;
            LayoutTable.CurrentRow.CurrentCell.IsAggregated = true;

            LayoutTable.CurrentRow.AddCell(null, null, 1, 1);
            LayoutTable.CurrentRow.CurrentCell.IsFakeCell   = true;
            LayoutTable.CurrentRow.CurrentCell.IsAggregated = true;

            LayoutTable.CurrentRow.AddCell(FormatterData.CurrentValue, "string", 1, 2, "SUBTOTAL");
            LayoutTable.CurrentRow.CurrentCell.StartsColumnspanedCells = true;
            LayoutTable.CurrentRow.CurrentCell.IsAggregated            = true;

            LayoutTable.CurrentRow.AddCell(null, null, 1, 1);
            LayoutTable.CurrentRow.CurrentCell.IsFakeCell   = true;
            LayoutTable.CurrentRow.CurrentCell.IsAggregated = true;
        }
예제 #5
0
 /// <summary>
 /// Рисует строку подведения итогов. Это может быть как строка с общими итогами, так и с промежуточными
 /// </summary>
 /// <remarks>Переопределяем стандартный метод</remarks>
 protected override void WriteTotalRow(tablelayoutClass LayoutProfile, ReportLayoutData LayoutData, TableLayout.LayoutColumns Columns, int CurrentRowNum, int CurrentColumnNum, bool SubTotals, DataTable oTable, int[] ColumnsRowspan, int nGroupedCellsCount, DataRow PreviousRow)
 {
     if (SubTotals)
     {
         // если мы выводим подитоги, то просто вызываем базовый метод
         base.WriteTotalRow(LayoutProfile, LayoutData, Columns, CurrentRowNum, CurrentColumnNum, SubTotals, oTable, ColumnsRowspan, nGroupedCellsCount, PreviousRow);
     }
     else
     {
         // если мы выводим общие итоги, то вызываем базовый метод, но
         // передаем ему столбцы для накопления итогов только по помеченным строкам
         base.WriteTotalRow(LayoutProfile, LayoutData, TotalColumns, CurrentRowNum, CurrentColumnNum, SubTotals, oTable, ColumnsRowspan, nGroupedCellsCount, PreviousRow);
     }
 }
예제 #6
0
 /// <summary>
 /// Проверяет, нужно ли выводить дополнительный столбец
 /// и выводит его в случае необходимости
 /// </summary>
 /// <param name="LayoutProfile">профиль отчета</param>
 /// <param name="RepGen">репорт-райтер</param>
 /// <param name="oTable">ридер с данными</param>
 /// <param name="Columns">описание колонок лэйаута</param>
 /// <param name="Params">параметры</param>
 /// <param name="CustomData">пользовательские данные</param>
 /// <param name="Vars">переменные фрагмента отчета</param>
 /// <param name="oDataColumn">дополнительный столбец, который нужно вывести</param>
 /// <param name="HiddenColumns">скрытые столбцы</param>
 /// <param name="FormattersNode">форматтеры для лэйаута по умолчанию</param>
 protected virtual void WriteVarColumn(tablelayoutClass LayoutProfile, XslFOProfileWriter RepGen, DataTable oTable, TableLayout.LayoutColumns Columns, ReportParams Params, object CustomData, IDictionary Vars, DataColumn oDataColumn, string HiddenColumns, abstractformatterClass[] FormattersNode)
 {
 }