Имя: Пароль:
1C
1С v8
Запись двоичных данных во внешнюю таблицу
0 SergTheGreat
 
13.04.15
16:11
Есть задача держать сканы и др. файлы в отдельной SQL-базе. Почему не внутри базы 1С - это вопрос отдельный и сейчас не рассматривается :-) Так вот имея 8.3.5 подключение к SQL-базе было создано достаточно просто через Внешние источники данных. Со строками/числами проблем не возникло, а вот само содержимое файлов (SQL-тип "image" или "varbinary(max)") после записи в базу и чтения обратно портится. Причем начальный и конечный файлы отличаются буквально первой парой байт, но этого достаточно чтобы конечный файл не могли прочитать всякие ридеры/вьюверы.
Вот как записываю в SQL:
ВнешняяТаблица    = ВнешниеИсточникиДанных.ВнешниеФайлы.Таблицы.dbo_Test;
ТаблицаСсылка    = ВнешняяТаблица.НайтиПоПолю("_Name", ИмяФайла);
Если ТаблицаСсылка.Пустая() Тогда
    ТаблицаОбъект    = ВнешняяТаблица.СоздатьОбъект();
    ТаблицаОбъект._Name = ИмяФайла;
Иначе
    ТаблицаОбъект    = ТаблицаСсылка.ПолучитьОбъект();
КонецЕсли;
ТаблицаОбъект._Image    = Новый ДвоичныеДанные(ПутьФайла);
ТаблицаОбъект.Записать();

Вот как читаю из SQL:
ВнешняяТаблица    = ВнешниеИсточникиДанных.ВнешниеФайлы.Таблицы.dbo_Test;
ТаблицаСсылка    = ВнешняяТаблица.НайтиПоПолю("_Name", ИмяФайла);
Если НЕ ТаблицаСсылка.Пустая() Тогда
    ДД = ТаблицаСсылка._Image;
    ДД.Записать(НовыйПутьФайла);
КонецЕсли;

Если кто-нибудь сталкивался с подобным, подскажите пож-та как это побороть.
1 SergTheGreat
 
20.04.15
10:07
Если кому интересно, то проблема была решена "в обход". На SQL-сервере создана процедура, которая добавляет новую запись в базе, предварительно конвертируя строку в двоичные данные (прообраз взят отсюда http://catalog.mista.ru/public/283336). Соответственно 1С формирует из файла строку в формате base64 и передает ее этой самой процедуре на SQL.
При передаче в обратную сторону танцев с бубном не понадобилось. 1С нормально читает двоичные данные из SQL и создает из них файл.