8.х Обмен данными через COM-соединение

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем GRUV, 8 июл 2008.

  1. TopicStarter Overlay
    GRUV
    Offline

    GRUV Опытный в 1С

    Регистрация:
    7 ноя 2007
    Сообщения:
    106
    Симпатии:
    0
    Баллы:
    26
    Помогите разобраться плз, уже голову сломал :unsure:

    Есть две базы, в которых имеются одинаковые справочники. Требуется создать в базе №2 элемент справочника с такой же ссылкой как в базе №1

    Код:
    ЭлементБазы1 = Справочники.ВидыНоменклатуры.НайтиПоКоду("000000003");
    Соединитель = Новый COMObject("V81.COMConnector");
    Соединение =Соединитель.Connect("Srvr=Server1C81;Ref=Sklad;Usr=Обмен;Pwd=123");
    ЭлементБазы2 = Соединение.Справочники.ВидыНоменклатуры.СоздатьЭлемент();
    
    дальше испробовал всякие способы как установить ссылку для <ЭлементБазы2> - ничего не получается.
  2. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Не очень понял, как вы хотите создать элемент с такой же ссылкой?
    В смысле чтобы были одинаковые Уникальные Идентификаторы? Вряд ли.
    А так - создали элемент, присвоили ему коды, наименования и прочее такое же и они у вас идентичные.

    Еще вариант через XML - там гарантированно будет одинаково.
  3. TopicStarter Overlay
    GRUV
    Offline

    GRUV Опытный в 1С

    Регистрация:
    7 ноя 2007
    Сообщения:
    106
    Симпатии:
    0
    Баллы:
    26
    поразбирался и пришел к такому выводу, что из одной базы в другую непосредственно присваивать значения реквизитам элемента
    можно только если они примитивного типа, ссылочные реквизиты заполняются только в той базе где находится элемент, т.е.

    Так работает
    Код:
    ЭлементБазы2 = Соединение.Справочники.ВидыНоменклатуры.СоздатьЭлемент();
    ЭлементБазы2.Код = "00000001";
    
    
    Так сделать не получиться
    Код:
    ЭлементБазы2 = Соединение.Справочники.ВидыНоменклатуры.СоздатьЭлемент();
    ЭлементБазы2.ТипНоменклатуры =
    
    т.е. такой обмен по сути ничем не отличается от обмена через XML только данные передаются не через файл а непосредственно входными параметрами в процедуру базы-приемника.
  4. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
  5. TopicStarter Overlay
    GRUV
    Offline

    GRUV Опытный в 1С

    Регистрация:
    7 ноя 2007
    Сообщения:
    106
    Симпатии:
    0
    Баллы:
    26
    все логично - любые переданные из базы-источника данные ссылочного типа в базе-приемнике являются Com-объектами
    я преобразую все ссылки в строку метедом XMLСтрока(), а потом обратно - все работает ))
  6. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    В XML не силен пока.
    Кинь пример куска кода pls.
  7. TopicStarter Overlay
    GRUV
    Offline

    GRUV Опытный в 1С

    Регистрация:
    7 ноя 2007
    Сообщения:
    106
    Симпатии:
    0
    Баллы:
    26
    Пример обмена справочником <Единицы измерения> через com-соединение

    Выбираем измененные объекты и для каждого запускаем функцию

    Код:
    Функция ОтправитьИзменения(Соединение,Объект)
    Ссылка = XMLСтрока(Объект.Ссылка);
    ПометкаУдаления = Объект.ПометкаУдаления;
    Владелец = XMLСтрока(Объект.Владелец.Ссылка);
    Код = Объект.Код;
    Наименование = Объект.Наименование;
    ЕдиницаПоКлассификатору = XMLСтрока(Объект.ЕдиницаПоКлассификатору);
    Вес = Объект.Вес;
    Объем = Объект.Объем;
    Коэффициент = Объект.Коэффициент;
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/попытка')">Попытка	</span>
    Соединение.ЕдиницыИзмерения(Ссылка,ПометкаУдаления,Владелец,Код,Наименование,ЕдиницаПоКлассификатору,Вес,Объем,Коэффициент);
    Исключение
    Возврат Ложь;
    КонецПопытки;
    Возврат Истина;
    КонецФункции
    
    В базе-приемнике пишем процедуру

    Код:
    Процедура ЕдиницыИзмерения(Ссылка,ПометкаУдаления,Владелец,Код,Наименование,ЕдиницаПоКлассификатору,Вес,Объем,Коэффициент)		Экспорт
    Ссылка = XMLЗначение(Тип("СправочникСсылка.ЕдиницыИзмерения"),Ссылка);
    НовыйЭлемент = Ссылка.ПолучитьОбъект();
    Если НовыйЭлемент = Неопределено Тогда
    НовыйЭлемент = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
    НовыйЭлемент.УстановитьСсылкуНового(Ссылка);
    КонецЕсли;
    НовыйЭлемент.ПометкаУдаления = ПометкаУдаления;
    НовыйЭлемент.Владелец = XMLЗначение(Тип("СправочникСсылка.Номенклатура"),Владелец);
    НовыйЭлемент.Код = Код;
    НовыйЭлемент.Наименование = Наименование;
    НовыйЭлемент.ЕдиницаПоКлассификатору = XMLЗначение(Тип("СправочникСсылка.КлассификаторЕдиницИзмерения"),ЕдиницаПоКлассификатору);
    НовыйЭлемент.Вес = Вес;
    НовыйЭлемент.Объем = Объем;
    НовыйЭлемент.Коэффициент = Коэффициент;
    НовыйЭлемент.Записать();
    КонецПроцедуры
    
  8. TopicStarter Overlay
    GRUV
    Offline

    GRUV Опытный в 1С

    Регистрация:
    7 ноя 2007
    Сообщения:
    106
    Симпатии:
    0
    Баллы:
    26
    Правда я тут не учел удаление объекта ...

Поделиться этой страницей