Замена веб-сервисов/COM/OLE в 1С:Предприятие 8.2

Elisy Business Connector позволяет взаимодействовать с системами 1С:Предприятие через Интернет-технологии. Решение является кроссплатформенным и более эффективным, чем традиционный доступ через веб-сервисы/COM/OLE. Elisy Business Connector – это связующий компонент. Он позволяет связываться с опубликованными информационными базами 1С:Предприятие на Apache/IIS и в облачных сервисах. Для отправки запросов и получения ответов используется http-протокол и форматы JSON/XML. В решение вошли многие разработки команды Elisy Software Design в области интеграции с 1С: .Net Bridge, MdInternals, Decompiler, Proxy.

Замена в 1С:Предприятие 8.2 COM/OLE для доступа из Linux и других операционных систем

Логотип Elisy Business Connector для 1С:Предприятие
Elisy Business Connector позволяет взаимодействовать с системами 1С:Предприятие через Интернет-технологии. Решение является кроссплатформенным и более эффективным, чем традиционный доступ через COM/OLE.
Elisy Business Connector – это связующий компонент. Он позволяет связываться с опубликованными информационными базами 1С:Предприятие на Apache/IIS и в облачных сервисах. Для отправки запросов и получения ответов используется http-протокол и форматы JSON/XML. В решение вошли многие разработки команды Elisy Software Design в области интеграции с 1С: .Net Bridge, MdInternals, Decompiler, Proxy.

 

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

Преимущества Business Connector перед веб-сервисами:

  • Кроссплатформенность, ориентация на платформы разработки. Ориентация на протокол SOAP в веб-сервисах не гарантирует совместимость между платформами.
  • Наличие совместимого API и использование родных объектов для популярных платформ Java/Mono/.Net. Веб-сервисы поддерживают стандарт SOAP, реализация которого может отличаться у популярных платформ разработки.
  • Последовательные обращения в Business Connector проходят в одной сессии. Каждое обращение к веб-операции через веб-сервис создает отдельный сеанс.
  • Кэширование возвращаемых значений модулей с повторным использованием. Для веб-сервисов не предусмотрен параметр «Повторное использование».
  • Большая доступность технологии за счет протокола http. Доступность и настройка веб-сервисов может быть ограничена или затруднена на сервисах SaaS. Настройка веб-сервисов происходит сложнее, чем публикация 1С на веб-сервере.

Преимущества Business Connector перед COM/OLE:

  • Кроссплатформенность и поддержка разных операционных систем. COM/OLE-приложения нацелены только на Windows.
  • Совместимость с 64-разрядными Windows-приложениями. Одна сборка .Net/Mono/Java может работать на 32- и 64-разрядных приложениях. Технология COM/OLE требует различных версий библиотек для 32- и 64-разрыдных приложений.
  • Большая доступность на виртуальных машинах, облачных системах, сервисах SaaS и мобильных устройствах.
  • Нет привязки к аппаратному ключу защиты.

Используемый подход является кроссплатформенным: он не только позволяет обращаться к системам 1С:Предприятие, работающим на Windows и Linux, но также к системам, размещенным на облачных сервисах. Через Java и Mono поддерживаются мобильные и другие операционные системы. Сейчас компонент доступен для Java, .Net framework, Silverlight и Mono. Архитектура Business Connector устроена так, что в будущем позволит перенести компонент на другие популярные фреймворки. Внутри семейства систем 1С:Предприятие компонент доступен на Windows через технологию 1C.Net:Предприятие.
Business Connector является более эффективным, чем COM/OLE-доступ к 1С:Предприятие через тонкий клиент. Преимущества достигаются за счет архитектуры, спланированной для кроссплатформенной и многопоточной работы. На компьютере, с которого осуществляется доступ, можно не устанавливать 1С:Предприятие. Доступ можно организовать из любой операционной системы.
Планируется, что основное применение компонент получит при интеграции Интернет-проектов с конфигурациями 1С:Предприятие, такими как: Бухгалтерия и Управление Торговлей. Это могут быть Интернет-магазины или билинговые системы.
Схема подключения технологии Elisy Business Connector

Идея создания

С выходом ознакомительной версии 1С:Предприятие 8.3 стала ясна четкая направленность компании 1С на кроссплатформенность: на одновременную поддержку Windows и Linux.
[more]
Это значит, что в будущем традиционно используемые в 1С Windows-технологии должны быть пересмотрены в сторону универсальности и общей доступности как из Windows, так и из Linux. В первую очередь это касается удобной COM/OLE-технологии. В системах 1С, начиная с 7.7, COM использовался в основном в 2х случаях:

  • Внешние компоненты по технологии COM. Частным случаем является создание и использование зарегистрированных в реестре COM-серверов сторонних разработчиков, таких как: генераторы штрихкодов, VBScript с регулярными выражениями, сокеты и др. В 1С 8.2 был представлен альтернативный Native API-интерфейс, который доступен из Linux. Но при этом Native API более урезан по функциональности, чем COM-доступ, например, не предусмотрен аналог IDispatch-объектов. Также урезанной альтернативой Linux станет вызов через командную строку приложений и обработка файлов на их выходе.
  • Внешний доступ к приложению 1С:Предприятие через COM/OLE. Урезанная альтернатива – запуск скриптов 1С по расписанию с генерированием файлов-флагов, а также написание и публикация специализированных SOAP веб-сервисов.

Решение для первой проблемы не может впечатлить своей универсальностью и эффективностью с точки зрения разработчика. Так как всеобъемлющее Native API-приложение должно быть скомпилировано для Windows, Linux, (MacOS в 8.3), а также для популярных браузеров: IE, FireFox, Chrome, Opera, Safari. Число поддерживаемых проектов увеличивает вероятность ошибок из-за специфики каждой из поддерживаемых ИТ-архитектур.
Третья проблема не славится стандартными решениями. Задания, генерирующие файлы-флаги, запускаются только по расписанию, а не по требованию. А веб-сервисы требуют вмешательства в конфигурацию, сложны конфигурированием и ограничены SOAP-стандартом. Все это сопровождается известными нерешаемыми проблемами в Интернете при публикации и нераспознаваемыми SOAP-пакетами (случай с Java).
Универсальный подход для решения третьей проблемы, положенный в основу Elisy Business Connector, состоит в следующем. Опубликованная через веб-браузер конфигурация 1С версии 8.2 и выше рассматривается как набор веб-сервисов с доступом по http/https. Используемые форматы JSON и XML обеспечивют универсальное подключение более легкое, чем через SOAP.
Насколько перспективен Linux для 1С:Предприятие в ближайшее время? Скорее всего, доля Linux в локальных сетях коммерческих компаний возрастет не сильно в ближайшие 10-20 лет. Но всю картину меняют облачные сервисы 1С, которые с вероятностью 99% будут строиться не на основе Windows Azure. Это значит, что значительная часть типовых конфигураций будет размещена на Linux с экономией на поддержке и сисадминах. Какую конкретно долю займут облачные сервисы сказать трудно.

Простые примеры

Простые примеры демонстрируют возможности версии 1.0, которая доступна для Java, Mono, Net framework, Silverlight. Это первая версия, предназначенная для ознакомления сообщества с технологией. На основе полученных отзывов и замечаний будет планироваться расширение функциональности конечного продукта и расширение или сокращение поддерживаемых платформ.
Доступная функциональность:

  • Подключение к информационной базе и отключение;
  • Получение информации о подключении;
  • Вызов удаленных серверных методов без параметров
  • Распознавание простейшего типа: строка;
  • Поддержка Java 1.6 SE, .Net framework 4, Silverlight 4, Mono 2.8

Особенности программирования для Java:

  • Названия методов для Java начинаются с прописной буквы. Например, Open, Close и GetUserList следует писать как open, close и getUserList.

Особенности программирования для Silverlight:

  • 1. Политика безопасности запрещает в Сильверлайте междоменные обращения. Поэтому необходимо создать файл clientaccesspolicy.xml или crossdomain.xml в корневом каталоге домена, к которому выполняется обращение. Соответственно, нельзя обращаться к приложениям с демо-сервера 1С так как таких файлов там нет.
  • 2. Приведенный выше код нужно запускать в отдельном потоке, так как Сильверлайт очень трепетно относится к основному GUI-потоку и асинхронные вызовы, задействующие основной поток дают некорректные результаты (Например, HttpWebResponse.EndGetResponse(), запущенный в основном потоке возвращает null).

Пример возвращает строку, полученную при запуске серверной функции ПолучитьТекстЗапросаДокументыРасчетовСПоставщиками модуля ВзаиморасчетыСервер:

  1. string connectionString = «ws=»http://demo-ma.1c.ru/trade»;Usr=»АфанасьевВМ (руководитель отдела оптовых продаж)»;Pwd=»»;L=»ru_RU»»;
  2. Connection connection = new Connection(connectionString);
  3. connection.Open();
  4. connection.Login();
  5. GlobalContext gc = new GlobalContext(connection);
  6. string serverValue = gc.GetServerModule(«ВзаиморасчетыСервер»).Invoke(«ПолучитьТекстЗапросаДокументыРасчетовСПоставщиками», null).ToString();
  7. connection.Close();

Данный пример получает в массив users всех пользователей информационной базы из списка при запуске 1С:

  1. string connectionString = «ws=»http://demo-ma.1c.ru/trade»;Usr=»АфанасьевВМ (руководитель отдела оптовых продаж)»;Pwd=»»;L=»ru_RU»»;
  2. Connection connection = new Connection(connectionString);
  3. connection.Open();
  4. string[] users = connection.GetUserList();

Расширенные примеры

Расширенные примеры будут доступны в обновлении 1.1, над которым начата работа. В первую очередь будет выполнена реализация для .Net framework и Mono, которые стали лидерами по числу скачанных библиотек.
Запланировано в версии 1.1:

  • Распознавание простейших типов: строка, число, дата, булево, неопределено
  • Распознавание составных типов: структура, массив
  • Распознавание ссылочных типов: справочник
  • Состояние соединения: открыто, разорвано, закрыто, поломано

Комплексный пример для инициализации структуры с простейшими типами и вызов серверной процедуры Invoke в серверном модуле ElisyBusinessConnector, возвращающий эту же структуру. Считается, что подключение Сonnection уже создано (см. предыдущие примеры).

  1. StructureType s = new StructureType(GlobalContext);
  2. s[«null»] = new NullType();
  3. s[«undefined»] = new UndefinedType();
  4. s[«string»] = new StringType() { Value = «String1» };
  5. s[«number»] = new NumberType() { Value = 12345.678 };
  6. s[«date»] = new DateType() { Value = DateTime.Now };
  7. s[«boolean»] = new BooleanType() { Value = true };
  8. GlobalContext = new GlobalContext(Connection);
  9. var result = GlobalContext.GetServerModule(«ElisyBusinessConnector»).Invoke(«Invoke», new object[] { «result = parameters;», s }) as StructureType;

Пример выполняет запрос и возвращает предопределенный элемент из справочника Организации. Используется процедура Query в серверном модуле ElisyBusinessConnector:

  1. StructureType parameters = new StructureType(GlobalContext);
  2. IBaseType ref = GlobalContext.PredefinedValue(«Справочник.Организации. УправленческаяОрганизация»);
  3. parameters[«Ссылка»] = ref;
  4. var record = GlobalContext.GetServerModule(«ElisyBusinessConnector»).Invoke(«Query», new object[] {
  5.     @»ВЫБРАТЬ Справочник.Ссылка КАК Ref, Справочник.Наименование КАК Name
  6.     ИЗ Справочник.Организации КАК Справочник
  7.     ГДЕ Справочник.Ссылка = &Ссылка»,
  8.     parameters
  9. }).OfType().FirstOrDefault();

Многопоточность

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

//
//

15 Comments

  1. alexqc

    Чем это лучше встроенного в 1С механизма веб-сервисов?

    Reply
  2. Elisy

    (1) alexqc,

    Чем это лучше встроенного в 1С механизма веб-сервисов?

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

    На стороне Java и C# работа ведется родными объектами, понятными в 1С типами, например, ссылки, хранилище значения. Нет ограничений в типах входных параметров и выходных значений. Это значит, что, добавив в серверный модуль метод с командой ВЫПОЛНИТЬ, можно на клиенте выполнять любые серверные методы, не трогая каждый раз конфигурацию. А в перспективе выполнение клиентского кода 1С перенести на C# или Java-клиент.

    Reply
  3. DimaP

    КРУТЬ! ))

    Какие на текущий момент подводные камни?

    Reply
  4. Elisy

    (3) DimaP,

    Какие на текущий момент подводные камни?

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

    2. При отладке, если не выполняется close()-метод (например, после исключения) может наступить момент, когда все лицензии будут розданы 1С. Но в реальном отлаженном приложении этой проблемы нет.

    3. До конца непонятна ниша применения и необходимость в поддерживаемых платформ. Например, изначально запланированная Silverlight-платформа, скорее всего не будет востребована и от ее поддержки будем отказываться. Но, возможно, стоит подумать о поддержке PHP.

    4. Платность разработки. Разработка запланирована как платная, что отпугнет некоторых пользователей.

    Reply
  5. EmpireSer

    (4) Класс!

    Про Silverlight — согласен. Даже создатели Моно от его поддержки отказались.

    За Java — рад. По моему мнению — это верное направление для интеграции с Java EE. Сами осваиваем Oracle Weblogic и некоторым клиентам может быть интересен такой механизм, т.к. он в реализации удобнее, чем заморочки с web сервисами. А при правильной реализации и с безопасностью будет всё хорошо (Только не это (2) ). Может Вам потом и свои EAR модули с EJB контейнерами создать.

    А вот рынок PHP, как мне кажется, Вам нужно предварительно как то оценить. У меня сложилось впечатление, что PHP и ASP сайтам за глаза хватает возможности впихивать управляемые формы в свои страницы.

    P.S. Хоть парочку (желательно десяточек) $m подкинули бы, раз я, своими комментариями, Вас подтолкнул к этой идеи :)))))

    Reply
  6. Elisy

    (5) EmpireSer,

    P.S. Хоть парочку (желательно десяточек) $m подкинули бы, раз я, своими комментариями, Вас подтолкнул к этой идеи :)))))

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

    Всем нашим пользователям мы не сможем помочь $m, но вам выслали )))).

    Reply
  7. Elisy

    Выложена библиотека Business Connector 1.1 для Java 1.6

    Reply
  8. alexlion12

    1. На мой взгляд если говорить о веб-сервисах, то сайтов на php настолько большой процент, что это обязательная составляющая веб, и решений под веб тоже.

    2. Вопрос следующий: в рекомендациях по настройке кластера 1с рекомендуется выделять под каждый процесс 1-1.5 гига озу. Веб-сервисы в несколько потоков сожрут оперативку мигом, и все повиснет. Ваше решение тоже потребует много процессов на 1С ? Что с оперативкой в 1С при этом происходит по факту?

    3. Вопрос лицензий 1С. WS при подключении все равно ищет свободную лицензию и использует ее и учетку. Много потоков = много лицензий?

    Reply
  9. alexlion12

    (7) для php будут библиотеки?

    Особенно интересует подключение по REST с передачей в JSON.

    Кстати, как авторизация на стороне сервера решается?

    P.S. Пик Короны на аве уж больно красив, снова туда захотелось, хотя бы на коронские стоянки. Фото с хижины Рацека сделано?

    Reply
  10. Elisy

    (8) alexlion12,

    2. Вопрос следующий: в рекомендациях по настройке кластера 1с рекомендуется выделять под каждый процесс 1-1.5 гига озу. Веб-сервисы в несколько потоков сожрут оперативку мигом, и все повиснет. Ваше решение тоже потребует много процессов на 1С ? Что с оперативкой в 1С при этом происходит по факту?

    Метод ведет себя точно также, как опубликованная через веб информационная база при подключении к ней клиента через веб-браузер. В данном случае веб-браузер — это Business Connector.

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

    3. Вопрос лицензий 1С. WS при подключении все равно ищет свободную лицензию и использует ее и учетку. Много потоков = много лицензий?

    В Business Connector одно подключение требует одну лицензию на стороне сервера.

    Reply
  11. Elisy

    (9) alexlion12,

    Elisy, для php будут библиотеки?

    Особенно интересует подключение по REST с передачей в JSON.

    Кстати, как авторизация на стороне сервера решается?

    Для PHP запланировано после .Net и Java. Но точного срока нет.

    Авторизацией на стороне сервера занимается сама 1С своими штатными средствами. Business Connector эмулирует веб-трафик между веб-браузером и сервером 1С.

    P.S. Пик Короны на аве уж больно красив, снова туда захотелось, хотя бы на коронские стоянки. Фото с хижины Рацека сделано?

    ))))) Фото сделано с Адыгине — выше кладбища Альпинистов.

    Reply
  12. alexlion12

    (11) с Адегине до короны далековато, значит фото с зумом )

    Reply
  13. quick

    все это конечно здорово, но ставить .NET на невообразимом зоопарке клиентов сразу ставят крест на идее использования.

    Reply
  14. Elisy

    (13)

    У каждого подхода есть свои достоинства и недостатки. Java-клиент доступен для всех ОС.

    .Net доступен на всех ОС под управлением Windows, Mono-вариант для Linux.

    И есть области, где Business Connector незаменим. Например, облака. Когда нет возможности публиковать веб-сервисы. Возможно, 1С сможет обойти этот момент в будущем через REST.

    Reply
  15. acanta

    В любом случае думать придется.

    Reply

Leave a Comment

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