Текущее время: Пн, авг 04 2025, 13:41

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Последовательный вызов двух бапи.
СообщениеДобавлено: Пн, май 12 2008, 13:02 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4871
Откуда: Москва
Пол: Мужской
Всем привет! Я так понимаю, похожие темы уже много раз обсуждалась, но ответа для себя я что-то не нашел.
Итак, ситуация такая.
вариант 1.
Code:
call fuction  BAPI_REQUISITION_RELEASE
call fuction BAPI_REQUISITION_CHANGE


Вторая бапишка ругается, что заявка еще заблокирована.
Пробую Вариант 2
Code:
call fuctionBAPI_REQUISITION_RELEASE
commit work and wait
call fuction BAPI_REQUISITION_CHANGE


Тоже не помогает :( Видимо потому, что в конце BAPI_REQUISITION_RELEASE уже стоит commit work но без wait.

В общем вопрос - как грамотно вызвать в данном случае две бапишки, чтобы они отработали строго одна за одной?

_________________
Удача - результат нашего желания (© А. Нортон)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 12 2008, 13:25 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Пн, сен 06 2004, 11:43
Сообщения: 1551
Пол: Мужской
BAPI_COMMIT ?

_________________
Ex ipso fonte bibere
Цитата:
Abyssus abyssum invocat
Dies diem docet
Ducunt volentem fata, nolentem trahunt

Estote prudentes sicut serpentes


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Последовательный вызов двух бапи.
СообщениеДобавлено: Пн, май 12 2008, 13:31 
Директор
Директор

Зарегистрирован:
Чт, июн 21 2007, 09:01
Сообщения: 904
Откуда: УЖ 15/2
Пол: Мужской
LKU написал:
Видимо потому, что в конце BAPI_REQUISITION_RELEASE уже стоит commit work но без wait.
Так там же есть параметр управляющий NO_COMMIT_WORK, т.е. можно и без commita внутри с
Code:
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          WAIT = 'X'.
после запуска.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 12 2008, 13:34 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4871
Откуда: Москва
Пол: Мужской
Если вы про BAPI_TRANSACTION_COMMIT, то она внутри содержит тот же самый commit work and wait плюс считывание журнала сообщений, так что разницы, ИМХО, нет.

Но я утолько что нашел нотку Note 967440 - BAPI_REQUISITION_RELEASE(_GEN) with COMMIT WORK
Цитата:
Symptom
The following two BAPIs for the release of purchase requisitions execute a COMMIT WORK:
BAPI_REQUISITION_RELEASE
BAPI_REQUISITION_RELEASE_GEN.
However, the execution of the COMMIT WORK violates BAPI programming conventions.
Solution
The two BAPIs are extended with an optional parameter (NO_COMMIT_WORK). If the parameter is filled when it is called, the COMMIT WORK is not executed.


Вот такие пироги :)

_________________
Удача - результат нашего желания (© А. Нортон)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Последовательный вызов двух бапи.
СообщениеДобавлено: Пн, май 12 2008, 13:38 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4871
Откуда: Москва
Пол: Мужской
Alex80 написал:
Так там же есть параметр управляющий NO_COMMIT_WORK, т.е. можно и без commita внутри с
Code:
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          WAIT = 'X'.
после запуска.


Alex80, спасибо. Я сейчас с 4.7 работаю, и там как раз этого параметра еще нет. Ну сейчас нотку накатим и все будет ок.

_________________
Удача - результат нашего желания (© А. Нортон)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Последовательный вызов двух бапи.
СообщениеДобавлено: Пн, май 12 2008, 13:42 
Директор
Директор

Зарегистрирован:
Чт, июн 21 2007, 09:01
Сообщения: 904
Откуда: УЖ 15/2
Пол: Мужской
LKU написал:
Alex80, спасибо. Я сейчас с 4.7 работаю, и там как раз этого параметра еще нет. Ну сейчас нотку накатим и все будет ок.
Сразу не заметил циферки справа :-)
Code:
  IF no_commit_work EQ space.                               "967440
    COMMIT WORK.
  ENDIF.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 12 2008, 14:26 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4871
Откуда: Москва
Пол: Мужской
Ну вот, только обрадовался и снова огорчение. Для BAPI_REQUISITION_RESET_RELEASE соотвествующей ноты нет, а COMMIT WORK в конце есть :(

Я конечно выставил сообщение в САП, но пока вопрос актуален - если в тексте бапи есть commit work без wait, можно ли добиться чтобы следующая бапишка дожидалась завершения работы предыдущей?

_________________
Удача - результат нашего желания (© А. Нортон)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 12 2008, 14:41 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
LKU написал:
Я конечно выставил сообщение в САП

Вот это зря. Works as designed. Смотрим описание асинхронных апдейтов.
Чтобы избежать проблем блокировки перед каждым BAPI (если вызываются цепочкой) ставим оператор SET UPDATE TASK LOCAL.

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 12 2008, 15:10 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4871
Откуда: Москва
Пол: Мужской
Сергей, спасибо за совет, попробуем. Я как-то раз в хелпе к абапу смотрел описание SET UPDATE TASK LOCAL, сломал голову, но так и не понял как это должно работать.

Есть ли где-нибудь более понятное описание концепции всех этих SET UPDATE TASK LOCAL, SAP LUW и т.п?

А насчет "Works as designed", они сами честно написали "execution of the COMMIT WORK violates BAPI programming conventions". Вот пусть и исправляют :) Только долго ждать...

_________________
Удача - результат нашего желания (© А. Нортон)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 12 2008, 15:40 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
LKU написал:
Есть ли где-нибудь более понятное описание концепции всех этих SET UPDATE TASK LOCAL, SAP LUW и т.п?

Не сочтите за издевательство, но таки в хэлпе, в том числе в том, который по F1 в системе.
Works as designed касалось не этого BAPI, а вообще COMMIT+асинхронный апдейт+снятие блокировок.

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 12 2008, 16:38 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4871
Откуда: Москва
Пол: Мужской
Да какое уж тут издевательство, буду разбираться.
Просто я думал, может в каком нибудь курсе есть пара картинок или примеров, которые помогут разобраться с этой концепцией.

_________________
Удача - результат нашего желания (© А. Нортон)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 12 2008, 18:42 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
LKU написал:
Есть ли где-нибудь более понятное описание концепции всех этих SET UPDATE TASK LOCAL, SAP LUW и т.п?


Есть курс BC414 (Programming Database Updates), но не знаю, насколько там понятно объяснено. Насчет LUW вот тут посмотрите:
http://sapboard.ru/forum/viewtopic.php?t=33320


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 13 2008, 10:09 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4871
Откуда: Москва
Пол: Мужской
Большое спасибо всем откликнувшимся!
SET UPDATE TASK LOCAL перед вызовом бапишек помог.

_________________
Удача - результат нашего желания (© А. Нортон)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 13 2008, 14:54 
Специалист
Специалист

Зарегистрирован:
Чт, июн 21 2007, 09:14
Сообщения: 166
Откуда: Москва
Пол: Мужской
Jelena написала:
LKU написал:
Есть ли где-нибудь более понятное описание концепции всех этих SET UPDATE TASK LOCAL, SAP LUW и т.п?


Есть курс BC414 (Programming Database Updates), но не знаю, насколько там понятно объяснено. Насчет LUW вот тут посмотрите:
http://sapboard.ru/forum/viewtopic.php?t=33320


Конечно в BC414 всё понятно разжевано, как для дебилов, всё с картинками! Вобщем-то, как обычно в курсах BC*.

По вопросам ABAP изучайте курсы BC4*, там все есть и всё очень понятно.

В курсе BC414 можно прочитать, что без оператора SET UPDATE TASK LOCAL запросы обновления пишутся в таблицу БД VBLOG. При обновлении используется свой рабочий процесс для модулей обновления.
В случае SET UPDATE TASK LOCAL для запросов обновления используется память сервера приложений и для обновления используется текущий диалоговый процесс.
Это и есть самый что ни на есть синхронный метод обновления.

Соответственно, в данном случат бапишки будут выполняться строго одна за другой.

При использовании BAPI такое бывает нужно. Бывает, что поставишь COMMIT WORK AND WAIT (через BAPI_TRANSACTION_COMMIT), после выполнения BAPI делаешь SELECT из таблицы, куда бапишка заносит данные. А селект возвращает 4. Почему так происходит в системе - не совсем ясно. Смотрел по ST05, там показано, что сначала отрабатывает весь диалоговый процесс, а затем запускается программа обновления. Т.е. сначала происходит селект (до выполнения бапи), затем бапи.

Борьба со следствием этой проблемы - помогает использование как раз-таки SET UPDATE TASK LOCAL. Как бороться с причиной - неизвестно, т.к. неизвестна причина :) По крайней мере, для меня.
Может, кто знает?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 13 2008, 16:40 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Art386 написал:
Борьба со следствием этой проблемы - помогает использование как раз-таки SET UPDATE TASK LOCAL. Как бороться с причиной - неизвестно, т.к. неизвестна причина :) По крайней мере, для меня.
Может, кто знает?

Art386 написал:
Конечно в
SM50, если память не изменяет,
Art386 написал:
всё понятно разжевано, как для дебилов, всё с картинками! Вобщем-то, как обычно в курсах.


По существу: причина в том, что ваш диалоговый процесс и процесс, в котором выполняется обновление - асинхронны.

Результаты же ST05 вы просто неверно интерпритировали.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.

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


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

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


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

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