Текущее время: Вс, июл 13 2025, 12:04

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: Многократный вызов BAPI BAPI_GOODSMVT_CREATE в один LUW
СообщениеДобавлено: Пт, мар 11 2011, 01:16 
Специалист
Специалист

Зарегистрирован:
Вт, мар 18 2008, 10:21
Сообщения: 136
Откуда: краснодар
Доброго дня.
Хочется услышать от общественности ожидания и оценить работу BAPI BAPI_GOODSMVT_CREATE в концепции многократного вызова за один COMMIT.
Описываю разработку:
Имеет оболочка, интерфейс пользователя в нем реализуется выбор заказов ТОРО, его компонентов, плановых фактических проведенных данных материала.
Таким образом пользователю предоставляется возможность в одном окне ввести отпускаемое количество материала для разных заказов ТОРО одного и того же материала, с одного и того же склада и т.д., ни каких ограничений по вводу не предусмотрено. Тем самым приходится группировать вызовы BAPI по номеру заказа, это требования концепции системы, то есть вводить в один ДМ всю портянку пользователя нельзя.
Требования заказчика чтобы процедура сохранения была целостной, то есть либо сохраняем все ДМ либо ни одного если хотя бы в одном проводимом ДМ есть ошибка.
Чем такой многократный вызов BAPI в один COMMIT может грозить? Каковы ожидания от такой работы? Есть какие нибуть идеи как наиболее оптимально организовать вызов с такими требованиями? Может кто нибуть уже сталкивался?

На данный момент реализован многократный вызов BAPI + в конце COMMIT WORK AND WAIT или если были ошибки в вызовах то ROOLBACK WORK


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Многократный вызов BAPI BAPI_GOODSMVT_CREATE в один LUW
СообщениеДобавлено: Пт, мар 11 2011, 07:43 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пт, янв 18 2008, 10:34
Сообщения: 716
Откуда: Moscow
Пол: Мужской
что то подобное делал. тут обсуждалось Разъясните насчет LUW пожалуйста (теория).

_________________
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. (Э. Йодан)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Многократный вызов BAPI BAPI_GOODSMVT_CREATE в один LUW
СообщениеДобавлено: Пт, мар 11 2011, 08:01 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
aivengo написал(а):
На данный момент реализован многократный вызов BAPI + в конце COMMIT WORK AND WAIT или если были ошибки в вызовах то ROOLBACK WORK

Можно узнать как Вы это сделали? Потому что, вроде как дамп будет, если списывать
Цитата:
... отпускаемое количество материала для разных заказов ТОРО одного и того же материала, с одного и того же склада и т.д., ни каких ограничений по вводу не предусмотрено.


aivengo написал(а):
Доброго дня.
Хочется услышать от общественности ожидания и оценить работу BAPI BAPI_GOODSMVT_CREATE в концепции многократного вызова за один COMMIT.

http://wiki.sdn.sap.com/wiki/display/ERPSCM/How+To+Goods+Movements+with+BAPI


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Многократный вызов BAPI BAPI_GOODSMVT_CREATE в один LUW
СообщениеДобавлено: Пт, мар 11 2011, 12:14 
Специалист
Специалист

Зарегистрирован:
Вт, мар 18 2008, 10:21
Сообщения: 136
Откуда: краснодар
ghost написал:
что то подобное делал. тут обсуждалось Разъясните насчет LUW пожалуйста (теория).

Та задача была немного другая там необходимо было просунуть за один COMMIT проводку второго ДМ на основе первого ДМ, на условиях целосности сохранения обоих документов. Кстати если интерестно удалось подругому решить задачу.
вот ссылка
viewtopic.php?f=13&t=40116&start=15
А этот случай немного другой
Сдесь происходит списание большого кол-ва несвязаных между собой документов материала, на условиях все той же целосности.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Многократный вызов BAPI BAPI_GOODSMVT_CREATE в один LUW
СообщениеДобавлено: Пт, мар 11 2011, 12:27 
Специалист
Специалист

Зарегистрирован:
Вт, мар 18 2008, 10:21
Сообщения: 136
Откуда: краснодар
Besa написал:
Можно узнать как Вы это сделали? Потому что, вроде как дамп будет, если списывать

Система 6.0
организовано в цикле вызывается бапи, анализируются ее ошибки
и в конце цикла либо COMMIT WORK AND WAIT либо ROOLBACK WORK
дампов пока не наблюдалось, но непонятные прерывания уже возникали, типа модуль ***** невыполним
думаю как более правильно организовать запись, очень не хочется от целосности отказываться
За ссылки спасибо.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Многократный вызов BAPI BAPI_GOODSMVT_CREATE в один LUW
СообщениеДобавлено: Пн, мар 14 2011, 12:13 
Специалист
Специалист

Зарегистрирован:
Вт, мар 18 2008, 10:21
Сообщения: 136
Откуда: краснодар
цитирую документ
http://wiki.sdn.sap.com/wiki/display/ER ... +with+BAPI

Calling the BAPI several times within one roll area
When you want to post depending Goods Movements in a series like GR and immediate transfer posting or GR and GI for the same material. The stock is only read from the database in the case of an actual goods issue. For a goods receipt, the data is read from the buffer and thereby at the time before the last posting in the same roll area. A goods receipt, for example with movement type 315, automatically posts an implicit goods issue in the stock in transfer. This situation is not taken into account in the current design. You may get an error message like M7 021 (Deficit of ... stock). To avoid this, you have to call the BAPI in a different way:

Make sure that the program buffer is deleted by changing the roll area. You can accomplish this by logging off and then logging in again for the BAPI process. If the BAPI is called from an ABAP program, you can also use the command

•CALL FUNCTION func DESTINATION 'NONE'.
(see the documentation for the ABAP keyword CALL FUNCTION).

Here you have to adhere to the following procedure:
1.The call of the BAPI, for example, BAPI_GOODSMVT_CREATE and the subsequent call of BAPI BAPI_TRANSACTION_COMMIT or in case of an error of BAPI BAPI_TRANSACTION_ROLLBACK has to be included in a function module.
2.This function module must be called with command CALL FUNCTION func DESTINATION 'NONE'. As a result, the system opens a new roll area.
3.Then you must implement function module RFC_CONNECTION_CLOSE.This function module closes the roll area of the function module.As a result, a new roll area is opened when you call a function module with DESTINATIN 'NONE' for the next time, and thus, for example, no more internal buffer data is available.
Example 1:
Code:
Program Test.
...
LOOP.
....
  CALL FUNCTION func1 DESTINATION 'NONE'.
  CALL FUNCTION RFC_CONNECTION_CLOSE.
....
ENDLOOP.

FUNCTION func1.
....
   CALL FUNCTION 'BAPI_GOODSMVT_CREATE'.
   ...
   IF 'no errors'.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
   ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
   ENDIF.
...
ENDFUNCTION.


Example 2:

Code:
*&---------------------------------------------------------------------*
*& Report  ZBAPI_GDSMVT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zbapi_gdsmvt.

* DATA: ...
* PARAMETERS: ...

START-OF-SELECTION.

* Prepare data for first Goods Movement

* Call BAPI to create Goods Movement
CALL FUNCTION 'BAPI_GOODSMVT_CREATE' DESTINATION 'NONE'

* If no error, commit
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' DESTINATION 'NONE'
    EXPORTING
      wait = 'X'.
* ELSE
* Error handling 
  CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' DESTINATION 'NONE'.

* Close RFC connection
  CALL FUNCTION 'RFC_CONNECTION_CLOSE'
    EXPORTING
      destination = 'NONE'.

* Prepare data for next Goods Movement

* Call BAPI to create Goods Movement
CALL FUNCTION 'BAPI_GOODSMVT_CREATE' DESTINATION 'NONE'

* If no error, commit
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' DESTINATION 'NONE'
    EXPORTING
      wait = 'X'.
* ELSE
* Error handling 
  CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' DESTINATION 'NONE'.

* Close RFC connection
  CALL FUNCTION 'RFC_CONNECTION_CLOSE'
    EXPORTING
      destination = 'NONE'.


Caution!
The commit work executed in func1 processes all function modules of DESTINATION 'NONE' that were called in 'update task'.If function modules in 'update task' are called in the calling program, these do not lead to a database update.In this case, you have to execute a further commit work in the calling program.

SAP Notes
•520813 FAQ Note for GM with BAPIs

Делаю вывод что просунуть списание более одного ДМ в один LUW на условиях целосности нельзя, опровергнете меня пожалуйста если у кого нибуть получилось


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Многократный вызов BAPI BAPI_GOODSMVT_CREATE в один LUW
СообщениеДобавлено: Пн, мар 14 2011, 15:27 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
aivengo написал(а):
Делаю вывод что просунуть списание более одного ДМ в один LUW на условиях целосности нельзя, опровергнете меня пожалуйста если у кого нибуть получилось

Вывод правильный.
Более того - нужно после каждого COMMIT очищать буфер ФМ чтения запаса, или вызывать BAPI с ..DESTINATION 'NONE'.
Цитата:
The stock is only read from the database in the case of an actual goods issue. For a goods receipt, the data is read from the buffer and thereby at the time before the last posting in the same roll area. A goods receipt, for example with movement type 315, automatically posts an implicit goods issue in the stock in transfer.

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Многократный вызов BAPI BAPI_GOODSMVT_CREATE в один LUW
СообщениеДобавлено: Пн, мар 14 2011, 15:48 
Специалист
Специалист

Зарегистрирован:
Вт, мар 18 2008, 10:21
Сообщения: 136
Откуда: краснодар
Удав написал(а):
Вывод правильный.
Более того - нужно после каждого COMMIT очищать буфер ФМ чтения запаса, или вызывать BAPI с ..DESTINATION 'NONE'.

Да вообщем сделал все по букварю, думаю все должно быть надежно
Code:
loop at T_GOODSMVT_HEADER INTO I_GOODSMVT_HEADER.
  " подготовка данных для бапи
  .......
        CALL FUNCTION 'ZBAPI_GOODSMVT_CREATE' DESTINATION 'NONE'
          EXPORTING
            I_GOODSMVT_HEADER       = I_GOODSMVT_HEADER
            I_GOODSMVT_CODE         = I_GOODSMVT_CODE
            I_TESTRUN               = l_testrun
          IMPORTING
            E_GOODSMVT_HEADRET      = E_GOODSMVT_HEADRET
            E_MATERIALDOCUMENT      = E_MATERIALDOCUMENT
            E_MATDOCUMENTYEAR       = E_MATDOCUMENTYEAR
          TABLES
            T_GOODSMVT_ITEM         = T_GOODSMVT_ITEM
            T_GOODSMVT_SERIALNUMBER = T_GOODSMVT_SERIALNUMBER
            T_RETURN                = LT_RETURN_MT.
        CALL FUNCTION 'RFC_CONNECTION_CLOSE'
          EXPORTING
            DESTINATION = 'NONE'.
endloop.

модуль диалоговый тип запуска немедленно

FUNCTION ZBAPI_GOODSMVT_CREATE.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*"  IMPORTING
*"     VALUE(I_GOODSMVT_HEADER) LIKE  BAPI2017_GM_HEAD_01 STRUCTURE
*"        BAPI2017_GM_HEAD_01
*"     VALUE(I_GOODSMVT_CODE) LIKE  BAPI2017_GM_CODE STRUCTURE
*"        BAPI2017_GM_CODE
*"     VALUE(I_TESTRUN) LIKE  BAPI2017_GM_GEN-TESTRUN OPTIONAL
*"  EXPORTING
*"     VALUE(E_GOODSMVT_HEADRET) LIKE  BAPI2017_GM_HEAD_RET STRUCTURE
*"        BAPI2017_GM_HEAD_RET
*"     VALUE(E_MATERIALDOCUMENT) TYPE  BAPI2017_GM_HEAD_RET-MAT_DOC
*"     VALUE(E_MATDOCUMENTYEAR) TYPE  BAPI2017_GM_HEAD_RET-DOC_YEAR
*"  TABLES
*"      T_GOODSMVT_ITEM STRUCTURE  BAPI2017_GM_ITEM_CREATE
*"      T_GOODSMVT_SERIALNUMBER STRUCTURE  BAPI2017_GM_SERIALNUMBER
*"       OPTIONAL
*"      T_RETURN STRUCTURE  BAPIRET2
*"----------------------------------------------------------------------
  data lf_error type C.

  CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
    EXPORTING
      GOODSMVT_HEADER       = I_GOODSMVT_HEADER
      GOODSMVT_CODE         = I_GOODSMVT_CODE
      TESTRUN               = I_TESTRUN
    IMPORTING
      GOODSMVT_HEADRET      = E_GOODSMVT_HEADRET
      MATERIALDOCUMENT      = E_MATERIALDOCUMENT
      MATDOCUMENTYEAR       = E_MATDOCUMENTYEAR
    TABLES
      GOODSMVT_ITEM         = T_GOODSMVT_ITEM
      GOODSMVT_SERIALNUMBER = T_GOODSMVT_SERIALNUMBER
      RETURN                = T_RETURN.

  CLEAR lf_error.
  loop at T_RETURN.
    CASE T_RETURN-TYPE.
      WHEN 'E' OR 'A'.
        lf_error = 'X'.
    ENDCASE.
  endloop.
  IF lf_error = 'X'.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
  ENDIF.

ENDFUNCTION.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Многократный вызов BAPI BAPI_GOODSMVT_CREATE в один LUW
СообщениеДобавлено: Пн, мар 14 2011, 16:03 
Специалист
Специалист

Зарегистрирован:
Вт, мар 18 2008, 10:21
Сообщения: 136
Откуда: краснодар
У нас в системе для пользователя в продуктивной системе существует ограничение на 4 сессии, теоретически они в программе могут заполнять большие простыни данных, в результате может напримр у него будет открыто 4ре сесии и он запустит процедуру сохранения
вызов ФМ с DESTINATION 'NONE' нормально откроется в программе 5ой сесией? Не будет ли дампов в связи с нехваткой сесий?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Многократный вызов BAPI BAPI_GOODSMVT_CREATE в один LUW
СообщениеДобавлено: Пн, мар 14 2011, 16:23 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Будут. Перед запуском можно контролировать количество запущенных сессий пользователя с помощью ФМ TH_LONG_USR_INFO.

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Многократный вызов BAPI BAPI_GOODSMVT_CREATE в один LUW
СообщениеДобавлено: Пн, мар 14 2011, 16:59 
Специалист
Специалист

Зарегистрирован:
Вт, мар 18 2008, 10:21
Сообщения: 136
Откуда: краснодар
Удав написал(а):
Будут. Перед запуском можно контролировать количество запущенных сессий пользователя с помощью ФМ TH_LONG_USR_INFO.

Спасибо большое.
Может подскажете еще где посмотреть ограничение? :roll:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Многократный вызов BAPI BAPI_GOODSMVT_CREATE в один LUW
СообщениеДобавлено: Пн, мар 14 2011, 17:42 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Ср, июн 13 2007, 16:36
Сообщения: 585
Откуда: Belarus
Пол: Мужской
aivengo написал(а):
Спасибо большое.
Может подскажете еще где посмотреть ограничение? :roll:

Где-то тут: RZ11 параметр rdisp/max_alt_modes.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Многократный вызов BAPI BAPI_GOODSMVT_CREATE в один LUW
СообщениеДобавлено: Вт, мар 15 2011, 19:38 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 01 2005, 13:23
Сообщения: 303
Откуда: Питер
Пол: Мужской
Запускал создание 12 разных документов под одним коммитом написав всего-лишь вот это после каждого запуска:
Code:
assign ('(SAPLMBWL)XCOMMIT') to <fs>.
      if sy-subrc = 0.
        clear <fs>.
      endif.

_________________
Всему своё время...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Многократный вызов BAPI BAPI_GOODSMVT_CREATE в один LUW
СообщениеДобавлено: Ср, мар 16 2011, 12:23 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Preatos написал:
...12 разных документов ...

Это возможно только в случае, если речь идет о ПМ или ОМ/перемещении разных запасов :wink:

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB