Добавить в Итоги раздела Планирование сумму по колонке Потенциал
Доброго времени суток,
Просьба подсказать как добавить в Итоги раздела Планирование сумму по колонке Потенциал, в коробочной версии реализована сумма Палана и Факта.
Terrasoft 3.3.2.172
Нравится
Здравствуйте!
Поскольку реестр раздела формируется динамически в программном коде, Вам следует редактировать следующие сущности:
1. Структуру таблиц, где хранится планирование: tbl_Planning и tbl_PlanningData;
2. написать новые скрипты расчета потенциала по аналогии с содержимым Planning\Library\scr_PlanningFixedUtils в конфигурации
3. Добавить колонки в реестр отображения wnd_PlanningViewGrid
также хочу обратить внимание, что это очень значительная программная доработка, которая требует всестороннего тестирования, и не может быть изложена в двух словах в рамках темы на Community.
Здравствуйте Анна,
Решение задачи:
Изменения выделены комментариями //20.07
1.Подсчет:
В src_PlanningUtils
function CreateDimensionDataset(Planning, DimensionKey) { var Dataset = Services.CreateItem('DBDataset'); var DataFields = Dataset.DataFields; var DataField; var DataTable = GetSingleItemByCode('tbl_PlanningData'); ... for (Key in Planning.Indicators) { Column = Planning.Query.Columns[Key]; IndicatorCaption = "Итого | " + Column.Caption; NamePrefix = GenNamePrefixByUID(Column.RecordID); if (Column.IsPlanning) { if (Values('PlanningValue')('IsVisible')) { DataField = DataFields.CreateCalcDataField(); DataField.Name = 'PlanningSum_' + NamePrefix; DataField.IsReadOnly = true; DataField.Caption = IndicatorCaption + ' | ' + Values('PlanningValue')('Caption'); DataField.MultilineCaption = DataField.Caption; DataField.IsFilteringField = false; DataFields.AddItem(DataField); } } if (Values('ActualValue')('IsVisible')) { DataField = DataFields.CreateCalcDataField(); DataField.Name = 'ActualSum_' + NamePrefix; DataField.IsReadOnly = true; DataField.Caption = IndicatorCaption + ' | ' + Values('ActualValue')('Caption'); DataField.MultilineCaption = DataField.Caption; DataField.IsFilteringField = false; DataFields.AddItem(DataField); } //20.07 if (Values('FixedValue')('IsVisible')) { DataField = DataFields.CreateCalcDataField(); DataField.Name = 'FixedSum_' + NamePrefix; DataField.IsReadOnly = true; DataField.Caption = IndicatorCaption + ' | ' + Values('FixedValue')('Caption'); DataField.MultilineCaption = DataField.Caption; DataField.IsFilteringField = false; DataFields.AddItem(DataField); } //20.07 } return Dataset; }
function PlanningOnDatasetCalcFields(Planning, Dataset) { var Values = Planning.Values; var ValuesKeys = Values.Keys().toArray(); ... if (Planning.DisplayRecordSum) { for (IndicatorKey in Planning.Indicators) { Indicator = Planning.Query.Columns[IndicatorKey]; var PlanningSum = 0.0; var ActualSum = 0.0; //20.07 var FixedSum = 0.0; //20.07 for (PeriodKey in Planning.Periods) { Period = Planning.Periods[PeriodKey]; NamePrefix = GenNamePrefixByDate(Period.BeginDate, Indicator.RecordID); var PlanningFieldName = Values('PlanningValue')('Prefix') + '_' + NamePrefix; var ActualFieldName = Values('ActualValue')('Prefix') + '_' + NamePrefix; //20.07 var FixedFieldName = Values('FixedValue')('Prefix') + '_' + NamePrefix; //20.07 PlanningField = Dataset.Datafields.ItemsByName(PlanningFieldName); ActualField = Dataset.Datafields.ItemsByName(ActualFieldName); //20.07 var FixedField = Dataset.Datafields.ItemsByName(FixedFieldName); //20.07 if (PlanningField) { PlanningSum = PlanningSum + PlanningField.Value; } if (ActualField) { ActualSum = ActualSum + ActualField.Value; } //20.07 if (FixedField) { FixedSum = FixedSum + FixedField.Value; } //20.07 } NamePrefix = GenNamePrefixByUID(Indicator.RecordID); if (Indicator.IsPlanning) { if (Values('PlanningValue')('IsVisible')) { PlanningFieldName = 'PlanningSum_' + NamePrefix; PlanningField = Dataset.Datafields.ItemsByName(PlanningFieldName); if (PlanningField) { PlanningField.Value = PlanningSum; } } } if (Values('ActualValue')('IsVisible')) { ActualFieldName = 'ActualSum_' + NamePrefix; ActualField = Dataset.Datafields.ItemsByName(ActualFieldName); if (ActualField) { ActualField.Value = ActualSum; } } //20.07 if (Values('FixedValue')('IsVisible')) { FixedFieldName = 'FixedSum_' + NamePrefix; FixedField = Dataset.Datafields.ItemsByName(FixedFieldName); if (FixedField) { FixedField.Value = FixedSum; } } //20.07 } } }
2. Отображение: В wnd_PlanningViewGridScript функция CreateGridViewColumns создает колонки в GridView
function CreateGridViewColumns() { var Planning = PlanningViewGrid.Planning; var GridView = grdData.ActiveView; ... if (Planning.DisplayRecordSum) { for (Key in Planning.Indicators) { Indicator = Planning.Query.Columns[Key]; IndicatorCaption = "Итоги | " + Indicator.Caption; NamePrefix = GenNamePrefixByUID(Indicator.RecordID); if (Indicator.IsPlanning) { if (Values('PlanningValue')('IsVisible')) { ColumnNamePrefix = GridView.Name + '_col' + NamePrefix; ColumnName = 'PlanningSum_' + ColumnNamePrefix; Column = Window.CreateComponent('DataGridColumn', ColumnName); Column.DataFieldName = 'PlanningSum_' + NamePrefix; Column.MinWidth = 40; Column.Width = 70; GridView.AddItem(Column); } } if (Values('ActualValue')('IsVisible')) { ColumnNamePrefix = GridView.Name + '_col' + NamePrefix; ColumnName = 'ActualSum_' + ColumnNamePrefix; Column = Window.CreateComponent('DataGridColumn', ColumnName); Column.DataFieldName = 'ActualSum_' + NamePrefix; Column.MinWidth = 40; Column.Width = 70; GridView.AddItem(Column); } //20.07 if (Values('FixedValue')('IsVisible')) { ColumnNamePrefix = GridView.Name + '_col' + NamePrefix; ColumnName = 'FixedSum_' + ColumnNamePrefix; Column = Window.CreateComponent('DataGridColumn', ColumnName); Column.DataFieldName = 'FixedSum_' + NamePrefix; Column.MinWidth = 40; Column.Width = 70; GridView.AddItem(Column); } //20.07 } } Column = Window.CreateComponent('DataGridColumn', GridView.Name + '_colFake'); Column.IsVisible = false; GridView.AddItem(Column); }