Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Запись во внешний источник данных

Запись во внешний источник данных
Я
   just86
 
18.06.18 - 16:30
Здравствуйте. Подскажите, как можно записать во внешнюю базу на mssql тип данных типа Хранилище значений?

Задача передать историю изменения объекта в одной базе в другую (Версии объектов)
 
 
   LeoKeyn
 
1 - 18.06.18 - 16:35
(0) Делал вроде что то вроде такой задачи. Записывал подключением к другой sql базе

 Попытка
        Соединение  = Новый COMОбъект("ADODB.Connection");
        Команда     = Новый COMОбъект("ADODB.Command");
        Выборка     = Новый COMОбъект("ADODB.RecordSet");
        Соединение.ConnectionString =
            "driver={SQL Server};" +
            "server="+ИмяСервераSQL+";"+
            "uid="+ПользовательSQL+";"+
            "pwd="+ПарольSQL+";"+
            "database="+БазаДанныхSQL+";";
        Соединение.ConnectionTimeout = 30;
        Соединение.CommandTimeout = 600;
        //Открытие соединение

        Соединение.Open();
        Команда.ActiveConnection   = Соединение;
        Сообщить("Успешно!");
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;
   LeoKeyn
 
2 - 18.06.18 - 16:39
(1) Попытка
        Соединение  = Новый COMОбъект("ADODB.Connection");
        Команда     = Новый COMОбъект("ADODB.Command");
        Выборка     = Новый COMОбъект("ADODB.RecordSet");
        Соединение.ConnectionString =
            "driver={SQL Server};" +
            "server="+ИмяСервераSQL+";"+
            "uid="+""+";"+
            "pwd="+""+";"+
            "database="+БазаДанныхSQL+";";
        Соединение.ConnectionTimeout = 30;
        Соединение.CommandTimeout = 600;
        //Открытие соединение

        Соединение.Open();
        Команда.ActiveConnection   = Соединение;
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    УИД = XMLСтрока(Объект.ДокументСсылка.УникальныйИдентификатор());
        Для Каждого Строка ИЗ Объект.Файлы Цикл
        ДвоичныйДокумент = Новый ДвоичныеДанные(Строка.ПутьКФайлу);
        ДвоичныйДокумент = Base64Строка(ДвоичныйДокумент);
        //Хранилище = Новый ХранилищеЗначения(ДвоичныйДокумент);

         ТекстТекущейИнструкции =
        "INSERT INTO "+ТаблицаSQL+"
        |([C_Link], [C_FileName], [C_File],  [C_Format])
        |VALUES ('"+УИД+"', '"+Строка.ИмяФайла+"', '"+ДвоичныйДокумент+"', '"+Строка.ФорматФайла+"')";
    Попытка
        Соединение.Execute(ТекстТекущейИнструкции,,128);
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;

вот нашел, я сохранял в другую базу файлы прикрепленные
   just86
 
3 - 18.06.18 - 16:39
(1) Ну соединение у меня есть, запись в ту базу тоже есть, там данные отображаются. Вопрос только в типа Хранилище значений.
Делаю так:

ЗаписьXML = Новый ЗаписьXML;
        ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
        ЗаписьXML.ОткрытьФайл(ИмяВременногоФайла); 
        ЗаписьXML.ЗаписатьОбъявлениеXML();
        ЗаписатьXML(ЗаписьXML, ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект(), НазначениеТипаXML.Явное);
        ЗаписьXML.Закрыть();
        ДвоичныеДанные = Новый ДвоичныеДанные(ИмяВременногоФайла);
        ХранилищеДанных = Новый ХранилищеЗначения(ДвоичныеДанные);
        
        УдалитьФайлы(ИмяВременногоФайла);

и потом пытаюсь передать Хранилище данных в ту базу. 
Там хранилище не читается. Получить() возвращает неопределено
   LeoKeyn
 
4 - 18.06.18 - 16:42
(3) у меня тоже не получалось вроде и я как строку сохранял Base64Строка
   just86
 
5 - 18.06.18 - 16:44
(4) отлично. спасибо. тоже буду гонять строку
   LeoKeyn
 
6 - 18.06.18 - 16:47
(5) Пожалуйста :-) долго мучался с этим :-) приятно поделиться

Поделюсь, думаю поможет:

Получение данных


Попытка
        Соединение  = Новый COMОбъект("ADODB.Connection");
        Команда     = Новый COMОбъект("ADODB.Command");
        Выборка     = Новый COMОбъект("ADODB.RecordSet");
        Соединение.ConnectionString =
            "driver={SQL Server};" +
            "server="+ИмяСервераSQL+";"+
            "uid="+""+";"+
            "pwd="+""+";"+
            "database="+БазаДанныхSQL+";";
        Соединение.ConnectionTimeout = 30;
        Соединение.CommandTimeout = 600;
        //Открытие соединение

        Соединение.Open();
        Команда.ActiveConnection   = Соединение;
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    Если Объект.ДокументСсылка.Пустая() Тогда
        ТекстИнструкции =
        "SELECT 
      | *
  | FROM [Recourses].[dbo].[RecoursessFiles]"
    Иначе
        ТекстИнструкции =
        "SELECT
        | *
        | FROM "+ТаблицаSQL+"
        | WHERE C_Link='"+XMLСтрока(Объект.ДокументСсылка.УникальныйИдентификатор())+"'";
    КонецЕсли;
    
    /////////////////////////////////////////

    //Читаем записи

    
    //Попытка

        Команда.CommandText = ТекстИнструкции;
        Выборка = Команда.Execute();
        Если Выборка.BOF = Ложь Тогда
            Выборка.MoveFirst();
            Пока Выборка.EOF = Ложь Цикл
                //Сообщить("[C_DateTime]="+Дата(Выборка.Fields("C_DateTime").Value)

                //    +", [C_Char]="+СокрЛП(Выборка.Fields("C_Char").Value)

                //    +", [C_Numeric]="+Число(Выборка.Fields("C_Numeric").Value));

                    Строчка = Объект.Файлы.Добавить();
                    УИДСтрока = Выборка.Fields("C_Link").Value;
                    Строчка.Основание = ПолучитьСсылку(УИДСтрока);
                    Строчка.ИмяФайла = Выборка.Fields("C_FileName").Value;
                    Строчка.ПутьКФайлу = Выборка.Fields("C_File").Value;
                    Строчка.ФорматФайла = Выборка.Fields("C_Format").Value;
                    //Сообщить(Выборка.Fields("C_Link").Value+", "+Выборка.Fields("C_FileName").Value+", "+Выборка.Fields("C_File").Value+", "+Выборка.Fields("C_Format").Value+", ");

                Выборка.MoveNext();
            КонецЦикла;
        КонецЕсли;


И перевод из двоичного вида



ТекущаяСтрока = Элементы.Файлы.ТекущиеДанные;
    Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
Диалог = Новый ДиалогВыбораФайла(Режим);
Диалог.Заголовок = "Выбор файла для сохранения";
//Диалог.Фильтр = "Файл двоичных данных (*.bin)|*.bin";

    
Если Не Диалог.Выбрать() Тогда
   Возврат ;
Иначе
   ИмяФайла= Диалог.Каталог;
КонецЕсли;
Файл = ТекущаяСтрока.ПутьКФайлу;
Файл = Base64Значение(Файл);
ПолныйПутьКФайлу = СтрЗаменить(ИмяФайла+"\"+ТекущаяСтрока.ИмяФайла, "\\", "\");
Файл.Записать(ПолныйПутьКФайлу);

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует