|
Создание заказа в SAP из .NET-приложения
|
|||
---|---|---|---|
#18+
Добрый день! Задача: интегрироваться с SAP, а именно забирать клиентов, формировать заказы покупателей из своего приложения и передавать (т.е. создавать) их в SAP, ну и много чего другого. На данный момент понял, что без знаний самого SAP-а, ABAP-а эту задачу выполнить проблематично. Поэтому пытаюсь разобраться с элементарными задачами. Как например, создание простого заказа покупателя. Насколько я понял, это можно сделать, используя RFC-функцию BAPI_SALESORDER_CREATEFROMDAT2. Но проблема в том, что я не знаю какие параметры в нее нужно передавать. Может кто-нибудь мне подсказать, где посмотреть эти параметры, или привести пример кода на C# по вызову этой функции с созданием этих параметров? Перерыл как весь sql.ru, так и инет в целом - кроме ABAP-скриптов ничего нет. Ужас какой-то. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2011, 11:21 |
|
Создание заказа в SAP из .NET-приложения
|
|||
---|---|---|---|
#18+
s.t.a.s, Вы форумом не ошиблись? Или это такой тонкий PR ход ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2011, 12:09 |
|
Создание заказа в SAP из .NET-приложения
|
|||
---|---|---|---|
#18+
>>Вы форумом не ошиблись? Хмммм. Если Вы о том, что мой вопрос больше касается .Net-а, то я посчитал, что здесь, на sql.ru, все технари, а вот по SAP-у куда как не сюда (в "ERP и учетные системы") постить? Или что Вы имели в виду? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2011, 12:26 |
|
Создание заказа в SAP из .NET-приложения
|
|||
---|---|---|---|
#18+
s.t.a.s, SAP здесь особо не обсуждают, а если обсуждают, то высокоуровнево или с точки зрения фукнционала/маркетинга, у SAP есть свои форумы ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2011, 12:49 |
|
Создание заказа в SAP из .NET-приложения
|
|||
---|---|---|---|
#18+
Без грамотного разработчика АВАР это сделать невозможно, т.к. в САП надо написать функции, которые будут создавать документы, а внешнее приложение будет запускать функции и передавать параметры. Такую задачу я решал, но не с помощью C#, а С++ и Delphi. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2011, 13:45 |
|
Создание заказа в SAP из .NET-приложения
|
|||
---|---|---|---|
#18+
Sergey_rbБез грамотного разработчика АВАР это сделать невозможно, т.к. в САП надо написать функции, которые будут создавать документы, а внешнее приложение будет запускать функции и передавать параметры. Такую задачу я решал, но не с помощью C#, а С++ и Delphi. Только abap'еры умеют пользоваться гуглой? http://www.erpgenie.com/sap-technical/interfaces/aspnet-eg-creating-a-purchase-order-via-bapi ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2011, 15:09 |
|
Создание заказа в SAP из .NET-приложения
|
|||
---|---|---|---|
#18+
Прикольно. Из Дельфей можно сделать тоже самое. А может внешняя программа отслеживать события в САП, например перехватывать событие записи в базу? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2011, 17:42 |
|
Создание заказа в SAP из .NET-приложения
|
|||
---|---|---|---|
#18+
ProforgSergey_rbБез грамотного разработчика АВАР это сделать невозможно, т.к. в САП надо написать функции, которые будут создавать документы, а внешнее приложение будет запускать функции и передавать параметры. Такую задачу я решал, но не с помощью C#, а С++ и Delphi. Только abap'еры умеют пользоваться гуглой? http://www.erpgenie.com/sap-technical/interfaces/aspnet-eg-creating-a-purchase-order-via-bapi ERPConnect - стороннее платное приложение (не SAP-овское). Детализирую, наверное. Поставлена задача использовать SAP .NET Connector 3.0. Платить 5000 баксов за ERPConnect клиент не будет, т.к. все, что нужно и так у него есть, а именно SAP-овский коннектор. В этом-то вся и сложность. :( ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2011, 20:54 |
|
Создание заказа в SAP из .NET-приложения
|
|||
---|---|---|---|
#18+
s.t.a.s, хелп у сапа вроде достаточно развернутый http://help.sap.com/saphelp_NW04/helpdata/de/e9/23c80d66d08c4c8c044a3ea11ca90f/frameset.htm Примеры: http://www.codeproject.com/KB/database/SapDBReader.aspx http://www.codeproject.com/KB/dotnet/SAP_NET_Connector.aspx Третий коннектор я не пользовал, но второй ставился только на VS2003 в комбинации с WinXP (даже виртуалку специально поднимал для него). ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2011, 11:33 |
|
Создание заказа в SAP из .NET-приложения
|
|||
---|---|---|---|
#18+
Спасибо за ссылки. Подключиться к САП-у и получить данные по клиентам, например, я уже умею. Не в этом проблема. Проблема в отсутствии знаний по ABAP-у и мне больше нужна информация по BAPI_SALESORDER_CREATEFROMDAT2. Нет ли ни у кого примера ее использования на c# (с созданием параметров)? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2011, 12:31 |
|
Создание заказа в SAP из .NET-приложения
|
|||
---|---|---|---|
#18+
Еще оговорюсь. Опыта разработки под SAP у меня нет и об ABAP услышал только пару дней назад. Соот-но информации по RFC-функциям у меня практически нет. Немного продвинулся в разработке, если можно так сказать. Удалось подключиться к SAP-у и получить данные по клиентам. Но это на данный момент мне не особо нужно. Нужно создавать заказы. Для этого мне нужна информация по BAPI_SALESORDER_CREATEFROMDAT2. Нет ли у кого примера ее использования на c# (с созданием параметров)? Что на данный момент имею: RfcDestination SapRfcDestination = RfcDestinationManager.GetDestination("WDA"); RfcRepository SapRfcRepository = SapRfcDestination.Repository; //IRfcFunction BapiGetCompanyList = SapRfcRepository.CreateFunction("BAPI_COMPANY_GETLIST"); //IRfcFunction BapiGetCompanyDetail = SapRfcRepository.CreateFunction("BAPI_COMPANY_GETDETAIL"); IRfcFunction BapiSalesOrder = SapRfcRepository.CreateFunction("BAPI_SALESORDER_CREATEFROMDAT2"); Дальше, по идее нужны параметры. Один из параметров, скорее всего, партнер. Что-то типа IRfcTable ORDER_PARTNERS = BapiSalesOrder.GetTable("ORDER_PARTNERS"); ORDER_PARTNERS.Append(); ORDER_PARTNERS.SetValue("Тут какое-то значение, которое не знаю где брать", "PARTN_ROLE"); ORDER_PARTNERS.SetValue("По идее, номер партнера, но где его посмотреть не понятно", "PARTN_NUMB"); Так вот мне бы полный пример вызова этой функции с параметрами. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2011, 12:44 |
|
Создание заказа в SAP из .NET-приложения
|
|||
---|---|---|---|
#18+
s.t.a.s, А у вас постановка задачи есть? Т.к. для использования этой бапишки нужно знать точные значения параметров примерный набор параметров: http://aries-wandari.blogspot.com/2010/06/bapisalesordercreatefromdat2.html http://www.sapgeek.net/2011/08/sap-bapi-bapi_salesorder_createfromdat2/ Все параметры - табличные вроде. Т.е. если у вас нет айдишников, то сначала надо будет вытащить кучу справочников. Это вы сами с большой вероятностью не сделаете (т.е. еще будут проблемы с полномочиями). Вы бы нормальную постановку задачи вытащили себе ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2011, 15:04 |
|
Создание заказа в SAP из .NET-приложения
|
|||
---|---|---|---|
#18+
s.t.a.sДобрый день! Задача: интегрироваться с SAP, а именно забирать клиентов, формировать заказы покупателей из своего приложения и передавать (т.е. создавать) их в SAP, ну и много чего другого. На данный момент понял, что без знаний самого SAP-а, ABAP-а эту задачу выполнить проблематично. Поэтому пытаюсь разобраться с элементарными задачами. Как например, создание простого заказа покупателя. Насколько я понял, это можно сделать, используя RFC-функцию BAPI_SALESORDER_CREATEFROMDAT2. Но проблема в том, что я не знаю какие параметры в нее нужно передавать. Может кто-нибудь мне подсказать, где посмотреть эти параметры, или привести пример кода на C# по вызову этой функции с созданием этих параметров? Перерыл как весь sql.ru, так и инет в целом - кроме ABAP-скриптов ничего нет. Ужас какой-то. ИМХО. Вам надо сделать промежуточную субд, с которой сможет работать SAP. Из Своей субд вы все туда экспортируете, а в SAP-е делаете "робота" который по расписанию тащит эти данные и делает необходимые действия. Ну и в обратную сторону так же. Такое канало на 1с 7.7, 8.х Аксапте, RS-Balance, и самописке на FileMaker. Внутренними обработками больше шансов создавать объекты, не порушив целостность базы. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2011, 16:39 |
|
Создание заказа в SAP из .NET-приложения
|
|||
---|---|---|---|
#18+
VolochkovaИМХО. Вам надо сделать промежуточную субд, с которой сможет работать SAP. Из Своей субд вы все туда экспортируете, а в SAP-е делаете "робота" который по расписанию тащит эти данные и делает необходимые действия. Ну и в обратную сторону так же. Такое канало на 1с 7.7, 8.х Аксапте, RS-Balance, и самописке на FileMaker. Внутренними обработками больше шансов создавать объекты, не порушив целостность базы. Не надо. На одном проекте сделали именно так. Монстрик получился убогий и примерно в 5 раз более трудоемкий. У автора правильный подход, вдобавок, оффлайн ему вряд ли подойдет. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2011, 09:49 |
|
Создание заказа в SAP из .NET-приложения
|
|||
---|---|---|---|
#18+
ProforgVolochkovaИМХО. Вам надо сделать промежуточную субд, с которой сможет работать SAP. Из Своей субд вы все туда экспортируете, а в SAP-е делаете "робота" который по расписанию тащит эти данные и делает необходимые действия. Ну и в обратную сторону так же. Такое канало на 1с 7.7, 8.х Аксапте, RS-Balance, и самописке на FileMaker. Внутренними обработками больше шансов создавать объекты, не порушив целостность базы. Не надо. На одном проекте сделали именно так. Монстрик получился убогий и примерно в 5 раз более трудоемкий. У автора правильный подход, вдобавок, оффлайн ему вряд ли подойдет. Все зависит от реализации. Выполнено было не раз и никакого монстра. А при он лайн интеграции внешними средствами - работа базовых механизмов нарывается на неустранимые ошибки по адресу - и сиди думай что это такое. А так крутится робот, раз в час залетают документы и строки. И все кашерно. И главное стабильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2011, 11:05 |
|
Создание заказа в SAP из .NET-приложения
|
|||
---|---|---|---|
#18+
Итак, то чего добился за выходные и сегодняшний день: 1) связался с клиентом. Оказалось у них есть в штате человек, неплохо разбирающийся в SAP, что обрадовало. 2) почти формируется заказ. Привожу код: RfcDestination SapRfcDestination = RfcDestinationManager.GetDestination("WDA"); RfcRepository SapRfcRepository = SapRfcDestination.Repository; IRfcFunction BapiSalesOrder = SapRfcRepository.CreateFunction("BAPI_SALESORDER_CREATEFROMDAT2"); IRfcTable ORDER_PARTNERS = BapiSalesOrder.GetTable("ORDER_PARTNERS"); ORDER_PARTNERS.Append(); ORDER_PARTNERS.SetValue("PARTN_ROLE", "AG"); ORDER_PARTNERS.SetValue("PARTN_NUMB", "10000396"); IRfcStructure order_header_inx = BapiSalesOrder.GetStructure("ORDER_HEADER_INX"); order_header_inx.SetValue("UPDATEFLAG", "I"); order_header_inx.SetValue("DOC_TYPE", "X"); order_header_inx.SetValue("SALES_ORG", "X"); order_header_inx.SetValue("DISTR_CHAN", "X"); order_header_inx.SetValue("DIVISION", "X"); order_header_inx.SetValue("PURCH_NO_C", "X"); order_header_inx.SetValue("REQ_DATE_H", "X"); order_header_inx.SetValue("PURCH_DATE", "X"); IRfcStructure order_header_in = BapiSalesOrder.GetStructure("ORDER_HEADER_IN"); order_header_in.SetValue("DOC_TYPE", "CMR"); order_header_in.SetValue("SALES_ORG", "1001"); order_header_in.SetValue("DISTR_CHAN", "X"); order_header_in.SetValue("DIVISION", "X"); order_header_in.SetValue("PURCH_NO_C", "200"); order_header_in.SetValue("REQ_DATE_H", "2011-09-05"); order_header_in.SetValue("PURCH_DATE", "2011-09-05"); IRfcTable ORDER_ITEMS_INX = BapiSalesOrder.GetTable("ORDER_ITEMS_INX"); IRfcTable ORDER_ITEMS_IN = BapiSalesOrder.GetTable("ORDER_ITEMS_IN"); ORDER_ITEMS_INX.Append(); ORDER_ITEMS_IN.Append(); ORDER_ITEMS_INX.SetValue("UPDATEFLAG", "I"); ORDER_ITEMS_INX.SetValue("ITM_NUMBER", "1056"); ORDER_ITEMS_IN.SetValue("ITM_NUMBER", "1056"); ORDER_ITEMS_INX.SetValue("MATERIAL", "X"); ORDER_ITEMS_IN.SetValue("MATERIAL", "0"); ORDER_ITEMS_INX.SetValue("COMP_QUANT", "X"); ORDER_ITEMS_IN.SetValue("COMP_QUANT", "2"); BapiSalesOrder.Invoke(SapRfcDestination); IRfcTable res = BapiSalesOrder.GetTable("RETURN"); listBox1.Items.Add(res.GetString("MESSAGE")); Но при этом выдается ошибка: "Sales document was not changed". Насколько я понял, все дело в признаке "UPDATEFLAG", но во всех местах кода = "I" (т.е. вставка). Поэтому на этом я "завис" и не пойму куда дальше копать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2011, 17:37 |
|
Создание заказа в SAP из .NET-приложения
|
|||
---|---|---|---|
#18+
s.t.a.s, Попробуй заменить I на U . Я серьезно ! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2011, 18:16 |
|
Создание заказа в SAP из .NET-приложения
|
|||
---|---|---|---|
#18+
Не помогло. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2011, 18:32 |
|
Создание заказа в SAP из .NET-приложения
|
|||
---|---|---|---|
#18+
UPDATEFLAG при создании заказа заполнять не надо, но дело скорее всего не в этом. IRfcTable res = BapiSalesOrder.GetTable("RETURN"); listBox1.Items.Add(res.GetString("MESSAGE")); надо циклом вывести все строки таблицы RETURN, их будет много, они вам скажут, чегно не хватает. ORDER_ITEMS_IN.Append(); ORDER_ITEMS_IN.SetValue("ITM_NUMBER", "10"); - это счетчик строк ORDER_ITEMS_IN.SetValue("MATERIAL", "0000001056"); - это номер ОЗМ, причем надо добить нулями до полной длины поля ORDER_ITEMS_INX.Append(); ORDER_ITEMS_INX.SetValue("ITM_NUMBER", "10"); ORDER_ITEMS_INX.SetValue("MATERIAL", "X"); но скорее всего это не заработает, нет завода, нет схем калькуляции, нет партий поставки (schedule lines), много чего нет... для начала возьмите SD-шника и добейтесь, что ваши параметры заработают в se37, потом уже будете через .net connector пытаться ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2011, 00:59 |
|
Создание заказа в SAP из .NET-приложения
|
|||
---|---|---|---|
#18+
ORDER_PARTNERS.SetValue("PARTN_NUMB", "10000396"); тут надо тоже добивать нулями слева до полной длины поля. иначе будете долго гадать, почему САП не может найти партнера ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2011, 01:01 |
|
Создание заказа в SAP из .NET-приложения
|
|||
---|---|---|---|
#18+
order_header_in.SetValue("DISTR_CHAN", "X"); order_header_in.SetValue("DIVISION", "X"); спросите у SD-шников, какие каналы сбыта и сектора у вас используются. вряд ли это "X" ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2011, 01:06 |
|
Создание заказа в SAP из .NET-приложения
|
|||
---|---|---|---|
#18+
Вестник, спасибо большое! Вы все верно указали. Основная проблема в нулях перед кодами. Сейчас практически создал заказ, правда ругается, что "ТоргДокумент пока не полон. Доработайте данные!". Но, думаю, это разрешимо наполнением обязательных параметров в табличной части. Еще раз спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2011, 13:19 |
|
Создание заказа в SAP из .NET-приложения
|
|||
---|---|---|---|
#18+
Похоже, что рано обрадовался. Обнаружил в инете, что это сообщение - частое явление, если не коммитить создание заказа. Попробовал это сделать, используя BAPI_TRANSACTION_COMMIT. Пока эффекта никакого. Нынешний код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50.
Система все равно выдает: " SALES_HEADER_IN обработан успешно. SALES_ITEM_IN обработано успешно. ТоргДокумент еще не полон. Доработайте данные! Стандартный заказ 16534: сохранено. " Но, естественно, я его в заказах не вижу. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2011, 13:54 |
|
Создание заказа в SAP из .NET-приложения
|
|||
---|---|---|---|
#18+
ТоргДокумент пока не полон. Доработайте данные!идите в созданный заказ на изменение (va02) и нажимайте shift-f8 (если мне не изменяет память). получите отчет о неполноте ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2011, 13:54 |
|
Создание заказа в SAP из .NET-приложения
|
|||
---|---|---|---|
#18+
как-то сложно у вас все это выглядит. должно быть примерно так (имена условные): var c = new connection(); var f = c.createfunction("bapi_salesorder_createfromdat2"); var st = f.Exports("HEADER"); st["VKORG"] = "1000"; var items = f.Tables("ITEMS"); var r = items.Rows.Add(); r["MATNR"].Value = "00000000010010"; f.Execute(); c.Commit(); сейчас под рукой ничего нет, пишу по воспоминаниям ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2011, 14:02 |
|
|
start [/forum/topic.php?fid=29&msg=37424459&tid=1525780]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 263ms |
total: | 398ms |
0 / 0 |