Имя: Пароль:
1C
1С v8
Достать внешние файлы из базы MS SQL
0 Naps2
 
30.08.18
21:22
Здравствуйте, есть база 1С, работает в серверном варианте, в качестве БД -MS SQL. Конфигурация: "Аренда и управление недвижимостью для "1С:Бухгалтерия 8", редакция 1.6 (1.6.25.6/3.1.6.4)".

Там к договорам аренды, да и к допникам, можно прикладывать файлы (обычно это pdf со сканами).

Мне необходимо внешними средствами иногда вытаскивать оттуда эти файлы, в какой таблице и в каком поле они хранятся я нашёл. Тип поля: image.
Но вот сама 1С с ними что-то делает, поскольку они ни в какую не хотят после извлечение открываться как pdf.

Ещё смущает что абсолютно все файлы имееют одинаковое начало в 16-ном формате: 0x0201534B6FF4888DC14EA0D5EBB6BDA0A70D(далее уже идут различия). Сначала я подумал что это сигнатуры pdf или прочее, но нет, слишком длинно.

В общем, кто-нибудь сталкивался с такой задачей и знает ли решение?
1 Fram
 
30.08.18
21:28
Читаешь наверно неправильно. Вот пример на c# как читается image

var bytes = (byte[])read[3];
using(MemoryStream ms = new MemoryStream(bytes))
{
    pictureBox1.Image = Image.FromStream(ms);
}
2 МихаилМ
 
30.08.18
21:30
они хроняться в формате хранилища значения : сжаты deflate
и Base64 . или наоборот.
3 Naps2
 
30.08.18
21:35
(1) Ну я делаю это на php, читаю так:

$STH = $DB1C->prepare("SELECT convert(varbinary(max), _Fld8845, 1) as data FROM _Reference8748 WHERE _IDRRef=:id");
$STH->bindParam(':id', hex2bin($_GET['id']), PDO::PARAM_LOB, 0, PDO::SQLSRV_ENCODING_BINARY);
$STH->execute();
$STH->setFetchMode(PDO::FETCH_ASSOC);
$STH->bindColumn('data',$data, PDO::SQLSRV_ENCODING_BINARY);
$row=$STH->fetch();
$data=$row["data"];
$data=hex2bin($data);        
header("Content-Type: application/pdf");
echo($data);
die();

с другой базой (не 1С) но той же MS SQL и тем же типом поля (image) работало без проблем.
4 Fram
 
30.08.18
21:38
(3) Ну (2) прав, скорее всего. 1С кодирует и оборачивает данные своим классом
5 Fram
 
30.08.18
21:39
Пишите веб сервис на 1с и оттуда забирайте
6 Fram
 
30.08.18
21:39
Или COM
7 timurhv
 
31.08.18
14:42
(0) Включить хранение в томах на диске, а не в БД.