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

Доброго времени суток,
Просьба подсказать как добавить в Итоги раздела Планирование сумму по колонке Потенциал, в коробочной версии реализована сумма Палана и Факта.
планирование
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

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);
}
Показать все комментарии