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

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Вт, фев 22 2005, 09:36 
Гость
Anonymous написал(а):
спасибо.
вставил CALL FUNCTION 'ENQUEUE_EXLFA1' с WAIT 'X'.
вопрос вот какой при вызове данной функции она будет пытаться заблокировать объект единожды, те наткнулось на блокировку и выдало сообщение что объект заблокирован. Или ждет пока не произойдет разблокировка объекта?

Разблокировать должен ты сам :wink:


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, фев 22 2005, 09:56 
Гость
Удав написал(а):
Разблокировать должен ты сам :wink:


Я понял так, если я ставлю блокировку это означает что запись появилась в таблице и я счастливый делаю селект. Блокировка действует пока выполняется программа. Те как только мы возвращаемся из call trans. в нашу программу блокировки транзакции снимаются. Зачем их разблокировать?
Объясните если не сложно.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, фев 22 2005, 10:06 
Гость
nicky555 написал:
А почему не попробовать SET UPDATE TASK LOCAL?
Или я чего-то не уловил? :roll:

Попробовал, нет счастья.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, фев 22 2005, 10:17 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
Я, честно говоря, тоже не очень понимаю этот приём с блокировками. Объясните, пожалуйста по-подробнее. Ведь блокировку можно поставить на любую запись, даже на ту, которой не существует.
Можете сами убедиться:
Code:
REPORT  zef_test2                                                   .

DATA:
  l_ebeln TYPE ebeln
.

PARAMETERS:
  gp_mode " 'S' 'R' 'X'
.

l_ebeln = 'GHOSTEBELN'.

CALL FUNCTION 'ENQUEUE_EMEKKOS'
EXPORTING
   mode_ekko            = gp_mode
*   MANDT                = SY-MANDT
   ebeln                = l_ebeln
*   X_EBELN              = ' '
*   _SCOPE               = '2'
   _WAIT                = 'X'
*   _COLLECT             = ' '
EXCEPTIONS
   FOREIGN_LOCK         = 1
   SYSTEM_FAILURE       = 2
   OTHERS               = 3
          .

WRITE sy-subrc.


Может, я что-то неправильно понял?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, фев 22 2005, 11:01 
Гость
petrovic написал(а):
Удав написал(а):
Разблокировать должен ты сам :wink:


Я понял так, если я ставлю блокировку это означает что запись появилась в таблице и я счастливый делаю селект. Блокировка действует пока выполняется программа. Те как только мы возвращаемся из call trans. в нашу программу блокировки транзакции снимаются. Зачем их разблокировать?
Объясните если не сложно.

Дело в том, что установка блокировки ПОСЛЕ выполнения call transaction нужна только для того, чтобы определить, закончился ли процесс обновления данных. Вызов блокировки осуществляешь ты сам. Если блокировка установилась, то для освобождения блокированных тобой данных ты должен вызвать функцию разблокировки DEQUEUE.
И после этого, счастливый, делаешь select :wink:
По поводу проверки блокировки в цикле: она нужна для предотвращения "закцикливания" в случае, когда блокировка не снялась, либо кто-то другой успел раньше послать запрос на блокирование этой записи.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, фев 22 2005, 11:03 
Гость
EGF написал(а):
Я, честно говоря, тоже не очень понимаю этот приём с блокировками. Объясните, пожалуйста по-подробнее. Ведь блокировку можно поставить на любую запись, даже на ту, которой не существует.
Можете сами убедиться:
Code:
REPORT  zef_test2                                                   .

DATA:
  l_ebeln TYPE ebeln
.

PARAMETERS:
  gp_mode " 'S' 'R' 'X'
.

l_ebeln = 'GHOSTEBELN'.

CALL FUNCTION 'ENQUEUE_EMEKKOS'
EXPORTING
   mode_ekko            = gp_mode
*   MANDT                = SY-MANDT
   ebeln                = l_ebeln
*   X_EBELN              = ' '
*   _SCOPE               = '2'
   _WAIT                = 'X'
*   _COLLECT             = ' '
EXCEPTIONS
   FOREIGN_LOCK         = 1
   SYSTEM_FAILURE       = 2
   OTHERS               = 3
          .

WRITE sy-subrc.


Может, я что-то неправильно понял?

Конечно на любую :D
Но ведь тебе нужно проверить конкретную блокировку.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, фев 22 2005, 11:13 
Гость
to udav СПасибо


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, фев 22 2005, 11:53 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
Удав написал(а):
Дело в том, что установка блокировки ПОСЛЕ выполнения call transaction нужна только для того, чтобы определить, закончился ли процесс обновления данных.

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


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, фев 22 2005, 11:58 
Гость
И в своих программах тоже использовать блокировки :)


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, фев 22 2005, 12:17 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
Удав написал(а):
И в своих программах тоже использовать блокировки :)

Я имею в виду не только и не столько свои программы. Я имею в виду все программы, в том числе и написанные SAP. А там чего только не понаписано...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, фев 22 2005, 20:52 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вс, окт 17 2004, 14:20
Сообщения: 326
Откуда: Москва
EGF написал(а):
Удав написал(а):
Дело в том, что установка блокировки ПОСЛЕ выполнения call transaction нужна только для того, чтобы определить, закончился ли процесс обновления данных.

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

Если уж пошел такой предметный разговор по блокировкам, то блокировать данные надо не перед вызовом UPDATE модуля, а перед чтением данных, которые потом в этом UPDATE модуле собираешься изменять. Иначе к моменту update'a этих данных вообще может не оказаться в БД.


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

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


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

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


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

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