Текущее время: Пт, июл 04 2025, 04:18

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: Проверить блокировки объектов
СообщениеДобавлено: Чт, июн 01 2006, 11:29 
Ассистент
Ассистент

Зарегистрирован:
Пт, фев 17 2006, 16:43
Сообщения: 28
Здравствуйте,
Я использую BAPI_PO_CREATE для создания заказа на приобретение. Если во время выполнения этого BAPI другой пользователь займет необходимые объекты (контракт, запись материала), то получаем ошибку типа: "Данные по заводу для материала 0020200145 блокированы пользователем LAVROVA".
Вопрос состоит в том, как мне до вызова BAPI проверять свободны ли нужные объекты и как првильно ждать, пока они освободяться?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверить блокировки объектов
СообщениеДобавлено: Чт, июн 01 2006, 11:49 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, ноя 12 2004, 10:44
Сообщения: 370
Откуда: Москва
GUGO написал(а):
Здравствуйте,
Я использую BAPI_PO_CREATE для создания заказа на приобретение. Если во время выполнения этого BAPI другой пользователь займет необходимые объекты (контракт, запись материала), то получаем ошибку типа: "Данные по заводу для материала 0020200145 блокированы пользователем LAVROVA".
Вопрос состоит в том, как мне до вызова BAPI проверять свободны ли нужные объекты и как првильно ждать, пока они освободяться?

воссоздай ситуацию - заблокируй что-нибудь сам и в SM12 посмотри. ждать не стоит. бывают люди, которые входят на редактирование чего-либо и уходят с рабочего места... ;)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 01 2006, 11:50 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Ср, сен 22 2004, 08:42
Сообщения: 1079
Откуда: Москва
Пол: Мужской
Смотри ФM ENQUEUE_READ.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Проверить блокировки объектов
СообщениеДобавлено: Чт, июн 01 2006, 11:56 
Ассистент
Ассистент

Зарегистрирован:
Пт, фев 17 2006, 16:43
Сообщения: 28
Что такое SM12 я знаю.
Речь идет о програмном способе. Что-то типа функций вида ENQUEUE_*.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Проверить блокировки объектов
СообщениеДобавлено: Чт, июн 01 2006, 12:07 
Ассистент
Ассистент

Зарегистрирован:
Пт, фев 17 2006, 16:43
Сообщения: 28
2Mike1
Насколько я понимаю, эта функция определяет блокировку конкретной отдельной таблицы (например KNB1):
Code:
DATA: GARG LIKE SEQG3-GARG,
  ENQ LIKE SEQG3 OCCURS 1 WITH HEADER LINE.
 
REFRESH ENQ.
  CONCATENATE SY-MANDT KUNNR BUKRS INTO GARG.
  CALL FUNCTION 'ENQUEUE_READ'
       EXPORTING
            GCLIENT               = SY-MANDT
            GNAME                 = 'KNB1'
            GARG                  = GARG
            GUNAME                = SPACE
       TABLES
            ENQ                   = ENQ
       EXCEPTIONS
            COMMUNICATION_FAILURE = 1
            SYSTEM_FAILURE        = 2
            OTHERS                = 3.
  READ TABLE ENQ INDEX 1.
  IF SY-SUBRC = 0.
    MESSAGE S041 WITH KUNNR BUKRS ENQ-GUNAME.
    LEAVE LIST-PROCESSING.
  ENDIF.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Проверить блокировки объектов
СообщениеДобавлено: Чт, июн 01 2006, 12:09 
Ассистент
Ассистент

Зарегистрирован:
Пт, фев 17 2006, 16:43
Сообщения: 28
Как определить какие таблицы понадобятся BAPI_PO_CREATE?
Нельзя ли блокировать (проверять) сразу все связанные объекты?
P.S. кажется я слишком многого захотел :lol:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 01 2006, 12:15 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Ср, сен 22 2004, 08:42
Сообщения: 1079
Откуда: Москва
Пол: Мужской
Если не заполнять GNAME и GARG можно получить полный список блокировок.
А количества Z в вашей системе я предсказать не берусь.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 01 2006, 12:22 
Гость
Может лучше использовать BAPI_PO_CREATE1 ?

Там есть тестовый режим, который и проверит отсуствие блокировок....


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения: Проверить блокировки объектов
СообщениеДобавлено: Чт, июн 01 2006, 13:14 
Ассистент
Ассистент

Зарегистрирован:
Пт, фев 17 2006, 16:43
Сообщения: 28
ToРМщик Огромное спасибо, все работает.
Непонятно только, что я буду делать, когда такой вопрос встанет с Документом движения материала, например?
Ведь предложенный способ весьма спецефичен и не подойдет в других случаях.... :roll:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверить блокировки объектов
СообщениеДобавлено: Чт, июн 01 2006, 13:17 
Гость
[quote="GUGO"]Непонятно только, что я буду делать, когда такой вопрос встанет с Документом движения материала, например?
[quote]

в BAPI_GOODSMVT_CREATE тоже есть тестовый режим :)
или я не понял вопроса?


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения: Проверить блокировки объектов
СообщениеДобавлено: Чт, июн 01 2006, 14:04 
Ассистент
Ассистент

Зарегистрирован:
Пт, фев 17 2006, 16:43
Сообщения: 28
Э... Ну в Сапе же есть BAPI, где нет TESTRUN (ну BAPI_BATCH_CREATE вроде бы)...
Я просто хотел узнать можно ли использовать этот способ для других BAPI (там где нет TESTRUN). Например, делая ролбэк если в RETURN встретились сообщения о блокировках.

Возник еще вопрос: что делать, если блокировка есть? Следует ли в цикле (каждые n секунд, но не более m раз) вызывать BAPI в TESTRUN, пока блокировки не снимутся, или есть более правильный способ (например, как-то поставить себя в очередь к объекту и ждать уже события)?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 01 2006, 14:13 
Гость
после грамотных бапишек - всегда нужен commit work
поэтому можно анализировать результат отработки бапишки

и делать что-то вроде

call function 'BAPI....'
...
...
IMPORTING
DOCNUM = DOCNUM.


If docnum is initial.
rollback work.
else.
commit work.
endif.

или же тоже самое по exception's через sy-subrc


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 01 2006, 14:16 
Гость
а ставить или не ставить в очередь - вопрос не имеет однозначного ответа для ВСЕХ задач.

Вот у нас например, все движения материала через bapi - обязательно становятся в очередь, потому что их слишком много, да и логика движения материала без очереди может нарушиться


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения: Проверить блокировки объектов
СообщениеДобавлено: Чт, июн 01 2006, 15:25 
Ассистент
Ассистент

Зарегистрирован:
Пт, фев 17 2006, 16:43
Сообщения: 28
Не могли бы вы привести пример кода, в котором объекты ставятся в очередь и ждут освобождения блокировки.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 01 2006, 16:21 
Гость
Code:
    call function 'TRFC_SET_QUEUE_NAME'
      exporting
        qname  = qname  "Устанавливаем имя очереди
      exceptions
        others = 99.
    if sy-subrc <> 0.
      call function 'Z_.....'
         in background task
       .....
    endif.


Принять этот ответ
Вернуться к началу
  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

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


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

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


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

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