Имя: Пароль:
1C
1С v8
Сохранение файла из сторонней SQL базы
0 peal
 
07.06.17
11:19
Доброго дня, подскажите кто сталкивался.

В базе SQL хранятся файлы, тип колонки varbinary(max)
пробую выгрузить из 1С в файл:

            Команда.CommandText = "select CuratorDB.dbo.FileData.FileName,CuratorDB.dbo.FileData.Content  from CuratorDB.dbo.FileData where Oid='"+ФайлМассив+"'";
              RecordSet = Команда.Execute();

            Stream=Новый COMОбъект("ADODB.Stream");
            Stream.Type=1;
            Stream.Mode=3;
                                        
            RecordSet.MoveFirst();
            
            Пока Не RecordSet.EOF() Цикл
                Stream.Open();
                
                Stream.Position = 0;
                
                НаименованиеФайла = RecordSet.Fields.Item("FileName").Value;
                Контент = RecordSet.Fields.Item("Content").Value;
                
                ИмяФайла = Каталог+"1.pdf";
                
                Сообщить(ИмяФайла);
                Stream.Write(Контент);
                Stream.SaveToFile(ИмяФайла,2);
                Stream.Close();                
                
                RecordSet.MoveNext();
            КонецЦикла;

в контент попадают данные типа comsafearray, а при Stream.SaveToFile(ИмяФайла,2); появляется ошибка
Ошибка при вызове метода контекста (SaveToFile): Произошла исключительная ситуация (ADODB.Stream): Не удается записать файл.
1 Неверный Параметр И
 
07.06.17
11:21
ИмяФайла куда указывает?
2 peal
 
07.06.17
11:27
C:\Users\petrunin_av\Desktop\1.pdf
3 Неверный Параметр И
 
07.06.17
11:29
Доступ туда у пользователя ОС, который выполняет код, есть? Например, у сервера, на котором все работает.
4 Serg_1960
 
07.06.17
11:30
(0) А если сделать так:
ИмяФайла = ПолучитьИмяВременногоФайла();
5 peal
 
07.06.17
11:32
(4) так тоже пробовал
C:\Users\USR1CV83\AppData\Local\Temp\1.pdf

но, у меня такого каталога нет
6 peal
 
07.06.17
11:32
(3) у пользователя USR1CV83 ?
7 Неверный Параметр И
 
07.06.17
11:33
(5) Ну вот. А у сервера нет C:\Users\petrunin_av\Desktop

Смекаешь?
8 Адинэснег
 
07.06.17
11:34
(5) :-D
9 peal
 
07.06.17
11:35
(7) тоже закрались такие подозрения, спасип
10 Адинэснег
 
07.06.17
11:35
#Если Сервер Тогда
Сообщить("Сервер, ты где?");
#КонецЕсли
11 Serg_1960
 
07.06.17
11:36
Хнык, хнык... я тоже хочу "Спасибо!" :(
:)
12 peal
 
07.06.17
11:38
(11) И тебе Спасип
13 Serg_1960
 
07.06.17
11:39
Мне, так кажется, что нужно писать во временный файл и копировать его "к себе" по сети. Так, по крайней мере, будешь всегда знать где именно проблема.
14 peal
 
07.06.17
11:40
(13) пробовал, он вроде так пишет, но потом не понятно, где файл. Такой папки нет
15 Serg_1960
 
07.06.17
11:42
А не всё ли равно где она есть? В смысле видна/доступна юзверу. Сервер пишет ну и ладно :)
16 peal
 
07.06.17
11:50
(15) в принципе все равно, да, проверил, пишет на серваке во временную папку... а дальше сервака доступа нивкуда нет
17 Serg_1960
 
07.06.17
12:11
Что совсем нет каталогов с общим доступом у сервера и клиента? Хмм... бывает, не повезло. Может быть тогда серверный файл есть смысл "с сервера" передать "на клиента" внутри программы через хранилище, например?
18 peal
 
07.06.17
12:25
Другая теперь проблема, файлы получаются битые
19 Адинэснег
 
07.06.17
12:27
а одинэс же с ДД работает сейчас, ADODB.Stream может лишний?
20 peal
 
07.06.17
13:27
(19) ДД есть, но вот из SQL идет массив байтов
21 peal
 
07.06.17
17:05
Апну, кто-нить сталкивался?
глазками пробежался по файлу, сравнил в блокноте, вроде одинаковые, но если из SQL выгружаю, то они нормальные, открываются, если я программно выгружаю, они не открываются, пишет поврежденный файл
22 peal
 
08.06.17
09:45
Сверил 2 файла, получаются разные сделал Контент.Выгрузить().Количество() получилось 98801.
Выгрузил из софта файл, загрузил в поток, проверил, получилось 100 238.

Кто - нить сталкивался? Не представляю куда теперь копать.
23 МихаилМ
 
08.06.17
09:51
(22)
либо сравните файлы и отрезайте лишнее
либо либо найдите рабочий код раз не умеет работать с документацией
24 peal
 
08.06.17
09:55
(23) Из запроса получается меньше файл. Была бы документация
25 МихаилМ
 
08.06.17
09:58
это понятно что файл меньше и к нему что-то дописано

кстати почему
Stream.Mode=3; ?
26 peal
 
08.06.17
10:05
чтение и запись
27 peal
 
08.06.17
10:19
(25) Убрал Mode Вообще, ничего не изменилось, Запрос возвращает так.
28 Неверный Параметр И
 
08.06.17
10:20
(22) Выбери ещё DATALENGTH(Content)
Если получишь 98801, то поздравляю, разработчики софта, в котором ты ковыряется, люди грамотные и сжимают файлы при хранении.
29 vde69
 
модератор
08.06.17
10:23
велосипеды - они такие :)

100% работающий сабж - http://catalog.mista.ru/public/16687/
30 Неверный Параметр И
 
08.06.17
10:23
(23) Отрезать лишнее, чтобы файл увеличился... Батенька, да вы философ. Что вы там писали про чтение?
31 peal
 
08.06.17
10:29
(28) и что теперь делать? да, получилось 98801
32 Неверный Параметр И
 
08.06.17
10:34
(31)
- Обратиться к разработчикам софта
- Попытаться угадать метод сжатия (там скорей всего какой-нибудь zip без заголовка)
- Смириться (:
33 peal
 
08.06.17
10:36
(29) разовая работа, выгрузка документов из стороннего софта в документооборот
34 peal
 
08.06.17
10:39
(32)
Спасибо, попробую поискать 2 вариант.
Первый - разругались с разработчиками... просто проигнорируют
Третий , это если первый откажет
35 Неверный Параметр И
 
08.06.17
10:45
(34) Попробуй ещё понять на чем написан софт. Скорей всего использованы типовые библиотеки и можно набросать консольную утилиту которая распакует один файл в другой.
36 peal
 
08.06.17
11:16
zlib1 походу оно
Независимо от того, куда вы едете — это в гору и против ветра!