Show/Hide Toolbars

Руководство администратора

Изображения из БД

Ссылки Назад Вверх Вперед

В "Первой Форме" файлы, вложенные в задачи и в ДП "Файл", хранятся в отдельных файловых БД. Для каждого файлового провайдера создается отдельная БД, ее название можно посмотреть в настройках. В такой БД, как правило, содержится единственная таблица UploadFiles, в которой хранятся загруженные файлы.

Чтобы в отчетах использовать изображения, вложенные в задачу или в ДП "Файл", можно использовать объект "Рисунок" (Picture), а в свойстве DataColumn этого объекта указать поле FileContent из таблицы UploadFiles.

warning_icon  Чтобы изображение отображалось корректно, важно, чтобы в используемом файловом провайдере не было включено сжатие данных. Если изображения хранятся в ДП "Файл", для такого ДП можно использовать отдельный файловый провайдер с отключенной опцией сжатия.

Например, файлы, вложенные в задачу, можно получить с помощью такой процедуры (где @TaskID — номер задачи):

ALTER PROCEDURE [dbo].[take_files]
AS
BEGIN
DECLARE @SQL NVARCHAR(MAX), @DB_NAME NVARCHAR(MAX)
 

-- выбираем файл-провайдера по умолчанию, в нем хранятся файлы, вложенные в задачи
select @DB_NAME = P.Name from dbo.FileProviders P where P.UseToWriteFiles = 1
 

-- формируем запрос к нужной файловой БД
set @SQL = 'SELECT U.FileContent, T.Description TaskText
     FROM  dbo.Tasks AS T

         INNER JOIN dbo.FileStorageFileToTaskLinks AS FT ON FT.TaskId = T.TaskID

         INNER JOIN dbo.FileStorageFileVersions AS FV ON FT.FileId = FV.FileId INNER JOIN ' +
         @DB_NAME + '.dbo.UploadFiles AS U ON FV.FileProviderKey = U.id
     WHERE (T.TaskID = @TaskID) AND (FT.IsDeleted = 0)'
 
EXEC (@SQL)
END

Файлы, вложенные в ДП в задаче, можно получить с помощью такой процедуры (где @TaskID — номер задачи, @ExtParamID — номер ДП "Файл"):

ALTER PROCEDURE [dbo].[take_files_ep]
AS
BEGIN
DECLARE @SQL NVARCHAR(MAX), @DB_NAME NVARCHAR(MAX), @DB_NAME_EP NVARCHAR(MAX), @DB_NAME_DEFAULT NVARCHAR(MAX)
 

-- выбираем файл-провайдера для нужного ДП или берем файл-провайдера по умолчанию
select @DB_NAME_EP = P.Name from dbo.ExtParamsFileSettings S JOIN dbo.FileProviders P ON S.FileProviderID = P.ID where S.ExtParamID = @ExtParamID
select @DB_NAME_DEFAULT = P.Name from dbo.FileProviders P where P.UseToWriteFiles = 1
set @DB_NAME = IsNull(@DB_NAME_EP, @DB_NAME_DEFAULT)

 

-- формируем запрос к нужной файловой БД
set @SQL = 'SELECT U.FileContent, T.Description TaskText
     FROM  dbo.Tasks AS T

         INNER JOIN dbo.FileStorageFileToExtParamLinks AS FEP ON FEP.TaskId = T.TaskID AND FEP.ExtParamID = @ExtParamID

         INNER JOIN dbo.FileStorageFileVersions AS FV ON FEP.FileId = FV.FileId INNER JOIN ' +
          @DB_NAME + '.dbo.UploadFiles AS U ON FV.FileProviderKey = U.id
     WHERE (T.TaskID = @TaskID) AND (FEP.IsDeleted = 0)'
 
EXEC (@SQL)
END

Вы можете сначала создать хранимые процедуры и вызывать их в отчете при создании источника данных (например, exec take_files или exec take_files_ep) или можете поместить текст запроса непосредственно в окно источника данных:

fr_files_table

Текст запроса в окне создания источника данных.

Если при создании такого источника данных поля не определились автоматически, их нужно создать вручную, указав значение Calculated = False:

fr_files_fields

Настройка полей для источника данных.

fr_files_layout

Пример макета отчета.

fr_files_result

Результат.

Полезные ссылки