1. Главная страница » Компьютеры

Automation сервер 1с предприятие 8

Автор: | 16.12.2019
Программирование системы 25.05.2016 13:57 7731

Automation сервер применяется для управления 1С:Предприятием и выполнения интерактивных действий в нём из внешнего приложения.
Для создания данного вида соединения используются COM-объекты V82.Application(для 1С:Предприятия версии 8.2) или V83.Application(для 1С:Предприятия версии 8.3). При подключении через Automation сервер запускается приложение в отдельном процессе. С помощью одного экземпляра объекта можно установить неограниченное количество соединений. Automation сервер 1С:Предприятия предоставляет доступ ко всем свойствам и методам своего глобального контекста, а также к пользовательскому интерфейсу.

Процедура УстановитьСоединениеAutomation()

Процедура устанавливает соединеие с 1С:Предприятием. В зависимости от типа подключаемой информационной базы(файловый, серверный) строка подключения задаётся в разном формате.

Файловый вариант

  • File — имя каталога, в котором размещается информационная база
  • Usr — имя пользователя информационной базы
  • Pwd — пароль пользователя информационной базы

Серверный вариант

  • Srvr — имя компьютера или его ip-адрес
  • Ref — имя базы в кластере серверов
  • Usr — имя пользователя информационной базы
  • Pwd — пароль пользователя информационной базы

Процедура ВыполнитьДействия()

Процедура ЗакрытьСоединениеAutomation()

COM-соединение, является менее ресурсозатратным чем подключение через Automation сервер. Но COM-соединение не позволяет программно выполнять интерактивные действия (открывать окна и т.д).

Для того чтобы добавить сообщение, необходимо Войти или Зарегистрироваться

Вопросы по разным конфигурациям 1С и проектному менеджменту

Читайте также:  Far cry кровавый дракон

суббота, 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/

  1. Новый Base(СтрокаИнициализации)
  2. Новый OLEОбъект
  3. Новый COMОбъект
  4. Создание подобного объекта производится другими средствами

Правильный вариант синтаксиса — третий

  1. Встроенным в платформу редактором табличных документов
  2. Встроенным в платформу редактором OLE-объектов
  3. Приложением, связанным с OLE-объектом

Правильный ответ третий, см. определение OLE-объекта.

  1. предоставляет доступ ко всем свойствам и методам своего глобального контекста
  2. предоставляет доступ к дополнительным свойствам и методам для выполнения действий, специфичных для работы в режиме Automation
  3. позволяет управлять приложением системы "1С:Предприятие 8" из других приложений, а также выполнять действия, аналогичные интерактивным
  4. верны все указанные ответы

Правильный ответ четвертый — Automation дает практически полный доступ к приложению.

  1. ДокОбъект=Док.СоздатьДокумент()
  2. Форма.Открыть()
  3. Запрос=Новый Запрос
  4. Нет правильного ответа

Правильный ответ второй.

  1. в модуле приложения
  2. в модуле внешнего соединения
  3. в общем модуле
  4. в OLE модуле

Правильный ответ первый, Automation видит модуль приложения.

  1. в модуле приложения
  2. в модуле внешнего соединения
  3. в общем модуле
  4. в СОМ модуле

Правильный ответ второй, для 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-объекта, мс

    Пример
    КомСоединитель = Новый COMОбъект(“V83.ComConnector”, ИмяКомпьютера);
    ВнешнееСоединение = КомСоединитель.Connect(СтрокаСоединения);

Выполнение метода Connect (создание внешнего соединения)

Создание сеанса – 1 сек

Инициализация сеанса – [0;?] сек

ПередНачаломРаботыСистемы (только для Automation-сервера)

Инициализация параметров сеанса

Подгрузка нужных метаданных

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

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

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

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

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

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

  1. Создаем базовую внешнюю обработку с набором общих методов для приема вызовов от 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 классами

  1. Внешнее соединение (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".

Проблемы

  1. Высокие затраты на подключение/инициализацию

Удержание 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 веб-сервисы в локальной сети

Недостатки

  1. Рассмотренные выше сложности с взаимодействием разных сборок платформы 1C, требующие для своего решения сервисный механизм

Высокие затраты на подключение/инициализацию, поэтому при отсутствии кеширования неэффективно для частых мелких вызовов

Привязка к семейству операционных систем (платформе) Windows

Преимущества

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

Не требуется разворачивать и поддерживать веб-сервер

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *