Обращение из SAP к 1С.
К этой группе следует отнести непосредственное подключение из SAP к базе 1С, расположенной на SQL сервере. Я нашел единственно простое решение - непосредственно на сервере SAP работать с наполнением базы 1С минуя всяких посредников (включая платформу 1С). Вот пример загрузки справочника "Банки" из 1С в таблицу базы данных SAP:
REPORT YTURE2.
"открываем соединение
EXEC SQL.
CONNECT TO 'NSI' AS 'V'
ENDEXEC.
IF sy-subrc = 0.
"ставим текущее соединение
EXEC SQL.
SET CONNECTION 'V'
ENDEXEC.
TABLES YBANK.
"объявляем запись, которая будет принимать значения из курсора
data: line like YBANK,
bank like YBANK.
"открываем курсор
EXEC SQL.
OPEN dbcur FOR SELECT
t.ссылка,
t.версия,
t.ПометкаУдаления,
t.код,
t.Наименование,
t.ГоловнойБанк,
t.КоррСчет
FROM RБанкиID as t
ENDEXEC.
DO.
"извлекаем из курсора очередной набор
EXEC SQL.
FETCH NEXT dbcur INTO :line
ENDEXEC.
"убеждаемся, что получили из курсора данные
IF sy-subrc <> 0.
EXIT.
ELSE.
"найдем банк
select SINGLE * into bank from YBANK where ref = line-ref.
if sy-SUBRC = 0 and bank-VER = line-ver.
CONTINUE. "пропускаем, т.к. не изменилось
elseif sy-SUBRC = 0.
UPDATE YBANK from LINE. "обновляем
else.
INSERT YBANK from LINE. "добавляем
endif.
"просто печатаем полученные данные
select SINGLE * into bank from YBANK where ref = line-ref.
if sy-SUBRC = 0.
WRITE: / BANK-ref, BANK-ver, BANK-mark, BANK-code, BANK-DESCR, BANK-MAJOR_BANK, BANK-COR_ACCOUNT.
ENDIF.
ENDIF.
ENDDO.
"закрываем курсор
EXEC SQL.
CLOSE dbcur
ENDEXEC.
"закрываем соединение
EXEC SQL.
DISCONNECT 'V'
ENDEXEC.
ENDIF.
В комментариях я отметил основные моменты (кто-то приятно ужаснется, впервые увидев этот процедурный язык). Не печальтесь, если что-то останется непонятно сразу. Здесь просто имитация работы с курсором sql. Код отдаленно напомнит Вам все, с чем Вы когда-то сталкивались и t-sql, и foxpro, и дельфи. Это просто букет воспоминаний.
Чтобы на SQL сервере было возможно так легко разобраться с наполнением бызы (запрос в тексте весьма недвусмысленно говорит о простоте), Вам понадобится создать представления к таблицам 1С (это отдельная тема, она есть и среди моих публикаций). Имея некий курсор, Вы можете прочитать последовательно весь справочник 1С, обрабатывая на каждом шаге его элементы. Я не стал приводить сложной реализации с делением на фрагменты обмена и ограничился линейным перебором с проверкой версии элемента справочника 1С перед загрузкой.
Самих настроек подключения Вы не видите, потому что они собраны в отдельном месте. Оно называется DBCO. Это имя некого мастера или формы, которые принято называть транзакцией. Не удивляйтесь искажению терминологии, т.к. SAP имеет глубокие исторические корни, и в каждый поворотный момент истории нужно было принимать решения о выборе пути и названий (SAP вообще редко везло с выбором). Ниже скрин настройки:
Здесь следует обратить внимание на тип подключаемой базы (DBMS) и строку соединения. Из-за путаницы терминов и подходов со строкой соединения с первого раза справляются не многие. Обратите внимание, что инстанс (экземпляр) сервера SQL указан через обратный слеш, а не тире. Проверить проблемы соединения можно в транзакции ST22, где будет детально описаны все проблемы (увы, здесь не всплывает окно сообщений, как в 1С). Файл библиотеки dbmssslib.dll можно скачать с маркета (http://scn.sap.com/thread/1345635) или извлечь из архива (пач ядра, для MSSQL). Архив с расширением sar или car можно открыть программой SAPCAR.EXE с параметрами -xvf После извлечения нужной библиотеки, ее можно просто скопировать по пути, указанном в ST22.
Я не нашел другого более простого и быстро реализуемого способа. Но из SAP можно работать и с веб-сервисами 1С. На первом итапе перед Вами будет стоять "дикая" потребность быстрого обмена, а веб-сервисы вообще не обеспечат требуемую скорость.
Обращение 1С к SAP.
Этот раздел сложен скорее своим многообразием выбора. Перед Вами и прямое обращение к базе данных SAP (как мы это сделали с 1С), и шина SAP PI (интеграционная шина), и Web AS (собственный web-сервер), и пр. Выбор велик, а времени во всем этом разбираться нет. По правде говоря, обидно будет затратить усилия и разочароваться в результате.
Давайте проведем аналогию с 1С. 1С умеет выгружать файлики и загружать их. SAP не может не уметь делать так же. Но разве это современно? 1С умеет отправлять почтовые сообщения, SAP и здесь не отстает. Но разве это быстро? 1С умеет работать с web-сервисами! О да! А как же SAP?
SAP предлагает что-то большое и с первого взгляда невразумительно в теме web-сервисов. Когда Вы затратите свое дорогое время, внимательно и осторожно изучите этот вопрос, то вместе с чувством огромной проделанной работы и сорванных сроков в вашей душе поселится разочарование. Впрочем, если Вы сеньор программист с/с++/java и набрались в жизни много знаний о популярных и современных технологиях, то сможете рассуждать за одним столом с консультантами SAP о программировании, культуре бизнеса, политике и, конечно, симпатичных девушках.
В основе всех известных мне сегодня технологиях доступа из 1С к SAP лежит абревиатура RFC. RFC - это удаленный вызов функций. Это чем-то напоминает web-сервисы 1С, только нет посредника и клиент непосредственно вызывает функциональные модули. Это работает непосредственно через сокеты (3300 tcp порт на сервере). Формат обмена спрятан в коммерческой библиотеке, которая предлагает API-интерфейс (смотрите детали в SDK RFC). Реализация предложена на языке C. Взгляните на простой пример.
Это строка соединения:
Это подключение:
Это вызов удаленной функции по имени:
И закрываем соединение:
Просто и понятно, если Вы ежедневно пишете программы на с/с++. А если нет? Для таких случаев открывается целый спектор готовых решений, который я немного и упомянул выше. В первую очередь опытные консультанты обступят Вас вокруг с уже готовыми ценами за услуги. Смутное чувство нереальности происходящего не оставит Вас, пока они не уйдут. Но с их уходом останется только пустота (станное чувство, которое не возникает после разговора со специалистами). Нет, у Вас, конечно, останется понимание о размере счетов, которые нужно оплатить, но вот с пониманием и знанием следующих направлений развития все плачевно (помните продавцов в магазине?)
Я скажу Вам прямо без утайки. Если Вы овладеете RFC, то весь довесок или букет интеграционных решений станет Вам не нужен. Взгляните на простой алгоритм вызова из 1С удаленной функции SAP:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
res=ПодключитьВнешнююКомпоненту("C:\Users\etyurin\Documents\Visual Studio 2013\ProjectsCPP\sap-rfc\Release\sap-rfc.dll", "VK", ТипВнешнейКомпоненты.Native);
ДемоКомп = Новый("AddIn.VK.SapRfc");
ДемоКомп.СтрокаСоединения="TYPE=3 CLIENT=1 USER=***** PASSWD=**** LANG=E ASHOST=***** SYSNR=00 USE_SAPGUI=0";
Если не ДемоКомп.УстановитьСоединение() тогда
Сообщить(ДемоКомп.ПоследняяОшибка());
иначе
ДемоКомп.ИмяФункции="YTURE_FM";
Строка1="WERRwqedqwdeqwd 1123123 ывапыРОРОР";
ДемоКомп.ДобавитьПараметр("exporting","REQUTEXT","TYPC",Строка1,СтрДлина(Строка1));
ДемоКомп.ДобавитьПараметр("importing","ECHOTEXT","TYPC","",1024);
ДемоКомп.ДобавитьПараметр("importing","RESPTEXT","TYPC","",1024);
//ДемоКомп.УдалитьПараметр("ECHOTEXT");
//ДемоКомп.ДобавитьПараметр("importing","ECHOTEXT","TYPC","",1024);
//res=ДемоКомп.КоличествоПараметров("importing");
Если не ДемоКомп.Вызвать() тогда
Сообщить(ДемоКомп.ПоследняяОшибка());
Иначе
res1=ДемоКомп.ПолучитьПараметр("ECHOTEXT");
res2=ДемоКомп.ПолучитьПараметр("RESPTEXT");
ДемоКомп.ОчиститьВсеПараметры();
КонецЕсли;
ДемоКомп.ЗакрытьСоединение();
КонецЕсли;
КонецПроцедуры
Удаленная функция представляет из себя функциональный модуль (в примере это YTURE_FM). Функция принимает один строковый параметр с именем REQUTEXT и возвращает два строковых параметра ECHOTEXT и RESPTEXT (это как передать в функцию три параметра, два из которых она изменит).
Функциональный модуль можно создать в транзакции SE37. Обратите внимание на отметку удаленного вызова:
Входящие параметры:
Возвращаемые параметры:
А вот и обработка на сервере SAP переданных параметров:
Здесь в коде нет заморочек. Это просто ЭХО, т.е. возвращается то, что передали (параметр с именем RESPTEXT дополнительно заполняется сведениями о подключении).
Имея возможность подключиться из 1С непосредственно к серверу SAP, минуя многочисленных посредников, Вы бережете время и получаете максимальную скорость. Чтобы описание не выглядело голословно, я приложил релиз компоненты для 1С. Однако надеюсь, что я убедил Вас в правильности использовать и изучать сразу RFC и не разбрасывать своё время и усилия на зоопарк вокруг интеграции. В конечном счете Вы сбережете и фонд оплаты труда, т.к. зверинец весьма прожорлив.