Появилась необходимость выкачивать отчет по лиду в формате Excel по определенному шаблону (скриншот 1), решил воспользоваться дополнением https://marketplace.terrasoft.ru/app/advanced-excel-reports-creatio

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

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

Нравится

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

Илья, 

 

дополнение https://marketplace.terrasoft.ru/app/advanced-excel-reports-creatio не предоставляет возможности настраивать отчеты формата выше. Скорее будет более полезно для формирования выгрузок данных.

 

Подскажите, рассматривали ли возможность настройки отчета выше базовыми средствами в формате docx?

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

Добрый день!

Планируется ли реализовать выгрузку фильтров, по которым формируются данные, вместе с выгрузкой в Excel?

Нравится

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

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

 

Если Вы имеете в виду прямо в XLSX-файле выводить информацию о фильтре, то надо дорабатывать логику функции PrepareExport в схеме ExportToExcelService:

/// <summary>
/// Creates and writes excel stream to local storage and return export key.
/// </summary>
/// <param name="esqSerialized">Serialized export esq.</param>
/// <returns><see cref="ExportToExcelResponse"/>.</returns>
public virtual ExportToExcelResponse PrepareExport(string esqSerialized) {
	esqSerialized.CheckArgumentNull("ExportToExcelService.PrepareExport esqSerialized");
	UserConnection.CheckArgumentNull("ExportToExcelService UserConnection");
	UserConnection.DBSecurityEngine.CheckCanExecuteOperation(CanExportGridOperationCode);
	var selectQuery = Json.Deserialize<SelectQuery>(esqSerialized);
	selectQuery.CheckArgumentNull("ExportToExcelService.PrepareExport deserialized SelectQuery");
	var entitySchemaQuery = selectQuery.BuildEsq(UserConnection);
	entitySchemaQuery.CheckArgumentNull("ExportToExcelService.PrepareExport entitySchemaQuery");
	entitySchemaQuery = RemoveBinaryColumnsFromQuery(entitySchemaQuery);
	ExcelConverter.BatchSize = BatchSize;
	var excelData = ExcelConverter.GetExcelData(entitySchemaQuery, UserConnection);
	var storableExcelStream = new StorableStreamEntity { Data = excelData };
	var id = StreamRepository.Create(storableExcelStream);
	return new ExportToExcelResponse {
		Key = id.ToString(),
		Count = ExcelConverter.ExportedRowCount
	};
}

Или, скорее,  вызываемую из неё GetExcelData в схеме ExcelConverter:

/// <summary>
/// Returns excel data by entity schema query.
/// </summary>
/// <param name="entitySchemaQuery">Export data entity schema query.</param>
/// <param name="userConnection">User connection.</param>
/// <returns>Excel data bytes.</returns>
public virtual byte[] GetExcelData(EntitySchemaQuery entitySchemaQuery, UserConnection userConnection) {
	entitySchemaQuery.CheckArgumentNull("ExcelConverter.GetExcelData entitySchemaQuery");
	userConnection.CheckArgumentNull("ExcelConverter.GetExcelData userConnection");
	_isPrimaryColumnSelected = IsPrimaryColumnSelected(entitySchemaQuery);
	if (!_isPrimaryColumnSelected) {
		entitySchemaQuery.PrimaryQueryColumn.IsAlwaysSelect = true;
	}
	using (var excelStream = new MemoryStream()) {
		try {
			var spreadsheetDocument = CreateExcelFile(excelStream, entitySchemaQuery);
			SaveHeader(entitySchemaQuery);
			SaveData(entitySchemaQuery, userConnection);
			CloseExcelFile(spreadsheetDocument);
		} catch (Exception exception) {
			Log.Error($"Error during export to excel {exception}");
			throw new ExportToExcelException(exception);
		}
		return excelStream.ToArray();
	}
}

 Сейчас сериализованный ESQ с фильтром и набором колонок передаётся в первую в текстовом параметре в виде наподобие:

esqSerialized: "{"rootSchemaName":"Opportunity","operationType":0,"includeProcessExecutionData":true,"filters":{"items":{"4d035dfe-121a-4ac7-a729-353f872bf977":{"items":{"FixedFilters":{"items":{},"logicalOperation":0,"isEnabled":true,"filterType":6}},"logicalOperation":0,"isEnabled":true,"filterType":6}},"logicalOperation":0,"isEnabled":true,"filterType":6},"columns":{"items":{"Title":{"caption":"Название","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"Title"}},"Mood":{"caption":"Настроение","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"Mood"}},"Account":{"caption":"Контрагент","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"Account"}},"Contact":{"caption":"Контакт","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"Contact"}},"Stage":{"caption":"Стадия","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"Stage"}},"Owner":{"caption":"Ответственный","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"Owner"}},"Amount":{"caption":"Сумма продажи","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"Amount"}}}},"isDistinct":false,"rowCount":-1,"rowsOffset":-1,"isPageable":false,"allColumns":false,"useLocalization":true,"useRecordDeactivation":false,"serverESQCacheParameters":{"cacheLevel":0,"cacheGroup":"","cacheItemName":""},"queryOptimize":false,"useMetrics":false,"querySource":0,"ignoreDisplayValues":false,"isHierarchical":false}"

А во вторую — в виде обычной ESQ.

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

Можна ли выгружать данные из BPMonline 5.4.0 в динамические таблицы Excel

Нравится

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

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

Да, есть кнопочка в самом низу окна реестра данных:

1

))). Спасибо. Это я знаю. Я говорю об обновлении данных в Excel при обновлении в BPMonline. То есть о выгрузке не в статическую таблицу, а в динамическую.

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

Спасибо за уточнение :)
К сожалению нет, в существующий файл выгрузить данные в данный момент возможности нет.

Если я верно понял, то что мешает подключиться из Excel к БД, введя параметры подключения и таблицу?
excel+bpmonline

Спасибо большое. А не подскажете как подключиться сразу к нескольким таблицам, а то получается приконектиться только к одной))

У меня на разных листах успешно вытянулись разные таблицы.
Если нужно общую выборку из нескольких, можно написать в БД свою view, вытягивающую из таблиц нужные колонки.

то есть нужно программировать? или есть какой-то алгоритм?

В MSSQL Management Studio есть визуальный конструктор view. А что именно Вам надо сделать?

Сделать отчет на основании полей из разных таблиц

Тогда да, такой способ подойдёт: сконструировать в визуальном режиме представление (таблицы, колонки, сортировка, фильтация), сохранить его в БД, а потом к нему обращаться из Excel так же, как к обычной таблице.
view
Но важно, чтобы с компьютера, где будет запущен Excel, был доступ к серверу БД.

Во вложении черновой вариант статьи sdk, возможно будет полезной для вашей задачи.

Там только для Excel 2010.

Из контекста вопроса не ясно, про какую конкретно версию excel идет речь.
И потом, доступ к объектам через веб-сервис OData избавит от необходимости напрямую обращаться к БД.

Да, это хороший способ, а для On-Demand - единственный, хотел вчера тоже поэкспериментировать, но не нашёл сходу 2010 версии. Вот ещё инструкция Excel + OData.

В ближайшем обновлении SDK будет отдельный блок статей, посвященный работе с BPMonline по OData. Следите за новостями :)

А для 3.X связка Excel и БД вне конкуренции.

"Зверев Александр" написал:Если я верно понял, то что мешает подключиться из Excel к БД, введя параметры подключения и таблицу?

Товарищи, еще вопрос: вытянул в Excel таблицу. Но, к сожалению, не все колонки попали в свод. В частности не нашли отображения в своде две колонки типа справочник. С чем это может быть связано?

С тем, что непосредственно в таблице в колонке типа "справочник" хранятся GUID-ы, а названия элементов справочника - в другой таблице. Чтобы их вытянуть в виде текста нужно делать представление, как на моём скриншоте выше.

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

Спасибо большое

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