V83.COMConnector

1. schweigen 17.11.15 07:50 Сейчас в теме
Доброго времени суток.
Не могу найти внятного ответа на вопрос: можно ли работать с объектными данными через V83.COMConnector. Все только про запросы пишут.

Задача - положить в удаленную базу набор записей регистра сведений, в реквизитах есть перечисления и справочники. Не хочу воротить план обмена или сервис, кажется что это должно быть как-то проще. Все участвующие в процессе объекты метаданных (перечисления и справочники) одинаковы и есть в обеих базах. Можно и наоборот - из удаленной базы прочитать текущую.
Короче у нас в базе есть созданные элементы справочников и заполненный регистр. Требуется взять это хозяйство и положить в другую базу как оно есть. В другой базе все метаданные такие же, просто данных нет.

Если это возможно - дайте пример кода. Буду безмерно благодарен.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. zarucheisky 17.11.15 09:59 Сейчас в теме
(1) В другой базе все метаданные такие же, просто данных нет.
ИМХО, через сериализацию XDTO проще некуда.
Если справочники одинаковы с точки зрения элементного состава, то передать набор записей не составит труда, и куда как быстрее будет.
9. schweigen 17.11.15 10:10 Сейчас в теме
(6) zarucheisky, это означает обмен файлами, либо сервис, правильно я понимаю?
11. adva 45 17.11.15 10:19 Сейчас в теме
(9) думаю это касается объекта XDTO, и возможности сериализации / десериализации объекта в XML. Сам не пробовал, но примеры попадались. Принцип такой, в источнике сериализуешь объект в XML (по сути строку), а в приемнике десериализуешь (из строки) и получаешь готовый объект.

Может тут есть: http://infostart.ru/public/16533/
schweigen; +1 Ответить
13. zarucheisky 17.11.15 10:21 Сейчас в теме
2. adva 45 17.11.15 07:56 Сейчас в теме
Из СП:

Внешнее соединение (External connection)
Методы:

NewObject (NewObject)
String (String)

Описание:

В общем и целом работа с 1С:Предприятием 8 через внешнее соединение подобна работе с 1С:Предприятием в режиме Automation сервера. Основные отличия заключаются в следующем:
В случае Automation сервера запускается полноценное приложение 1С:Предприятия 8, а в случае внешнего соединения запускается относительно небольшой внутрипроцессный COM-сервер.
При работе через внешнее соединение не доступны функциональные возможности, так или иначе связанные с организацией пользовательского интерфейса 1С:Предприятия 8;
При работе внешнего соединения не используется модуль управляемого приложения (модуль обычного приложения) конфигурации 1С:Предприятия 8. Его роль при работе с внешним соединением играет модуль внешнего соединения.
При использовании внешнего соединения имеются следующие преимущества по сравнению с использованием Automation сервера:
Более быстрая установка соединения, так как не требуется создания отдельного процесса операционной системы, а все действия производятся в рамках вызывающего процесса;
Более быстрое обращение к свойствам и методам объектов 1C:Предприятия, так как для организации обращения не требуется организации межпроцессной коммуникации;
Меньший расход ресурсов операционной системы.
Для организации доступа к данным 1С:Предприятия 8 через внешнее соединение, выполняется следующая последовательность действий:
создается менеджер COM-соединений, с помощью которого производится установка соединения;
производится обращение к методу Connect менеджера COM-соединений. Метод Connect возвращает внешнее соединение с информационной базой 1С:Предприятия 8;
через внешнее соединение производится обращение к допустимым методам, свойствам и объектам информационной базы, с которой установлено соединение.
Важно! В связи с отсутствием пользовательского интерфейса не все объекты, а также свойства и методы можно использовать во внешнем соединении.
Внешнее соединение предоставляет полный доступ к своему глобальному контексту. Поэтому внешнее соединение в качестве своих методов может иметь: системные константы, значения заданных в конфигураторе объектов, доступ к которым осуществляется с помощью менеджеров (например, константы, перечисления, справочники, документы, журналы документов, отчеты, обработки, планы видов характеристик, планы счетов, планы видов расчета, регистры), а также переменные, объявленные в модуле внешнего соединения с ключевым словом Экспорт.

Доступность:

Интеграция.
Пример:

// Создание объекта-коннектора
cntr = Новый COMObject("V82.COMConnector");
// создается объект COM-соединение
connection = cntr.Connect("File=""c:\InfoBases\Trade"";Usr=""Director"";");
СпрКонтрагенты = connection.Справочники.Контрагенты;
Выборка = СпрКонтрагенты.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Наименование);
КонецЦикла;

// Пример на языке MS Visual Basic
Sub Excel_to_trade()
Dim cntr As Object
Dim trade As Object
Dim Товар As Object
Set cntr = CreateObject("V82.COMConnector")
Set trade = cntr.Connect("File=""c:\InfoBases\Trade""; Usr=""Director"";")
Set Товар = trade.Справочники.Товары
Группа = Товар.СоздатьГруппу()
Группа.Наименование = "***** Экспорт из Excel ******"
Группа.Записать()
N = 100 'Количество строк в документе
For Count = 1 To N
Элемент = Товар.СоздатьЭлемент()
Элемент.Наименование = Application.Cells(Count, 2).Value
Элемент.Розн_Цена = Application.Cells(Count, 3).Value
Элемент.Мел_Опт_Цена = Application.Cells(Count, 4).Value
Элемент.Опт_Цена = Application.Cells(Count, 5).Value
Элемент.Родитель = Группа.Ссылка
Элемент.Записать()
Next Count
End Sub


См. также:

Соединение с рабочим процессом, метод Connect
Менеджер COM-соединений, метод Connect
Глобальный контекст, метод ПолучитьСообщенияПользователю
3. adva 45 17.11.15 07:57 Сейчас в теме
для 8.3 вряд ли поменялась работа с данным объектом, так что пробуй
4. schweigen 17.11.15 09:43 Сейчас в теме
(3) adva, это все замечательно, но:
тебе надо перенести записи регистра. естественно ты сначала переносишь соответствующие элементы справочников. либо тебе надо сослаться на ранее перенесенные элементы, что сути дела не меняет.
и вот ты начинаешь переносить набор записей. дальше че? как ты в наборе записей ссылки на справочник укажешь?
5. ditp 91 17.11.15 09:52 Сейчас в теме
(4) schweigen,
как ты в наборе записей ссылки на справочник укажешь?


например, так:
КомБаза.Справочники.Номенклатура.НайтиПоКоду("123")

или так:
КомБаза.Справочники.Номенклатура.ПолучитьСсылку(КомБаза.NewObject("УникальныйИдентификатор",Строка(НоменклатураВЭтойБазе.УникальныйИдентификатор())));
adva; schweigen; +2 Ответить
7. adva 45 17.11.15 10:09 Сейчас в теме
(4) если база-приемник изначально пустая, то правильнее всего искать/создавать справочники по уникальному идентификатору. Поиск по реквизитам может оказаться некорректным, при изменении реквизитов поиска объекта в источнике. Проблем с этим не вижу, пример в (5) думаю рабочий.
10. zarucheisky 17.11.15 10:17 Сейчас в теме
(7) Не надо ничего искать.
(9) Не обязательно. В (0) Вы используете COM.
Все просто, создаётся массив объектов, которые необходимо передать в базу-приёмник.
Через сериализатор XDTO получаем XML-представление массива.
Поднимаем COM-соединение, во внешней базе десериализуем массив.
Для каждого объекта из массива во внешней базе вызываем метод Записать().
Всё.
schweigen; adva; +2 Ответить
14. schweigen 17.11.15 10:33 Сейчас в теме
(10) zarucheisky, "Создаётся массив объектов, которые необходимо передать в базу-приёмник"
вот по этому моменту еще вопрос в догонку.
Как создавать такой массив. Синхронизация между базами будет на постоянной основе.
Первое, что пришло в голову - в основной базе сделать план обмена и регистрировать изменения. Можно их как-то выбрать, не создавая ЗаписьXML? Поясню, проблема - получить номер сообщения.
Еще что пришло в голову - хранить в отдельном регистре переданные версии объектов, но это уже огород по-моему.
12. zarucheisky 17.11.15 10:20 Сейчас в теме
(4) если собрать именно объекты к переносу (для РС - это набор записей), то при сериализации массива платформа сама заполнит необходимые поля и не играет роли, есть или нет, объект будет попросту перезаписан в приемнике.
8. schweigen 17.11.15 10:09 Сейчас в теме
Работает )
еще бы версия объекта переносилась - вообще шикарно было бы
15. schweigen 17.11.15 11:17 Сейчас в теме
А, я понял. У меня номер сообщения просто всегда будет равен нулю. Короче разобрался, сериализатор работает, ссылки тоже.
Спасибо парни!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот