Где работает внешнее соединение 1с
1С:Предприятие 8.0 предоставляет интересные возможности для организации обмена данными с другими программными системами. Наряду с механизмом OLE Automation введено понятие COM -соединения, которое позволяет обеспечить надежный и более быстрый доступа к данным 1С:Предприятия 8.0 из внешних приложений, поддерживающих данную технологию.
При использовании для доступа к данным 1С:Предприятия 8.0 COM -соединения имеются следующие преимущества по сравнению с использованием Automation сервера:
Более быстрая установка соединения, так как не требуется создания отдельного процесса операционной системы, а все действия производятся в рамках вызывающего процесса;
Более быстрое обращение к свойствам и методам объектов 1C:Предприятия, так как для организации обращения не требуется организации межпроцессной коммуникации;
В общем и целом работа с 1С:Предприятием 8.0 через COM -соединение подобна работе с 1С:Предприятием в режиме Automation сервера. Основные отличия заключаются в следующем:
В случае Automation сервера запускается полноценное приложение 1С:Предпприятия 8.0, а в случае COM -соединения запускается относительно небольшой внутрипроцессный COM -сервер.
При работе через COM -соединение недоступны функциональные возможности так или иначе связанные с организацией пользовательского интерфейса 1С:Предприятия 8.0;
При работе COM -соединения не используется модуль приложения конфигурации 1С:Предприятия 8.0. Его роль при работе с COM -соединением играет модуль внешнего соединения.
1.1 Порядок установки COM-соединения
Для организации доступа к данным 1С:Предприятия 8.0 через COM -соединение, выполняется следующая последовательность действий:
через полученный объект COM -соединения производится обращение к допустимым методам, свойствам и объектам информационной базы, с которой установлено соединение.
Важно! В связи с отсутствием пользовательского интерфейса в COM-соеденении не все объекты, а также свойства и методы можно использовать в COM -соединении.
Объекты 1С:Предприятия, доступные извне через COM -соединение:
Глобальный контекст 1С:Предприятия 8.0, за исключением объектов, жестко связанных с клиентским приложением (ТекстовыйДокумент, ТабличныйДокумент, …)
1.2 Модуль внешнего соединения
Как уже отмечалось обязанности модуля приложения при работе через COM -соединение, выполняет модуль внешнего соединения. Данный модуль может иметь процедуры-обработчики событий ПриНачалеРаботыСистемы() и ПриЗавершенииРаботыСистемы(), в которых могут быть размещены действия, выполняемые при инициализации и завершении соединения, соответственно.
Процедуры, функции и глобальные переменные, определенные в модуле внешнего соединения с ключевым словом Экспорт становятся, как и в случае модуля приложения, частью глобального контекста.
1.3 Общие модули
Для общих модулей введены свойства «Клиент», «Сервер» и «ВнешнееСоединение». Они предназначены для определения в конфигурации использования модулей в клиент - серверном варианте и в режиме COM -соединения.
1.4 Объект "V8.COMConnector"
Строка соединения с ИБ представляет собой цепочку фрагментов вида Параметр=Значение. Фрагменты отделяются друг от друга символами ';'. Если значение содержит пробельные символы, то оно должно быть заключено в двойные кавычки («).
Usr - имя пользователя; Pwd - пароль.
Для файлового варианта определен параметр:
File - каталог информационной базы.
Для клиент-серверного варианта определены параметры:
Srvr - имя сервера 1С:Предприятия; Ref - имя информационной базы на сервере.
Метод Connect возвращает ссылку на созданный объект COM -соединения.
Метод Connect устанавливает COM -соединение с информационной базой 1С:Предприятия 8.0 и возвращает ссылку на объект COM -соединение.
Пример:
Авторизация доступа через COM -соединение возможна как с помощью параметров строки соединения «Usr» и «Pwd», так и через пользователя Windows, в любом случае должно быть право на «Внешнее соединение».
1.5 Объект "COM-соединение"
COM -соединение с информационной базой 1С:Предприятия предоставляет полный доступ к своему глобальному контексту (см. «Контекст выполнения программного модуля»). Поэтому COM -соединение в качестве своих методов может иметь: системные константы, значения заданных в конфигураторе объектов, доступ к которым осуществляется с помощью менеджеров (например, константы, перечисления, справочники, документы, журналы документов, отчеты, обработки, планы видов характеристик, планы счетов, планы видов расчета, регистры), а также переменные, объявленные в модуле внешнего соединения с ключевым словом Экспорт.
Кроме того, COM -соединение имеет дополнительный метод NewObject, с помощью которого можно создавать значения определенных типов.
Пример:
Метод String Позволяет получать строковые представления значений 1С:Предприятия.
Пример:
1.6. Особенности работы с COM -соединением
В Automation и в COM -соединении TRUE и FALSE имеют соответственно значения: -1 (минус единица) и 0.
Имеется возможность организации пула COM-соединений. При этом на принимающей на сервере 1С:Предприятия ЗАРАНЕЕ создаются несколько объектов COM-соединения и на установку соединения требуется еще меньше времени, поскольку не нужно создавать новый объект.
Реализован новый объект ПостроительЗапроса, предназначенный для генерации текстов запросов на основании указанных настроек. Данный объект поддерживает функциональность построителя отчета, не относящуюся к выводу отчета в табличный документ и другим задачам, связанным с пользовательским интерфейсом. Данный объект может использоваться на сервере 1С:Предприятия и в COM -соединении.
Доступно использование COM -объектов при работе встроенного языка на сервере 1С:Предприятия.
Ошибки COM преобразуются в исключения встроенного языка.
Если в конфигурации производится попытка создания недопустимого объекта, например, табличного документа, в модуле внешнего соединения, в общем модуле или в модуле объекта, то COM -соединение может быть не установлено или прервано в виде исключения.
- Последние изменения: 03.04.2022 22:08
- — Asmody
За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution-Share Alike 3.0 Unported
Так же мы рассмотрим нюансы подключения к базе из 1C v7.7.
К данной статье будет приложен иллюстративный материал в виде конфигурации с демо-обработкой, входящей в состав данной базы, и обработка для 7.7, демонстрирующая соединение с данной базой.
Создание каркасной базы
Создадим новую конфигурацию
В ней мы создадим ПараметрСеанса МиниЛогЗапуска и глобальный модуль с атрибутами
Приведу код глобального модуля
Кроме этих функций добавим функцию возвращающую по имени справочник в виде ТаблицыЗначений
Также определим процедуру в модуле внешнего соединения
И процедуру в модуле приложения
Также добавим ещё один не глобальный модуль с атрибутами
И с единственной функцией
Application и ComConnector сравнение соединение из 1С 8
Для исследования вызова функций не глобальных модулей Сохраняем конфигурацию, и теперь нам есть что исследовать.
Для целого ряда методов в синтаксис помощнике указанно "Не используется в модуле внешнего соединения". Это упоминание не даёт полной картины.
Создаём обработку в нашей конфигурации, для проверки вызова наших методов.
В обработке объявляем две переменных и функцию установления соединения с базой
В переменной открытия мы передаём либо строку "V81.Application", либо строку "V81.ComConnector"
При этом для V81.Application возвращается Истина в connection, а cntr является нашим объектом через который мы обращаемся к базе
Для ComConnector в connection возвращается объект для обращения к базе, а cntr является объектом описанным в синтаксис помощнике как COM-соединитель.
- COM-соединение с требуемыми параметрами ищется в пуле соединений. Если найдено, то используется оно.
- Если COM-соединение с требуемыми параметрами не найдено, то анализируется не исчерпан ли лимит по числу одновременно существующих соединений. Если не исчерпан, то создается новое COM-соединение.
- Если лимит исчерпан, но при этом в пуле имеются неиспользуемые COM-соединение, то соединение, дольше всех находящееся в пуле, удаляется и создается новое COM-соединение.
- Если никаким способом найти подходящее или создать новое COM-соединение не удалось, то происходит ожидание освобождения COM-соединение другим потоком, после чего весь процесс повторяется, начиная с пункта 1.
Для установки соединения с базой надо методу Connect нашего объекта передать строку соединения.
Для файловой версии данная строка содержит параметры:
- File с указанием пути к папке с файлом базы
- Usr с указанием имени прользователя
- Pwd с указанием пароля прользователя
Для соединения с сервером Usr и Pwd прежние параметры, а вот вместо File два параметра Srvr с указанием имени сервера и Ref с указанием имени Базы
Вызовы из восьмёрки через Application и ComConnector
Пробуем организовать вызов функций нашей конфигурации из обработки на 8.1
Пишем процедуру вызова функций с определением, что возвращается при вызове
Что это нам даёт?
Значения типа неопределено,NULL,Истина,Ложь передаются в соединение с базой корректно.
Модуль внешнего соединения при подключении через V81.Application не отрабатывает.
Модуль приложения при подключении через V81.Application отрабатывает.
Тип подключения, в котором мы подключаемся к базе, соответствует типу подключения клиент
Пишем аналогичную процедуру, но уже с использованием ComConnector
Теперь попробуем обратиться к нашим объектам, ну хотя бы к V81.Application из 1С 7.7
Пишем примерно тот же код
Так мы убеждаемся что Ложь соответствует 0, Истина -1, а NULL и неопределено ничего в стандартах 1Cv7.7 не возвращают
Как же отличить NULL от неопределено?
В описание данного метода сказано "Получает строковое представление значения произвольного типа".
Пробуем использовать этот метод из 7.7
Добавив в нашу Функцию ВызовФункций() несколько строк кода
Мы можем получить тип любых метаданных используя этот пример и описание работы с метаданными
Использование менеджеров для работы с данными через ОЛЕ
Мы прояснили процесс работы с метаданными, а теперь обратимся к работе с данными
В данной процедуре мы указываем наименование справочника, и если такого наименования нет, то мы создаём элемент справочника. Выводим всю информацию которую можем получить и присваиваем значение элемента справочника нашей константе
Запросы,Конструкторы запросов и произвольные объекты 8.* через ОЛЕ
Мы использовали работу менеджеров для получения и изменения, данных базы,но более высокой производительностью в восьмёрке обладают запросы и их мы так же можем использовать.
В данном примере мы сначала пользуемся V81.Application, у которого есть интерфейсные библиотеки и методом NewObject (являющимся конструкцией языка 1С 8.* Новый) для вызова конструктора запроса.
В принципе такой порядок использования запроса необязателен, но из ComConnector мы не сможем вызвать метод ОткрытьМодально() по причине отсутствия интерфейсных библиотек.
Проблема булева типа из 7.7 (можем передать, но не можем вернуть)
Изменим структуру нашей базы, а именно. Для Константы Константа1 изменим тип с простого типа Строка на составной Булево,Число
Разместим в глобальном модуле функцию, которая нам вернет значение в виде строки.
Вызов из 77 я описывать не буду, он уже для вас довольно тривиален.
В принципе вместо напсиания данного кода мы можем, запустив восьмёрку, вычислить выражение в табло и убедиться, что
Определим функцию работы с нашей константой в обработке вызываемой из 7.7
Какой вывод мы можем сделать из этого лога
Что тип булево возвращается стороннему приложению как число.
Мы можем установить значение булева и любого неизвестного 7.7 типа через ЗначениеИзСтрокиВнутр, но как минимум в случае с булевым типом мы не сможем его прочитать обратно иначе чем число.
Сам собой напрашивается вывод, что надо быть аккуратным при проектировании внешних функций и метаданных, проектируя их таким образом что бы мы могли одназначно опредилить по возвращенному параметру булев тип и никогда бы не смогли спутать его с числом.
Проблема времени из 7.7 (не можем передать)
Добавляем в нашу базу регистр накопления и документ регистратор и пишем в 7.7 простую функцию, формирующую движения данного документа
Вывод из этого лога прост. Время даже при передаче через ЗначениеИзСтрокиВнутр теряется.
Класс не существует
Для регистрации V81.COMConnector необходимо выполнить:
regsvr32 "C:\Program Files\1cv81\bin\comcntr.dll"
Для регистрации V81.Application необходимо выполнить:
"C:\Program Files\1cv81\bin\1cv8.exe" /regserver
Специальные предложения
Решил серьезно заняться изучением OLE. Конечно OLE это не КД, но все же.
При использовании для доступа к данным 1С:Предприятия 8.0 COM -соединения имеются следующие преимущества по сравнению с использованием Automation сервера:
- Более быстрая установка соединения, так как не требуется создания отдельного процесса операционной системы, а все действия производятся в рамках вызывающего процесса;
- Более быстрое обращение к свойствам и методам объектов 1C:Предприятия, так как для организации обращения не требуется организации межпроцессной коммуникации;
- Меньший расход ресурсов операционной системы.
В общем и целом работа с 1С:Предприятием 8.0 через COM -соединение подобна работе с 1С:Предприятием в режиме Automation сервера. Основные отличия заключаются в следующем:
- В случае Automation сервера запускается полноценное приложение 1С:Предпприятия 8.0, а в случае COM -соединения запускается относительно небольшой внутрипроцессный COM -сервер.
- При работе через COM -соединение недоступны функциональные возможности так или иначе связанные с организацией пользовательского интерфейса 1С:Предприятия 8.0;
- При работе COM -соединения не используется модуль приложения конфигурации 1С:Предприятия 8.0. Его роль при работе с COM -соединением играет модуль внешнего соединения.
1.1 Порядок установки COM-соединения
Для организации доступа к данным 1С:Предприятия 8.0 через COM -соединение, выполняется следующая последовательность действий:
Важно! В связи с отсутствием пользовательского интерфейса в COM-соеденении не все объекты, а также свойства и методы можно использовать в COM -соединении.
Объекты 1С:Предприятия, доступные извне через COM -соединение:
- Экспортируемые переменные и процедуры/функции модуля внешнего соединения
- Экспортируемые переменные и процедуры/функции общих модулей
- Включение и исключение модулей целиком с помощью установки свойств общих модулей
- Включение и исключение фрагментов общих модулей с помощью препроцессора
- Глобальный контекст 1С:Предприятия 8.0, за исключением объектов, жестко связанных с клиентским приложением (ТекстовыйДокумент, ТабличныйДокумент, . )
1.2 Модуль внешнего соединения
Как уже отмечалось обязанности модуля приложения при работе через COM -соединение, выполняет модуль внешнего соединения. Данный модуль может иметь процедуры-обработчики событий ПриНачалеРаботыСистемы() и ПриЗавершенииРаботыСистемы(), в которых могут быть размещены действия, выполняемые при инициализации и завершении соединения, соответственно.
Процедуры, функции и глобальные переменные, определенные в модуле внешнего соединения с ключевым словом Экспорт становятся, как и в случае модуля приложения, частью глобального контекста.
1.3 Общие модули
Для общих модулей введены свойства "Клиент", "Сервер" и "ВнешнееСоединение". Они предназначены для определения в конфигурации использования модулей в клиент - серверном варианте и в режиме COM -соединения.
1.4 Объект "V8.COMConnector"
Строка соединения с ИБ представляет собой цепочку фрагментов вида Параметр=Значение. Фрагменты отделяются друг от друга символами ';'. Если значение содержит пробельные символы, то оно должно быть заключено в двойные кавычки (").
Usr - имя пользователя;
Pwd - пароль.
Для файлового варианта определен параметр:
File - каталог информационной базы.
Для клиент-серверного варианта определены параметры:
Srvr - имя сервера 1С:Предприятия;
Ref - имя информационной базы на сервере.
Метод Connect возвращает ссылку на созданный объект COM -соединения.
Метод Connect устанавливает COM -соединение с информационной базой 1С:Предприятия 8.0 и возвращает ссылку на объект COM -соединение.
// Создается объект-коннектор
V8 = Новый COMObject ("V8.COMConnector");
// создается объект COM -соединение
Соединение = V8.Connect ("File=""c:\InfoBases\Trade""; Usr =""Director"";")
Авторизация доступа через COM -соединение возможна как с помощью параметров строки соединения «Usr» и «Pwd», так и через пользователя Windows, в любом случае должно быть право на «Внешнее соединение».
1.5 Объект "COM-соединение"
COM -соединение с информационной базой 1С:Предприятия предоставляет полный доступ к своему глобальному контексту (см. «Контекст выполнения программного модуля»). Поэтому COM -соединение в качестве своих методов может иметь: системные константы, значения заданных в конфигураторе объектов, доступ к которым осуществляется с помощью менеджеров (например, константы, перечисления, справочники, документы, журналы документов, отчеты, обработки, планы видов характеристик, планы счетов, планы видов расчета, регистры), а также переменные, объявленные в модуле внешнего соединения с ключевым словом Экспорт.
Кроме того, COM -соединение имеет дополнительный метод NewObject, с помощью которого можно создавать значения определенных типов.
тз = Соединение. NewObject ("ТаблицаЗначений");
Метод String Позволяет получать строковые представления значений 1С:Предприятия.
1.6. Особенности работы с COM -соединением
В Automation и в COM -соединении TRUE и FALSE имеют соответственно значения: -1 (минус единица) и 0.
Имеется возможность организации пула COM-соединений. При этом на принимающей на сервере 1С:Предприятия ЗАРАНЕЕ создаются несколько объектов COM-соединения и на установку соединения требуется еще меньше времени, поскольку не нужно создавать новый объект.
Реализован новый объект ПостроительЗапроса, предназначенный для генерации текстов запросов на основании указанных настроек. Данный объект поддерживает функциональность построителя отчета, не относящуюся к выводу отчета в табличный документ и другим задачам, связанным с пользовательским интерфейсом. Данный объект может использоваться на сервере 1С:Предприятия и в COM -соединении.
Доступно использование COM -объектов при работе встроенного языка на сервере 1С:Предприятия.
В этой статье я расскажу о многих особенностях взаимодействия между базами 1С по COM технологии, накопленных за годы развития и использования интеграционного коммерческого продукта 2iS:Интеграция компании 2iS.
Термины
ОС – операционная система
COM-клиент – процесс(поток) ОС, запросивший создание COM-объекта
COM-сервер – COM-объект, созданный по запросу клиента
Издание платформы – подстрока до 2-й точки версии платформы (например 8.2, 8.3)
Automation-сервер – он же OLE-сервер, COM-объект V8X.Application для создания приложений 1С
Сборка платформы – полная строка версии платформы (например 8.2.19.130, 8.2.16.352)
COM классы платформы
Виды COM классов
Для каждого издания платформы в системном реестре регистрируются собственные классы для взаимодействия с базами. Символ “X” обозначает место подстановки номера издания платформы (например 0,1,2,3,4).
Привязка COM классов к dll-файлам
Привязка имени COM класса к конкретному dll-файлу осуществляется через ветку HKEY_CLASSES_ROOT системного реестра, которая собирается следующим образом:
- Берется содержимое ветки HKEY_CURRENT_USER\Software\Classes
- Добавляется содержимое ветки HKEY_LOCAL_MACHINE\Software\Classes, но только те ключи, которые отсутствуют в п.1.
Поэтому регистрация класса от имени пользователя имеет приоритет над общей регистрацией.
- 64-b - c:\Program Files\1cv8*\\bin\comcntr.dll
- 32-b - c:\Program Files (x86)\1cv8*\\bin\comcntr.dll
Подключение внешнего соединения
Рассмотрим алгоритм подключения внешнего соединения в деталях
Задержка канала, мс | Длительность создания COM-объекта, мс |
0 | 60 |
30 | 700 |
80 | 2000 |
170 | 4000 |
На графике видно, что длительность создания этого COM-объекта прямо пропорциональна задержке канала и коэффициент пропорциональности составляет примерно 24. Можно предположить, что при создании этого COM-объекта происходит 24 вызова через канал.
- Создание сеанса – 1 сек
- Инициализация сеанса – [0;?] сек
- Подгрузка нужных метаданных (кэш метаданных не используется)
- Инициализация параметров сеанса
- Событие ПриНачалеРаботыСистемы
Подключение Automation-сервера (OLE)
- Создание COM-объекта Automation-сервера (Имя класса - V8X.Application).
- Затраты на создание примерно – 0.5 cек
- Создание сеанса – 1 сек
- Инициализация сеанса – [0;?] сек
- Подгрузка нужных метаданных (кэш метаданных используется, если база есть в списке пользователя)
- Инициализация параметров сеанса
- ПередНачаломРаботыСистемы
- ПриНачалеРаботыСистемы
Затраты на COM-вызовы
Каждый раз, когда мы обращаемся во встроенном языке к свойству или методу COM-объекта (выполняем COM-вызов), происходит ряд дополнительных действий по сравнению с обращением к родному объекту встроенного языка. Если COM-сервер находится в другом локальном процессе, то при этом еще сначала выполняется перенос всех параметров из COM-клиента в COM-сервер и в конце выполняется обратный перенос параметров в COM-клиент. Для такого переноса информация естественно должна быть сериализована на стороне отправителя и затем десериализована на стороне получателя, что в совокупности с некоторыми другими действиями получило название маршалинга и демаршалинга. В нелокальном режиме (DCOM) такой перенос будет еще тратить время на сетевые коммуникации и при первом обращении к новому COM-объекту на передачу его «скелета», и поэтому задержка канала будет играть решающую роль (Подробнее о COM вызовах, DCOM в википедии, Технический обзор DCOM,)
Соотношение затрат на вызов по типам расположения COM-сервера
- Минимальные для внутрипроцессного Com-сервера
- Средние для локального внепроцессного Com-сервера
- От средних до больших для нелокального внепроцессного Cоm-сервера в зависимости от качества канала связи
Минимизация количества COM-вызовов
- Создаем базовую внешнюю обработку с набором общих методов для приема вызовов от COM-клиента на стороне COM-сервера
- Теперь нам не нужно изменять конфигурацию базы COM-сервера, чтобы использовать там сложный функционал.
- В нашем продукте мы назвали ее «Сервисный процессор». На ее передачу и инициализацию уходит около 1 сек
Пример универсальной передачи файла в COM-сервер
Пример вызова обработки
- Создаем встроенную обработку для выполнения такого вызова в COM-клиенте
- Передача агрегатных объектов
- Сериализуем все входные параметры на стороне COM-клиента
- Десериализуем все входные параметры на стороне COM-сервера
- Выполняем действия с параметрами на стороне COM-сервера
- Сериализуем все выходные параметры на стороне COM-сервера
- Десериализуем все выходные параметры на стороне COM-клиента
- Например, информационные вызовы могут выполняться с изменяемой частотой
Обратная связь
При использовании принципа «минимум COM-вызовов» значительную часть времени код будет выполняться в чужом контексте, что серьезно усиливает некоторые неудобства COM-вызовов:
- Нельзя прервать поток COM-Клиента и его соединение с сервером приложений 1С, пока не завершится вызов COM-сервера
- У COM-Клиента нет информации о прогрессе выполнения вызова в COM-сервере
Схема принципа “минимум COM-вызовов”
Такая схема дружественна к большим задержкам каналов связи. Поэтому она во многом похожа на вызов веб-сервиса. А следовательно используя ее для COM взаимодействия, вы значительно снижаете затраты на возможные переходы между COM и веб-сервисом в обоих направлениях.
Отладка
При использовании принципа «минимум COM-вызовов» облегчить отладку выполнения кода на COM-сервере можно, сделав опциональное модальное окно подключения к базе в COM-клиенте. В этом окне должны быть возможности задания одноразовых параметров подключения, выполнения вспомогательных функций и просмотра информации о подключенном сеансе. Ниже в качестве примера показано такое окно из нашего продукта.
Чтобы включить возможность отладки внешних соединений, в подкаталоге conf нужно создать файл comcntrcfg.xml с соответствующим содержимым. В окне подключения можно сделать кнопку/флажок для программного создания такого файла. Однако много версий платформы содержат ошибку, из-за которой предметы отладки внешних соединений не видны в отладчике даже с этим корректно настроенным файлом. На платформе 8.3 эти проблемы вроде бы решены.
Пример файла comcntrcfg.xml:
Также нельзя забывать о необходимости запускать конфигуратор для отладки с той же (до регистра букв) строкой соединения, что и предмет отладки. Поэтому в этом диалоге нужно сделать кнопку для запуска конфигуратора COM-сервера с правильной строкой соединения.
В какой-то мере обойти проблему невидимости предмета отладки внешнего соединения и ряд других неудобств можно путем однократного выполнения кода на толстом клиенте с заменой режима «Внешнее соединение» на «Automation-сервер» (приложение), т.е. используя COM класс V8X.Application и включенную видимость. Поэтому в окне подключения нужны параметры для выбора режима подключения.
После создания подключения на стороне COM-клиента обычно требуется подключение отладчика базы COM-сервера и установка там точки останова в нужном месте. Поэтому в окне подключения нужно расположить кнопку подключения отладчика/конфигуратора COM-сервера. Если COM-сервер запущен в режиме видимого приложения, то для подключения отладчика можно воспользоваться асинхронным вызовом исключения в нем. Из диалога с ошибкой в приложении COM-сервера через кнопку «Конфигуратор» можно будет открыть конфигуратор и в большинстве случаев сразу подключить отладчик. Если подключение отладчика таким способом недоступно, то оператору поможет отображение информации о сеансе (его номера) в базе COM-сервера. Также нужна кнопка открытия в открытом отладчике файла внешней обработки, которая будет выполняться в нем.
Управление COM+ приложениями 1С
Далее можно изменить тип активации (внутрипроцессный/внепроцессный) на закладке Активация/Activation.
В нашем продукте имеется инструмент «Управление COM классами 1С» для просмотра/регистрации/изменения всех COM классов и COM+ приложений 1С на указанном компьютере:
Также управлять COM классами 1С можно через инструмент “Управление COM классами 1С” из подсистемы Инструменты разработчика
Настройка DCOM-сервера
Для Windows 2008 Server нужно добавить роль «Сервер приложений» (Application server). Для этого необходимо открыть панель управления компьютером, щелкнуть правой кнопкой мыши в ветки "Роли" и выбрать пункт меню "Добавить роль".
Появится око в котором необходимо выбрать роль "Сервер приложений"/"Application server". На этапе выбора ролей сервера приложений необходимо указать пункт "Сетевой доступ к COM+"/"COM+ network access". Если это не сделать, то при попытке создания COM-объекта вы будете получать ошибку "Ошибка при вызове конструктора (COMОбъект): The component or application containing the component has been disabled".
Настройка сетевого экрана
DCOM процессам для связи между собой динамически выдаются порты из диапазона (по умолчанию) от 1024 до 65535. Поэтому в сетевых экранах обоих компьютеров (com-клиента и com-сервера) должны быть открыты порты RPC (135, 139, 445, 593) и диапазон 1024-65535 (TCP/UDP).
Можно ограничить этот диапазон портов. Для этого открываем Администрирование – Службы компонентов (или в командной строке набираем dcomcnfg.exe). В открывшейся программе находим ветку «Мой компьютер» и открываем её свойства (см. скриншот).
В свойствах открываем вкладку «Набор протоколов», там, в свою очередь, открываем свойства «TCP/IP с ориентацией на подключения»
В свойствах TCP/IP по умолчанию – пустой список. В него можно добавить конкретный диапазон портов, которые будут использоваться DCOM. Какие именно порты выбрать – решать вам. Главное, чтобы не было других стандартных служб, уже занявших выбранные порты. Мне встречались рекомендации открывать не менее 1000 портов, так как очень многие системные программы используют DCOM. Так на скриншоте ниже я указываю, что DCOM должен работать по диапазону портов 20000-21000.
После этого нужно перезагрузить компьютер (перезапустить отдельно DCOM нельзя, слишком много на него завязано), и DCOM станет работать только по указанным портам.
Проблемы
Com-технология VS веб-сервисы в локальной сети
Недостатки
- Рассмотренные выше сложности с взаимодействием разных сборок платформы 1C, требующие для своего решения сервисный механизм
- Высокие затраты на подключение/инициализацию, поэтому при отсутствии кеширования неэффективно для частых мелких вызовов
- Привязка к семейству операционных систем (платформе) Windows
- Требуется закрытая сеть (LAN, VPN)
Преимущества
- Отсутствие необходимости изменять конфигурацию баз, к которым подключаемся
- Широкая функциональность
- Проще отладка
- Не требуется разворачивать и поддерживать веб-сервер
- Программно доступен интерактивный режим подключенной базы
Захват клиентских лицензий
В большинстве случаев всем клиентским приложениям, частным случаем которого являются Automation-сервер и внешнее соединение, в одном сеансе ОС требуется всего лишь одна на всех лицензия. Однако если клиентскому приложению не удалось получить аппаратную лицензию (от локального HASP или сетевого HASP) и программную лицензию (платформы или базовой конфигурации), то предпринимается попытка получить отдельную лицензию с сервера 1С:Предприятия. Сервер 1С:Предприятия может выдать лицензию только, если в свойствах базы разрешена выдача лицензий сервером 1С:Предприятия. В таком случае каждое клиентское приложение и внешнее соединение может захватывать свою собственную лицензию.
Заключение
Если вы хотите подробнее узнать об описанных особенностях, приобретайте продукт 2iS:Администратор. Несмотря на наличие в конфигурации защищенного модуля, 99% программного кода конфигурации открыто, то есть Вы можете изучить реализацию описанных приемов.
Одним из способов перенести данные из одной конфигурации 1С в другую является программное подключение с помощью COM. Многие компании используют несколько различных баз, между которыми должны быть определенные связи и зависимости. Если необходимо не только перенести данные, но и выполнить определенную обработку данных, то COM соединение будет оптимальным механизмом. Умение анализировать данные из другой базы 1С пригодиться любому разработчику.
Подключаемся через COM к базе 1С
Помните, что на время COM соединения к базе тратиться лицензия – не стоит увлекаться одновременным выполнением нескольких подключений. Особенно это важно для организаций, у которых количество лицензий ограничено. Решиться этот вопрос может при помощи регламентных заданий, выполняющихся во время отсутствия активных подключений пользователей к информационной базе.
Чтобы иметь возможность подключиться к другой базе и запросить нужную информацию вы должны знать следующие данные:
- Какого она типа – файловая или клиент-серверная;
- Где она располагается;
- Под каким именем и паролем в нее можно зайти;
- Какие данные вас интересуют.
Из первых трех пунктов для реализации COM соединения необходимо сформировать строку параметров. В зависимости от типа ИБ она будет отличаться внешним видом. Используя полученную строку, происходит подключение, с помощью которого можно собирать для анализа и обработки данные из другой базы любыми методами.
Функция подключения проста и не должна вызвать вопросов, если все параметры указаны верно. Для ускорения отладки и анализа возможных ошибок лучше заключить подключение в конструкцию «Попытка». Возвращать функция будет значение типа «COM объект», с которым и предстоит работать, получая нужные данные.
Через COM соединение вы можете не только выбирать данные, но и добавлять их в базу, к которой подключаетесь. Помните, что передавать через COM объект мы можем 4 примитивных типа данных. Другие типы придется задавать с помощью встроенных в платформу функций поиска. Учтите, что глобальные функции платформы вызываются тоже через COM-соединение.
Получаем данные из базы 1С
После того как получили нужный объект, необходимо прочитать данные из другой базы. Для этого мы применяем запрос через COM соединение в 1С 8.3 с помощью полученного значения типа «COM объект» из функции. Важно сначала подключиться к базе, а затем уже выполнять запрос. Выполнение происходит через метод NewObject с указанием в качестве параметра типа объекта в строковом виде – «Запрос».
К примеру, чтобы получить информацию о пользователях определенного подразделения, зададим условие в запрос через параметры. Один параметр будет простого типа – строка, а подразделение – ссылкой элемента справочника «Структура предприятия». Результат запроса является таблицей с перечисленными полями того типа, какого они существуют в базе, к которой произошло COM соединение. Если необходимо их преобразовать в другие типы – воспользуйтесь стандартными функциями платформы:
Если нужно передать в базу массив для отбора по нескольким параметрам, например, подразделениям, тоже используется команда NewObject. Аналогично можно передавать список или таблицу значений, заполняя их элементами другой базы через соединение. Для поиска вам доступны все существующие методы объектов и механизмов платформы.
При переносе документов или элементов справочников всегда возникает вопрос о контроле переноса определенного объекта. С помощью COM соединений можно решить подобные проблемы через уникальный идентификатор. Нужно найти объект в подключаемой базе по идентификатору из текущей ИБ с помощью функции «ПолучитьСсылку», используя идентификатор в виде строки. Если такового не нашлось, вы можете создать его с помощью COM соединения.
Также COM соединение имеет право использовать процедуры и функции из общих модулей 1С с включенным свойством «Внешнее соединение». Кроме этого условия, вызываемая функция или процедура должна быть экспортная и не включать интерактивные действия, выполняемые на сервере. В противоположном случае вы увидите ошибку о недопустимости операции.
Рис.1 Внешнее соединение
Возможности внешнего соединения с другой базой в 1С достаточно обширны и могут позволить выполнить множество задач. Важно уметь правильно оценить инструментарий и выбрать оптимальное решение. В большинстве случаев это умение появляется лишь с опытом или при изучении примеров работ опытных специалистов, поэтому при возникновении потребности в таком подключении мы рекомендуем воспользоваться услугами по обслуживанию и техподдержке 1С.
Читайте также: