Аналог COM/OLE-доступа к 1С: Предприятие 8.2 для Linux и других ОС

в 7:02, , рубрики: .net, 1c 8.2, 1c интеграция, 1c хостинг, , java, Mono, Mono и Moonlight, net framework, silverlight, метки: , , , , , , ,

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С: Предприятие, работающим на Windows и Linux, но также к системам, размещенным на облачных сервисах. Через Java и Mono поддерживаются мобильные и другие операционные системы. Сейчас компонент доступен для Java, .Net framework, Silverlight и Mono. Архитектура Business Connector устроена так, что в будущем позволит перенести компонент на другие популярные фреймворки. Внутри семейства систем 1С: Предприятие компонент доступен на Windows через технологию 1C.Net: Предприятие.

Business Connector является более эффективным, чем COM/OLE-доступ к 1С: Предприятие через тонкий клиент. Преимущества достигаются за счет архитектуры, спланированной для кроссплатформенной и многопоточной работы. На компьютере, с которого осуществляется доступ, можно не устанавливать 1С: Предприятие. Доступ можно организовать из любой операционной системы.

Планируется, что основное применение компонент получит при интеграции Интернет-проектов с конфигурациями 1С: Предприятие, такими как: Бухгалтерия и Управление Торговлей. Это могут быть Интернет-магазины или билинговые системы.

image

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

С выходом ознакомительной версии 1С: Предприятие 8.3 стала ясна четкая направленность компании 1С на кроссплатформенность: на одновременную поддержку Windows и Linux.

Это значит, что в будущем традиционно используемые в 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-стандартом.

Более универсальный подход для решения второй проблемы, положенный в основу 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, .Net framework 4, Silverlight 4, Mono 2.8

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

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

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

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

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

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

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

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

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

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

Запланировано в версии 1.1:

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

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

StructureType s = new StructureType(GlobalContext);
s["null"] = new NullType();
s["undefined"] = new UndefinedType();
s["string"] = new StringType() { Value = "String1" };
s["number"] = new NumberType() { Value = 12345.678 };
s["date"] = new DateType() { Value = DateTime.Now };
s["boolean"] = new BooleanType() { Value = true };
GlobalContext = new GlobalContext(Connection);

var result = GlobalContext.GetServerModule("ElisyBusinessConnector").Invoke("Invoke", new object[] { "result = parameters;", s }) as StructureType;

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

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

image

Автор: Elisy

Поделиться

* - обязательные к заполнению поля