SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

Lock object with mode=X, _scope=3



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP
View previous topic :: View next topic  
Author Message
NIYA
Участник
Участник



Joined: 16 Feb 2009
Posts: 4

PostPosted: Mon Feb 16, 2009 3:42 pm    Post subject: Lock object with mode=X, _scope=3 Reply with quote

Программа последовательно выполняет проводку СчФ, создание ДМ, авт. выравнивание ПМ/ПСч, на последнем шаге авт.выравнивание СчФ и документов платежных поручений. Для того чтобы программа смогла успешно выполнить все шаги, перед выполнением первого шага делаю блокирование основных используемых объектов блокировки. В частности, пытаюсь заблокировать объект EFLFB1A:
call function 'ENQUEUE_EFLFB1A'
exporting
MODE_LFB1 = 'X'
LIFNR = P_LIFNR
BUKRS = P_BUKRS
_SCOPE = '3'
exceptions
FOREIGN_LOCK = 1
SYSTEM_FAILURE = 2
others = 3.
Далее в программе делаю вызов собственного ФМ, в котором делается вызов программы авт. выравнивания:
call transaction 'FB1K' using BDC_TAB mode I_MODE update 'S' messages into IT_MESSTAB.
Транзакция FB1K при попытке заблокировать этот же объект выдает сообщение: «Счет <такой-то> обрабатывается пользователем <мною же>. № сообщения F5287».
Подскажите, пожалуйста, с какими параметрами нужно устанавливать блокировку, чтобы отрабатывали все последующие блокировки. Возможно, не учтены какие-нибудь особенности блокировки?
Back to top
View user's profile Send private message
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Mon Feb 16, 2009 7:03 pm    Post subject: Reply with quote

Перед вызовом стандартных транзакций блокировки нужно снимать.
Ну и соответственно восстанавливать после сохранения данных Smile
Подробно механизм блокировок рассмотрен на help.sap.com

_________________
С уважением,
Удав.
Back to top
View user's profile Send private message
NIYA
Участник
Участник



Joined: 16 Feb 2009
Posts: 4

PostPosted: Tue Feb 17, 2009 8:23 pm    Post subject: Reply with quote

Спасибо за ответ.
Еще раз перечитала механизм блокировок - похоже, промахнулась с выбранным режимом (нужен «E»).
Хотелось бы убедиться, в утверждении, что перед вызовом стандартных транзакций блокировки нужно снимать. Тем более что представленный код какое-то время работал. Сейчас пытаюсь найти хоть какое-то объяснение либо тому, почему это работало, либо тому, почему не работает сейчас.
Back to top
View user's profile Send private message
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Wed Feb 18, 2009 2:15 am    Post subject: Reply with quote

Ну тут все зависит от задержек - иногда вызов стандартной транзакции, который ставит и снимает блокировки в стандартных транзакциях выполняется быстро по сравнению с шагом в режиме отладки Wink
А посмотреть блокировки очень просто: вручную запустите FB1K, задайте кредитора.
После этого запустите в параллельном режиме транзакцию SM12 - просмотр блокировок.
Или используйте ST01 для трассировки блокировок.

_________________
С уважением,
Удав.
Back to top
View user's profile Send private message
NIYA
Участник
Участник



Joined: 16 Feb 2009
Posts: 4

PostPosted: Wed Feb 18, 2009 10:47 am    Post subject: Reply with quote

Действительно, бывали случаи, когда попадалась на задержки в режиме отладки Smile , но я не об этом.
Когда я писала, что код «какое-то время работал», имела в виду, что два месяца назад, программа была разработана, оттестирована полностью вся цепочка, в т.ч. и выравнивание – проблем с блокировками не возникало. А через два месяца перестают работать блокировки (или наоборот начали работать? Question ). Ведь так не бывает?
Back to top
View user's profile Send private message
vga
Мастер
Мастер


Age: 170
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Wed Feb 18, 2009 11:27 am    Post subject: Reply with quote

Может увеличение в системе количества документов стало приводить к задержкам?

Проверяйте, что блокировка снята перед началом следующей итерацией и если нет, вводите временную задержку.
ФМ 'ENQUEUE_READ'. Примеры есть на форуме
Back to top
View user's profile Send private message Blog Visit poster's website
NIYA
Участник
Участник



Joined: 16 Feb 2009
Posts: 4

PostPosted: Wed Feb 18, 2009 2:49 pm    Post subject: Reply with quote

Спасибо за ответы.
Программу переделала, теперь перед вызовом call transaction блокировки снимаю, все работает.
Из ваших рекомендаций я поняла, что совет «Перед вызовом стандартных транзакций блокировки нужно снимать» нужно воспринять как аксиому.
Режим блокировки «E» (Exclusive (write lock): simultaneous read or write locks for this object are rejected; only the same owner (see The Owner Concept) can request the lock again. This is referred to as cumulation.( see Cumulation of Locks)) не распространяет свое действие при вызове стандартной транзакции из своей программы, даже если при этом задать _SCOPE = 3 , т.е. owner не наследуется, кумулятивный счетчик не увеличивается и, следовательно, когда стандартная транзакция устанавливает блокировку происходит Owner Collision
An owner collision exists if one of the following conditions applies to an elementary lock collision:
• At least one owner is different
• The owners are identical but at least one lock has mode X
Back to top
View user's profile Send private message
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Wed Feb 18, 2009 4:04 pm    Post subject: Reply with quote

Снятие блокировки перед call transaction - не догма и не аксиома Wink

Вы неправильно поняли перевод: "только в случае, когда блокировки вызываются от одного владельца..".
Владельцем(owner) по концепции блокировок SAP служит не программа, а LUW - логический шаг. Вызов стандартной транзакции в рамках своей программы - это уже другой LUW, поэтому и происходит ошибка.

_________________
С уважением,
Удав.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG.
SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG.
Every effort is made to ensure content integrity. Use information on this site at your own risk.