Содержание
В статье делимся опытом настройки интеграции между 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.
Остались вопросы?
Проконсультируйтесь с нашими специалистами