powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / [игнор отключен] [закрыт для гостей] / Прямой доступ к файлам в БД (УТ 11)
21 сообщений из 21, страница 1 из 1
Прямой доступ к файлам в БД (УТ 11)
    #38310841
footballer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возникла казуальная задача - необходимо извлекать хранимые в БД 1С файлы (напрямую, без ком), определённым образом обрабатывать их и записывать обратно.
Обратботка остаётся за скобками, проблема в извлечении-записи файлов. Хранятся они в блобе предположительно то ли со сжатием, то ли ещё как (шифрование и подписи отключено, проверял), потому что тупо из блоба в файл оно сохраняется некорректно. Предположительно какое-то примитивное сжатие, так как размер сохраняемого файла почти всегда меньше оригинала, но какой алгоритм? Или где в самой 1с копать как она сохраняет файл в свой "регистрсведений.присоединенныефайлы"?
...
Рейтинг: 0 / 0
Прямой доступ к файлам в БД (УТ 11)
    #38310851
Фотография badboychik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доставай в 1С, зачем напрямую то лезть? читай про объект "ДвоичныеДанные" в справке
...
Рейтинг: 0 / 0
Прямой доступ к файлам в БД (УТ 11)
    #38310884
footballer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
badboychikДоставай в 1С, зачем напрямую то лезть? читай про объект "ДвоичныеДанные" в справке
Спасибо конечно за совет, но задача состоит _именно_ в прямом обращении к БД MS SQL и чтении-записи файлов оттуда-туда.
...
Рейтинг: 0 / 0
Прямой доступ к файлам в БД (УТ 11)
    #38310918
Титов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
footballer,

в Sql пишите запрос и достаете из базы данные которые вам нужны!
...
Рейтинг: 0 / 0
Прямой доступ к файлам в БД (УТ 11)
    #38310919
Фотография badboychik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
этож нарушение лицензии, на минуточку )
Чем обосновано прямое обращение к скулю?
Обычно задачу ставят - решить такую то проблему. А каким способом решить, не должно быть принципиальным, главное быстро и не через Ж

А вообще 1Сный тип "ХранилищеЗначения" в скуле соответствует типу IMAGE
...
Рейтинг: 0 / 0
Прямой доступ к файлам в БД (УТ 11)
    #38310933
footballer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Титовfootballer,

в Sql пишите запрос и достаете из базы данные которые вам нужны!
Внезапно, но именно так и делаю. Проблема в том, что данные в файл сохраняются некорректно.
...
Рейтинг: 0 / 0
Прямой доступ к файлам в БД (УТ 11)
    #38310934
Титов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
footballerТитовfootballer,

в Sql пишите запрос и достаете из базы данные которые вам нужны!
Внезапно, но именно так и делаю. Проблема в том, что данные в файл сохраняются некорректно.

извлекаете не правильно
...
Рейтинг: 0 / 0
Прямой доступ к файлам в БД (УТ 11)
    #38310939
footballer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
footballerТитовfootballer,

в Sql пишите запрос и достаете из базы данные которые вам нужны!
Внезапно, но именно так и делаю. Проблема в том, что данные в файл сохраняются некорректно.
Это отдельные два вопроса)

badboychikА вообще 1Сный тип "ХранилищеЗначения" в скуле соответствует типу IMAGE
покурю в этом направлении.
...
Рейтинг: 0 / 0
Прямой доступ к файлам в БД (УТ 11)
    #38310942
footballer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Титовfootballerпропущено...

Внезапно, но именно так и делаю. Проблема в том, что данные в файл сохраняются некорректно.

извлекаете не правильно
И как же извлекать правильно?
Только можно без общих слов, а с конкретикой?
...
Рейтинг: 0 / 0
Прямой доступ к файлам в БД (УТ 11)
    #38310950
Титов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
footballer,

при извлечении должно быть все просто примерно так я делал в Оракле
Код: sql
1.
2.
3.
4.
5.
6.
7.
procedure open_scr(in_id in number, out_image out blob) is
  begin
    select rs.image_data
      into out_image
      from sk_req_scr rs
     where rs.req_id = in_id;
  end;
...
Рейтинг: 0 / 0
Прямой доступ к файлам в БД (УТ 11)
    #38310955
Титов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
footballer,

а обрабатываете вы как и где?
...
Рейтинг: 0 / 0
Прямой доступ к файлам в БД (УТ 11)
    #38311030
footballer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Титовfootballer,

а обрабатываете вы как и где?
в дельфи (хотя это и не принципиально) через ado запрос.
Стандартный TBlobField().SaveToFile(), как и прочие варианты через стримы выдают совершенно идентичные друг-другу результаты, отличающиеся от исходника (откуда, собственно, мысль про сжатие и родилась, к тому же из dbo.files, к примеру, таким образом всё прекрасно извлекается).
...
Рейтинг: 0 / 0
Прямой доступ к файлам в БД (УТ 11)
    #38311046
footballer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, во всех выгруженных файлах совершенно идентичный заголовок, возможно это не сжатие, а 1С при сохранении подставляет какую-то служебную информацию.
...
Рейтинг: 0 / 0
Прямой доступ к файлам в БД (УТ 11)
    #38311197
Фотография badboychik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я все равно не понимаю, зачем такой гемор, если в 1С можно вытащить и записать в файл одной строкой
Код: vbnet
1.
2.
//запросом отбираем нужную запись и потом..
ЗаписьРегистраСведенийПрисоединенныеФайлы.ХранимыйФайл.Получить().Записать(ИмяФайлаНаДиске);
...
Рейтинг: 0 / 0
Прямой доступ к файлам в БД (УТ 11)
    #38311223
footballer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
badboychikЯ все равно не понимаю, зачем такой гемор, если в 1С можно вытащить и записать в файл одной строкой
Код: vbnet
1.
2.
//запросом отбираем нужную запись и потом..
ЗаписьРегистраСведенийПрисоединенныеФайлы.ХранимыйФайл.Получить().Записать(ИмяФайлаНаДиске);


Мне видимо ещё не один раз придётся повторить, что это. требуется. сделать. без. участия. 1С.
...
Рейтинг: 0 / 0
Прямой доступ к файлам в БД (УТ 11)
    #38311436
Дмитрий_777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
footballer,

Что платформа дописывает в blob при формировании ХранилищаЗначений - кто его знает, это надо исходники платформы, или человека из головной конторы из отдела разработки платформы, но поэкспериментировать можно, попробуй для записи подпихнуть пустой файл, либо файл в котором будет только 1-2 байта и посмотри что прочитаешь.
...
Рейтинг: 0 / 0
Прямой доступ к файлам в БД (УТ 11)
    #38311631
ALKIR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(в браузере отключена ява, не работают теги, админы поправьте плз)

файлик в хранилище сохраняется в base64 ничего не добавялется

пример рабочего кода:

USE [DataExchange]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[getFileFromStorage]
@_SimpleKey binary(16) --ID файлика
,@OutputDirectory varchar(1024) --каталог для временного сохранения файлов из SQL
AS
Begin

print 'getFileFromStorage переданы параметры:'
print @_SimpleKey
print @OutputDirectory

declare
@Stream integer,
@Buffer varbinary(4096),
@Size integer,
@Pos integer,
@BufSize integer,
@HR varbinary(4096),
@FileName varchar(1024)

SET @BufSize = 4096

--проверять инициализацию объекта Stream не будем
--полагаем что объект ADODB.Stream работает безошибочно
--:) иначе бы Windows не работала

EXEC @HR = sp_OACreate 'ADODB.Stream',@Stream OUT
EXEC @HR = sp_OASetProperty @Stream,'Type',1 -- binary
EXEC @HR = sp_OASetProperty @Stream,'Mode',3 -- write|read
EXEC @HR = sp_OAMethod @Stream,'Open'

--Получаем информацию о файле
select @Size = DATALENGTH(_Fld194), @FileName =@OutputDirectory+'\'+_Fld193 from _InfoReg191 where _SimpleKey = @_SimpleKey

print 'размер создаваемого файла:' --режим тестирования
print @Size --режим тестирования
print 'имя файла:' --режим тестирования
print @FileName --режим тестирования

Set @Pos=0

WHILE @Pos < @Size BEGIN
SET @BufSize = CASE WHEN @Size - @Pos < 4096 THEN @Size - @Pos ELSE 4096 END

select @Buffer = substring(_Fld194 ,@Pos+1, @BufSize) from _InfoReg191 where _SimpleKey = @_SimpleKey

EXEC @HR = sp_OAMethod @Stream, 'Write', NULL, @Buffer

SET @Pos = @Pos + @BufSize
END


EXEC @HR = sp_OAMethod @Stream,'SaveToFile',null,@FileName,2

EXEC @HR = sp_OAMethod @Stream,'Close'
EXEC @HR = sp_OADestroy @Stream

--метод SaveToFile возвращает НЕ одназначно ответ - создали мы файл или нет
--чтобы понять это, попробуем получить размер созданного нами файлика
declare @hr_ int, @FSO int, @file int, @Size_Сreated int
exec @hr_ = sp_oacreate 'Scripting.FileSystemObject', @FSO output
exec @hr_ = sp_oamethod @FSO , 'GetFile', @file output, @FileName
exec @hr_ = sp_oagetproperty @file, 'Size', @Size_Сreated output
--exec @hr = sp_oadestroy @FSO
print 'Размер созданного файла:'
print @Size_Сreated --режим тестирования
If isNull(@Size_Сreated,0) <> @Size
Begin
print 'ERROR: ошибка при создании файла: '
print @FileName
Return 1
End

print 'файл создан' --режим тестирования
Return 0

END
...
Рейтинг: 0 / 0
Прямой доступ к файлам в БД (УТ 11)
    #38311729
baclanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
footballer,

Файлы 1С-ка хранит в сжатом виде, вроде использует zlib, вытащенный из базы файл нужно будет разжимать.
Мы файлы из 1С-ки получаем через веб-сервисы - даже на диск писать ничего не надо :-)
...
Рейтинг: 0 / 0
Прямой доступ к файлам в БД (УТ 11)
    #38312256
1с использует алгоритм сжатия DEFLATE

System.IO.Compression.DeflateStream
Вас спасет. например в виде clr сборки сдля скл сервер 2005 и выше
...
Рейтинг: 0 / 0
Прямой доступ к файлам в БД (УТ 11)
    #38315167
Nick Perelyaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"footballer" <nospam@sql.ru>; сообщил(а) в новостях
следующее:14486294@sql.ru...
> Автор: footballer
> badboychik
> Я все равно не понимаю, зачем такой гемор, если в 1С можно
> вытащить и записать в файл одной строкой
>
> //запросом отбираем нужную запись и потом..
> ЗаписьРегистраСведенийПрисоединенныеФайлы.ХранимыйФайл.Получить().Записать(ИмяФайлаНаДиске);
>
>
> Мне видимо ещё не один раз придётся повторить, что это. требуется.
> сделать. без. участия. 1С.
> Тема Ответить Сообщение
Тебе дельно говорят. Используй com из дельфи - это несколько строк - 5-6
от силы на дельфи.
1С при чем тут?


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Прямой доступ к файлам в БД (УТ 11)
    #38315168
Nick Perelyaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"footballer" <nospam@sql.ru>; сообщил(а) в новостях
следующее:14485521@sql.ru...
> Автор: footballer
> Да, во всех выгруженных файлах совершенно идентичный заголовок,
> возможно это не сжатие, а 1С при сохранении подставляет какую-то служебную
> информацию.
> Тема Ответить Сообщение
А зачем гадать? И как это будет изменяться от версии к версии платформы? Не
беспокоят такие дела?

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Прямой доступ к файлам в БД (УТ 11)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]