deep shark написал(а):
111 написал(а):
Технически это выглядит так.
Находишь любой ФМ, блокирующий записи, по маске *ENQUEUE*.
Потом находишь любой ФМ, снимающий блокировку, по маске *DEQUEUE*.
Изучаешь их работу - там все просто до дебилизма.
как раз этот способ и не прокатил, именно так и делаю...
Что значит - "не прокатил"?
Что именно не прокатило? Например, в этом ФМ:
===========================
FUNCTION ENQUEUE_ARRAY.
*"----------------------------------------------------------------------
*"Lokale Schnittstelle:
*" IMPORTING
*" DEQUEUE DEFAULT SPACE
*" GOBJ LIKE SEQG3-GOBJ DEFAULT 'ENQARRAY'
*" EXPORTING
*" COLLISION_GOBJ LIKE SEQG3-GOBJ
*" COLLISION_GUNAME LIKE SEQG3-GUNAME
*" TABLES
*" ENQ_ARRAY STRUCTURE SEQTA
*" EXCEPTIONS
*" ARGUMENT_ERROR
*" FOREIGN_LOCK
*" OWN_LOCK
*" SYSTEM_FAILURE
*" TABLE_OVERFLOW
*"----------------------------------------------------------------------
DATA: SEQTA_SEND LIKE SEQTA OCCURS 50,
OPCODE LIKE SEQAREA-OPCODE,
SCOPE LIKE SEQAREA-SCOPE,
RC LIKE SY-SUBRC.
CASE DEQUEUE.
WHEN ' '.
OPCODE = '1'.
SCOPE = '2'.
WHEN 'X'.
OPCODE = '2'.
SCOPE = '3'.
WHEN OTHERS.
MESSAGE A114 RAISING ARGUMENT_ERROR.
* Fehlerhafter Aufruf-Parameter
ENDCASE.
PERFORM ADD_MANDT TABLES ENQ_ARRAY SEQTA_SEND.
PERFORM FLUSH_LIST(SAPLSENA)
TABLES SEQTA_SEND
USING OPCODE SCOPE ' ' ' ' GOBJ ' '
CHANGING RC COLLISION_GUNAME COLLISION_GOBJ.
CASE RC.
WHEN 0.
WHEN 1.
MESSAGE A111 RAISING OWN_LOCK.
* Bereits bestehende eigene Sperre verhindert weitere eigene Sperren
WHEN 2.
MESSAGE A110 WITH COLLISION_GUNAME RAISING FOREIGN_LOCK.
* Objekt ist momentan gesperrt durch User &
WHEN 4.
MESSAGE A112 RAISING TABLE_OVERFLOW.
* Sperrtabelle ist momentan ќbergelaufen
WHEN OTHERS.
MESSAGE A113 RAISING SYSTEM_FAILURE.
* Systemfehler bei Sperroperation (Bitte in SM12 Diagnose ausfќhren)
ENDCASE.
ENDFUNCTION.