Предложенный доступ организован с использованием двух технологий: Elisy Business Connector и 1C.Net:Предприятие. Он позволяет получить доступ к любой базе 1С:Предприятие 8.2 и выше, опубликованной через веб-сервер Apache или IIS.
Пример, предложенный к статье, позволяет получить информацию из демонстрационной базы 1С, размещенной на сервере компании 1С: http://demo-ma.1c.ru/trade
Elisy Business Connector
Business Connector – это технология доступа к базам 1С, опубликованных через веб-сервера. Технология обладает несколькими преимуществами относительно COM- и WS-доступа.
Преимущества 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 и мобильных устройствах.
- Нет привязки к аппаратному ключу защиты.
1C.Net:Предприятие
Описанная выше технология доступа к базам 1С Business Connector была создана для доступа в первую очередь к базе 1С из программных платформ .Net Framework и Java. Но внешний компонент .Net Bridge позволяет использовать технологию для доступа из скриптов 1С.
1C.Net:Предприятие обеспечивает бесшовную и гармоничную интеграцию с .Net Framework посредством взаимодействия с Common Language Runtime (CLR). Облегчает обращение к .Net из 1С-скриптов и отладку 1С-конфигураций.
Последняя версия .Net Bridge 4.0.4 работает с .Net Framework 4. Необходимо, чтобы он был установлен на компьютере перед началом использования.
Описание примера
Пример выполнен как управляемая форма и выводит сообщения в окно служебных сообщений через команды Сообщить.
Инициализировать .Net Bridge. Подключить его как внешний компонент.
ПодключитьВнешнююКомпоненту("Elisy.NetBridge4");
AddIn = New("AddIn.ElisyNetBridge4");
net = AddIn.GetNet();
Сборка .Net Elisy.BusinessConnector.Net.dll находится в макете к внешней обработке с примером. Ее нужно извлечь и подключить.
Макет = ПолучитьМакет("Elisy_BusinessConnector_Net_dll");
ДвоичныеДанные = Base64String(Макет);
assemblyBytes = net.CallStatic("System.Convert", "FromBase64String", ДвоичныеДанные);
net.CallStatic("System.Reflection.Assembly", "Load", assemblyBytes);
Код по инициализации Business Connector. После инициализации потребуется вход через Login.
connection = net.New("Elisy.BusinessConnector.Connection", "ws=""http://demo-ma.1c.ru/trade"";Usr=""БахшиевПИ (руководитель)"";Pwd="""";L=""ru_RU""");
connection.Open();
На данном этапе можно получить список всех пользователей и зайти, используя имя 1го пользователя в списке и пустой пароль:
userList = connection.GetUserList();
connection.Login(userList.GetValue(0), "");
Инициализация глобального контекста для соединения:
gc = net.New("Elisy.BusinessConnector.VM.GlobalContext", connection);
Пример вызовов серверных методов-экспортных функций общих модулей без параметров:
Результат = gc.GetServerModule("ДенежныеСредстваСервер").Invoke("ПолучитьСписокКомандЗаполненияНазначенияПлатежа", Неопределено);
Результат = gc.GetServerModule("ВнешниеПользователи").Invoke("ИспользоватьВнешнихПользователей", Неопределено);
Сообщить("Использовать Внешних Пользователей: " + Результат.Value);
Результат = gc.GetServerModule("ВнешниеПользователи").Invoke("ТекущийВнешнийПользователь", Неопределено);
Результат = gc.GetServerModule("ВзаиморасчетыСервер").Invoke("ПолучитьТекстЗапросаДокументыРасчетовСПоставщиками", Неопределено);
Сообщить("Текст Запроса Документы Расчетов С Поставщиками: " + Результат.Value);
Пример вызова серверного метода с параметрами:
список = net.New("System.Collections.Generic.List", net.T("System.Object"));
список.Add("40702810800110033044");
Результат = gc.GetServerModule("ДенежныеСредстваСервер").Invoke("ПолучитьВалютуПоНомеруСчета", список.ToArray());
Можно получить также предопределенное значение:
СправочникОрганизации = gc.PredefinedValue("Справочник.Организации");
И для справочника Организации получить данные выбора через метод GetChoiceData – аналог ПолучитьДанныеВыбора глобального контекста:
параметрыПоиска = net.New("Elisy.BusinessConnector.Types.StructureType", gc);
отбор = net.New("Elisy.BusinessConnector.Types.StructureType", gc);
параметрыПоиска.Set_Item("Filter", отбор);
организации = gc.GetChoiceData(СправочникОрганизации, параметрыПоиска);
// //