итоги
планирование
Скрипты
Разработка

Добавить в Итоги раздела Планирование сумму по колонке Потенциал

Доброго времени суток,
Просьба подсказать как добавить в Итоги раздела Планирование сумму по колонке Потенциал, в коробочной версии реализована сумма Палана и Факта.
планирование
Terrasoft 3.3.2.172

Нравится

2 комментария

Здравствуйте!

Поскольку реестр раздела формируется динамически в программном коде, Вам следует редактировать следующие сущности:

1. Структуру таблиц, где хранится планирование: tbl_Planning и tbl_PlanningData;

2. написать новые скрипты расчета потенциала по аналогии с содержимым Planning\Library\scr_PlanningFixedUtils в конфигурации

3. Добавить колонки в реестр отображения wnd_PlanningViewGrid

также хочу обратить внимание, что это очень значительная программная доработка, которая требует всестороннего тестирования, и не может быть изложена в двух словах в рамках темы на Community.

Здравствуйте Анна,
Решение задачи:
Изменения выделены комментариями //20.07
1.Подсчет:
В src_PlanningUtils
[javascript]
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;
}
[/javascript]

[javascript]
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

}
}
}
[/javascript]

2. Отображение: В wnd_PlanningViewGridScript функция CreateGridViewColumns создает колонки в GridView
[javascript]
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);
}
[/javascript]

Показать все комментарии