И что делать, если после вызова стандартного BAPI оператор COMMIT WORK AND WAIT не дожидается выполнения всех V1-модулей обновления.

Проблема синхронизации модулей обновления


В системе SAP R/3 для транзакционного сохранения дополнительных данных, связанных с основными, используются модули обновления. Более подробно об этом можно почитать, например, здесь.

Для консистентности данных после сохранения необходимо дождаться выполнения модулей типа V1. В общем случае это достигается выполнением команды COMMIT WORK AND WAIT.
В тексте некоторых стандартных функциональных модулей BAPI вызывается COMMIT WORK. После выполнения такого ФМ-а вы не сможете убедиться в завершенности процесса сохранения никакими простыми командами. Некоторые программисты для решения этой проблемы пишут какие-то сложные запросы к таблице VB или ждут ничем не обоснованные n секунд. Все намного проще.

SET UPDATE TASK LOCAL приходит на помощь


Если кратко — он запускает локальный режим выполнения для V1-модулей обновления. Режим активируется для V1-модулей обновления, зарегистрированных с момента вызова оператора и до момента завершения текущего DB LUW-а. При этом V1-модули:

  • сохраняются в ABAP-memory, а не в таблицу обновлений VB;
  • выполняются в текущем процессе, а не в параллельном;
  • синхронизируются оператором COMMIT WORK.

То есть при вызове COMMIT WORK программа будет ждать, пока выполнятся модули обновления типа V1, зарегистрированные локально. Разница показана на рисунке:



Итого SET UPDATE TASK LOCAL пригодится, если вы не можете управлять оператором COMMIT WORK и хотите дождаться выполнения всех V1-модулей для какого-то процесса.