/// <summary> /// Метод, формирующий отчет; вызывается подсистемой ReportService /// </summary> protected override void buildReport(Croc.XmlFramework.ReportService.Layouts.ReportLayoutData reportData) { // Получаем идентификатор тендра из переданных параметров Guid TenderID = (Guid)reportData.Params.GetParam("TenderID").Value; // Получаем все данные для постоения отчета: ThisReportData data = new ThisReportData(reportData, TenderID); data.ViewType = (Int32)reportData.Params.GetParam("ViewType").Value; if (null == data.Main) { writeEmptyBody(reportData.RepGen, String.Format( "Указанное описание конкурса в Системе не найдно (заданный идентификатор - {0})", TenderID.ToString().ToUpper())); return; } reportData.RepGen.WriteLayoutMaster(); reportData.RepGen.StartPageSequence(); reportData.RepGen.StartPageBody(); reportData.RepGen.Header(xmlEncode(String.Format( "Конкурс {0}\"{1}\"", (null == data.Main["Number"] ? "" : "№ " + data.Main["Number"] + ", "), data.Main["Tender"] ))); // Отображение данных тендера: writeMainData(reportData.RepGen, data); reportData.RepGen.EndPageBody(); reportData.RepGen.EndPageSequence(); }
// Выводит итоговые финансовые данные по проектам private void writeSumProjectDataRow(XslFOProfileWriter fo, ThisReportData data, string sLabel, string sCol) { fo.TRStart(); _WriteCell(fo, sLabel); foreach (IDictionary fd in data.GroupPreFinData) { _WriteCell(fo, xmlEncode(fd[sCol])); } foreach (IDictionary fd in data.GroupFinData) { _WriteCell(fo, xmlEncode(fd[sCol])); } foreach (IDictionary fd in data.GroupSumFinData) { _WriteCell(fo, xmlEncode(fd[sCol])); } foreach (IDictionary fd in data.GroupAfterFinData) { _WriteCell(fo, xmlEncode(fd[sCol])); } foreach (IDictionary fd in data.GroupAllFinData) { _WriteCell(fo, xmlEncode(fd[sCol])); } fo.TREnd(); }
/// <summary> /// Отображение в отчете основных свойств лота и тендера /// </summary> /// <param name="fo"></param> /// <param name="data">Данные тендера, данные которого отображаются</param> private void writeMainData(XslFOProfileWriter fo, ThisReportData data) { #region #1: Основные данные // ...разделитель _TableSeparator(fo); fo.TStart(true, ITRepStyles.TABLE, false); fo.TAddColumn("Тип транзакции", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "25%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Назначение", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "25%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Дата", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "10%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Сумма", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "10%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Примечание", align.ALIGN_LEFT, valign.VALIGN_MIDDLE, null, "30%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); foreach (IDictionary EmpKassTrans in data.Main) { fo.TRStart(); _WriteCell(fo, xmlEncode(EmpKassTrans["TransType"])); _WriteCell(fo, xmlEncode(EmpKassTrans["Reason"])); _WriteCell(fo, xmlEncode(((DateTime)EmpKassTrans["Date"]).ToShortDateString())); _WriteCell(fo, xmlEncode(EmpKassTrans["TransSum"])); _WriteCell(fo, xmlEncode(EmpKassTrans["Rem"])); fo.TREnd(); } fo.TEnd(); #endregion }
// Метод, формирующий отчет; вызывается подсистемой ReportService protected override void buildReport(Croc.XmlFramework.ReportService.Layouts.ReportLayoutData reportData) { ThisReportData data = new ThisReportData(reportData); reportData.RepGen.WriteLayoutMaster(); reportData.RepGen.StartPageSequence(); reportData.RepGen.StartPageBody(); reportData.RepGen.Header(xmlEncode("Плановый Бюджет Доходов и Расходов по проекту")); //Формируем и выводим подзаголовок StringBuilder sbBlock = new StringBuilder(); sbBlock.Append(_GetParamValueAsFoBlock("Контракт", data.Contract["Name"].ToString())); //sbBlock.Append(_GetParamValueAsFoBlock("Сумма", reportData.Params.GetParam("Sum").ToString())); reportData.RepGen.AddSubHeader(_MakeSubHeader(sbBlock)); bool bIsExtendedReport = (int)reportData.Params.GetParam("Extended").Value == 1; if (bIsExtendedReport) { writeExtendedReport(reportData.RepGen, data); } else { writeCommonReport(reportData.RepGen, data); } reportData.RepGen.EndPageBody(); reportData.RepGen.EndPageSequence(); }
// Метод, формирующий отчет; вызывается подсистемой ReportService protected override void buildReport(Croc.XmlFramework.ReportService.Layouts.ReportLayoutData reportData) { ThisReportData data = new ThisReportData(reportData); reportData.RepGen.WriteLayoutMaster(); reportData.RepGen.StartPageSequence(); reportData.RepGen.StartPageBody(); if ((int)reportData.Params.GetParam("Type").Value == 0) { reportData.RepGen.Header(xmlEncode("Детализация приходов по займам")); } else { reportData.RepGen.Header(xmlEncode("Детализация расходов по займам")); } //Формируем и выводим подзаголовок StringBuilder sbBlock = new StringBuilder(); sbBlock.Append(_GetParamValueAsFoBlock("Интервал времени", data.DateInterval["Name"].ToString() + " (" + _FormatShortDate(data.DateInterval["DateFrom"].ToString()) + " - " + _FormatShortDate(data.DateInterval["DateTo"].ToString()) + ")")); sbBlock.Append(_GetParamValueAsFoBlock("Сумма", reportData.Params.GetParam("Sum").ToString())); reportData.RepGen.AddSubHeader(_MakeSubHeader(sbBlock)); writeMainData(reportData.RepGen, data, (int)reportData.Params.GetParam("Type").Value); reportData.RepGen.EndPageBody(); reportData.RepGen.EndPageSequence(); }
private void writeMainData(XslFOProfileWriter fo, ThisReportData data, int Type) { #region #1: Основные данные _TableSeparator(fo); fo.TStart(true, ITRepStyles.TABLE, false); fo.TAddColumn("Займ №", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "15%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Тип займа", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "15%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Целевая компания/Сотрудник", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "30%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Дата", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "15%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Сумма", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "15%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); foreach (IDictionary IO in data.IncOut) { fo.TRStart(); _WriteCell(fo, xmlEncode(IO["Number"])); _WriteCell(fo, xmlEncode(IO["LoanType"])); _WriteCell(fo, xmlEncode(IO["LoanTarget"])); _WriteCell(fo, _FormatShortDate(IO["Date"].ToString())); _WriteCell(fo, xmlEncode(IO["Sum"])); fo.TREnd(); } fo.TEnd(); #endregion }
private void writeExtendedReport(XslFOProfileWriter fo, ThisReportData data) { _TableSeparator(fo); fo.TStart(true, ITRepStyles.TABLE, false); fo.TAddColumn("Статья расходов/Контрагент", align.ALIGN_LEFT, valign.VALIGN_MIDDLE, null, "40%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Назначение", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "30%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("С учетом комплектации", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "10%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Сумма с НДС", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "10%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Сумма без НДС", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "10%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); foreach (IDictionary IO in data.Incomes) { if ((int)IO["IncType"] < 0) { fo.TRStart(); _WriteCell(fo, xmlEncode(IO["Type"])); _WriteCell(fo, xmlEncode(IO["Reason"])); _WriteCell(fo, xmlEncode("")); _WriteCell(fo, xmlEncode(IO["Sum"])); _WriteCell(fo, xmlEncode(IO["SumNoNDS"])); fo.TREnd(); } else { fo.TRStart(); fo.TRAddCell(xmlEncode(IO["Type"]), "string", 3, 1, ITRepStyles.GROUP_HEADER); fo.TRAddCell(xmlEncode(IO["Sum"]), "string", 1, 1, ITRepStyles.GROUP_HEADER); fo.TRAddCell(xmlEncode(IO["SumNoNDS"]), "string", 1, 1, ITRepStyles.GROUP_HEADER); fo.TREnd(); } } foreach (IDictionary IO in data.Outcomes) { if ((int)IO["OutType"] < 10) { fo.TRStart(); //_WriteCell(fo, _FormatShortDate(IO["Date"].ToString())); _WriteCell(fo, xmlEncode(IO["SupplierName"])); _WriteCell(fo, xmlEncode(IO["Rem"])); _WriteCell(fo, xmlEncode(IO["OutSumExt"])); _WriteCell(fo, xmlEncode(IO["OutSum"])); _WriteCell(fo, xmlEncode(IO["OutSumNoNDS"])); fo.TREnd(); } else { fo.TRStart(); fo.TRAddCell(xmlEncode(IO["SupplierName"]), "string", 2, 1, ITRepStyles.GROUP_HEADER); fo.TRAddCell(xmlEncode(IO["OutSumExt"]), "string", 1, 1, ITRepStyles.GROUP_HEADER); fo.TRAddCell(xmlEncode(IO["OutSum"]), "string", 1, 1, ITRepStyles.GROUP_HEADER); fo.TRAddCell(xmlEncode(IO["OutSumNoNDS"]), "string", 1, 1, ITRepStyles.GROUP_HEADER); fo.TREnd(); } } fo.TEnd(); }
// Метод, формирующий отчет; вызывается подсистемой ReportService protected override void buildReport(Croc.XmlFramework.ReportService.Layouts.ReportLayoutData reportData) { ThisReportData data = new ThisReportData(reportData); reportData.RepGen.WriteLayoutMaster(); reportData.RepGen.StartPageSequence(); reportData.RepGen.StartPageBody(); reportData.RepGen.Header(xmlEncode(String.Format("Финансовый план-факт. {0}. ({1})", data.MainPrjGroup["Name"], data.MainDateRatio["Name"]))); // Отображение данных тендера: writeMainData(reportData.RepGen, data, reportData.Params); reportData.RepGen.EndPageBody(); reportData.RepGen.EndPageSequence(); }
// Выводит приходы и расходы по займам и интервалам private void writeLoansIncOutDataRow(XslFOProfileWriter fo, ThisReportData data, int iType, ReportParams Params) { string sCol = "OutSum"; fo.TRStart(); if (iType == 0) { sCol = "IncSum"; _WriteCell(fo, "П"); } else { _WriteCell(fo, "Р"); } //На начало периода writeEmptyValueCell(fo, 1); //Расходы - приходы foreach (IDictionary fd in data.LoansSumFinData) { //Если есть расходы или приходы, то формируем ссылку на отчет с детализацией if ((String)fd[sCol] != "0.00") { StringBuilder sbDetailRef = new StringBuilder(); _StartReportURL(sbDetailRef, "r-LoansIncOut"); _AppendParamURL(sbDetailRef, "Type", iType); _AppendParamURL(sbDetailRef, "PrjGroup", (Guid)Params.GetParam("Group").Value); _AppendParamURL(sbDetailRef, "DateIntervalID", (Guid)fd["DateIntervalID"]); _AppendParamURL(sbDetailRef, "IsSeparate", Params.GetParam("IsSeparate").Value); _AppendParamURL(sbDetailRef, "Sum", fd[sCol].ToString()); _EndReportURL(sbDetailRef, "Детализация", fd[sCol]); _WriteCell(fo, sbDetailRef.ToString()); } else { _WriteCell(fo, xmlEncode(fd[sCol])); } } // writeEmptyValueCell(fo, 3); fo.TREnd(); }
/// <summary> /// Метод, формирующий отчет; вызывается подсистемой ReportService /// </summary> protected override void buildReport(Croc.XmlFramework.ReportService.Layouts.ReportLayoutData reportData) { // Получаем все данные для постоения отчета: ThisReportData data = new ThisReportData(reportData); reportData.RepGen.WriteLayoutMaster(); reportData.RepGen.StartPageSequence(); reportData.RepGen.StartPageBody(); reportData.RepGen.Header(String.Format("Кассовые транзакции сотрудника - {0}", xmlEncode((String)reportData.Params.GetParam("EmpName").Value))); // Получаем все данные для постоения отчета: ThisReportParams Params = new ThisReportParams(reportData.Params); Params.WriteParamsInHeader(reportData.RepGen, reportData.DataProvider); writeMainData(reportData.RepGen, data); reportData.RepGen.EndPageBody(); reportData.RepGen.EndPageSequence(); }
// Метод, формирующий отчет; вызывается подсистемой ReportService protected override void buildReport(Croc.XmlFramework.ReportService.Layouts.ReportLayoutData reportData) { // Получаем все данные для постоения отчета: ThisReportData data = new ThisReportData(reportData); reportData.RepGen.WriteLayoutMaster(); reportData.RepGen.StartPageSequence(); reportData.RepGen.StartPageBody(); reportData.RepGen.Header(xmlEncode("Сальдо ДС по сотрудникам")); // Получаем все данные для постоения отчета: ThisReportParams Params = new ThisReportParams(reportData.Params); //Формируем и выводим подзаголовок StringBuilder sbBlock = new StringBuilder(); string sParamValue; if (Params.IsSpecifiedIntervalBegin) { sParamValue = ((DateTime)Params.IntervalBegin).ToString("dd.MM.yyyy"); } else { sParamValue = "не задана"; } sbBlock.Append(_GetParamValueAsFoBlock("Дата начала отчетного периода", sParamValue)); if (Params.IsSpecifiedIntervalEnd) { sParamValue = ((DateTime)Params.IntervalEnd).ToString("dd.MM.yyyy"); } else { sParamValue = "не задана"; } sbBlock.Append(_GetParamValueAsFoBlock("Дата окончания отчетного периода", sParamValue)); reportData.RepGen.AddSubHeader(_MakeSubHeader(sbBlock)); writeMainData(reportData.RepGen, data, Params); reportData.RepGen.EndPageBody(); reportData.RepGen.EndPageSequence(); }
/// <summary> /// Отображение в отчете основных свойств лота и тендера /// </summary> /// <param name="fo"></param> /// <param name="data">Данные тендера, данные которого отображаются</param> private void writeMainData(XslFOProfileWriter fo, ThisReportData data) { #region #1: Основные данные // ...разделитель _TableSeparator(fo); fo.TStart(false, ITRepStyles.TABLE, false); fo.TAddColumn("Характеристика", align.ALIGN_LEFT, valign.VALIGN_TOP, null, "30%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Значение", align.ALIGN_LEFT, valign.VALIGN_TOP, null, "70%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); writeDataPair(fo, "Получено в кассе", xmlEncode(data.Main["KassRecieved"])); writeDataPair(fo, "Сдано по АО (после 04/10/2013)", xmlEncode(data.Main["AOSended"])); writeDataPair(fo, "Возвращено в кассу", xmlEncode(data.Main["KassReturned"])); writeDataPair(fo, "Получено от других содрудников", xmlEncode(data.Main["EmpRecieved"])); writeDataPair(fo, "Передано другим сотрудникам", xmlEncode(data.Main["EmpSended"])); writeDataPair(fo, "Итоговое сальдо ДС", "<fo:inline font-weight='bold'>" + xmlEncode(data.Main["EmpSaldoDS"]) + "</fo:inline>"); fo.TEnd(); #endregion }
/// <summary> /// Метод, формирующий отчет; вызывается подсистемой ReportService /// </summary> protected override void buildReport(Croc.XmlFramework.ReportService.Layouts.ReportLayoutData reportData) { // Получаем идентификатор тендра из переданных параметров Guid EmployeeID = (Guid)reportData.Params.GetParam("EmployeeID").Value; // Получаем все данные для постоения отчета: ThisReportData data = new ThisReportData(reportData, EmployeeID); if (null == data.Main) { writeEmptyBody(reportData.RepGen, String.Format( "Сотрудник в Системе не найден! (заданный идентификатор - {0})", EmployeeID.ToString())); return; } reportData.RepGen.WriteLayoutMaster(); reportData.RepGen.StartPageSequence(); reportData.RepGen.StartPageBody(); reportData.RepGen.Header(xmlEncode(String.Format("Сальдо ДС по сотруднику: {0} {1}", data.Main["LastName"], data.Main["FirstName"]))); writeMainData(reportData.RepGen, data); reportData.RepGen.EndPageBody(); reportData.RepGen.EndPageSequence(); }
private void writeMainData(XslFOProfileWriter fo, ThisReportData data, int Type) { #region #1: Основные данные _TableSeparator(fo); fo.TStart(true, ITRepStyles.TABLE, false); fo.TAddColumn("Дата", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "8%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Сумма", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "8%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Тип", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "20%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Назначение", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "22%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); if (Type == 1) { fo.TAddColumn("Организация/Сотрудник", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "23%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); } fo.TAddColumn("Документ", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "8%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Дата документа", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "8%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); foreach (IDictionary IO in data.IncOut) { fo.TRStart(); _WriteCell(fo, _FormatShortDate(IO["Date"].ToString())); _WriteCell(fo, xmlEncode(IO["Sum"])); _WriteCell(fo, xmlEncode(IO["Type"])); _WriteCell(fo, xmlEncode(IO["Reason"])); if (Type == 1) { _WriteCell(fo, xmlEncode(IO["Org"])); } _WriteCell(fo, xmlEncode(IO["Document"])); _WriteCell(fo, _FormatShortDate(IO["DocDate"].ToString())); fo.TREnd(); } fo.TEnd(); #endregion }
/// Отображение основных данных отчета private void writeMainData(XslFOProfileWriter fo, ThisReportData data, ReportParams Params) { _TableSeparator(fo); fo.TStart(true, ITRepStyles.TABLE, false); #region Шапка отчета fo.TAddColumn("", align.ALIGN_LEFT, valign.VALIGN_MIDDLE, null, "1%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("На начало", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "4%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); //Общее количество колонок в таблице отчета int i = 4; //Заголовки колонок foreach (IDictionary Interval in data.DateRatio) { fo.TAddColumn(xmlEncode(Interval["Name"].ToString()), align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "4%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); i++; } fo.TAddColumn("Итого", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "4%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Остаток", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "4%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Всего", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "4%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); i++; #endregion #region Общие расходы и расходы по АО fo.TRStart(); fo.TRAddCell("ОБЩИE РАСХОДЫ", "string", i, 1, ITRepStyles.GROUP_HEADER); fo.TREnd(); writeGenDataRow(fo, data.GenOutSum); fo.TRStart(); fo.TRAddCell("ОБЩИЕ АО", "string", i, 1, ITRepStyles.GROUP_HEADER); fo.TREnd(); writeGenDataRow(fo, data.AOSum); #endregion #region Итоговые показатели по займам fo.TRStart(); fo.TRAddCell("ВСЕГО ПО ЗАЙМАМ", "string", i, 1, ITRepStyles.GROUP_HEADER); fo.TREnd(); writeLoansIncOutDataRow(fo, data, 0, Params); //Приходы по займам writeLoansIncOutDataRow(fo, data, 1, Params); //Расходы по займам // Сальдо по займам fo.TRStart(); _WriteCell(fo, "C"); writeEmptyValueCell(fo, 1); foreach (IDictionary fd in data.LoansSumFinData) { _WriteCell(fo, xmlEncode(fd["SaldoSum"])); } writeEmptyValueCell(fo, 3); fo.TREnd(); #endregion #region Итоговые показатели по группе проектов fo.TRStart(); fo.TRAddCell("ВСЕГО ПО ПРОЕКТАМ", "string", i, 1, ITRepStyles.GROUP_HEADER); fo.TREnd(); writeSumProjectDataRow(fo, data, "П", "IncSum"); // Приходы по группе проектов writeSumProjectDataRow(fo, data, "Р", "OutSum"); // Расходы по группе проектов writeSumProjectDataRow(fo, data, "С", "SaldoSum"); // Сальдо по группе проектов // Сальдо по группе нарастающим итогом fo.TRStart(); _WriteCell(fo, "НИ"); writeEmptyValueCell(fo, 1); foreach (IDictionary fd in data.GroupFinData) { _WriteCell(fo, xmlEncode(fd["SaldoSumProg"])); } writeEmptyValueCell(fo, 3); fo.TREnd(); #endregion #region Показатели по проектам if ((int)Params.GetParam("IsPrjData").Value != 0) { foreach (IDictionary Project in data.PrjGroup) { //Заголовок проекта fo.TRStart(); fo.TRAddCell(xmlEncode(Project["Name"]), "string", i, 1, ITRepStyles.GROUP_HEADER); fo.TREnd(); writeProjectsIncOutDataRow(fo, data, Project, 0, Params); //Приходы по проекту writeProjectsIncOutDataRow(fo, data, Project, 1, Params); //Расходы по проекту // Сальдо по проекту fo.TRStart(); _WriteCell(fo, "С"); foreach (IDictionary fd in data.ProjectsPreFinData) //На начало периода { if ((Guid)Project["ObjectID"] == (Guid)fd["ObjectID"]) { _WriteCell(fo, xmlEncode(fd["SaldoSum"])); } } foreach (IDictionary fd in data.ProjectsFinData) //По интервалам { if ((Guid)Project["ObjectID"] == (Guid)fd["ObjectID"]) { _WriteCell(fo, xmlEncode(fd["SaldoSum"])); } } foreach (IDictionary fd in data.ProjectsSumFinData) //Итого сальдо { if ((Guid)Project["ObjectID"] == (Guid)fd["ObjectID"]) { _WriteCell(fo, xmlEncode(fd["SaldoSum"])); } } foreach (IDictionary fd in data.ProjectsAfterFinData) //Остаток { if ((Guid)Project["ObjectID"] == (Guid)fd["ObjectID"]) { _WriteCell(fo, xmlEncode(fd["SaldoSum"])); } } foreach (IDictionary fd in data.ProjectsAllFinData) //Итого { if ((Guid)Project["ObjectID"] == (Guid)fd["ObjectID"]) { _WriteCell(fo, xmlEncode(fd["SaldoSum"])); } } fo.TREnd(); // Сальдо нарастающим итогом fo.TRStart(); _WriteCell(fo, "НИ"); writeEmptyValueCell(fo, 1); foreach (IDictionary fd in data.ProjectsFinData) { if ((Guid)Project["ObjectID"] == (Guid)fd["ObjectID"]) { _WriteCell(fo, xmlEncode(fd["SaldoSumProg"])); } } writeEmptyValueCell(fo, 3); fo.TREnd(); } } #endregion fo.TEnd(); }
// Выводит приходы и расходы по проектам и интервалам private void writeProjectsIncOutDataRow(XslFOProfileWriter fo, ThisReportData data, IDictionary Project, int iType, ReportParams Params) { string sCol = "OutSum"; fo.TRStart(); if (iType == 0) { sCol = "IncSum"; _WriteCell(fo, "П"); } else { _WriteCell(fo, "Р"); } //На начало периода foreach (IDictionary fd in data.ProjectsPreFinData) { if ((Guid)Project["ObjectID"] == (Guid)fd["ObjectID"]) { _WriteCell(fo, xmlEncode(fd[sCol])); } } //Расходы foreach (IDictionary fd in data.ProjectsFinData) { if ((Guid)Project["ObjectID"] == (Guid)fd["ObjectID"]) { //Если есть расходы или приходы, то формируем ссылку на отчет с детализацией if ((String)fd[sCol] != "0.00") { StringBuilder sbDetailRef = new StringBuilder(); _StartReportURL(sbDetailRef, "r-ProjectIncOut"); _AppendParamURL(sbDetailRef, "Type", iType); _AppendParamURL(sbDetailRef, "InContract", (Guid)fd["ObjectID"]); _AppendParamURL(sbDetailRef, "DateIntervalID", (Guid)fd["DateIntervalID"]); _AppendParamURL(sbDetailRef, "IsSeparate", Params.GetParam("IsSeparate").Value); _AppendParamURL(sbDetailRef, "Sum", fd[sCol].ToString()); _EndReportURL(sbDetailRef, "Детализация", fd[sCol]); _WriteCell(fo, sbDetailRef.ToString()); } else { _WriteCell(fo, xmlEncode(fd[sCol])); } } } //Итого расходов foreach (IDictionary fd in data.ProjectsSumFinData) { if ((Guid)Project["ObjectID"] == (Guid)fd["ObjectID"]) { _WriteCell(fo, xmlEncode(fd[sCol])); } } //Остаток foreach (IDictionary fd in data.ProjectsAfterFinData) { if ((Guid)Project["ObjectID"] == (Guid)fd["ObjectID"]) { _WriteCell(fo, xmlEncode(fd[sCol])); } } //Всего foreach (IDictionary fd in data.ProjectsAllFinData) { if ((Guid)Project["ObjectID"] == (Guid)fd["ObjectID"]) { _WriteCell(fo, xmlEncode(fd[sCol])); } } fo.TREnd(); }
// Отображение в отчете основных свойств лота и тендера private void writeMainData(XslFOProfileWriter fo, ThisReportData data, ThisReportParams Params) { #region #1: Основные данные // ...разделитель _TableSeparator(fo); fo.TStart(true, ITRepStyles.TABLE, false); fo.TAddColumn("Сотрудник", align.ALIGN_LEFT, valign.VALIGN_MIDDLE, null, "13%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Балланс ДС", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "10%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Балланс ДС на начало", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "10%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Балланс ДС за период", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "10%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Получено в кассе", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "10%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Сдано по АО", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "10%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Возвращено в кассу", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "10%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Получено от сотрудников", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "10%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Передано сотрудникам", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "10%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); foreach (IDictionary EmpDS in data.Main) { fo.TRStart(); _WriteCell(fo, xmlEncode(EmpDS["EmpName"])); _WriteCell(fo, xmlEncode(EmpDS["EmpSaldoTotal"])); _WriteCell(fo, xmlEncode(EmpDS["EmpSaldoDSBegin"])); StringBuilder sbLotHRef = new StringBuilder(); //если существуют кассовые транзакции за данный период по сотруднику if ((Int32)EmpDS["IsExistsEmpKassTrans"] == 1) { //... то сальдо ДС выводим с сылкой на отчет о детализации кассовых транзакций _StartReportURL(sbLotHRef, "r-EmployeeKassTrans"); _AppendParamURL(sbLotHRef, "EmpID", (Guid)EmpDS["EmpID"]); _AppendParamURL(sbLotHRef, "EmpName", EmpDS["EmpName"]); if (Params.IsSpecifiedIntervalBegin) { _AppendParamURL(sbLotHRef, "IntervalBegin", ((DateTime)Params.IntervalBegin).ToString("yyyy-MM-dd")); } if (Params.IsSpecifiedIntervalEnd) { _AppendParamURL(sbLotHRef, "IntervalEnd", ((DateTime)Params.IntervalEnd).ToString("yyyy-MM-dd")); } _EndReportURL(sbLotHRef, "Детализация кассовых транзакций", EmpDS["EmpSaldoDS"]); } else { sbLotHRef.Append(xmlEncode(EmpDS["EmpSaldoDS"])); } _WriteCell(fo, sbLotHRef, "string", ITRepStyles.TABLE_CELL_BOLD); _WriteCell(fo, xmlEncode(EmpDS["KassRecieved"])); _WriteCell(fo, xmlEncode(EmpDS["AOSended"])); _WriteCell(fo, xmlEncode(EmpDS["KassReturned"])); _WriteCell(fo, xmlEncode(EmpDS["EmpRecieved"])); _WriteCell(fo, xmlEncode(EmpDS["EmpSended"])); fo.TREnd(); } fo.TEnd(); #endregion }
private void writeExtendedReport(XslFOProfileWriter fo, ThisReportData data) { _TableSeparator(fo); CultureInfo culture = new CultureInfo("ru-RU"); fo.TStart(true, ITRepStyles.TABLE, false); fo.TAddColumn("Статья расходов", align.ALIGN_LEFT, valign.VALIGN_MIDDLE, null, "45%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Назначение/Контрагент", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "25%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Примечание", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "10%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("с учетом комплектации", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "10%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Сумма с НДС", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "10%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); double fOutcomesSum = 0, fAOLimitSum = 0, fIncomeSum = 0; double fExtOutcomesSum = 0, fExtOutLimit = 0; // Построение блока отчета по приходам if (data.Incomes != null) { IDictionary arIO = (IDictionary)data.Incomes[0]; fIncomeSum = Utils.ParseDBString(arIO["Sum"].ToString()); fo.TRStart(); fo.TRAddCell(xmlEncode(arIO["Type"]), "string", 3, 1, ITRepStyles.GROUP_HEADER); fo.TRAddCell(xmlEncode(fIncomeSum.ToString("C2", culture)), "string", 1, 1, ITRepStyles.GROUP_HEADER); fo.TRAddCell(xmlEncode(fIncomeSum.ToString("C2", culture)), "string", 1, 1, ITRepStyles.GROUP_HEADER); fo.TREnd(); } ; // расчет блока отчета по прямым расходам if (data.Outcomes != null) { foreach (IDictionary IO in data.Outcomes) { string sBugetCost = IO["BudgetCost"].ToString(); fOutcomesSum += Utils.ParseDBString(sBugetCost); if (IO["SupplierSum"] != null) { fExtOutcomesSum += Utils.ParseDBString(IO["SupplierSum"].ToString()); fExtOutcomesSum += Utils.ParseDBString(IO["SupplierFee"].ToString()); } else { fExtOutcomesSum += Utils.ParseDBString(IO["BudgetCost"].ToString()); } } } fo.TRStart(); fo.TRAddCell(xmlEncode("Прямые расходы"), "string", 3, 1, ITRepStyles.GROUP_HEADER); fo.TRAddCell(xmlEncode(fExtOutcomesSum.ToString("C2", culture)), "string", 1, 1, ITRepStyles.GROUP_HEADER); fo.TRAddCell(xmlEncode(fOutcomesSum.ToString("C2", culture)), "string", 1, 1, ITRepStyles.GROUP_HEADER); fo.TREnd(); // построение блока отчета по прямым расходам if (data.Outcomes != null) { foreach (IDictionary IO in data.Outcomes) { string sBudgetCost = IO["BudgetCost"].ToString(); double fBugetCost = Utils.ParseDBString(sBudgetCost); if (IO["SupplierSum"] == null) { fo.TRStart(); _WriteCell(fo, xmlEncode(IO["BudgetItem"])); _WriteCell(fo, xmlEncode(IO["ContractCompany"])); _WriteCell(fo, xmlEncode(IO["Rem"])); _WriteCell(fo, xmlEncode(Utils.ParseDBString(sBudgetCost).ToString("C2", culture))); _WriteCell(fo, xmlEncode(Utils.ParseDBString(sBudgetCost).ToString("C2", culture))); fo.TREnd(); } else { double fSupplierSum = Utils.ParseDBString(IO["SupplierSum"].ToString()); fo.TRStart(); fo.TRAddCell(xmlEncode(IO["BudgetItem"]), "string", 1, 2, ITRepStyles.TABLE_CELL_BOLD); _WriteCell(fo, xmlEncode(IO["SupplierCompany"])); _WriteCell(fo, xmlEncode(IO["Rem"])); _WriteCell(fo, xmlEncode(fSupplierSum.ToString("C2", culture))); _WriteCell(fo, xmlEncode(fBugetCost.ToString("C2", culture))); fo.TREnd(); fo.TRStart(); _WriteCell(fo, xmlEncode("Комиссия " + IO["ContractCompany"])); _WriteCell(fo, xmlEncode(IO["Percent"] + "%")); _WriteCell(fo, xmlEncode(Utils.ParseDBString(IO["SupplierFee"].ToString()).ToString("C2", culture))); _WriteCell(fo, xmlEncode()); fo.TREnd(); } } } // Расчитываем лимитированные расходы по проекту. // На текущий момент определились в бухгалтерской // форме показывать только Командировочные //АО Лимиты if (data.AOLimits != null) { foreach (IDictionary IO in data.AOLimits) { // считаем сумму всех АО лимитов fAOLimitSum += Utils.ParseDBString(IO["AOLimitSum"].ToString()); } } //АО лимиты с учетом "комплектации" if (data.ExtAOLimits != null) { foreach (IDictionary IO in data.ExtAOLimits) { // считаем сумму всех лимитов fExtOutLimit += Utils.ParseDBString(IO["AOLimitSum"].ToString()); } } //Лимитированные расходы if (data.OutLimits != null) { foreach (IDictionary IO in data.OutLimits) { // считаем сумму всех лимитов fAOLimitSum += Utils.ParseDBString(IO["OutLimitSum"].ToString()); } } //Лимитированные расходы с учетом "комплектации" if (data.ExtOutLimits != null) { foreach (IDictionary IO in data.ExtOutLimits) { // считаем сумму всех лимитов fExtOutLimit += Utils.ParseDBString(IO["OutLimitSum"].ToString()); } } //Итоговая строка расходов if (data.AOLimits != null || data.ExtAOLimits != null || data.OutLimits != null || data.ExtOutLimits != null) { fo.TRStart(); fo.TRAddCell(xmlEncode("Лимитированные расходы"), "string", 3, 1, ITRepStyles.GROUP_HEADER); fo.TRAddCell(xmlEncode(fExtOutLimit.ToString("C2", culture)), "string", 1, 1, ITRepStyles.GROUP_HEADER); fo.TRAddCell(xmlEncode(fAOLimitSum.ToString("C2", culture)), "string", 1, 1, ITRepStyles.GROUP_HEADER); fo.TREnd(); } //Выводим лимитированные расходы //Лимиты по АО if (data.AOLimits != null) { foreach (IDictionary IO in data.AOLimits) { fo.TRStart(); _WriteCell(fo, xmlEncode(IO["AOLimitName"])); _WriteCell(fo, xmlEncode()); _WriteCell(fo, xmlEncode(IO["AOLimitRem"])); _WriteCell(fo, xmlEncode(Utils.ParseDBString(IO["AOLimitSum"].ToString()).ToString("C2", culture))); _WriteCell(fo, xmlEncode(Utils.ParseDBString(IO["AOLimitSum"].ToString()).ToString("C2", culture))); fo.TREnd(); } } //Лимиты по АО с "расширенные" if (data.ExtAOLimits != null) { foreach (IDictionary IO in data.ExtAOLimits) { fo.TRStart(); _WriteCell(fo, xmlEncode(IO["AOLimitName"])); _WriteCell(fo, xmlEncode()); _WriteCell(fo, xmlEncode(IO["AOLimitRem"])); _WriteCell(fo, xmlEncode(Utils.ParseDBString(IO["AOLimitSum"].ToString()).ToString("C2", culture))); _WriteCell(fo, xmlEncode()); fo.TREnd(); } } //Лимиты по расходам if (data.OutLimits != null) { foreach (IDictionary IO in data.OutLimits) { fo.TRStart(); _WriteCell(fo, xmlEncode(IO["OutLimitName"])); _WriteCell(fo, xmlEncode()); _WriteCell(fo, xmlEncode(IO["OutLimitRem"])); _WriteCell(fo, xmlEncode(Utils.ParseDBString(IO["OutLimitSum"].ToString()).ToString("C2", culture))); _WriteCell(fo, xmlEncode(Utils.ParseDBString(IO["OutLimitSum"].ToString()).ToString("C2", culture))); fo.TREnd(); } } //Лимиты по расходам if (data.ExtOutLimits != null) { foreach (IDictionary IO in data.ExtOutLimits) { fo.TRStart(); _WriteCell(fo, xmlEncode(IO["OutLimitName"])); _WriteCell(fo, xmlEncode()); _WriteCell(fo, xmlEncode(IO["OutLimitRem"])); _WriteCell(fo, xmlEncode(Utils.ParseDBString(IO["OutLimitSum"].ToString()).ToString("C2", culture))); _WriteCell(fo, xmlEncode()); fo.TREnd(); } } fo.TRStart(); fo.TRAddCell(xmlEncode("ИТОГО Расходы"), "string", 3, 1, ITRepStyles.GROUP_HEADER); fo.TRAddCell(xmlEncode((fExtOutcomesSum + fExtOutLimit).ToString("C2", culture)), "string", 1, 1, ITRepStyles.GROUP_HEADER); fo.TRAddCell(xmlEncode((fAOLimitSum + fOutcomesSum).ToString("C2", culture)), "string", 1, 1, ITRepStyles.GROUP_HEADER); fo.TREnd(); fo.TRStart(); fo.TRAddCell(xmlEncode("Валовая прибыль"), "string", 3, 1, ITRepStyles.GROUP_HEADER); fo.TRAddCell(xmlEncode((fIncomeSum - (fExtOutcomesSum + fExtOutLimit)).ToString("C2", culture)), "string", 1, 1, ITRepStyles.GROUP_HEADER); fo.TRAddCell(xmlEncode((fIncomeSum - (fAOLimitSum + fOutcomesSum)).ToString("C2", culture)), "string", 1, 1, ITRepStyles.GROUP_HEADER); fo.TREnd(); double fAllOutcomse = fAOLimitSum + fOutcomesSum; double fExtAllOutcomse = fExtOutcomesSum + fExtOutLimit; fo.TRStart(); fo.TRAddCell(xmlEncode("Плановая рентабельность"), "string", 3, 1, ITRepStyles.GROUP_HEADER); if (fExtAllOutcomse != 0) { fo.TRAddCell(xmlEncode(((fIncomeSum - fExtAllOutcomse) * 100 / fExtAllOutcomse).ToString("N2") + "%"), "string", 1, 1, ITRepStyles.GROUP_HEADER); } else { fo.TRAddCell(xmlEncode(), "string", 1, 1, ITRepStyles.GROUP_HEADER); } if (fAllOutcomse != 0) { fo.TRAddCell(xmlEncode(((fIncomeSum - fAllOutcomse) * 100 / fAllOutcomse).ToString("N2") + "%"), "string", 1, 1, ITRepStyles.GROUP_HEADER); } else { fo.TRAddCell(xmlEncode(), "string", 1, 1, ITRepStyles.GROUP_HEADER); } fo.TREnd(); fo.TEnd(); }
/// <summary> /// Отображение в отчете основных свойств лота и тендера /// </summary> /// <param name="fo"></param> /// <param name="data">Данные тендера, данные которого отображаются</param> private void writeMainData(XslFOProfileWriter fo, ThisReportData data) { string sValue; #region #1: Основные данные // ...разделитель _TableSeparator(fo); fo.TStart(false, ITRepStyles.TABLE, false); fo.TAddColumn("Характеристика", align.ALIGN_LEFT, valign.VALIGN_TOP, null, "30%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Значение", align.ALIGN_LEFT, valign.VALIGN_TOP, null, "70%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TRStart(); fo.TRAddCell("Основные реквизиты", "string", 2, 1, ITRepStyles.GROUP_HEADER); fo.TREnd(); if ((Int32)data.Main["CustEqOrg"] == 1) { writeDataPair(fo, "Заказчик/Организатор", xmlEncode(data.Main["Customer"])); } else { writeDataPair(fo, "Заказчик/Организатор", xmlEncode(data.Main["Customer"]) + " / " + xmlEncode(data.Main["Organizer"])); } writeDataPair(fo, "Дата подачи документов", _FormatLongDateTime(data.Main["DocFeedingDate"])); writeDataPair(fo, "Дата проведения переторжки", _FormatLongDateTime(data.Main["DateTorg1"])); writeDataPair(fo, "Дата проведения 2й переторжки", _FormatLongDateTime(data.Main["DateTorg2"])); // ...Директор Клиента: if (data.ViewType == 0) { writeDataPair(fo, "Директор Клиента", _GetUserMailAnchor(data.Main["DirectorName"], data.Main["DirectorEMail"])); } // ...cостояние: цвет фона в зависимости от состояния LotState state = (LotState)(Int32.Parse(data.Main["State"].ToString())); if (LotState.WasGain == state) { sValue = ITRepStyles.TABLE_CELL_COLOR_GREEN; } else if (LotState.WasLoss == state) { sValue = ITRepStyles.TABLE_CELL_COLOR_RED; } else { sValue = ITRepStyles.TABLE_CELL; } writeDataPair(fo, "Состояние", "<fo:inline font-weight='bold'>" + xmlEncode(data.Main["StateName"]) + "</fo:inline>", sValue); // ...Контактное лицо конкурсной комисси: fo.TRStart(); fo.TRAddCell("Контактное лицо конкурсной комисси", "string", 2, 1, ITRepStyles.GROUP_HEADER); fo.TREnd(); writeDataPair(fo, "Фамилия, имя, отчество ", xmlEncode(data.Main["JuryContactName"])); writeDataPair(fo, "Телефон ", xmlEncode(data.Main["JuryContactPhone"])); writeDataPair(fo, "Адрес электронной почты", _GetUserMailAnchor(data.Main["JuryContactEMail"], data.Main["JuryContactEMail"])); fo.TEnd(); #endregion #region #2: Данные участников конкурса: if (null != data.Parts) { // ...разделитель _TableSeparator(fo); fo.TStart(true, ITRepStyles.TABLE, false); bool isFinalState = (LotState.WasGain == state || LotState.WasLoss == state); int nCol = fo.TAddColumn("Участники конкурса", align.ALIGN_LEFT, valign.VALIGN_MIDDLE, null, String.Empty, align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddSubColumn(nCol, "Организация", align.ALIGN_LEFT, valign.VALIGN_MIDDLE, null, "12%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddSubColumn(nCol, "Тип участия", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "8%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddSubColumn(nCol, "Отклонен", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "7%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); if (isFinalState) { fo.TAddSubColumn(nCol, "Итоговый статус", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "10%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); } fo.TAddSubColumn(nCol, "Сумма подачи, " + xmlEncode(data.Main["NDS"]), align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "8%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddSubColumn(nCol, "Сумма переторжки, " + xmlEncode(data.Main["NDS"]), align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "8%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddSubColumn(nCol, "Сумма 2й переторжки, " + xmlEncode(data.Main["NDS"]), align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "8%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddSubColumn(nCol, "Сумма подачи АП, " + xmlEncode(data.Main["NDS"]), align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "8%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddSubColumn(nCol, "Сумма переторжки АП, " + xmlEncode(data.Main["NDS"]), align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "8%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddSubColumn(nCol, "Сумма 2й переторжки АП, " + xmlEncode(data.Main["NDS"]), align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "8%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddSubColumn(nCol, "Примечание", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, (isFinalState ? "8%" : "13%"), align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); foreach (IDictionary orgData in data.Parts) { fo.TRStart(); _WriteCell(fo, xmlEncode(orgData["ParticipantOrganization"])); _WriteCell(fo, xmlEncode(orgData["ParticipationType"])); _WriteCell(fo, xmlEncode(orgData["DeclinedText"])); if (isFinalState) { bool isWinner = (null != orgData["Winner"]); _WriteCell(fo, "<fo:inline font-weight='bold'>" + (isWinner? "Победитель" : "Проигравший") + "</fo:inline>", "string", (isWinner? ITRepStyles.TABLE_CELL_COLOR_GREEN : ITRepStyles.TABLE_CELL_COLOR_RED)); } _WriteCell(fo, xmlEncode(orgData["TenderParticipantPrice"])); _WriteCell(fo, xmlEncode(orgData["SumTorg1"])); _WriteCell(fo, xmlEncode(orgData["SumTorg2"])); _WriteCell(fo, xmlEncode(orgData["TenderParticipantPriceAP"])); _WriteCell(fo, xmlEncode(orgData["SumTorg1AP"])); _WriteCell(fo, xmlEncode(orgData["SumTorg2AP"])); _WriteCell(fo, xmlEncode(orgData["Note"])); fo.TREnd(); } fo.TEnd(); } #endregion #region #3: Участие подразделений (если такие данные есть) if (null != data.DepParts && data.ViewType == 0) { // ...разделитель _TableSeparator(fo); fo.TStart(true, ITRepStyles.TABLE, false); int nCol = fo.TAddColumn("Участие департаментов", align.ALIGN_LEFT, valign.VALIGN_MIDDLE, null, null, align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddSubColumn(nCol, "Департамент", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "20%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddSubColumn(nCol, "Исполнитель", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "20%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddSubColumn(nCol, "Ознакомился", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "20%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddSubColumn(nCol, "Примечание", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "40%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); foreach (IDictionary depData in data.DepParts) { fo.TRStart(); _WriteCell(fo, xmlEncode(depData["Department"])); // Исполнитель от подразделения: sValue = _GetUserMailAnchor(depData["ExecutorName"], depData["ExecutorEMail"]); if (null != depData["DocsGettingDate"]) { sValue = sValue + (String.Empty != sValue ? ", " : "") + "документы получил(а) " + _FormatLongDate(depData["DocsGettingDate"]); } _WriteCell(fo, sValue); _WriteCell(fo, xmlEncode(depData["ExecutorIsAcquaint"])); _WriteCell(fo, xmlEncode(depData["Note"])); fo.TREnd(); } fo.TEnd(); } #endregion #region #3: Внешние ссылки (если таковые есть) if (null != data.Links && data.ViewType == 0) { // ...разделитель _TableSeparator(fo); fo.TStart(false, ITRepStyles.TABLE, false); fo.TAddColumn("Тип ссылки", align.ALIGN_LEFT, valign.VALIGN_TOP, null, "15%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Ссылка", align.ALIGN_LEFT, valign.VALIGN_TOP, null, "85%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TRStart(); fo.TRAddCell("Внешние ссылки", "string", 2, 1, ITRepStyles.GROUP_HEADER); fo.TREnd(); foreach (IDictionary linkData in data.Links) { string sLinkHRef = String.Format( "<fo:basic-link " + "text-decoration=\"none\" " + "external-destination=\"vbscript:window.OpenExternalLink({0},"{1}")\">" + "{2}</fo:basic-link> " + "( полный адрес: <fo:basic-link " + "text-decoration=\"none\" " + "external-destination=\"vbscript:window.OpenExternalLink({0},"{1}")\">" + "{1}</fo:basic-link> )", linkData["LinkServiceType"], // {0}, тип обслуживающей системы xmlEncode(linkData["URI"]), // {1}, URI ссылки xmlEncode(linkData["LinkName"]) // {2}, отображаемое значение ссылки ); fo.TRStart(); _WriteCell(fo, xmlEncode(linkData["ServiceTypeName"])); _WriteCell(fo, sLinkHRef, "string"); fo.TREnd(); } fo.TEnd(); } #endregion #region #4: Дополнительные данные _TableSeparator(fo); fo.TStart(false, ITRepStyles.TABLE, false); fo.TAddColumn("Характеристика", align.ALIGN_LEFT, valign.VALIGN_TOP, null, "30%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Значение", align.ALIGN_LEFT, valign.VALIGN_TOP, null, "70%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TRStart(); fo.TRAddCell("Дополнительно", "string", 2, 1, ITRepStyles.GROUP_HEADER); fo.TREnd(); writeDataPair(fo, "К обсуждению", xmlEncode(data.Main["QualifyingRequirement"])); if (data.ViewType == 0) { writeDataPair(fo, "Примечание", xmlEncode(data.Main["Note"])); writeDataPair(fo, "Обсуждения", xmlEncode(data.Main["Discussion"])); } fo.TEnd(); #endregion }
/// <summary> /// Построение стандартного отчета /// </summary> /// <param name="fo">xml-пул данных отчета</param> /// <param name="data">параметры отчета</param> private void writeCommonReport(XslFOProfileWriter fo, ThisReportData data) { // Определим локализацию для парсинга данных из БД CultureInfo culture = new CultureInfo("ru-RU"); _TableSeparator(fo); // Шапка отчета fo.TStart(true, ITRepStyles.TABLE, false); fo.TAddColumn("Статья расходов", align.ALIGN_LEFT, valign.VALIGN_MIDDLE, null, "45%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Назначение/Контрагент", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, null, "35%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Примечание", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "10%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); fo.TAddColumn("Сумма с НДС", align.ALIGN_RIGHT, valign.VALIGN_MIDDLE, null, "10%", align.ALIGN_CENTER, valign.VALIGN_MIDDLE, ITRepStyles.TABLE_HEADER); double fOutcomesSum = 0, fAOLimitSum = 0, fIncomeSum = 0; //Построение блока отчета по приходам if (data.Incomes != null) { IDictionary arIO = (IDictionary)data.Incomes[0]; fIncomeSum = Utils.ParseDBString(arIO["Sum"].ToString()); fo.TRStart(); fo.TRAddCell(xmlEncode(arIO["Type"]), "string", 3, 1, ITRepStyles.GROUP_HEADER); fo.TRAddCell(xmlEncode(fIncomeSum.ToString("C2", culture)), "string", 1, 1, ITRepStyles.GROUP_HEADER); fo.TREnd(); } ; // Построение блока отчета по прямым расходам if (data.Outcomes != null) { foreach (IDictionary IO in data.Outcomes) { fOutcomesSum += Utils.ParseDBString(IO["BudgetCost"].ToString()); } // Выводим итоговую сумму прямых расходов fo.TRStart(); fo.TRAddCell(xmlEncode("Прямые расходы"), "string", 3, 1, ITRepStyles.GROUP_HEADER); fo.TRAddCell(xmlEncode(fOutcomesSum.ToString("C2", culture)), "string", 1, 1, ITRepStyles.GROUP_HEADER); fo.TREnd(); // Показываем все расходы по-пунктно foreach (IDictionary IO in data.Outcomes) { fo.TRStart(); _WriteCell(fo, xmlEncode(IO["BudgetItem"])); _WriteCell(fo, xmlEncode(IO["ContractCompany"])); _WriteCell(fo, xmlEncode(IO["Rem"])); _WriteCell(fo, xmlEncode(Utils.ParseDBString(IO["BudgetCost"].ToString()).ToString("C2", culture))); fo.TREnd(); } } // Выводим лимитированные расходы по проекту. // На текущий момент определились в бухгалтерской // форме показывать только Командировочные if (data.AOLimits != null) { foreach (IDictionary IO in data.AOLimits) { // считаем сумму всех АО лимитов fAOLimitSum += Utils.ParseDBString(IO["AOLimitSum"].ToString()); } } if (data.OutLimits != null) { foreach (IDictionary IO in data.OutLimits) { // считаем сумму всех лимитов fAOLimitSum += Utils.ParseDBString(IO["OutLimitSum"].ToString()); } } if (data.AOLimits != null || data.OutLimits != null) { fo.TRStart(); fo.TRAddCell(xmlEncode("Лимитированные расходы"), "string", 3, 1, ITRepStyles.GROUP_HEADER); fo.TRAddCell(xmlEncode(fAOLimitSum.ToString("C2", culture)), "string", 1, 1, ITRepStyles.GROUP_HEADER); fo.TREnd(); } if (data.AOLimits != null) { foreach (IDictionary IO in data.AOLimits) { fo.TRStart(); _WriteCell(fo, xmlEncode(IO["AOLimitName"])); _WriteCell(fo, xmlEncode()); _WriteCell(fo, xmlEncode(IO["AOLimitRem"])); _WriteCell(fo, xmlEncode(Utils.ParseDBString(IO["AOLimitSum"].ToString()).ToString("C2", culture))); fo.TREnd(); } } if (data.OutLimits != null) { foreach (IDictionary IO in data.OutLimits) { fo.TRStart(); _WriteCell(fo, xmlEncode(IO["OutLimitName"])); _WriteCell(fo, xmlEncode()); _WriteCell(fo, xmlEncode(IO["OutLimitRem"])); _WriteCell(fo, xmlEncode(Utils.ParseDBString(IO["OutLimitSum"].ToString()).ToString("C2", culture))); fo.TREnd(); } } fo.TRStart(); fo.TRAddCell(xmlEncode("ИТОГО Расходы"), "string", 3, 1, ITRepStyles.GROUP_HEADER); fo.TRAddCell(xmlEncode((fAOLimitSum + fOutcomesSum).ToString("C2", culture)), "string", 1, 1, ITRepStyles.GROUP_HEADER); fo.TREnd(); fo.TRStart(); fo.TRAddCell(xmlEncode("Валовая прибыль"), "string", 3, 1, ITRepStyles.GROUP_HEADER); fo.TRAddCell(xmlEncode((fIncomeSum - (fAOLimitSum + fOutcomesSum)).ToString("C2", culture)), "string", 1, 1, ITRepStyles.GROUP_HEADER); fo.TREnd(); double fAllOutcomse = fAOLimitSum + fOutcomesSum; fo.TRStart(); fo.TRAddCell(xmlEncode("Плановая рентабельность"), "string", 3, 1, ITRepStyles.GROUP_HEADER); if (fAllOutcomse != 0) { fo.TRAddCell(xmlEncode(((fIncomeSum - fAllOutcomse) * 100 / fAllOutcomse).ToString("N2") + "%"), "string", 1, 1, ITRepStyles.GROUP_HEADER); } else { fo.TRAddCell(xmlEncode(), "string", 1, 1, ITRepStyles.GROUP_HEADER); } fo.TREnd(); fo.TEnd(); }