Отчет Exсel как сделать динамические колонки
Отчет Excel как сделать динамические колонки в зависимости от выбранных фильтров в стандартном окне фильтров
билд:Terrasoft sales 3.3.2.173.
И в теме https://community.terrasoft.ua/blogs/7302 был вопрос почему не загружается шаблон Excel, и ответ, "Проблема с сохранением шаблона для отчета была решена в ходе удаленного подключения." можно по подробней что нужно сделать?
Нравится
Александр, как должна работать функциональность
"Скрипка Александр Леонидович" написал:Отчет Excel как сделать динамические колонки в зависимости от выбранных фильтров в стандартном окне фильтров
опишите подробнее.
Что касается загрузки шаблона: протестировала корректность загрузки шаблона по предложенной в теме http://www.community.terrasoft.ua/blogs/7302 реализации. Окно выбора позволяет выбрать и загрузить файл MS Excel:
Какие у Вас возникли проблемы с загрузкой?
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 добавив еще один параметр с атрибутами.
Основная цель сводится к тому, чтобы в функции построения полей отчета выполнять сравнение: входит название поля в массив названий полей фильтра (из атрибутов), если входит – прорисовывать поле, иначе – нет.