1c настройка com соединения

Метод NewObject()

Для создания нового объекта можно воспользоваться методом NewObject(),
например:

для V83.COMConnector

ЗапросCOM =
Подключение.
NewObject(“Запрос

)
;

ТаблицаCOM =
Подключение.
NewObject(“ТаблицаЗначений”
)
;

МассивCOM =
Подключение.
NewObject(“Массив”
)
;

УидCOM =Подключение.NewObject

для V83.Application

ЗапросOLE =
Соединение.
NewObject(“Запрос

)
;

ТаблицаOLE = Соединение.
NewObject
(“ТаблицаЗначений”
)
;
МассивOLE = Соединение.NewObject
(“Массив”
)
;
УидCOM =Соединение.NewObject
(“УникальныйИдентификатор”,СтрокаУИД);

ЗапросCOM.
Текст =

“ВЫБРАТЬ
| ДолжностиОрганизаций.Код,
| ДолжностиОрганизаций.Наименование
|ИЗ
| Справочник.ДолжностиОрганизаций
КАК ДолжностиОрганизаций”
;

Результат =
ЗапросCOM.
Выполнить
()
;

Выборка =
Результат.
Выбрать
()
;

Пока
Выборка.
Следующий()

Цикл

КонецЦикла
;

Можно также использовать менеджеры объектов конфигурации:
СправочникCOM =
Подключение.
Справочники.
ИмяСправочника;

ДокументCOM =
Подключение.
Документы.
ИмяДокумента;

РегистрCOM
=
Подключение
.
РегистрыСведений
.
ИмяРегистра
;

Получение и сравнение перечисления через COM соединение

Для сравнения значений элементов перечислений, определенных в конфигурации, необходимо выполнить преобразование этих элементов к одному из примитивных типов, сравнение которых не вызывает трудности. Такими типами могут быть либо числовой, либо строковый тип. Преобразовать значение элемента перечисления к числовому типу можно так

ЭлементПеречисления =
Подключение.Справочники.Справочник1.НайтиПоКоду(1).Реквизит1;

ВозможныеЗначения = ЭлементПеречисления.Метаданные().ЗначенияПеречисления;

НомерЭлементаПеречисления = ВозможныеЗначения.Индекс(ВозможныеЗначения.Найти(Соединение.XMLString(ЭлементПеречисления)));

Если
НомерЭлементаПеречисления = 0 Тогда
Сообщить(“ЗначениеПеречисления1”
);

ИначеЕсли
НомерЭлементаПеречисления = 1 Тогда

Сообщить
(“ЗначениеПеречисления2”);

КонецЕсли;

Получение объекта через COM по идентификатору

Через менеджеры объектов конфигурации получаем com объект, например:
ДокументCOM =
Соединение.
Документы.
ИмяДокумента;

Затем получаем строку уникального идентификатора:

СтрокаУИД
=Соединение.string
(ДокументCOM.УникальныйИдентификатор
())

Идентификатор
= Новый
УникальныйИдентификатор(СтрокаУИД)
;
СсылкаПоИдентификатору = Документы.ПолучитьСсылку(Идентификатор);

Если нужно найти com объект по документ по идентификатору, то тогда нужно написать так:

УидCOM
= Соединение.NewObject
(“УникальныйИдентификатор”,СтрокаУИД
);СсылкаПоИдентификатору = Соединение.Документы.ПолучитьСсылку(УидCOM);

Когда мы хотим видеть данные из нескольких таблиц одновременно, т.е. собрать несколько таблиц в одну возникает понятие соединения таблиц и связей между ними. Соединения бывают четырех типов:

  • левое;
  • правое,
  • внутреннее;
  • полное.

Каждый тип мы рассмотрим на абстрактном примере. Имеется 2 таблицы, в первой храним описательную информацию о номенклатуре, во второй о ее остатках:

Для того, чтобы получить из этих таблиц одну нам необходимо явным образом указать какие поля мы будем связывать, по какому условию и типу. Сейчас станет более понятно.

Метод NewObject()

Для создания нового объекта можно воспользоваться методом NewObject(),
например:

для V83.COMConnector

ЗапросCOM =
Подключение.
NewObject(“Запрос

)
;

ТаблицаCOM =
Подключение.
NewObject(“ТаблицаЗначений”
)
;

МассивCOM =
Подключение.
NewObject(“Массив”
)
;

УидCOM =Подключение.NewObject

для V83.Application

ЗапросOLE =
Соединение.
NewObject(“Запрос

)
;

ТаблицаOLE = Соединение.
NewObject
(“ТаблицаЗначений”
)
;
МассивOLE = Соединение.NewObject
(“Массив”
)
;
УидCOM =Соединение.NewObject
(“УникальныйИдентификатор”,СтрокаУИД);

ЗапросCOM.
Текст =

“ВЫБРАТЬ
| ДолжностиОрганизаций.Код,
| ДолжностиОрганизаций.Наименование
|ИЗ
| Справочник.ДолжностиОрганизаций
КАК ДолжностиОрганизаций”
;

Результат =
ЗапросCOM.
Выполнить
()
;

Выборка =
Результат.
Выбрать
()
;

Пока
Выборка.
Следующий()

Цикл

КонецЦикла
;

Можно также использовать менеджеры объектов конфигурации:
СправочникCOM =
Подключение.
Справочники.
ИмяСправочника;

ДокументCOM =
Подключение.
Документы.
ИмяДокумента;

РегистрCOM
=
Подключение
.
РегистрыСведений
.
ИмяРегистра
;

Получение и сравнение перечисления через COM соединение

Для сравнения значений элементов перечислений, определенных в конфигурации, необходимо выполнить преобразование этих элементов к одному из примитивных типов, сравнение которых не вызывает трудности. Такими типами могут быть либо числовой, либо строковый тип. Преобразовать значение элемента перечисления к числовому типу можно так

ЭлементПеречисления =
Подключение.Справочники.Справочник1.НайтиПоКоду(1).Реквизит1;

ВозможныеЗначения = ЭлементПеречисления.Метаданные().ЗначенияПеречисления;

НомерЭлементаПеречисления = ВозможныеЗначения.Индекс(ВозможныеЗначения.Найти(Соединение.XMLString(ЭлементПеречисления)));

Если
НомерЭлементаПеречисления = 0 Тогда
Сообщить(“ЗначениеПеречисления1”
);

ИначеЕсли
НомерЭлементаПеречисления = 1 Тогда

Сообщить
(“ЗначениеПеречисления2”);

КонецЕсли;

Получение объекта через COM по идентификатору

Через менеджеры объектов конфигурации получаем com объект, например:
ДокументCOM =
Соединение.
Документы.
ИмяДокумента;

Затем получаем строку уникального идентификатора:

СтрокаУИД
=Соединение.string
(ДокументCOM.УникальныйИдентификатор
())

Идентификатор
= Новый
УникальныйИдентификатор(СтрокаУИД)
;
СсылкаПоИдентификатору = Документы.ПолучитьСсылку(Идентификатор);

Если нужно найти com объект по документ по идентификатору, то тогда нужно написать так:

УидCOM
= Соединение.NewObject
(“УникальныйИдентификатор”,СтрокаУИД
);СсылкаПоИдентификатору = Соединение.Документы.ПолучитьСсылку(УидCOM);

При использовании для доступа к данным 1С:Предприятия 8.0 COM -соединения имеются следующие преимущества по сравнению с использованием Automation сервера:

  1. Более быстрая установка соединения, так как не требуется создания отдельного процесса операционной системы, а все действия производятся в рамках вызывающего процесса;
  2. Более быстрое обращение к свойствам и методам объектов 1C:Предприятия, так как для организации обращения не требуется организации межпроцессной коммуникации;
  3. Меньший расход ресурсов операционной системы.

В общем и целом работа с 1С:Предприятием 8.0 через COM -соединение подобна работе с 1С:Предприятием в режиме Automation сервера. Основные отличия заключаются в следующем:

  1. В случае Automation сервера запускается полноценное приложение 1С:Предпприятия 8.0, а в случае COM -соединения запускается относительно небольшой внутрипроцессный COM -сервер.
  2. При работе через COM -соединение недоступны функциональные возможности так или иначе связанные с организацией пользовательского интерфейса 1С:Предприятия 8.0;
  3. При работе COM -соединения не используется модуль приложения конфигурации 1С:Предприятия 8.0. Его роль при работе с COM -соединением играет модуль внешнего соединения.

Обмен данными

Механизмы обмена данными позволяют создавать территориально распределенные информационные системы обменивающиеся данным в офф-лайн режиме, без постоянного соединения. С помощью этих механизмов можно осуществлять интеграцию не только между различными информационными базами «1С:Предприятия 8», но и строить сложные гетерогенные информационные системы, включающие, наряду с решениями на платформе «1С:Предприятие 8», еще и внешние приложения.

  • Механизм распределенных информационных баз предназначен для обмена данными только с идентичными конфигурациями «1С:Предприятия 8» и жестко регламентирует структуру создаваемой системы. Он является аналогом компоненты «Управление распределенными информационными базами», существующей в технологической платформе «1С:Предприятия 7.7», однако существенно превосходит этот механизм по гибкости настройки и разнообразию поддерживаемых схем обмена. Подробнее…
  • Универсальный механизм обмена данными, напротив, позволяет создавать произвольные распределенные системы и практически не накладывает никаких ограничений на структуру создаваемой системы. Подробнее…

Оба эти механизма используют ряд средств технологической платформы, которые разработчик может применять как по отдельности, так и в различных комбинациях, в зависимости от конкретной решаемой задачи. Такой подход позволяет обеспечить гибкость механизмов обмена и их настраиваемость на решение как можно большего круга задач.

  • Планы обмена — эти объекты конфигурации позволяют описывать перечень узлов распределенной информационной системы, с которой будет производиться обмен данными, и задавать состав данных, которые будут участвовать в обмене. Подробнее…
  • Средства XML-сериализации служат для представления данных «1С:Предприятия 8» различных типов в виде последовательности данных XML, и наоборот. Подробнее…
  • Средства чтения/записи XML-документов позволяют работать с данными формата XML на «базовом» уровне, без привязки к объектам «1С:Предприятия 8». Подробнее…

Важным качеством данного набора механизмов является то, что он обеспечивает высокий уровень готовности системы к работе в распределенной среде — организация обмена практически не требует дополнительных затрат на разработку. Нужно просто задать в интерактивном режиме состав данных, участвующих в обмене, а механизм обеспечит формирование сообщений и их загрузку. При этом платформа автоматически организует обмен только измененной информацией, отслеживает получение сообщений, определяет необходимость повторной отправки данных, разрешает коллизии и проверяет целостность загружаемой информации.

Гибкие возможности настройки позволяют сформировать практически любую топологию схемы узлов обмена (звезда, снежинка, схемы без центрального узла).

Состав данных, участвующих в обмене, и правила разрешения коллизий могут задаваться произвольно. При этом механизмы обмена с одной стороны минимизируют объем передаваемых данных (пересылаются только измененные данные), а с другой — гарантируют устойчивость к потере сообщений. Иными словами, система способна функционировать как в условиях гарантированной доставки сообщений, так и без таковой.

Источник

Варианты подключения к 1С для 7.7

Через OLE

Используется объект V77.Application, не самый быстрый, но универсальный способ.

Пример:

//Объект для доступа
БазаOLE = СоздатьОбъект("V77.Application");
//Варианты вызова
//Локальный:	V77L.Application
//Сетевой:	V77.Application
//SQL:	        V77S.Application

ПутьБазы          = "C:\Bases\base\";
Пользователь      = "Администратор";
Пароль            = "123456";
МонопольныйРежим  = " /m";
ЗапускБезЗаставки = 1;

Подключено = БазаOLE.Initialize ( БазаOLE.RMTrade , "/d" +
                       СокрЛП(ПутьБазы) + " /n" + СокрЛП(Пользователь)+
                       " /p" + СокрЛП(Пароль) + МонопольныйРежим,
                       ?(ЗапускБезЗаставки = 1,"NO_SPLASH_SHOW",""));
Если Подключено = 0 Тогда
     Предупреждение("Подключение к базе "+Подключено+" не произведено. Проверьте настройки!");
Иначе
   //
    СпрOLE = БазаОле.CreateObject("Справочник.Контрагенты"); 

    СпрОле.ВыбратьЭлементы();
    Пока СпрОле.ПолучитьЭлемент()=1 Цикл
        Сообщить(Спр.Наименование);
        Прервать;
    КонецЦикла;
КонецЕсли;

Подключении по сети происходит медленнее, чем локальное, «удаленный» вызов используется редко.

Обратите внимание, что впрямую присвоение к «местному» свойству возможно только для примитивных типов, объектные (Например СпрOle, ТекущийЭлемент()),  не имеют в текущей базы «сущности».  При передаче числовых значений используйте округление, так как возможно передача вот таких значений «1,00000000001» для них операция сравнения будет выдавать различие

Подключение напрямую к базе данных

Является альтернативным способом, для его осуществления требуется разбор таблиц, опираясь на файл 1Cv7.DD.

Способ позволяет очень быстро оперировать большими объемами данными, но требуется глубокая отладка таких подключений.

Пример рассматривать не будем, так как это объемная тема, а для большинства 7.7. уже прошлое.

com соединение

Можно создать два вида COM объектов для приложения 1С. Это ole соединения V83.Application

и com соединения V83.COMConnector

. В случае с V83.Application
запускается практически полноценный экземпляр приложения 1С. В случае использования V83.COMConnector
запускается небольшая серверная часть. Скорость работы в этом случае выше, но некоторые функции могут быть недоступны. В частности работа с формами и с общими модулями для которых не установлено свойство работы с внешними соединениями. Преимущественно надо использовать V83.COMConnector
и только в случае нехватки функционала V83.Application
. Особенно сильно разница в скорости работы может быть заметна на базах большого объема. Для платформе 8.2 используется V82.Application или V82.COMConnector

Automation сервер 1с предприятие 8 — Вэб-шпаргалка для интернет предпринимателей!

  1. Минимальные для внутрипроцессного Com-сервера
  1. Средние для локального внепроцессного Com-сервера
  2. От средних до больших для нелокального внепроцессного Cоm-сервера в зависимости от качества канала связи

Если используете Effector Saver 3 Для регистрации, запустите командную строку от имени Администратора, и выполните команду регистрации библиотеки.

Мнение эксперта
1С:Эксперт по технологическим вопросам
Задавайте мне вопросы, и я помогу разобраться!

dll загружен, но не удалось выполнить вызов DllRegisterServer, код ошибки 0x80070005 запускайте командную строку с правами администратора. Ошибка 2147221164(0x80040154): Класс не зарегистрирован | Программист 1С удаленно Кайков Константин Обращайтесь в форму связи

Варианты решения проблемы «Класс не зарегистрирован»

В конфигурации 1С Предприятие 8.3 нам будет необходимо зарегистрировать файл comcntr.dll в системе – зачастую при получении ошибки «Класс не зарегистрирован» ситуация оказывается такова, что при установке платформы 1С на компьютере попросту не была осуществлена регистрация этого файла, что в свою очередь приводит к невозможности работы через COM-соединение.

Запустите командную строку от имени Администратора в 1С:Предприятие. Если Вы видите, что в командной строке прописан путь, отличающийся от «c:\windows\system32», то Вам нужно выполнить команду «cd c:\windows\system32». Данное замечание корректно для 32-х разрядных систем. Если же Вы работаете с 64-х разрядной системой, Вам необходимо выполнить команду «cd \windows\syswow64».

Исправление ошибки класс не зарегистрирован с помощью командной строки в 64-х разрядной системе

Следующим действием будет выполнение команды regsvr32 dll «C:\Program Files\1cv8\8.3.ХХ.ХХХХ\bin\comcntr.dll»

Обратите внимание, что мы берем в кавычки путь к библиотеке comcntr.dll, так как в этом пути имеются знаки пробела. И также обратите внимание, что необходимо заменить 8.3.ХХ.ХХХХ на номер версии платформы 1С 8.3, которая установлена у Вас

По итогу выполнения команды Вы должны получить системное сообщение, радостно сообщающее вам о том, что регистрация библиотеки была успешно выполнена на базе 1С Предприятие 8.

Описанный способ учитывает особенности работы в операционной системе Windows после версии XP, а также учитывает тонкости регистрации под 64-х разрядной системой.

Как видите, для устранения ошибки «Класс не зарегистрирован» в конфигурации 1С Предприятие 8 не потребовалось никаких сложных действий и, вполне возможно, описанное здесь покажется кому-то очевидным. Однако данная статья писалась с расчетом на тех людей, кто не обладает глубокими познаниями в тонкостях администрирования.

Особенности организации данных в «1С»: задача со множеством переменных

Система хранения в любой из программ «1С» устроена в виде многоуровневой сложной базы данных. В ней прописаны взаимосвязи и взаимозависимость данных, их связи с объектами с высокой степенью абстракции.

Однако, по нашему опыту, компании крайне редко используют «1С» в том же виде и в той же конфигурации, что предоставляются пользователю первоначально, «из коробки». Каждая компания дорабатывает системы под себя, под особенности своих бизнес-процессов, оргструктуры, производимой продукции и т. д.

Как результат — структура данных становится ещё более специфичной и уникальной.

Пока всё это крутится внутри одной системы, проблем не возникает. Но если нужно интегрировать «1С» с другими системами, специфика хранения информации усложняет эту задачу.

Возникает необходимость разобраться со следующими нюансами.

  1. К какой системе будет относиться сама интеграция: к «1С» или ко второму «участнику процесса»? От этого зависит, какая из команд разработки будет создавать и перерабатывать интеграцию и на какую систему ляжет нагрузка.
  2. В каком формате должны быть переданы и приняты данные? Разные системы потребляют данные в разных форматах. «1С:ERP Управление предприятием» — в EnterpriseData (основан на XML), а, например, Axapta — тоже в XML, но в «чистом». Вроде бы различия минимальны, но они могут повлиять на качество данных. И либо в системе-приёмнике, либо в системе — источнике данных необходимо будет настроить конвертацию в нужный формат.
  3. Какие именно данные нужно забирать и отправлять? Как правило, системе-приёмнику не нужно «всё, везде и сразу» — только отдельные поля или записи за определённый период времени. Нужно определить, что это за поля, отделить их от общего массива данных и направить в соответствующие слоты приёмника.
  4. Какие именно атрибуты сущности нужно передавать в «1С» и из «1С»? И что делать, если в конечной системе нет нужного значения? Например, атрибуты номенклатуры могут храниться в «1С» как несколько справочников, которые обновляются независимо.

Например, вы передаёте в «1С:Розница» данные о номенклатуре «лампа настольная», у которой значение атрибута-справочника «цвет» — «красный».

Если в справочнике цветов в «1С:Розница» ещё не заведено значение «красный», записать такие данные будет невозможно.

Всё это необходимо учесть уже на этапе первоначальной разработки интеграции. Но и это ещё не всё. «1С» регулярно выпускает релизы и обновляет код своих продуктов. Та организация данных, под которую вы писали свою интеграцию, после любого из обновлений может стать неактуальной. Поменяются названия полей, какие-то поля разделятся на два или объединятся. И все интеграции, связанные с «1С», придётся перерабатывать в соответствии с новыми обстоятельствами.

Изменения могут быть и на стороне второй системы, участвующей в обмене данными, — и интеграцию вновь придётся менять.

Статьи для программиста по обмену данными в 1С

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

рубрики: COM | Дата: 2 апреля, 2014

Один из вариантов обмена данными между базами 1С это обмен через COM соединение.

С помощью COM соединения можно из одной базы 1С подключиться к другой и прочитать или записать данные. Пользоваться этим методом можно как в клиент-серверных вариантах баз, так и в файловых базах. В этой статье и разберем примеры такого рода соединений. В примерах используется платформа 8.2.

Можно создать два вида COM объектов для приложения 1С. Это V82.Application и V82.COMConnector. В случае с V82.Application запускается практически полноценный экземпляр приложения 1С. в случае использования V82.COMConnector запускается небольшая серверная часть. Скорость работы в этом случае выше, но некоторые функции могут быть недоступны. В частности работа с формами и с общими модулями для которых не установлено свойство работы с внешними соединениями. Преимущественно надо использовать V82.COMConnector и только в случае нехватки функционала V82.Application. Особенно сильно разница в скорости работы может быть заметна на базах большого объема.

Сформируем строку подключения

  • для серверного варианта базы

для файлового варианта базы

Выполняем подключение к базе

Разрываем соединение с базой

Для объекта V82.Application выполнять разрыв соединения обязательно, в противном случае останется висеть незавершенный сеанс, который потом придется удалять вручную. В случае с V82.COMConnector соединение разрывается автоматически при завершении процедуры в которой выполнялось подключение.И есть еще один маленький момент.

Для пользователя под которым выполняется подключение должен быть отключен флажок «Запрашивать подтверждение при закрытии программы» в его настройках.

А теперь соберем весь код в кучу

Далее можно например воспользоваться методом NewObject(), чтобы создать запрос, и с его помощью прочитать данные из базы к которой подключались.

Для вида подключения V82.Application метод применяется для COM объекта, который создавался изначально, а для V82.COMConnector метод применяется к подключению. далее работа с запросом идет стандартными средствами 1С. в коде это выглядит так:

Для версии 1С:Предприятие 8.3 все остается без изменений за исключением того, что при создании COMОбъектов надо использовать «V83.COMConnector» или «V83.Application».

Какие бывают механизмы обмена между базами 1С?

Обмены данных можно классифицировать по двум направлениям: используемые механизмы и используемый транспорт для обмена.

Механизмы обмена данными 1С

Как правило, при обмене используется два механизма:

  • Распределенная информационная база (РИБ) — механизм, позволяющий настроить обмен данными между филиалами. Механизм подразумевает, что обмениваются абсолютно идентичные конфигурации БД. Механизм умеет передавать изменения конфигурации баз данных. Механизм реализован на уровне технологической платформы.
  • Универсальный механизм обмена между конфигурациями — механизм является разработкой фирмы 1С для прикладных решения. Он универсален и основан на планах обмена. Обмен данными осуществляется с помощью правил xml, которые создаются в специальной конфигурации — Конвертация данных. С помощью данного механизма можно реализовать как одноразовый обмен, так и постоянный обмен между 1С конфигурациями. Механизм реализован на уровне конфигурации, встроить в свою конфигурацию можно из технологической конфигурации БСП.

Транспорт для обмена данными

Транспортом может выступать достаточно широкий спектр технологий. Рассмотрим основные, реализованные в универсальном механизме обмена 1С 8.2:

Получите 267 видеоуроков по 1С бесплатно:

  • Бесплатный видео самоучитель по 1С Бухгалтерии 8.3 и 8.2;
  • Самоучитель по новой версии 1С ЗУП 3.0;
  • Хороший курс по 1С Управление торговлей 11.
  • Локальный или сетевой каталог — самый простой транспорт. Одна ИБ создает файл на диске, вторая считывает его и добавляет свой файл.
  • FTP-ресурс — обмен, аналогичен обмену через каталог. Отличие — обмен осуществляется через FTP протокол.
  • Почтовые сообщения или E-mail — обмен проходит по средствам электронной почты. Конфигурации посылают друг другу почтовые сообщения и регулярно проверяют почтовый адрес на наличие новых сообщений.
  • Прямое подключение (COM) — обмен осуществляется через прямое подключение одной базы к другой по средствам COM соединения.
  • Интернет (Web service) — транспортом является веб-служба. Одна информационная база подключается к веб-сервису, веб-сервис подключается к второй базе и транспортирует сообщение. Для осуществления такого транспорта необходимо иметь установленный веб-сервер (IIS или Apache).

Подключение и использование

Для подключения к сервису 1cDialog.com нужно пройти в меню «Все функции»-«Стандартные»-«Управление системой взаимодействия». В открывшемся окне нужно указать адрес эл. почты (валидный), на него пришлют код регистрации, этот код нужно вставить в соответствующее поле и нажать кнопку «Зарегистрировать».

Регистрация в сервисе 1cDialog.com

Для подключения к собственному серверу взаимодействий потребуется специальная обработка — , которую можно скачать там же, где  и сам сервер. В этой обработке нужно указать адрес для подключения (который настраивается в файле ) и адрес эл. почты:

Регистрация на сервере взаимодействия

Очевидное использование системы взаимодействия (разнообразное общение между пользователями) нас не интересует. Рассмотрим возможности которые предоставляет свойство глобального контекста СистемаВзаимодействия. В качестве примера рассмотрим создание простого каркаса для бота, который реагирует на команды пользователей. Под командами пользователей подразумеваются сообщения какого-то определенного вида. Итак, в модуль исполняемый на клиенте поместим код такого вида:

Процедура СоздатьРобота() Экспорт

Обработчик = Новый ОписаниеОповещения(«ПриОтправкеСообщения», ЭтотОбъект);
СистемаВзаимодействия.ПодключитьОбработчикПослеОтправкиСообщения(Обработчик);

КонецПроцедуры

Процедура ПриОтправкеСообщения(Сообщение, Обсуждение, ДополнительныеПараметры) Экспорт

Если СтрНачинаетсяС(Сообщение.Текст, «/?») Тогда

ОбщегоНазначенияВызовСервера.СоздатьСообщениеРобота(Обсуждение.Идентификатор, «Справочная информация»);

КонецЕсли;

КонецПроцедуры

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Процедура СоздатьРобота() Экспорт

Обработчик = Новый ОписаниеОповещения(«ПриОтправкеСообщения», ЭтотОбъект);
СистемаВзаимодействия.ПодключитьОбработчикПослеОтправкиСообщения(Обработчик);

КонецПроцедуры
 
Процедура ПриОтправкеСообщения(Сообщение, Обсуждение, ДополнительныеПараметры) Экспорт

Если СтрНачинаетсяС(Сообщение.Текст, «/?») Тогда

ОбщегоНазначенияВызовСервера.СоздатьСообщениеРобота(Обсуждение.Идентификатор, «Справочная информация»);

КонецЕсли;

КонецПроцедуры

Первая процедура подключает обработчик отправки сообщений, который реагирует на все отправляемые пользователем сообщения, в любом из обсуждений. Вторая процедура анализирует каждое сообщение, если сообщение удовлетворяет некоторым условиям вызывается серверная процедура, которая генерирует ответ сервера:

Процедура СоздатьСообщениеРобота(ИдентификаторОбсуждения, ТекстСообщения) Экспорт

Сообщение = СистемаВзаимодействия.СоздатьСообщение(ИдентификаторОбсуждения);
Сообщение.Текст = ТекстСообщения;
Сообщение.Записать();

КонецПроцедуры

1
2
3
4
5
6
7
Процедура СоздатьСообщениеРобота(ИдентификаторОбсуждения, ТекстСообщения) Экспорт

Сообщение = СистемаВзаимодействия.СоздатьСообщение(ИдентификаторОбсуждения);
Сообщение.Текст = ТекстСообщения;
Сообщение.Записать();

КонецПроцедуры

Для того, чтобы все заработало нужно каким-либо образом вызвать процедуру «СоздатьРобота» — например в процедуре модуля приложения «ПриНачалеРаботыСистемы». Результат выглядит так:

Информацию о прочих возможностях можно найти на сайте ИТС, а так же в справочной информации конфигуратора.

На этом все, надеюсь, что данная статья Вам помогла.

Затраты на COM-вызовы

Каждый
раз, когда мы обращаемся во встроенном языке к свойству или методу
COM-объекта (выполняем COM-вызов), происходит ряд дополнительных
действий по сравнению с обращением к родному объекту встроенного языка.
Если COM-сервер находится в другом локальном процессе, то при этом еще
сначала выполняется перенос всех параметров из COM-клиента в COM-сервер и
в конце выполняется обратный перенос параметров в COM-клиент. Для
такого переноса информация естественно должна быть сериализована на
стороне отправителя и  затем десериализована на стороне получателя, что в
совокупности с некоторыми другими действиями получило название
маршалинга и демаршалинга. В нелокальном режиме (DCOM) такой перенос
будет еще тратить время на сетевые коммуникации и при первом обращении к
новому COM-объекту на передачу его «скелета», и поэтому задержка канала
будет играть решающую роль (Подробнее о COM вызовах, DCOM в википедии, Технический обзор DCOM,)

Соотношение затрат на вызов по типам расположения COM-сервера

  1. Минимальные для внутрипроцессного Com-сервера

  1. Средние для локального внепроцессного Com-сервера

  2. От средних до больших для нелокального внепроцессного Cоm-сервера в зависимости от качества канала связи

Минимизация количества COM-вызовов

  1. Создаем базовую внешнюю обработку с набором общих методов для приема вызовов от COM-клиента на стороне COM-сервера

    1. Теперь нам не нужно изменять конфигурацию базы COM-сервера, чтобы использовать там сложный функционал.

    2. В нашем продукте мы назвали ее «Сервисный процессор». На ее передачу и инициализацию уходит около 1 сек

    3. Пример универсальной передачи файла в COM-серверДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайлаЛокальное);ЗаписьХмл = Новый ЗаписьXML;ЗаписьХмл.УстановитьСтроку();ЗаписатьXML(ЗаписьХмл, ДвоичныеДанные);ЧтениеХмлНаСервере = COMСервер.NewObject(«ЧтениеXML»);ЧтениеХмлНаСервере.УстановитьСтроку(ЗаписьХмл.Закрыть());ДвоичныеДанныеНаСервере = COMСервер.ПрочитатьXML(ЧтениеХмлНаСервере);ИмяФайлаНаCOMСервере = COMСервер.ПолучитьИмяВременногоФайла(Файл.Расширение);ДвоичныеДанныеНаСервере.Записать(ИмяФайлаНаCOMСервере);
    4. Пример вызова обработкиCOMОбработка = COMСервер.ВнешниеОбработки.Создать(ИмяФайлаНаCOMСервере, Ложь);Результат = COMОбработка.МойМетод(ПараметрыXML);
  2. Проектируем
    взаимодействие с COM-сервером по принципу «минимум COM-вызовов”, т.е.
    готовим все нужное на стороне COM-клиента и передаем в качестве
    параметров «большого» вызова

    1. Создаем встроенную обработку для выполнения такого вызова в COM-клиенте

    2. Передача агрегатных объектов

      1. Сериализуем все входные параметры на стороне COM-клиента

      2. Десериализуем все входные параметры на стороне COM-сервера

      3. Выполняем действия с параметрами на стороне COM-сервера
      4. Сериализуем все выходные параметры на стороне COM-сервера

      5. Десериализуем все выходные параметры на стороне COM-клиента

    3. В нашем продукте мы назвали ее «Выполнение сервиса инфобазы»

  1. Для многократных COM-вызовов предусматриваем регулируемую частоту

    1. Например, информационные вызовы могут выполняться с изменяемой частотой

Простой способ

Если вдуматься, то от инструмента, помогающего нам организовать обмен данными, надо не так уж и много. Освободить нас от монотонного переписывания:

ИмяРеквизита1ВПриемнике = ИмяРеквизита1ВИсточнике

ИмяРеквизита2ВПриемнике = ИмяРеквизита2ВИсточнике …

В типовых конфигурациях сейчас реквизитов ну очень много. И табличных частей тоже

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

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

Понравилась статья? Поделиться с друзьями:
Бухгалтерия Галилео
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: