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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Yandex [Bot]


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

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