Добрый день.

После обновления платформы на версию 7.15.4.3055 стали формироваться пустые отчеты с использованием шаблона через приложение Advanced excel reports for Creatio.

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

В истории формировании отчета никаких ошибок нет.

 

Прошу помочь. В чем может быть причина и какие способы решения?

 

Нравится

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

Добрый день, Эдуард,

 

уточните, пожалуйста, какой продукт Creatio используете? И подскажите, пробовали добавить повторно шаблон в настройки отчета и проверить работу формирования отчета с повторно добавленным шаблоном?

Ирина Лазоренко,

 

"Product": "SalesEnterprise_Marketing_ServiceEnterprise".

Пробовали:

  • Добавлять в качестве шаблона пустой XLSX файл;
  • Добавить шаблон в отчет, по которому раньше не было шаблона;
  • Добавить вручную (не через экспорт/импорт) новый отчет по другим объектам. Без шаблона данные выгружаются. При использовании шаблона возвращается шаблон без данных;
  • Переустановить приложение.

Все равно выгружается пустой шаблон.

Ирина Лазоренко, добрый день.

Есть еще какие-либо предложения, что попробовать/проверить?

Эдуард, добрый день!

 

подскажите, предложение по исправлению от пользователя Алексея Пичурина в посте https://community.terrasoft.ru/questions/pechatnaya-forma-advanced-excel-reports-creatio помог решить ошибку с формированием пустого отчета?

Добрый день, Ирина.

Да, это предложение помогло.

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

Здравствуйте. *bpm'sales

Есть ли возможность реализовать на практике следующее:

1. В форме фильтрации отчета, раздела аналитика, сделать поле выбора значений из справочника который выглядит следующим образом - 

Изображение удалено.

Но при открытии окна выбора открывалось окно Множественного выбора, например как тут

2. Передавать Id выбранных записей в отчет.

Есть идеи?

Нравится

5 комментариев
Лучший ответ

Доброе утро. На сколько мне известно в базовой логике данная задача не реализована. Вам надо посмотреть в сторону замещения и расширения модуля ReportFilterModule. На данный момент реализована передача фильтра с помощью фильтрации записей в разделе.

var config = [

          {

                name: 'FormingMethod',

                dataValueType: 'FormingMethod'

            }

]

Доброе утро. На сколько мне известно в базовой логике данная задача не реализована. Вам надо посмотреть в сторону замещения и расширения модуля ReportFilterModule. На данный момент реализована передача фильтра с помощью фильтрации записей в разделе.

var config = [

          {

                name: 'FormingMethod',

                dataValueType: 'FormingMethod'

            }

]

Солонко Олег Иванович,

Можете детальней описать что нужно менять? Схему карточки выбора записи из справочника?

Фильтрация по множественному выбору записей в разделе — это то, что есть сейчас. Подробнее описывал в соседней теме.

Зверев Александр,

 

создание раздела под 1 отчет, это не подходит. Было бы неплохо схему фильтров подредактировать, но мало знаний что бы туда тянуть руки.

Как вариант, можно смотреть на создание карточки параметров отчёта в интерфейсе 5.Х. Там включение множественного выбора включатся одной галочкой. Но тогда нужно будет разбираться, как данные из 5.Х-карточки передаются в отчёт.

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

Добрый день! Не могу решить следующую проблему: запускаю BPMonlineReportDesigner.exe ввожу данные для авторизации, после этого долго загружается окно дизайнера, после чего появляется окно

в логах сервера появляется ошибка

Программа BPMonlineReportDesigner.exe версии 7.4.0.2924 прекратила взаимодействие с Windows и была закрыта. Чтобы узнать, имеются ли дополнительные сведения о проблеме, проверьте историю проблемы в Центре поддержки в панели управления.
 ИД процесса: 2338
 Время запуска: 01d03fa1831a7363
 Время завершения: 15
 Путь приложения: E:\WWW\BPM7.4.0.2458_Dev\Terrasoft.WebApp\DesktopBin\DevExpressReportDesigner\BPMonlineReportDesigner.exe
 ИД отчета: e7eec0e6-ab94-11e4-b8d1-ac220bdc3d68

 

На других ПК дизайнер открывается.
Изменял значение Timeout'ов в BPMonlineReportDesigner.exe.config. Не помогло

Заранее спасибо за помощь.

Нравится

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

Спасибо за Ваше обращение. Мы зарегистрировали его в Службе технической поддержки и назначили специалиста, который сможет Вас компетентно проконсультировать по данному вопросу.

Здравствуйте.
Сравните, пожалуйста, наличие обновлений ОС от Microsoft на проблемной машине и на той, где дизайнер работает. Для проверки можно попробовать отключить брендмауэр Windows, поставить на паузу антивирус. Таким образом можно значительно сузить место поиска источника проблемы.

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

Здравствуйте.
Делаю отчет средствами BPMonlineReportDesigner
Возникла необходимость написать сложный запрос где EntitySchemaQuery не подойдет,
но можно использовать класс Select
как мне загрузить его в дата сет

DataSet ds = report.CreateDataSet();
ds.Tables["Facility"].Load(report.UserConnection, query, false);

и второй более важный как можно использовать пользовательский дата сет. Который сформирован под нужный мне запрос из БД ?

Нравится

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

Обсуждение перенесено в эту тему

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

Здравствуйте.
Делаю отчет средствами BPMonlineReportDesigner
Возникла необходимость написать сложный запрос где EntitySchemaQuery не подойдет,
но можно использовать класс Select
как мне загрузить его в дата сет

 

DataSet ds = report.CreateDataSet();
ds.Tables["Facility"].Load(report.UserConnection, query, false);


и второй более важный как можно использовать пользовательский дата сет. Который сформирован под нужный мне запрос из БД ?

 

Нравится

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

Если я правильно понимаю вопрос, то:

1.

using (DBExecutor dbExecutor = report.UserConnection.EnsureDBConnection()) {
    ds.Tables["Facility"].Load(select.ExecuteReader(dbExecutor));
}

2.

report.DataSource = ds;

То есть грубо говоря я могу написать

Select select= Select(UserConnection)
select.Column("Id").Column("Name").From("Contact"); 
sing (DBExecutor dbExecutor = report.UserConnection.EnsureDBConnection()) {
    ds.Tables["Facility"].Load(select.ExecuteReader(dbExecutor));
}
report.DataSource = ds;

Я могу тогда как то свой Dataset построить не прибегая к использованию имеющихся и привязных к таблицам в БД
см. Скрин.

Если я не ошибаюсь можно, изменив ручками файл данных .xsd

DevExpress_Community_1

В качестве примера можете посмотреть файл данных стандартного отчета "ProcessReport". Там же можете найти как подгрузить CustomQuery например.

Есть еще другой вариант:

Возможно если у вас сложные связи и вы будете часто использовать такие данные, рациональнее было бы создать Представление (View) в БД, собирающее все необходимое.
Завести его как объект/представление в bpm'online. Тогда с ним было бы просто работать через ESQ и указать связи в "данных" отчета

select2.Column("SQUARE").From("Facility");
using (DBExecutor dbExecutor = report.UserConnection.EnsureDBConnection()) {
   		 ds.Tables["TemplateByReport"].Load(select2.ExecuteReader(dbExecutor));
	}

Складывается впечатление что он считывает только первую строку

Здравствуйте, Рустам!

Попробуйте запрофайлить запрос, который идет в базу при построении отчета согласно инструкции:
http://www.community.terrasoft.ru/forum/topic/10810#comment-48856

Спасибо за совет Андрей.
Но SQL запрос я в сам отчет вывел, суть в том что этим селектом он должен выводить несколько строк, а на деле только первая выходит.

Возможно ли чистый SQL запрос использовать ?

Рустам, мне кажется, что проблема может быть в том как вы выводите данные на страницу отчета.
Данные выводятся в какую-то таблицу? Данные в таблице сгруппированы? Все ли свойства проставлены?

Все можно! Можно писать SQL код в виде текста. А одна строка у Вас считывалась потому что вы некорректно считывали :)
Вот примерчик.

const string sqlText = @"
select count(*) as TotalActivityCount,
 (select count(*) from Activity where TypeId = '{some_id}') as CountOfTypeID1,
 (select count(*) from Activity where TypeId = '{some_id2}') as CountOfTypeID3
from Activity
";
var resultQuery = new CustomQuery(userConnection, sqlText);
DataTable dt = new DataTable("Customers");
using (DBExecutor dbExecutor = userConnection.EnsureDBConnection()) {
        using(var dr = resultQuery.ExecuteReader(dbExecutor)) {
                dt.Load(dr);
        }
}
ds.Tables.Add(dt);

Только важно, чтобы имя DataTable созданной Вами в коде совпадало с именем таблицы, которую Вы добавили в источник данных в дизайнере. Т.е. грубо говоря выбираете таблицу Контактов, затем создаете таблицу с таким же именем в коде и закидываете её в датасет отчета. Также проследите, чтобы в текстовом запросе везде были проставлены псевдонимы колонок, которые совпадают с имена реальных колонок в выбранной таблице. Т.е. если вы в дизайнере выбрали таблицу контактов, и выбрали одно поле Name, то в коде в запросе должна выбираться также одна колонка и тоже с псевдонимом Name. В таком случае вы сможете затем перетягивать эту колонку уже в дизайн отчета, и в неё будут подтягиваться те данные, которые пришли с запросом.

Здравствуйте, Дмитрий.

Все равно показывает только первую строку.
К тому же
ds.Tables.Add(dt); выдает ошибку я удалил датасет что привязал после этого он стал принимать созданный скриптами. Но тут другая проблема как привязывать тогда поля датасета к таблицам и прочим элементам в отчете ?

Рустам, это нужно делать явно - путем одинакового именования колонок в "кстомном" запросе, и одинаковых имен таблиц датасета (скрипт) и таблиц датасета (дизайнер). Я об этом писал выше.

Дмитрий, спасибо вам за ваши ответы.
На счет того что выводит только одну строку я разобрался.
По поводу одинаковых имел, я это понял, так и сделал.

Вот запрос.

SELECT COUNT(*) [ColumnInt_01]
, SUM([Facility].[SQUARE])[ColumnDecimal_01]
, SUM([Invoice].[PaymentAmount])[ColumnDecimal_02]
FROM [dbo].[Facility] [Facility]
 LEFT OUTER JOIN(select [PaymentAmount],[FacilityId] from  [dbo].[Invoice] where  [PaymentStatusId] <>N'3FB932EA-F36B-1410-2691-00155D043205') as [Invoice] 
 ON ([Facility].[id] =[Invoice].[FacilityId])
WHERE [Facility].[ParentFacilityId] = N'5a6f5d1b-13f7-4f13-82d2-ade850456d3f' 
 
GROUP BY [ParentFacilityId]

Ниже таблица которую я использовал.

SELECT TOP 1000 [Id]
      ,[CreatedOn]
      ,[CreatedById]
      ,[ModifiedOn]
      ,[ModifiedById]
      ,[Name]
      ,[Description]
      ,[ProcessListeners]
      ,[ColumnInt_01]
      ,[ColumnDecimal_01]
      ,[ColumnDecimal_02]
      ,[ColumnDecimal_03]
      ,[ColumnDecimal_04]
  FROM [Kronwerk].[dbo].[TemplateByReport]
Показать все комментарии