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

При разработке плагинов возникает необходимость работы с конфигурацией Terrasoft CRM.
Некоторый пример кода на С# для работы с конфигурацией.

Соединение с конфигурацией:

using TSObjectLibrary;

        Connector connector = new ConnectorClass();
        connector.OpenConfigurationByName(ConfigName, AuthenticationMode, TSLogin, TSPassword);

Используем датасет:

DBDataset ds = (DBDataset)сonnector.Services.GetNewItemByUSI("ds_Incident");
     

Наложить фильтр можно следующим образом:

    public static void ApplyDatasetFilter(DBDataset Dataset, string FilterName, object ParamValue, bool Enabled) {
        EnableDatasetFilter(Dataset, FilterName, Enabled);
        SetDatasetParameter(Dataset, FilterName, ParamValue);
    }

    public static void SetDatasetParameter(DBDataset Dataset, string ParameterName, object ParamValue) {
        SelectQuery sq = Dataset.SelectQuery;
        sq.Parameters[ParameterName].Value = ParamValue;
    }

    public static void EnableDatasetFilter(DBDataset Dataset, string FilterName, bool Enabled) {
        SelectQuery sq = Dataset.SelectQuery;
        sq.get_Items(0).Filters[FilterName].IsEnabled = Enabled;
    }

Удачи!

Татьяна Адамчук

Нравится

Поделиться

1 комментарий

Вовремя! :-)

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

При разработке отчета возникла следующая проблемма. В отчет выводится таблица с цифровой и текстовой информацией. Колонка таблицы, где содержатся цифры, суммируется по строкам и эта сумма печатается прописью. Попытка использовать функцию AmountToStr() в датасете не увенчалась успехом, так как итоговая сумма по колонке подсчитывается уже в самом отчете. Подскажите пожалуйста, как решить эту проблему.

Нравится

6 комментариев

Самым быстро реализуемым, но не самым элегантным решением будет подсчет итога в самом наборе данных.

Спасибо.А пример скрипта можно привести.

Подсчет суммы можно выполнить с помощью подзапроса или вычисляемых полей.
В другое вычисляемое поле записать значение функции AmountToStr().
Привожу наброски кода для подсчета суммы.

var DatasetObject = new Object;
 
function ds_ReportInvoicesByPeriodOnDatasetCalcFields(Dataset) {
	Dataset.DisableEvents();
	if (!DatasetObject.IsCalculated) {
		var SumDataset	= Dataset;
		SumDataset.GotoFirst();
		var Sum = 0;		
		while (!SumDataset.IsEOF) {
			Sum = Sum + SumDataset('BasicAmount');
			SumDataset.GotoNext();
 
		}
		var StringSum = Sum.toString()
		DatasetObject.IsCalculated = true;
		var Result  = AmountToStr(StringSum, 'ru', 'UAH'); 
		Dataset.Values('Sum') = Result; 	
	}
	Dataset.EnableEvents();
}

При использовании указанного кода, поле "Sum" не удается вывести в отчет. Не в DetailData, не в Footer. Либо выдает ошибку "Невозможно изменить значение вычисляемого поля", либо выводит в таблице только одну строчку.

Ну наброски "почти" работающими были :)
Замените

var Dataset = Dataset;

на

var Dataset = Dataset.SelectQuery.Open();

Думаю, причина ошибки "Невозможно изменить значение вычисляемого поля" была в состоянии набора данных в событии OnCalcDataFields. Точнее смогут ответить сотрудники поддержки.

Повторюсь метод не претендует на элегантность.

var DatasetObject = new Object;
 
function ds_ReportInvoicesByPeriodOnDatasetCalcFields(Dataset) {
	Dataset.DisableEvents();
	if (!DatasetObject.IsCalculated) {
		// SumDataset = Dataset; - неправильное копирование 
		var SumDataset = Dataset.SelectQuery.Open();
		SumDataset.GotoFirst();
		var Sum = 0;		
		while (!SumDataset.IsEOF) {
			Sum = Sum + SumDataset('BasicAmount');
			SumDataset.GotoNext();				
		}
		var StringSum = Sum.toString()
		DatasetObject.IsCalculated = true;
		var Result  = AmountToStr(StringSum, 'ru', 'UAH'); 
		Dataset.Values('Sum') = Result; 	
	}
	Dataset.EnableEvents();	
}

Спасибо за помощь. Все заработало.

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