Публикация

Отображение BLOB поля в отчете FastReport.

Недавно появилась задача отобразить в отчете FastReport содержимое BLOB поля, которое заполняется в MemoDataControl.
Оказалось это задача требует определенных преобразований. Опишу алгоритм реализации на примере добавления в отчет поля «Детальное решение» из карточки [Инцидент].
Последовательность действий:
1. Открыть датасет отчета. Добавить вычисляемое поле с типом строка. Указать название, например, Solution:
/system/files/1_92.png
2. Создать обработчик события OnDatasetCalcFields:
/system/files/2_53.png
В теле функции обработки события необходимо прописать код:

var Stream = new ActiveXObject("ADODB.Stream");
        Stream.Open();
        Stream.Type = 2;
        var DataField = Dataset.DataFields('DetailedSolution');
        DataField.GetValAsBlob(Stream);
        Stream.Position = 0;
        var Text = Stream.ReadText();
        Stream.Close();
        Dataset.ValAsStr('Solution') = Text;

Где 'DetailedSolution' - BLOB поле, 'Solution' – вычисляемое поле.

/system/files/3_27.png

3. Отрыть сервис отчета. Добавить Text Object, связать его с вычисляемым полем:
/system/files/4_16.png
4. Сохранить изменения. Проверить работу отчета.

Нравится

Поделиться

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

Пригодилось решение. Спасибо, Наталия.

Сделал все как описано, но вылетает ошибка:
Ошибка
В чем может быть проблема?
Terrasoft CRM_v3.4.0.130

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

"Бондарь Наталия" написал:

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


Спасибо за помощь :)

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