Текущее время: Пн, июл 21 2025, 00:37

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Блокировка объектов
СообщениеДобавлено: Вт, апр 12 2011, 11:53 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, апр 24 2007, 15:56
Сообщения: 1402
Добрый день.
Есть странная (на мой взгляд), ситуация с блокировкой объектов.
Поэтому прошу сведущих лиц прояснить логику работы стандарта.
В общем, есть стандартная транзакция изменения документа.
Понятно, что при открытии этот документ блокируется.
При выходе из документа, происходят вызовы в след. порядке:
1) разблокировка документа
2) commit work
3) user-exit, в котором вызывается BAPI для изменение связанного документа
4) внутрях программ обработки этого связанного документа анализируется блокировка исходного документа
5) дык вот эта проверка в некотором % случаев выдает, что исходный документ блокирован текущим пользователем
Подскажите, в чем может быть косяк. Или как эту проблему можно разрешить.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Блокировка объектов
СообщениеДобавлено: Вт, апр 12 2011, 12:32 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Дело в том, что блокировка действует и на ФМ обновления (IN UPDATE TASK), которая выполняется асинхронно в отдельном процессе и к моменту вызова USER-EXIT этот ФМ может еще выполняться.
В этом случае необходимо в USER-EXIT организовать цикл с задержкой, внутри цикла сделать проверку блокировки.
Code:
DO 50 TIMES.
  CALL FUNCTION 'ENQUEUE ...'
  IF sy-subrc = 0.
    CALL FUNCTION 'DEQUEUE ...' "Если BAPI сама выставляет блокировки
    lv_success = 'X'.
    EXIT.
  ELSE.
    CALL FUNCTION 'ENQUE_SLEEP'
      EXPORTING
        seconds = 1
      EXCEPTIONS
        others = 1.
  ENDIF.
ENDDO.
IF lv_success = 0. "Объект блокирован успешно (не блокирован)
...
ELSE.
  "Сообщение о блокировке
ENDIF.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Блокировка объектов
СообщениеДобавлено: Ср, апр 13 2011, 14:38 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, апр 24 2007, 15:56
Сообщения: 1402
Спасибо, попробую.
Удав написал(а):
Дело в том, что блокировка действует и на ФМ обновления (IN UPDATE TASK), которая выполняется асинхронно в отдельном процессе и к моменту вызова USER-EXIT этот ФМ может еще выполняться.

Т.е. пока не отработали все обновления (даже если была принудительна вызвана разблокировка в USER-EXIT), документ остается блокированным? И правильно ли я понял, если commit был бы с WAIT, то проблема не возникла?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Блокировка объектов
СообщениеДобавлено: Ср, апр 13 2011, 15:53 
Менеджер
Менеджер

Зарегистрирован:
Чт, янв 20 2005, 08:34
Сообщения: 573
Пол: Мужской
А гляньте в ST05 анализ блокировок.

_________________
Волю в кулак, мышцы в узду, работай себе и не ахай!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Блокировка объектов
СообщениеДобавлено: Ср, апр 13 2011, 16:49 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, июл 28 2007, 20:38
Сообщения: 364
troy написал(а):
Т.е. пока не отработали все обновления (даже если была принудительна вызвана разблокировка в USER-EXIT), документ остается блокированным? И правильно ли я понял, если commit был бы с WAIT, то проблема не возникла?

Да, при команде commit work and wait модули обновления запускаются синхронно. Но бывают ньансы. Пример - обработка ММ-заказов - commit work and wait не помогает. К своему стыду не нашел времени выяснить почему. Кроме цикла с попыткой блокирования можно еще сделать цикл с чтением таблицы блокировок (ENQUEUE_READ)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Блокировка объектов
СообщениеДобавлено: Ср, апр 13 2011, 16:59 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
__Gennady, возможно запускались V2 процессы. Они априори асинхронные и на WAIT чихать хотели.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Блокировка объектов
СообщениеДобавлено: Ср, апр 13 2011, 19:28 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, июл 28 2007, 20:38
Сообщения: 364
Пономарев Артем написал:
__Gennady, возможно запускались V2 процессы. Они априори асинхронные и на WAIT чихать хотели.

V2 процессы априори не требуют блокировки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Блокировка объектов
СообщениеДобавлено: Чт, апр 14 2011, 10:16 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
__Gennady, источником не поделитесь?

З.Ы.: Однако да. Сам нашел. http://help.sap.com/saphelp_nw04/helpdata/en/e5/de86e135cd11d3acb00000e83539c3/content.htm.
Но в таком случае ваше описание проблемы следует признать чудом :)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Блокировка объектов
СообщениеДобавлено: Чт, апр 14 2011, 12:56 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, фев 02 2009, 10:20
Сообщения: 89
Пол: Мужской
Сергей Королев это чудо объясняет в своей статье.

_________________
периодически играю в песочнице :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Блокировка объектов
СообщениеДобавлено: Чт, апр 14 2011, 13:15 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
SU53, я там не зря смайл поставил.
То, что сброс блокировок занимает некоторое время и, в принципе, может быть не закончен при передаче управления - это как бы очевидно. Но, ИМХО, крайне редкое явление.

Меня другое удивило. Что V2 процессы не наследуют блокировки. По идее это потенциальная беда.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Блокировка объектов
СообщениеДобавлено: Чт, апр 14 2011, 15:18 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, июл 28 2007, 20:38
Сообщения: 364
Пономарев Артем написал:
То, что сброс блокировок занимает некоторое время и, в принципе, может быть не закончен при передаче управления - это как бы очевидно. Но, ИМХО, крайне редкое явление.

Я это редкое явление наблюдаю постоянно. Не все BAPI, а только некоторые, кстати. Например BAPI_PO_CHANGE, BAPI_PO_RELEASE. Если между вызовами не вставить ожидание снятия блокировки - вторая скажет, что заказ блокирован.

Пономарев Артем написал:
Меня другое удивило. Что V2 процессы не наследуют блокировки. По идее это потенциальная беда.


Почему беда? В V2 выносится то, что не должно требовать блокировки. Например обновление статистики. И ресурсы системы распределяются более правильно.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Блокировка объектов
СообщениеДобавлено: Чт, апр 21 2011, 15:03 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, июн 02 2009, 22:28
Сообщения: 228
Откуда: MOW
Пол: Мужской
Вопрос много раз обсуждался.

Я для себя вывел следующие правила, хотя в последнее время было мало случаев проверить, поэтому могу ошибаться:
1. Чтобы после выполнения Update Task дождаться снятия блокировки, нет никакого способа кроме цикла ожидания, то есть даже SET UPDATE TASK LOCAL+ COMMIT WORK AND WAIT не помогает.
2. Теоретически SET UPDATE TASK LOCAL с COMMIT WORK AND WAIT должен гарантировать, что произошло ОБНОВЛЕНИЕ. То есть например после BAPI выполняем селект и видим уже измененные данные. 100% не проверял, это мое предположение. В любом случае завершение обновления не значит снятие блокировки, блокировка может еще висеть, см. пункт 1.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Блокировка объектов
СообщениеДобавлено: Чт, апр 21 2011, 16:27 
Почетный гуру
Почетный гуру
Аватара пользователя

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

...какой вариант лучше/надежнее/быстрее/чащеиспользуется??


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Блокировка объектов
СообщениеДобавлено: Чт, апр 21 2011, 17:38 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Мы используем конкретные объекты блокировки.
Насчет "чаще используется": посмотрите журнал использования ФМ ENQUEUE_READ и к примеру ENQUEUE_EFBKPF.
Затем в SE12 посмотрите количество объектов блокировки ;)
С точки зрения "универсальности" ENQUEUE_READ удобнее, но есть один ньюанс: его использование не гарантирует, что после снятия блокировки она не появится опять (в документ на редактирование зайдет другой пользователь).

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


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

Зарегистрирован:
Вт, апр 24 2007, 15:56
Сообщения: 1402
А есть ли принципиальное отличие в использовании LOOP-блокировки от использования параметра _WAIT?
Если нет, то где можно узнать(изменить) время ожидания по умолчанию?


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

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


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

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


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

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