Имя: Пароль:
1C
1С v8
Загрузка файлов из одной ИБ в другую
,
0 raytan
 
04.05.15
14:18
Задача загрузить фаил в ИБ из другой.
    Есть такой код:

     ПараметрыСтрока = "Srvr=""bdjt:1641"";Ref=""docs"";Usr=""" + Справочники.СлужебныеДанные.ПользовательDocs.Данные + """;Pwd=""" + Справочники.СлужебныеДанные.ПарольDocs.Данные + """;";
    V82COMConnector= Новый COMОбъект("V82.COMConnector");
    Попытка
        БазаДокументы = V82COMConnector.Connect(ПараметрыСтрока);
    Исключение
        Сообщить("Ошибка подключения!");
        Возврат;
    КонецПопытки;
    Сжатие = Новый СжатиеДанных(6);
ДвоичныеДанные = Новый ДвоичныеДанные(ЦКРазрешенияПуть);
    ХранилищеФайла = Новый ХранилищеЗначения(ДвоичныеДанные, Сжатие);

    
    БазаДокументыФайлыДоговорыКонтрагентов = БазаДокументы.Справочники.ФайлыДоговорыКонтрагентов.СоздатьЭлемент();
    БазаДокументыФайлыДоговорыКонтрагентов.ДокументСсылка = ЗначениеВСтрокуВнутр(Объект.Ссылка);
    БазаДокументыФайлыДоговорыКонтрагентов.ЦифроваяКопияДокумента = ХранилищеФайла; // ?!?!?!?!
    БазаДокументыФайлыДоговорыКонтрагентов.НаименованиеЦифроваяКопияДокумента = НазваниеДокумента;
    БазаДокументыФайлыДоговорыКонтрагентов.Записать();


Есть ощущение, что такой код не работает. Когда пробую, что то типо этого:

БазаДокументыФайлыДоговорыКонтрагентов.ЦифроваяКопияДокумента = БазаДокументы.NewObject("ХранилищеЗначения",БазаДокументы.NewObject("ДвоичныеДанные",ДвоичныеДанные),БазаДокументы.NewObject("СжатиеДанных",6) );

То получаю ошибку, что метод NewObject не найден
Может кто что подскажет ?
1 raytan
 
04.05.15
14:19
БазаДокументыФайлыДоговорыКонтрагентов.ЦифроваяКопияДокумента = БазаДокументы.NewObject("ХранилищеЗначения",БазаДокументы.NewObject("ДвоичныеДанные",ДвоичныеДанные),БазаДокументы.NewObject("СжатиеДанных",6) );

Этот код работал для файловой версии, только вместо ДвоичныеДанные я писал путь к файлу...
2 raytan
 
04.05.15
14:22
Основной вопрос с ХранилищемЗначений. Как туда передать данные.

БазаДокументыФайлыДоговорыКонтрагентов.ЦифроваяКопияДокумента = ?!?!
3 Сергиус
 
04.05.15
15:40
(0)БазаДокументы.NewObject("ДвоичныеДанные",ДвоичныеДанные) - тут скорее всего надо задавать путь к файлу, а не объект ДвоичныеДанные, который ты получаешь на стороне базы-инициатора соединения.
4 Сергиус
 
04.05.15
16:05
+(3)Не совсем понятно, ты пробовал такой вариант или тоже ошибку получал?
5 Рэйв
 
04.05.15
16:27
(0)Открой для себя тип Неопредеоено и проверку на это. Ижизть пойдет веселее, я думаю
6 Рэйв
 
04.05.15
16:27
*Неопределено
:-)..
7 Torquader
 
04.05.15
21:13
Для передачи между базами объекта ХранилищеЗначения можно использовать метод XMLСтрока, который преобразует хранилище в BASE64 строку, которую спокойно можно передавать или сохранять в XML-файле.
8 raytan
 
05.05.15
09:01
(4) Пробовал. Выдало ошибку, что метод NewObject не найден.. Насчет пути -- это понятно, что туда надо передовать путь, но я работаю в клиент-серверном режиме, так что попробовал такое извращение :)

(7) Решил проблему с помощью ЗначениеВСтрокуВнутр, ХМЛстрока тоже сработала наверное.

БазаДокументыФайлыДоговорыКонтрагентов.ЦифроваяКопияДокумента = БазаДокументы.ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(ХранилищеФайла));


Основная сложность для меня было сообразить использовать такую конструкцию БазаДокументы.ЗначениеИзСтрокиВнутр()
Всем спамибо за внимание :)
Закон Брукера: Даже маленькая практика стоит большой теории.