Содержание
В статье делимся опытом настройки интеграции между 1С и SAP с применением технологии RFC
Мое знакомство с SAP началось с вопроса руководителя о том, что я знаю о RFC? Ответ был краток: «Ничего, но если надо для нового проекта, то освою данную технологию». Жизнь показала, что изучать RFC пришлось очень интенсивно: сегодня у самолета еще не было крыльев, а завтра он должен был выполнить свой первый полет.
Почему среди возможных технологий интеграции между 1С и SAP выбор пал на RFC? Ответ прозаичен – пожелания заказчика, на тот момент у него был накоплен опыт интеграции со сторонними приложениями и сервисами именно через эту технологию. Если кратко, то RFC («Remote Function Call») это механизм, позволяющий бизнес-приложениям обмениваться информацией в заранее определенных форматах, путем вызова различных функций SAP.
К преимуществам технологии RFC относятся:
- быстрое подключение;
- возможность менять параметры запроса, запрашивая данные частями;
- отсутствие промежуточных звеньев в обмене данными, что значительно повысило надежность.
К субъективным недостаткам RFC можно отнести довольно скудную информацию в рунете, по большей части все ссылаются на одну статью на портале «Инфостарт», а вот англоязычный сегмент всемирной сети изобилует подробными гайдами.
Алгоритм интеграции
Итак, после нескольких дней изучения материала и ряда попыток найти оптимальный вариант использования интерфейса RFC пришел к следующему алгоритму интеграции:
- Устанавливаем компоненту:
Необходимая компонента для интеграции была установлена с помощью пакета «SAP GUI for Windows» версия 7.50.
- На стороне 1С пишем незамысловатый код:
Попытка Sap = Новый COMОбъект("SAP.Functions"); Sap.Connection.User = Логин; Sap.Connection.Password = Пароль; Sap.Connection.ApplicationServer = Сервер; Sap.Connection.Systemnumber = НомерСистемы; Sap.Connection.Language = ЯзыкПодключения; Sap.Connection.SystemId = ИдСистемы; Sap.Connection.Client = Клиент; Sap.Connection.RfcWithDialog = 0; SapCon = Sap.Connection.Logon(0,True); Если SapCon Тогда Возврат Sap; Иначе КонецЕсли; Исключение КонецПопытки;
И да, вы угадали – у нас используется COM-соединение.
Если два вышеуказанных действия вы выполнили правильно и не возникло проблем с настройками сети, то SAP дружелюбно ответит вам, что соединение установлено и бизнес-приложение готово принимать или получать данные.
Вот пример получения данных со стороны SAP:
Sap = ПодключениеКSAP(); Попытка rfc = Sap.Add("Z_1C_GET_"); // указываем имя RFC-функции rfc.Exports("IV_").value = НашеЗначение; // Отбор по нашему значению rfc.Exports("IV_LANG").value = "R"; // Отбор по языку Если rfc.Call() Тогда // вызываем RFC-функцию res = rfc.Tables("ET_COST_"); // получаем данные из нужной таблицы КонецЕсли; Исключение Sap.Connection.LogOff(); КонецПопытки; Sap.Connection.LogOff();
Отправка данных в SAP, на входе имеем таблицу значений (ТаблицаEMPLOYEE) для выгрузки:
Попытка rfc = ПодключениеКSAP().Add(«ИмяRFCМодуля»); emp = rfc.Tables("IT_"); // указываем с какой таблицей будем работать Для Каждого ДанныеСотрудника Из ТаблицаEMPLOYEE Цикл newstr = emp.Rows.add(); data = newstr.Data.Выгрузить(); data[0][0] = ДанныеСотрудника.INFOTYPE; data[1][0] = ДанныеСотрудника.PERNR; data[2][0] = ДанныеСотрудника.BEGDA; data[3][0] = ДанныеСотрудника.ENDDA; newstr.Data = Новый ComSafeArray(data,"VT_VARIANT"); КонецЦикла; Если rfc.Call() Тогда // Отправляем данные res = rfc.Tables("ET_MESSAGES"); // Получаем информацию о КонецЕсли; // результате обмена
Пожалуй, это вся базовая информация, которая необходима для работы с технологией RFC.
Остались вопросы?
Проконсультируйтесь с нашими специалистами