Текущее время: Вс, июл 20 2025, 01:43

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: BAPI_TRANSACTION_COMMIT и SQL
СообщениеДобавлено: Чт, ноя 07 2013, 08:12 
Специалист
Специалист

Зарегистрирован:
Пн, июн 04 2012, 10:31
Сообщения: 125
Есть несколько бапи в цикле, есть запросы обновления z* таблиц (insert/update/delete).
Какая конструкция обеспечит целостность данных в бд (либо отработает всё без ошибок, либо ничего)?

В теории, такая не подходит:
<...после цикла с бапи, если не было ошибок>:
perform sql_queries on commit
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_TRANSACTION_COMMIT и SQL
СообщениеДобавлено: Чт, ноя 07 2013, 08:39 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
1. Ваши insert/update/delete вынесите в модули обновления
2. После выполнения бапи вызывайте ваши модули (CALL FUNCTION ... IN UPDATE TASK)
3. BAPI_TRANSACTION_COMMIT, если все ок

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_TRANSACTION_COMMIT и SQL
СообщениеДобавлено: Чт, ноя 07 2013, 09:09 
Специалист
Специалист

Зарегистрирован:
Пн, июн 04 2012, 10:31
Сообщения: 125
ArmAnn написал:
1. Ваши insert/update/delete вынесите в модули обновления
2. После выполнения бапи вызывайте ваши модули (CALL FUNCTION ... IN UPDATE TASK)
3. BAPI_TRANSACTION_COMMIT, если все ок

Разве если внутри BAPI_TRANSACTION_COMMIT COMMIT_WORK вернет не 0, транзакции внутри update-модуля откатятся?
В чем принципиальное отличие perform on commit от update-модуля в данном случае?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_TRANSACTION_COMMIT и SQL
СообщениеДобавлено: Чт, ноя 07 2013, 09:25 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, авг 07 2013, 22:18
Сообщения: 61
Курс BC414.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_TRANSACTION_COMMIT и SQL
СообщениеДобавлено: Чт, ноя 07 2013, 09:38 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, окт 22 2009, 12:41
Сообщения: 473
Кстати, а почему не отрабатывает "в лоб": винегрет из бапи и прямых апдейтов БД и затем общий commit или rollback?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_TRANSACTION_COMMIT и SQL
СообщениеДобавлено: Чт, ноя 07 2013, 09:55 
Специалист
Специалист

Зарегистрирован:
Пн, июн 04 2012, 10:31
Сообщения: 125
weise написал(а):
Кстати, а почему не отрабатывает "в лоб": винегрет из бапи и прямых апдейтов БД и затем общий commit или rollback?

В лоб в принципе отрабатывает, но один раз данные из z* таблиц удалились, а бапишки не закоммитились, воспроизвести ситуацию пока не получилось.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_TRANSACTION_COMMIT и SQL
СообщениеДобавлено: Чт, ноя 07 2013, 10:21 
Специалист
Специалист

Зарегистрирован:
Пн, июн 04 2012, 10:31
Сообщения: 125
ArmAnn написал:
1. Ваши insert/update/delete вынесите в модули обновления
2. После выполнения бапи вызывайте ваши модули (CALL FUNCTION ... IN UPDATE TASK)
3. BAPI_TRANSACTION_COMMIT, если все ок

Немного не понятна связь между LUW, который создается в update-модуле, и отработкой бапи.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_TRANSACTION_COMMIT и SQL
СообщениеДобавлено: Чт, ноя 07 2013, 10:28 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, апр 24 2007, 15:56
Сообщения: 1402
А BAPI-ха вообще "живая"? Я о том, что много ФМ BAPI помечено как неподдерживаемые SAP или устаревшие. Кроме того, один раз сами знаете кто, и даже проверенные годами транзакции иногда дают сбой. У нас не так давно при большой нагрузке на сервер Z-документы создавались, а объекты под них - через раз. Но такое один раз за 3 года.
Схема такая:
1. Стандартный ФМ (не BAPI, но не суть важно). Внутри кстати, стоит PERFORM ON COMMIT, внутри которого CALL FUNCTION IN UPDATE TASK.
2. INSERT Z.
3. COMMIT WORK AND WAIT.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_TRANSACTION_COMMIT и SQL
СообщениеДобавлено: Чт, ноя 07 2013, 10:37 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, окт 22 2009, 12:41
Сообщения: 473
Кстати да, совсем забыл, часть бапи просто тупо некорректно работает в цикле. У них например могут сохраняться глобальные данные только для текущего вызова - а старые удаляться. И получается совсем криво - объект создался, а часть его подобъектов в базе не сохранилась. Например такое было у заказов ТОРО с внешними услугами.
Проблема решается созданием отдельного объекта (с прямыми апдейтами) в отдельной сессии. Но в этом случае общий коммит невозможен.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_TRANSACTION_COMMIT и SQL
СообщениеДобавлено: Чт, ноя 07 2013, 10:44 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, апр 24 2007, 15:56
Сообщения: 1402
weise написал(а):
Кстати да, совсем забыл, часть бапи просто тупо некорректно работает в цикле.

Это тоже да, беда. Вот нота для примера: 1024902.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_TRANSACTION_COMMIT и SQL
СообщениеДобавлено: Чт, ноя 07 2013, 10:58 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
QValD написал(а):
weise написал(а):
Кстати, а почему не отрабатывает "в лоб": винегрет из бапи и прямых апдейтов БД и затем общий commit или rollback?

В лоб в принципе отрабатывает, но один раз данные из z* таблиц удалились, а бапишки не закоммитились, воспроизвести ситуацию пока не получилось.
Потому что есть такая вещь как неявный коммит БД (implicit commit), в это время все ваши прямые апдейты сохраняются в базу не дожидаясь COMMIT WORK. Во встроенном хелпе можно посмотреть ситуации, когда возникают эти неявные коммиты.
Бапишки же (по большей части:)) не пишут в БД напрямую, они так же стартуют модули обновления, которые висят в ожидании COMMIT WORK. Вы к ним можете добавлять свои модули, и выполняться они будут в рамках одной транзакции БД. Вообще почитайте хотя бы встроенную справку по COMMIT WORK и по статьям что рядом - там много интересного :)

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_TRANSACTION_COMMIT и SQL
СообщениеДобавлено: Чт, ноя 07 2013, 11:53 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, окт 22 2009, 12:41
Сообщения: 473
Читал, и не только справку :wink:. За неявными коммитами - да, разумеется, нужно следить, но за ними всегда нужно следить - и без циклов легко могут сломать целостность данных.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_TRANSACTION_COMMIT и SQL
СообщениеДобавлено: Чт, ноя 07 2013, 12:40 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, ноя 18 2008, 10:40
Сообщения: 342
Откуда: Пермь
Пол: Мужской
QValD написал(а):
weise написал(а):
Кстати, а почему не отрабатывает "в лоб": винегрет из бапи и прямых апдейтов БД и затем общий commit или rollback?

В лоб в принципе отрабатывает, но один раз данные из z* таблиц удалились, а бапишки не закоммитились, воспроизвести ситуацию пока не получилось.

Возможно V1 обновление свалилось в дамп, а прямое обновление прошло нормально. В SM13 можно посмотреть ошибки обновлений, запускаемых в UPDATE TASK.

Конструкция perform ... on commit насколько я понимаю имеет те же проблемы с целостностью данных, как и прямое обновление. Поэтому лучше делать как писал ArmAnn


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_TRANSACTION_COMMIT и SQL
СообщениеДобавлено: Вс, ноя 17 2013, 13:22 
Специалист
Специалист

Зарегистрирован:
Пн, июн 04 2012, 10:31
Сообщения: 125
zsap написал:
Возможно V1 обновление свалилось в дамп, а прямое обновление прошло нормально. В SM13 можно посмотреть ошибки обновлений, запускаемых в UPDATE TASK.
Конструкция perform ... on commit насколько я понимаю имеет те же проблемы с целостностью данных, как и прямое обновление. Поэтому лучше делать как писал ArmAnn

Сделал, как описано выше.
В цикле BAPI на сторно документов -> ФМник на удаление записей из z-таблиц IN UPDATE TASK -> следом BAPI_TRANSACTION_COMMIT (WAIT = 'X').
Бывают случаи (пока не понял от чего зависит), что данные из z-таблиц удаляются, но бапишки не коммитятся. Как исключить эту ситуацию?
В sm13 всё чисто.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_TRANSACTION_COMMIT и SQL
СообщениеДобавлено: Пн, ноя 18 2013, 08:35 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
QValD написал(а):
Сделал, как описано выше.
В цикле BAPI на сторно документов -> ФМник на удаление записей из z-таблиц IN UPDATE TASK -> следом BAPI_TRANSACTION_COMMIT (WAIT = 'X').
Бывают случаи (пока не понял от чего зависит), что данные из z-таблиц удаляются, но бапишки не коммитятся. Как исключить эту ситуацию?
В sm13 всё чисто.
А вы анализируете как отработала бапишка на сторно? Т.е. в случае ошибки вызываете BAPI_TRANSACTION_ROLLBACK ?

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


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

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


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

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


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

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