From 007004ba3899e3a9183b169f960163fc4ba1dd3c Mon Sep 17 00:00:00 2001 From: Extrimal Date: Sun, 16 Jun 2024 13:37:38 +0400 Subject: [PATCH] =?UTF-8?q?=D0=B3=D0=BE=D1=82=D0=BE=D0=B2=D0=B0=D1=8F=204?= =?UTF-8?q?=20=D0=BB=D0=B0=D0=B1=D0=B0=20hard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OfficePackage/AbstractSaveToWord.cs | 5 +- .../OfficePackage/Implements/SaveToWord.cs | 61 +++ GarmentFactory/GarmentFactoryView/FormMain.cs | 19 +- .../FormReportGroupedOrders.cs | 72 +++ .../FormReportGroupedOrders.designer.cs | 91 ++++ .../FormReportGroupedOrders.resx | 120 +++++ .../FormReportShopTextiles.cs | 76 ++++ .../FormReportShopTextiles.designer.cs | 120 +++++ .../FormReportShopTextiles.resx | 120 +++++ .../GarmentFactoryView.csproj | 3 + .../ReportGroupedOrders.rdlc | 424 ++++++++++++++++++ 11 files changed, 1106 insertions(+), 5 deletions(-) create mode 100644 GarmentFactory/GarmentFactoryView/FormReportGroupedOrders.cs create mode 100644 GarmentFactory/GarmentFactoryView/FormReportGroupedOrders.designer.cs create mode 100644 GarmentFactory/GarmentFactoryView/FormReportGroupedOrders.resx create mode 100644 GarmentFactory/GarmentFactoryView/FormReportShopTextiles.cs create mode 100644 GarmentFactory/GarmentFactoryView/FormReportShopTextiles.designer.cs create mode 100644 GarmentFactory/GarmentFactoryView/FormReportShopTextiles.resx create mode 100644 GarmentFactory/GarmentFactoryView/ReportGroupedOrders.rdlc diff --git a/GarmentFactory/GarmentFactoryBusinessLogic/OfficePackage/AbstractSaveToWord.cs b/GarmentFactory/GarmentFactoryBusinessLogic/OfficePackage/AbstractSaveToWord.cs index 86302ab..34def36 100644 --- a/GarmentFactory/GarmentFactoryBusinessLogic/OfficePackage/AbstractSaveToWord.cs +++ b/GarmentFactory/GarmentFactoryBusinessLogic/OfficePackage/AbstractSaveToWord.cs @@ -90,8 +90,9 @@ namespace GarmentFactoryBusinessLogic.OfficePackage // Создание абзаца с текстом protected abstract void CreateParagraph(WordParagraph paragraph); - - // Сохранение файла + protected abstract void CreateTable(List columns); + protected abstract void CreateRow(WordParagraph paragraph); + // Сохранение файла protected abstract void SaveWord(WordInfo info); } } diff --git a/GarmentFactory/GarmentFactoryBusinessLogic/OfficePackage/Implements/SaveToWord.cs b/GarmentFactory/GarmentFactoryBusinessLogic/OfficePackage/Implements/SaveToWord.cs index 5a9bea6..0656365 100644 --- a/GarmentFactory/GarmentFactoryBusinessLogic/OfficePackage/Implements/SaveToWord.cs +++ b/GarmentFactory/GarmentFactoryBusinessLogic/OfficePackage/Implements/SaveToWord.cs @@ -11,6 +11,7 @@ namespace GarmentFactoryBusinessLogic.OfficePackage.Implements { private WordprocessingDocument? _wordDocument; private Body? _docBody; + private Table? table; // Получение типа выравнивания private static JustificationValues GetJustificationValues(WordJustificationType type) @@ -104,6 +105,66 @@ namespace GarmentFactoryBusinessLogic.OfficePackage.Implements _docBody.AppendChild(docParagraph); } + protected override void CreateTable(List columns) + { + if (_docBody == null || columns == null) + { + return; + } + + table = new(); + TableProperties properties = new(); + properties.AppendChild(new TableLayout { Type = TableLayoutValues.Fixed }); + properties.AppendChild(new TableBorders( + new TopBorder() { Val = new EnumValue(BorderValues.Single), Size = 4 }, + new LeftBorder() { Val = new EnumValue(BorderValues.Single), Size = 4 }, + new RightBorder() { Val = new EnumValue(BorderValues.Single), Size = 4 }, + new BottomBorder() { Val = new EnumValue(BorderValues.Single), Size = 4 }, + new InsideHorizontalBorder() { Val = new EnumValue(BorderValues.Single), Size = 4 }, + new InsideVerticalBorder() { Val = new EnumValue(BorderValues.Single), Size = 4 } + )); + properties.AppendChild(new TableWidth { Type = TableWidthUnitValues.Auto }); + table.AppendChild(properties); + + TableGrid tableGrid = new(); + foreach (var column in columns) + { + tableGrid.AppendChild(new GridColumn() { Width = column }); + } + table.AppendChild(tableGrid); + + _docBody.AppendChild(table); + } + + protected override void CreateRow(WordParagraph paragraph) + { + if (_docBody == null || table == null || paragraph == null) + { + return; + } + TableRow tableRow = new(); + foreach (var column in paragraph.Texts) + { + var tableParagraph = new Paragraph(); + tableParagraph.AppendChild(CreateParagraphProperties(paragraph.TextProperties)); + + var tableRun = new Run(); + var runProperties = new RunProperties(); + runProperties.AppendChild(new FontSize { Val = column.Item2.Size }); + if (column.Item2.Bold) + { + runProperties.AppendChild(new Bold()); + } + tableRun.AppendChild(runProperties); + tableRun.AppendChild(new Text { Text = column.Item1, Space = SpaceProcessingModeValues.Preserve }); + tableParagraph.AppendChild(tableRun); + + TableCell cell = new(); + cell.AppendChild(tableParagraph); + tableRow.AppendChild(cell); + } + table.AppendChild(tableRow); + } protected override void SaveWord(WordInfo info) { if (_docBody == null || _wordDocument == null) diff --git a/GarmentFactory/GarmentFactoryView/FormMain.cs b/GarmentFactory/GarmentFactoryView/FormMain.cs index 0a8d6f2..1081366 100644 --- a/GarmentFactory/GarmentFactoryView/FormMain.cs +++ b/GarmentFactory/GarmentFactoryView/FormMain.cs @@ -215,17 +215,30 @@ namespace GarmentFactoryView private void СписокМагазиновToolStripMenuItem_Click(object sender, EventArgs e) { - + using var dialog = new SaveFileDialog { Filter = "docx|*.docx" }; + if (dialog.ShowDialog() == DialogResult.OK) + { + _reportLogic.SaveShopsToWordFile(new ReportBindingModel { FileName = dialog.FileName }); + MessageBox.Show("Выполнено", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information); + } } private void ЗагруженностьМагазиновToolStripMenuItem_Click(object sender, EventArgs e) { - + var service = Program.ServiceProvider?.GetService(typeof(FormReportShopTextiles)); + if (service is FormReportShopTextiles form) + { + form.ShowDialog(); + } } private void ЗаказыПоДатамToolStripMenuItem_Click(object sender, EventArgs e) { - + var service = Program.ServiceProvider?.GetService(typeof(FormReportGroupedOrders)); + if (service is FormReportGroupedOrders form) + { + form.ShowDialog(); + } } } } diff --git a/GarmentFactory/GarmentFactoryView/FormReportGroupedOrders.cs b/GarmentFactory/GarmentFactoryView/FormReportGroupedOrders.cs new file mode 100644 index 0000000..4a3ad51 --- /dev/null +++ b/GarmentFactory/GarmentFactoryView/FormReportGroupedOrders.cs @@ -0,0 +1,72 @@ +using GarmentFactoryContracts.BindingModels; +using GarmentFactoryContracts.BusinessLogicsContracts; +using Microsoft.Extensions.Logging; +using Microsoft.Reporting.WinForms; + +namespace GarmentFactoryView +{ + public partial class FormReportGroupedOrders : Form + { + private readonly ReportViewer reportViewer; + + private readonly ILogger _logger; + + private readonly IReportLogic _logic; + + public FormReportGroupedOrders(ILogger logger, IReportLogic logic) + { + InitializeComponent(); + _logger = logger; + _logic = logic; + reportViewer = new ReportViewer + { + Dock = DockStyle.Fill + }; + reportViewer.LocalReport.LoadReportDefinition(new FileStream("ReportGroupedOrders.rdlc", FileMode.Open)); + Controls.Clear(); + Controls.Add(reportViewer); + Controls.Add(panel); + } + + private void ButtonCreateReport_Click(object sender, EventArgs e) + { + try + { + var dataSource = _logic.GetGroupedByDateOrders(); + var source = new ReportDataSource("DataSetOrders", dataSource); + reportViewer.LocalReport.DataSources.Clear(); + reportViewer.LocalReport.DataSources.Add(source); + + reportViewer.RefreshReport(); + _logger.LogInformation("Loading list of grouped orders"); + } + catch (Exception ex) + { + _logger.LogError(ex, "Loading list of grouped orders error"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonToPdf_Click(object sender, EventArgs e) + { + using var dialog = new SaveFileDialog { Filter = "pdf|*.pdf" }; + if (dialog.ShowDialog() == DialogResult.OK) + { + try + { + _logic.SaveGroupedOrdersToPdfFile(new ReportBindingModel + { + FileName = dialog.FileName, + }); + _logger.LogInformation("Saving list of grouped orders"); + MessageBox.Show("Выполнено", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + catch (Exception ex) + { + _logger.LogError(ex, "Saving list of grouped orders error"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + } +} \ No newline at end of file diff --git a/GarmentFactory/GarmentFactoryView/FormReportGroupedOrders.designer.cs b/GarmentFactory/GarmentFactoryView/FormReportGroupedOrders.designer.cs new file mode 100644 index 0000000..398a591 --- /dev/null +++ b/GarmentFactory/GarmentFactoryView/FormReportGroupedOrders.designer.cs @@ -0,0 +1,91 @@ +namespace GarmentFactoryView +{ + partial class FormReportGroupedOrders + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + panel = new Panel(); + buttonToPdf = new Button(); + buttonCreateReport = new Button(); + panel.SuspendLayout(); + SuspendLayout(); + // + // panel + // + panel.Controls.Add(buttonToPdf); + panel.Controls.Add(buttonCreateReport); + panel.Dock = DockStyle.Top; + panel.Location = new Point(0, 0); + panel.Margin = new Padding(4, 3, 4, 3); + panel.Name = "panel"; + panel.Size = new Size(1031, 40); + panel.TabIndex = 0; + // + // buttonToPdf + // + buttonToPdf.Anchor = AnchorStyles.Top | AnchorStyles.Right; + buttonToPdf.Location = new Point(188, 8); + buttonToPdf.Margin = new Padding(4, 3, 4, 3); + buttonToPdf.Name = "buttonToPdf"; + buttonToPdf.Size = new Size(139, 27); + buttonToPdf.TabIndex = 5; + buttonToPdf.Text = "В Pdf"; + buttonToPdf.UseVisualStyleBackColor = true; + buttonToPdf.Click += ButtonToPdf_Click; + // + // buttonCreateReport + // + buttonCreateReport.Location = new Point(11, 8); + buttonCreateReport.Margin = new Padding(4, 3, 4, 3); + buttonCreateReport.Name = "buttonCreateReport"; + buttonCreateReport.Size = new Size(139, 27); + buttonCreateReport.TabIndex = 4; + buttonCreateReport.Text = "Сформировать"; + buttonCreateReport.UseVisualStyleBackColor = true; + buttonCreateReport.Click += ButtonCreateReport_Click; + // + // FormReportGroupedOrders + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1031, 647); + Controls.Add(panel); + Margin = new Padding(4, 3, 4, 3); + Name = "FormReportGroupedOrders"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Заказы по датам"; + panel.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private System.Windows.Forms.Panel panel; + private System.Windows.Forms.Button buttonToPdf; + private System.Windows.Forms.Button buttonCreateReport; + } +} \ No newline at end of file diff --git a/GarmentFactory/GarmentFactoryView/FormReportGroupedOrders.resx b/GarmentFactory/GarmentFactoryView/FormReportGroupedOrders.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/GarmentFactory/GarmentFactoryView/FormReportGroupedOrders.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/GarmentFactory/GarmentFactoryView/FormReportShopTextiles.cs b/GarmentFactory/GarmentFactoryView/FormReportShopTextiles.cs new file mode 100644 index 0000000..f9a70e4 --- /dev/null +++ b/GarmentFactory/GarmentFactoryView/FormReportShopTextiles.cs @@ -0,0 +1,76 @@ +using GarmentFactoryContracts.BindingModels; +using GarmentFactoryContracts.BusinessLogicsContracts; +using Microsoft.Extensions.Logging; + +namespace GarmentFactoryView +{ + public partial class FormReportShopTextiles : Form + { + private readonly ILogger _logger; + + private readonly IReportLogic _logic; + + public FormReportShopTextiles(ILogger logger, IReportLogic logic) + { + InitializeComponent(); + _logger = logger; + _logic = logic; + } + + + private void ButtonSaveToExcel_Click(object sender, EventArgs e) + { + using var dialog = new SaveFileDialog { Filter = "xlsx|*.xlsx" }; + if (dialog.ShowDialog() == DialogResult.OK) + { + try + { + _logic.SaveShopTextileToExcelFile(new ReportBindingModel + { + FileName = dialog.FileName + }); + _logger.LogInformation("Saving information on store workload"); + MessageBox.Show("Выполнено", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + catch (Exception ex) + { + _logger.LogError(ex, "Saving information on store workload error"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + + private void dataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + + } + + private void FormReportShopTextiles_Load(object sender, EventArgs e) + { + try + { + var dict = _logic.GetShopTextiles(); + if (dict != null) + { + dataGridView.Rows.Clear(); + foreach (var elem in dict) + { + dataGridView.Rows.Add(new object[] { elem.ShopName, "", "" }); + foreach (var listElem in elem.Textiles) + { + dataGridView.Rows.Add(new object[] { "", listElem.Item1, listElem.Item2 }); + } + dataGridView.Rows.Add(new object[] { "Итого", "", elem.TotalCount }); + dataGridView.Rows.Add(Array.Empty()); + } + } + _logger.LogInformation("Loading information on store workload"); + } + catch (Exception ex) + { + _logger.LogError(ex, "Loading information on store workload error"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} \ No newline at end of file diff --git a/GarmentFactory/GarmentFactoryView/FormReportShopTextiles.designer.cs b/GarmentFactory/GarmentFactoryView/FormReportShopTextiles.designer.cs new file mode 100644 index 0000000..d5af195 --- /dev/null +++ b/GarmentFactory/GarmentFactoryView/FormReportShopTextiles.designer.cs @@ -0,0 +1,120 @@ +namespace GarmentFactoryView +{ + partial class FormReportShopTextiles + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + dataGridView = new DataGridView(); + buttonSaveToExcel = new Button(); + ColumnShop = new DataGridViewTextBoxColumn(); + ColumnIceCream = new DataGridViewTextBoxColumn(); + ColumnCount = new DataGridViewTextBoxColumn(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToOrderColumns = true; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.BackgroundColor = SystemColors.ControlLightLight; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Columns.AddRange(new DataGridViewColumn[] { ColumnShop, ColumnIceCream, ColumnCount }); + dataGridView.Dock = DockStyle.Bottom; + dataGridView.Location = new Point(0, 63); + dataGridView.Margin = new Padding(5, 4, 5, 4); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.RowHeadersWidth = 51; + dataGridView.Size = new Size(704, 680); + dataGridView.TabIndex = 0; + dataGridView.CellContentClick += dataGridView_CellContentClick; + // + // buttonSaveToExcel + // + buttonSaveToExcel.Location = new Point(15, 13); + buttonSaveToExcel.Margin = new Padding(5, 4, 5, 4); + buttonSaveToExcel.Name = "buttonSaveToExcel"; + buttonSaveToExcel.Size = new Size(213, 36); + buttonSaveToExcel.TabIndex = 1; + buttonSaveToExcel.Text = "Сохранить в Excel"; + buttonSaveToExcel.UseVisualStyleBackColor = true; + buttonSaveToExcel.Click += ButtonSaveToExcel_Click; + // + // ColumnShop + // + ColumnShop.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + ColumnShop.HeaderText = "Магазин"; + ColumnShop.MinimumWidth = 6; + ColumnShop.Name = "ColumnShop"; + ColumnShop.ReadOnly = true; + // + // ColumnIceCream + // + ColumnIceCream.HeaderText = "Изделие"; + ColumnIceCream.MinimumWidth = 6; + ColumnIceCream.Name = "ColumnIceCream"; + ColumnIceCream.ReadOnly = true; + ColumnIceCream.Width = 200; + // + // ColumnCount + // + ColumnCount.HeaderText = "Количество"; + ColumnCount.MinimumWidth = 6; + ColumnCount.Name = "ColumnCount"; + ColumnCount.ReadOnly = true; + ColumnCount.Width = 125; + // + // FormReportShopTextiles + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(704, 743); + Controls.Add(buttonSaveToExcel); + Controls.Add(dataGridView); + Margin = new Padding(5, 4, 5, 4); + Name = "FormReportShopTextiles"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Загруженность магазинов"; + Load += FormReportShopTextiles_Load; + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private System.Windows.Forms.DataGridView dataGridView; + private System.Windows.Forms.Button buttonSaveToExcel; + private DataGridViewTextBoxColumn ColumnShop; + private DataGridViewTextBoxColumn ColumnIceCream; + private DataGridViewTextBoxColumn ColumnCount; + } +} \ No newline at end of file diff --git a/GarmentFactory/GarmentFactoryView/FormReportShopTextiles.resx b/GarmentFactory/GarmentFactoryView/FormReportShopTextiles.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/GarmentFactory/GarmentFactoryView/FormReportShopTextiles.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/GarmentFactory/GarmentFactoryView/GarmentFactoryView.csproj b/GarmentFactory/GarmentFactoryView/GarmentFactoryView.csproj index 0ffbeaa..eb5fd2f 100644 --- a/GarmentFactory/GarmentFactoryView/GarmentFactoryView.csproj +++ b/GarmentFactory/GarmentFactoryView/GarmentFactoryView.csproj @@ -28,6 +28,9 @@ + + Always + Always diff --git a/GarmentFactory/GarmentFactoryView/ReportGroupedOrders.rdlc b/GarmentFactory/GarmentFactoryView/ReportGroupedOrders.rdlc new file mode 100644 index 0000000..d620022 --- /dev/null +++ b/GarmentFactory/GarmentFactoryView/ReportGroupedOrders.rdlc @@ -0,0 +1,424 @@ + + + 0 + + + + System.Data.DataSet + /* Local Connection */ + + 10791c83-cee8-4a38-bbd0-245fc17cefb3 + + + + + + GarmentFactoryShopContractsViewModels + /* Local Query */ + + + + Date + System.DateTime + + + Count + System.Int32 + + + Sum + System.Decimal + + + + GarmentFactoryShopContracts.ViewModels + ReportOrdersByDateViewModel + GarmentFactoryShopContracts.ViewModels.ReportOrdersByDateViewModel, GarmentFactoryShopContracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + + + + + + + + + true + true + + + + + Заказы по датам + + + + + + + 1cm + 21cm + + + Middle + 2pt + 2pt + 2pt + 2pt + + + + + + + 6.01401cm + + + 6.56042cm + + + 6.12687cm + + + + + 0.6cm + + + + + true + true + + + + + Дата + + + + + + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + Количество заказов + + + + + + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + Сумма + + + + + + 2pt + 2pt + 2pt + 2pt + + + + + + + + 0.6cm + + + + + true + true + + + + + =Fields!Date.Value + + + + + + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + =Fields!Count.Value + + + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + =Fields!Sum.Value + + + 2pt + 2pt + 2pt + 2pt + + + + + + + + + + + + + + + + + + + After + + + + + + + DataSetOrders + 1.95474cm + 1.16099cm + 1.2cm + 18.7013cm + 1 + + + + + + true + true + + + + + Всего: + + + + + + + 4cm + 11.23542cm + 0.6cm + 2.5cm + 2 + + + 2pt + 2pt + 2pt + 2pt + + + + true + true + + + + + =Sum(Fields!Sum.Value, "DataSetOrders") + + + + + + + 4cm + 13.73542cm + 0.6cm + 6.12687cm + 3 + + + 2pt + 2pt + 2pt + 2pt + + + + 5.72875cm +