Отчет Excel как сделать динамические колонки в зависимости от выбранных фильтров в стандартном окне фильтров
билд:Terrasoft sales 3.3.2.173.
И в теме https://community.terrasoft.ua/blogs/7302 был вопрос почему не загружается шаблон Excel, и ответ, "Проблема с сохранением шаблона для отчета была решена в ходе удаленного подключения." можно по подробней что нужно сделать?

Нравится

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

Александр, как должна работать функциональность

"Скрипка Александр Леонидович" написал:Отчет Excel как сделать динамические колонки в зависимости от выбранных фильтров в стандартном окне фильтров

опишите подробнее.
Что касается загрузки шаблона: протестировала корректность загрузки шаблона по предложенной в теме http://www.community.terrasoft.ua/blogs/7302 реализации. Окно выбора позволяет выбрать и загрузить файл MS Excel:

 	 /system/files/1_119.png

Какие у Вас возникли проблемы с загрузкой?

1.Создал отчет Excel, в нем разных 23 колонки настроил фильтры пользователя, каждый фильтр соответствует колонке в отчете.
Так вот нужно чтоб колонки выводились только те которые отмечены в фильтре пользователем
2. Загрузил сервисы предложенные в теме http://www.community.terrasoft.ua/blogs/7302 т.к. билд sales 3.3.2.173 не имеет возможности загружать шаблон Excel, но столкнулся с тем что создать шаблон Excel могу , а загрузить нет. Ошибок никаких нет но при запуске отчета выводит собственную форму, а не мой шаблон.

Александр, здравствуйте.

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

Единственная проблема, которую я я нашел, это то, что шаблон нельзя загрузить в отчет.
Для исправления этой проблемы, добавьте строку Dataset.Post(); в функцию function DoTemplateFileOperation(Dataset, DataFieldName, IsSavingOperation) скрипта wnd_ExcelReportEditScript:

function DoTemplateFileOperation(Dataset, DataFieldName, IsSavingOperation) {
	var FileName = GetNewValue();
	if (!System.PromptForFileName(FileName, "Документ Word" + '|*.xls;*.xlsx;', 'xls;xlsx', 
		EmptyStr, EmptyStr, IsSavingOperation)) {
		return;
	}
	if (IsSavingOperation) {
		LoadFileFromDataset(FileName.Value, Dataset, DataFieldName);	
	} else {
		SaveFileToDataset(FileName.Value, Dataset, DataFieldName);
		Dataset.Post();
	}	
}

Далее, создайте шаблон, вставьте необходимые Вам поля из запроса в сам ексель файл, сохраните его на жесткий диск, а потом воспользуйтесь кнопкой "Загрузить шаблон в базу", выбрав нужный файл на жестком диске.
После этого, просто закройте окно со свойствами отчета, перейдите в раздел, для которого создан отчет, и вызовите его через меню "Отчеты".

Спасибо Дмитрий!
По второму вопросу все получилось.
А что вы можете подсказать по динамическим колонкам?

Алгоритм действий такой:
1. В функции function btnOKOnClick(Control) сервиса wnd_ReportFiltersScript в блоке

switch (ReportSourceTypeID) {
				case rstExcel:
 
					break;

реализовать запись включенных фильтров окна фильтрации в атрибуты.
Для этого следует создать функцию, подобную AddReportAttributes, в которой реализовать передачу названий полей фильтра в атрибуты.
2. В функции wnd_BaseWorkspaceOnNotify скрипта scr_BaseWorkspace, в блоке кода

if (Message == MSG_QUERYFILTERWINDOW_EXCELMODE_OK) {
	    var QueryBuilderData = Sender.Attributes('QueryBuilderData');
	    ShowExcelReport(QueryBuilderData, null, Self);
	    return;
	}

Считать значение переданных на предыдущем шаге атрибутов (по аналогии со строкой Sender.Attributes('QueryBuilderData')).

3. Затем модифицировать функции ShowExcelReport, CreateExcelDataBand добавив еще один параметр с атрибутами.
Основная цель сводится к тому, чтобы в функции построения полей отчета выполнять сравнение: входит название поля в массив названий полей фильтра (из атрибутов), если входит – прорисовывать поле, иначе – нет.

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