1) обращение из SAP к 1С
2) обращение 1С к SAP
Я расскажу о каждой из этих групп.
Обращение из 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:UsersetyurinDocumentsVisual Studio 2013ProjectsCPPsap-rfcReleasesap-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 и не разбрасывать своё время и усилия на зоопарк вокруг интеграции. В конечном счете Вы сбережете и фонд оплаты труда, т.к. зверинец весьма прожорлив.
Тоже использовал RFC. Правда сами функции писали программисты sap. Только согласовывал с ними передаваемые параметры.
Тема, несомненно, интересная. Однако, SAP достаточно редкая птица на российских просторах учетных систем. Думаю, если-бы были задачи, то нашлись-бы и исполнители. Я, например. И ВК написать для обмена — не сильно большая проблема, в общем-то. Но в целях самопознания это мутить — полный эксгибиционизм. Короче, нужна конкретная задача.
Как-то всё-таки не православно забить на XI/PI и «пилить» интеграцию «дедовским способом»….
(3) comol, в начале внедрения остро стоит вопрос перемещения большого количества данных в SAP (поэтому прямое обращение к вьюхам 1С). А вот безнаказанно ходить к данным в сап как в 1С еще нельзя (поэтому rfc). Прочие интеграционные продукты (к примеру, которые Вы упомянули) работают через rfc, но вводят дополнительное звено — продукт написанный на java. Пока остро стоит потребность в движение большого количества информации, java будет слабым звеном (очень медленно и много ресурсов отнимает).
а мне понравился настрой автора.
ничего не понятно, конечно с наскоку, но настроение как ни странно не испортилось )))
плюсую
Мне кажется не совсем уместным данными из таблиц БД 1с делать напрямую загрузку в БД SAP и наоборот. При обновлении платформы 1с может измениться структура хранения таблиц. И если со справочником банков это ещё и может пройдет, то с регистрами или даже документами возможно вся загрузка возможно сломается. Плюс ко всему нет возможности использовать бизнес логику 1с,а она при обновлении конфигурации также может меняться. К тому же встает вопрос о блокировках, как себя поведет сервер БД и сервер приложений 1с при одновременном использовании таблиц и 1с и обработкой БД.
(6) maksip,
так и будет, если удалять реквизиты, к примеру.
и это верно(что меня радует однозначно)
еще как может встать.
Вьюхи переделываем после обновлений конфигурации, сломанные загрузки чиним (иногда даже заранее), логика 1С не пашет и «владельцы» базы ноят, что их не спросили, а им хотелось бы подмазаться, ну и конечно блокировок нет, потому что грязное чтение во вьюхах (это как грязные танцы). Загрузка периодическая (10 мин), т..е. данные выправляются по версии (можно добавлять задержку в 1-2 мин, чтоб танцев не было, но так уже не зажигает).
(7) ture, (7) ture, Тогда согласен. В этом случае решение вполне подходит
Хорошее решение для тех у кого и сап и 1С под рукой. Возможно даже лучшее. Ибо мой опыт работы с сапёрами говорит о море непонимания при обсуждении интерфейсов. Я несколько раз делал обмен с САПом. Всегда это был обмен файлами. А файлы у САПа сильно замусорены. На три значащих поля двадцать не имеющих к обмену отношения.
Чтение логических и физических файлов:
Показать
Sap можно поставить дома
xsd — обмен с Sap возможен ?
(15) там работают структуры, что из одного офиса идет передача информации в другой. такая сложная техника. а защиты от внутренней команды нет. В штатах есть, в наших структурах беззаконие. если вы высунетесь в сапах, то могут ограничить вас в ваших правах и чтобы сделать замечание кому-то — очень опасно. у меня были большие издержки, и я работала когда в офисе, стали общаться так : «молчите , а то загремите в тюрьму» и все 20 программистов каждый повторял , что надо говорить правильно. Это как бы ясно ? Если Вы порядочный человек — Вы им будете не нужны
Люди нарушают законодательство, а техники если у Вас нет- очки с камерой или зубная паста с жучками — могут лишить работы/квартиры
(15) Вам бы выступить на конференции Инфостара и расставить все точки над «i».
Причем, все остальные выступления можно взять и отменить, ибо зачем
переливать из пустого в порожнее и раздувать мифы о могуществе 1С.
Жаль, что вам не дадут выступить да и вряд ли вы согласитесь, ибо зачем
переливать из пустого в порожнее и раздувать мифы о могуществе SAP.
онипо-моему гарантию дают с возвратом денег….