Программирование системы
25.05.2016 13:57
7731Automation сервер применяется для управления 1С:Предприятием и выполнения интерактивных действий в нём из внешнего приложения.
Для создания данного вида соединения используются COM-объекты V82.Application(для 1С:Предприятия версии 8.2) или V83.Application(для 1С:Предприятия версии 8.3). При подключении через Automation сервер запускается приложение в отдельном процессе. С помощью одного экземпляра объекта можно установить неограниченное количество соединений. Automation сервер 1С:Предприятия предоставляет доступ ко всем свойствам и методам своего глобального контекста, а также к пользовательскому интерфейсу.
Содержание
- Процедура УстановитьСоединениеAutomation()
- Процедура ВыполнитьДействия()
- Процедура ЗакрытьСоединениеAutomation()
- суббота, 24 февраля 2018 г.
- Термины
- Подключение внешнего соединения
- Затраты на COM-вызовы
- Соотношение затрат на вызов по типам расположения COM-сервера
- Минимизация количества COM-вызовов
- Обратная связь
- Схема принципа “минимум COM-вызовов”
- Отладка
- Управление COM классами и COM+ приложениями 1С
- Управление COM классами
- Управление COM+ приложениями
- Настройка DCOM-сервера
- Проблемы
- Com-технология VS веб-сервисы в локальной сети
- Недостатки
- Преимущества
Процедура УстановитьСоединениеAutomation()
Процедура устанавливает соединеие с 1С:Предприятием. В зависимости от типа подключаемой информационной базы(файловый, серверный) строка подключения задаётся в разном формате.
Файловый вариант
- File — имя каталога, в котором размещается информационная база
- Usr — имя пользователя информационной базы
- Pwd — пароль пользователя информационной базы
Серверный вариант
- Srvr — имя компьютера или его ip-адрес
- Ref — имя базы в кластере серверов
- Usr — имя пользователя информационной базы
- Pwd — пароль пользователя информационной базы
Процедура ВыполнитьДействия()
Процедура ЗакрытьСоединениеAutomation()
COM-соединение, является менее ресурсозатратным чем подключение через Automation сервер. Но COM-соединение не позволяет программно выполнять интерактивные действия (открывать окна и т.д).
Для того чтобы добавить сообщение, необходимо Войти или Зарегистрироваться
Вопросы по разным конфигурациям 1С и проектному менеджменту
суббота, 24 февраля 2018 г.
OLE Automation
OLE — это механизм интеграции программных продуктов, который дает возможность работать с объектами, созданными в других приложениях. Пример — в документ Word вложена схема Visio. Собственно, разрабатывала OLE технологию компания Microsoft.
OLE объект — это "вложенный" объект.
OLE server — это приложение, создающее такие объекты. Система 1С:Предприятие может выступать в качестве такого приложения. Как правило, эта ее возможность используется, когда нужно из одной базы 1С зайти в другую, и выполнить какие-то действия. Если речь идет об интерактивных действиях, то используем объект V83.Application. Если о программных, то V83.Connector. Application обеспечивает доступ ко всем свойствам и методам глобального контекста, а также к пользовательскому интерфейсу. Этот вариант соединения относительно ресурсоемкий. Connector не дает доступа к пользовательскому интерфейсу, из внешних модулей доступны лишь те, у которых установлено свойство Внешнее соединение. Соединение в данном случае устанавливается намного быстрее, ниже требования к системным ресурсам.
Подробная статья: https://infostart.ru/public/277982/
- Новый Base(СтрокаИнициализации)
- Новый OLEОбъект
- Новый COMОбъект
- Создание подобного объекта производится другими средствами
Правильный вариант синтаксиса — третий
- Встроенным в платформу редактором табличных документов
- Встроенным в платформу редактором OLE-объектов
- Приложением, связанным с OLE-объектом
Правильный ответ третий, см. определение OLE-объекта.
- предоставляет доступ ко всем свойствам и методам своего глобального контекста
- предоставляет доступ к дополнительным свойствам и методам для выполнения действий, специфичных для работы в режиме Automation
- позволяет управлять приложением системы "1С:Предприятие 8" из других приложений, а также выполнять действия, аналогичные интерактивным
- верны все указанные ответы
Правильный ответ четвертый — Automation дает практически полный доступ к приложению.
- ДокОбъект=Док.СоздатьДокумент()
- Форма.Открыть()
- Запрос=Новый Запрос
- Нет правильного ответа
Правильный ответ второй.
- в модуле приложения
- в модуле внешнего соединения
- в общем модуле
- в OLE модуле
Правильный ответ первый, Automation видит модуль приложения.
- в модуле приложения
- в модуле внешнего соединения
- в общем модуле
- в СОМ модуле
Правильный ответ второй, для COM доступны только модули с признаком "Внешнее соединение".
В этой статье я расскажу о многих особенностях взаимодействия между базами 1С по COM технологии, накопленных за годы развития и использования интеграционного коммерческого продукта 2iS:Интеграция нашей компании 2iS.
Термины
COM-клиент – процесс(поток) ОС, запросивший создание COM-объекта
COM-сервер – COM-объект, созданный по запросу клиента
Com-соединитель – COM-объект V8X.ComСonnector для создания внешних соединений с базами 1С
Automation-сервер – он же OLE-сервер, COM-объект V8X.Application для создания приложений 1С
Издание платформы – подстрока до 2-й точки версии платформы (например 8.2, 8.3)
Сборка платформы – полная строка версии платформы (например 8.2.19.130, 8.2.16.352)
Подключение внешнего соединения
- Создание COM-объекта Com-соединитель (Имя класса — V8X.ComConnector). Варианты:
Должен быть зарегистрирован класс V8X.ComConnector той же разрядности, что и COM-клиент
Если издание платформы COM-клиента совпадает с изданием платформы COM-сервера, то также требуется равенство сборки платформы COM-клиента и COM-сервера.
Он регистрируется при установке платформы с опцией «Внешнее соединение». В любой момент его можно зарегистрировать командой «Regsvr32 comcntr.dll» в каталоге исполняемых файлов платформы.
COM-объект создается в памяти COM-клиента
Затраты на создание примерно – 0.01(первое)/0.001(второе) cек
Пример
КомСоединитель = Новый COMОбъект(“V83.ComConnector”);
ВнешнееСоединение = КомСоединитель.Connect(СтрокаСоединения);
Внепроцессное локальное (local)
Должен быть зарегистрирован класс V8X.ComConnector любой разрядности и сборки платформы. Необходимо настроить через dcomcnfg.exe COM+ приложение с активацией «серверное приложение»/«Server apllication». Подробнее рассмотрено далее.
COM-объект создается в памяти служебного хост-процесса (dllhost.exe) на компьютере COM-клиента
Затраты на создание примерно – 0.06(первое)/0.03(второе) сек
Пример
КомСоединитель = Новый COMОбъект(“V83.ComConnector”);
ВнешнееСоединение = КомСоединитель.Connect(СтрокаСоединения);
Внепроцессное нелокальное (DCOM)
На нелокальном компьютере должен быть зарегистрирован класс V8X.ComConnector любой разрядности и сборки платформы. Необходимо настроить на нелокальном компьютере через dcomcnfg.exe COM+ приложение с активацией «Cерверное приложение»/«Server apllication». Подробнее рассмотрено далее.
Необходимо настроить на нелокальном компьютере роль «Сервер приложений»/«Application server» и включить нелокальный доступ COM+, выбрав опцию «Сетевой доступ к COM+»/”COM+ network access”. Подробнее рассмотрено далее.
COM-объект создается в памяти служебного хост-процесса (dllhost.exe) на другом компьютере
Затраты на создание примерно
- Пример
КомСоединитель = Новый COMОбъект(“V83.ComConnector”, ИмяКомпьютера);
ВнешнееСоединение = КомСоединитель.Connect(СтрокаСоединения);
Выполнение метода Connect (создание внешнего соединения)
Создание сеанса – 1 сек
Инициализация сеанса – [0;?] сек
ПередНачаломРаботыСистемы (только для Automation-сервера)
Инициализация параметров сеанса
Подгрузка нужных метаданных
Затраты на COM-вызовы
Соотношение затрат на вызов по типам расположения 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-клиент. Нужно отметить, что есть ошибки платформы (https://partners.v8.1c.ru/forum/t/1382465/m/1382465 ), проявляющиеся при создании ссылок на один общий модуль более чем в одном COM-севере сеанса. Поэтому пока лучше очищать ссылки на общий модуль во всех удерживаемых COM-серверах перед помещением в новый. В обратных вызовах можно передавать:
- информацию о прогрессе выполнения
накопленные сообщения пользователю (получать функцией ПолучитьСообщенияПользователю(Истина))
Схема принципа “минимум COM-вызовов”
Такая схема дружественна к большим задержкам каналов связи. Поэтому она во многом похожа на вызов веб-сервиса. А следовательно используя ее для COM взаимодействия, вы значительно снижаете затраты на возможные переходы между COM и веб-сервисом в обоих направлениях.
Отладка
Чтобы включить возможность отладки внешних соединений, в подкаталоге conf нужно создать файл comcntrcfg.xml с соответствующим содержимым. В окне подключения можно сделать кнопку/флажок для программного создания такого файла. Однако много версий платформы содержат ошибку, из-за которой предметы отладки внешних соединений не видны в отладчике даже с этим корректно настроенным файлом. На платформе 8.3 эти проблемы вроде бы решены.
Пример файла comcntrcfg.xml:
Также нельзя забывать о необходимости запускать конфигуратор для отладки с той же (до регистра букв) строкой соединения, что и предмет отладки. Поэтому в этом диалоге нужно сделать кнопку для запуска конфигуратора COM-сервера с правильной строкой соединения.
В какой-то мере обойти проблему невидимости предмета отладки внешнего соединения и ряд других неудобств можно путем однократного выполнения кода на толстом клиенте с заменой режима «Внешнее соединение» на «Automation-сервер» (приложение), т.е. используя COM класс V8X.Application и включенную видимость. Поэтому в окне подключения нужны параметры для выбора режима подключения.
После создания подключения на стороне COM-клиента обычно требуется подключение отладчика базы COM-сервера и установка там точки останова в нужном месте. Поэтому в окне подключения нужно расположить кнопку подключения отладчика/конфигуратора COM-сервера. Если COM-сервер запущен в режиме видимого приложения, то для подключения отладчика можно воспользоваться асинхронным вызовом исключения в нем. Из диалога с ошибкой в приложении COM-сервера через кнопку «Конфигуратор» можно будет открыть конфигуратор и в большинстве случаев сразу подключить отладчик. Если подключение отладчика таким способом недоступно, то оператору поможет отображение информации о сеансе (его номера) в базе COM-сервера. Также нужна кнопка открытия в открытом отладчике файла внешней обработки, которая будет выполняться в нем.
Управление COM классами и COM+ приложениями 1С
Управление COM классами
- Внешнее соединение (V8X.ComConnector)
Регистрация: Regsvr32 comcntr.dll
Отмена регистрации: Regsvr32 comcntr.dll /u
Регистрация — 1cv8.exe /regserver
Отмена регистрации — 1cv8.exe /unregserver
Управление COM+ приложениями
Далее можно изменить тип активации (внутрипроцессный/внепроцессный) на закладке Активация/Activation.
В нашем продукте имеется инструмент «Управление COM классами 1С» для просмотра/регистрации/изменения всех COM классов и COM+ приложений 1С на указанном компьютере:
Настройка DCOM-сервера
Появится око в котором необходимо выбрать роль "Сервер приложений"/"Application server". На этапе выбора ролей сервера приложений необходимо указать пункт "Сетевой доступ к COM+"/"COM+ network access". Если это не сделать, то при попытке создания COM-объекта вы будете получать ошибку "Ошибка при вызове конструктора (COMОбъект): The component or application containing the component has been disabled".
Проблемы
- Высокие затраты на подключение/инициализацию
Удержание com-серверов – эффективное средство борьбы
Временное хранилище. Производитель не рекомендует, но деваться больше некуда. http://infostart.ru/public/331683/
Повторное использование возвращаемых значений. Очищаются каждые 20 мин
Разные сборки платформы клиента и сервера при одинаковом издании платформы
Для обхода для каждой отличной от COM-клиента сборки платформы назначаем и настраиваем DCOM сервер
Отсутствие информации о типах вложенных в COM-объекты объектов 1С (вместо типа объекта 1С везде получаем тип «COMОбъект») и отсутствие контекстной подсказки по ним
Для обхода применяем принцип «минимум COM-вызовов»
При передаче исключения из COM-сервера оно принимает краткую форму из-за ошибки платформы
Для обхода оборачиваем каждый вызов на стороне COM-сервера в попытку и в исключении перевызываем исключение с полным описанием ошибки
При создании COM-объекта ошибка “Версия компоненты ‘comcntr’ (8.X.XX.XXX) отличается от версии корневого модуля ‘core82’ (8.X.YY.YYY)”
Для обхода создаем COM+ приложение с внепроцессной активацией. Тогда COM-сервер будет создаваться в отдельном процессе и совпадения версий этих модулей не потребуется.
Медленные каналы (большие задержки)
Каждой подсети за отдельным медленным каналом назначаем и настраиваем свой DCOM сервер и при обращении к базам за этим каналом COM-серверы создаем на этом компьютере, минимизируя количество и объемы вызовов Com-клиент Com-сервер
Кешируем (повторно используем) COM-серверы
Невозможно разорвать соединение рабочего процесса, в котором ожидается завершение вызова COM-сервера
Для обхода можно использовать создание COM-объектов в выделенных хост-процессах, настроив соответствующим образом COM+ приложение, и регистрировать идентификаторы этих процессов в привязке к сеансам COM-клиентов. Тогда при необходимости завершить серверное соединение такого сеанса можно сначала убить процесс COM-сервера, а потом и сам сеанс.
При обращении к COM-объекту может возникать ошибка «Неизвестная ошибка». Возможные причины:
Com-сервер перестал существовать. Возможные причины:
Потеря связи с нелокальным COM-сервером
Совпадение имен свойств и методов без параметров объекта создает неоднозначность обращения к ним через COM
Например, если у справочника есть реквизит ПолноеНаименование, то из-за наличия метода ПолноеНаименование() обращение к реквизиту ПолноеНаименование через COM может привести к вызову метода ПолноеНаименование()
Для обхода используем принцип “минимум COM-вызовов”
Com-технология VS веб-сервисы в локальной сети
Недостатки
- Рассмотренные выше сложности с взаимодействием разных сборок платформы 1C, требующие для своего решения сервисный механизм
Высокие затраты на подключение/инициализацию, поэтому при отсутствии кеширования неэффективно для частых мелких вызовов
Привязка к семейству операционных систем (платформе) Windows
Преимущества
- Отсутствие необходимости изменять конфигурацию баз, к которым подключаемся
Не требуется разворачивать и поддерживать веб-сервер






