В "Первой Форме" файлы, вложенные в задачи и в ДП "Файл", хранятся в отдельных файловых БД. Для каждого файлового провайдера создается отдельная БД, ее название можно посмотреть в настройках. В такой БД, как правило, содержится единственная таблица UploadFiles, в которой хранятся загруженные файлы.
Чтобы в отчетах использовать изображения, вложенные в задачу или в ДП "Файл", можно использовать объект "Рисунок" (Picture), а в свойстве DataColumn этого объекта указать поле FileContent из таблицы UploadFiles.
Чтобы изображение отображалось корректно, важно, чтобы в используемом файловом провайдере не было включено сжатие данных. Если изображения хранятся в ДП "Файл", для такого ДП можно использовать отдельный файловый провайдер с отключенной опцией сжатия. |
---|
Например, файлы, вложенные в задачу, можно получить с помощью такой процедуры (где @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) или можете поместить текст запроса непосредственно в окно источника данных:
Текст запроса в окне создания источника данных.
Если при создании такого источника данных поля не определились автоматически, их нужно создать вручную, указав значение Calculated = False:
Настройка полей для источника данных.
Пример макета отчета. |
|
Результат. |
Полезные ссылки