Для взаимообмена информациоей между двумя информационными базами без посторонних выгрузок и файлов обмена нет ничего лучше COM-сединения. И с этим трудно поспорить, потому что использовать этот вид соединения в достаточной мере просто и стабильно. Но в и в данном механизме есть одно узкое и неприятное место.Речь идет о времени установки соединения с другой базой. Оно может в некоторых случаях достигать достаточно больших значений, т.е. быть очень долгим.
В момент соединения по COM-соединению, подключаемая база полностью подгружает конфигурацию базы, к которой мы подключаемся. Попробовав, например, подключится к базе "Бухгалтерия предприятия", нажи ожидания длились бы достаточно долго, так как объем конфигурации исчисляется сотнями мегабайт. Становится ясным, что для более быстрой работы все соединения необходимо кэшировать и поддерживать.
Анализ производительности
Зададимся вопросом, а нужно ли вообще кэшировать соединения и принесет ли это свои плоды при интенсивной работе пользователя с COM-соединением. Выполним измерение времени подключения к конфигурации объемом 20 кБайт.
Мы видим, что подключение к небольшой базе заняло 3,5 секунды. При подключении к более объемной базе время увеличится в несколько раз.
При хранении поддерживаемого соединения эти действия займут на несколько порядков меньше времени.
Проблема в том, что платформа 1С не предоставляет стандартных стредств для зранения COM-соединений в ИБ. В справочниках и документах сохранять соединение бессмысленно, так как оно часто может меняться. Наиболее перспективным вариантом выглядит хранение соединения в параметре сеанса. Но и тут все не так гладко. Ведь для хранения COM-соединения нет ни одного подходящего типа данных.
Данные рассуждения приводят к тому, что хранение возможно только на клиенте в какой-нибудь переменной. Рассмотрим вариант для управляемой формы. Необходимо инициализировать в форме переменную с директивой &НаКлиенте, куда мы и будем сохранять значения подключения. Соответственно вызывать это подключение можно тоже только на клиенте, так как передать COM объект с клиента на сервер вы не сможете. Для обычных форм нет разделения на сервер и клиент и этот механизм становится даже проще. Нельзя забывать перед закрытием используемой формы разрывать соединение, чтобы предотвратить утечку памяти.
Хоть и данная схема решает некоторые проблемы производительности, однако она далека от идеала. Каждая форма, где нужно будет поддерживать COM-соединение, будет создавать новый сеанс в информационной базе приемнике, соответственно будет требоваться и большее количество лицензий. Также одним из главных минусов является исключение поддержки соединения на серверею
В следующей статье будет рассмотрен более совершенный способ, который исключает из себя эти проблемы (подключение через Web сервисы).