Особенности удаления блокировки в SM12
Рассмотрим ситуацию, когда сталкиваются интересы двух пользователей, желающих изменить один и тот же документ. Система, получая запрос на изменение данных, выставляет блокировку, запрещающую всем остальным менять документ, пока процесс изменения не будет завершен.
Оглавление
Особенности удаления блокировки в SM12
Пример ошибочной работы с sm12
"И тут считать мы стали раны..."
Случаи, когда можно и нужно использовать sm12 без опаски
Рекомендации по безопасной работе с sm12
Особенности удаления блокировки в SM12
Рассмотрим ситуацию, когда сталкиваются интересы двух пользователей, желающих изменить один и тот же документ. Система, получая запрос на изменение данных, выставляет блокировку, запрещающую всем остальным менять документ, пока процесс изменения не будет завершен. В случае, если кто-либо попытается изменить блокированный документ, система выставить информационное сообщение (рис. 1) о том, что ведение документа блокировано и укажет имя пользователя, проводящего текущее изменение:
Рис. 1. Сообщение о блокировке другим пользователем.
В этой ситуации рекомендуется либо дождаться завершения процесса другим пользователем, либо связаться с ним и уточнить, когда он закончит работу с нужным документом. Но достаточно часто пользователь не хочет ждать или связываться с другим пользователем, а обращается к администратору системы с требованием разблокировать документ.
И вот тут администратор должен очень тщательно проанализировать ситуацию и устранить проблему, избегая негативных последствий, которые могут возникнуть, если просто удалить блокировку в SM12.
Пример ошибочной работы с sm12
Рассмотрим пошагово простой пример по изменению постоянных данных пользователя двумя различными пользователями с применением снятия блокировки записи.
1. Допустим, пользователь TEST_BC изменял в системе свои постоянные данные (рис. 2):
Рис. 2. Изменение собственных данных.
и устанавливает признак «Немедленный вывод» для устройства печати (рис. 3):
Рис. 3. Изменение устройства вывода.
но при этом еще не успел сохранить сделанные изменения по (Ctrl-S). Не важно по какой причине: покинул свое рабочее место по срочному делу (например, вызвал начальник или ушел на кофе-брейк), или же случилось непредвиденное (пропало питание на рабочем компьютере или произошел сбой в сети и связь с системой была утрачена) …
2. По «случайному» совпадению администратор ADM_WORK решил, предположим, изменить у пользователя TEST_BC устройство вывода на печать через SU01 и получает от системы следующее сообщение(рис. 4):
Рис. 4. Сообщение о блокировке и подробная информация по сообщению.
В подробной информации, которую можно получить по нажатию кнопки , дается рекомендации повторить попытку, после завершения операции другим пользователем.
То есть, ADM_WORK должен дождаться, когда пользователь TEST_BC закончит операцию, сохранив свои изменения.
Допустим, что ждать нет времени, а связаться с пользователем TEST_BC нет возможности и администратор ADM_WORK решает снять блокировку через SM12.
Посмотрим, что из этого в итоге получится …
3. Запускаем SM12, указав имя пользователя TEST_BC (рис. 5.):
Рис. 5. Выбор записи блокирования в SM12.
Выбираем запись блокировки и нажимаем удаление (рис. 6.) :
Рис. 6. Список записей блокирования.
Подтверждаем свое намерение удалить блокировку (рис. 7.):
Рис. 7. Удаление записи блокирования
Система предупреждает (лучше поздно, чем никогда) о потенциальной опасности удаления записи блокирования (рис. 8.):
Рис. 8. Предупреждение о потенциальной опасности удаления записи блокирования.
Если работаем с системой на русском языке, то предупреждения не будет ("привет" команде локализации!).
При этом в системном журнале (SM21) будет зафиксировано удаление блокировки (рис. 9.):
Рис. 9. Запись об удалении записи блокировки в системном журнале
Поскольку блокировка основной записи пользователя TEST_BC удалена администратор ADM_WORK может назначить новое устройство вывода (рис. 10.):
Рис.
Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland
ЗарегистрироватьсяУ вас уже есть учетная запись?
Войти
Обсуждения 9
Комментарий от
Вячеслав Шиболов
| 24 октября 2017, 09:32
Спасибо за статью.
Но у меня, если позволите, есть несколько дополнений.
Как вы отметили в своей статье, система блокировок на уровне SAP служит для предотвращения коллизий и поддержания целостности базы данных на уровне бизнеса. Удаление блокировок, как вы так же отметили, крайне опасная операция.
Таким образом, идти на поводу пользователя, который просит освободить ему документ и удалить блокировку другого пользователя, при работающем в системе пользователе, по моему мнению, крайне некорректно. Такая просьба должна быть отклонена с подробнейшим рассказом про устройство системы блокировок. Решение проблемы долго блокирующих документ пользователей должно быть перенесено на уровень менеджмента и дополнено донесением до пользователей системы правил работы с ней.
Удаление режима пользователя (вместе с блокировками) без согласования с ним и сохранением результатов его работы, тоже выглядит странно. Администратор должен использовать свою силу только в крайних случаях. Оценить объем работы пользователя администратор (через просмотр транзакций SM04 и SM12) не может. А вдруг человек полдня заполнял формы на экране? А администратор, взмахом мыши, идя на поводу кого-то, перечеркивает его работу?
Удалять блокировки, как вы и указали, можно только лишь в случаях "старых" блокировок, которые остались при выходе (корректном или нет) пользователя из системы. И только в крайнем случае.
В целом, статья полезна, но посыл я бы сделал другим:
1. Удалять блокировки нельзя.
2. Выкидывать пользователей из системы (тран. SM04) некорректно.
3. Пользователей, которые не могут что-то поменять из-за блокировок, учить и не идти у них на поводу.
4. Старые блокировки чистить крайне осторожно.
Ну и + за пример того, что будет, если два пользователя сохранят документ без работающей системы блокировок.
По поводу "камня в огород" команды локализации могу сказать, что локализация базисных программ и транзакций минимальна. Считается, что специалист по базису должен работать в системе на английском языке. Документация вся на английском, общение со службой поддержки по поводу проблем базиса тоже на английском.
Комментарий от
Анатолий Халимовский
| 24 октября 2017, 10:21
Вячеслав Шиболов 24 октября 2017, 09:32
Анатолий, добрый день.
Спасибо за статью.
Но у меня, если позволите, есть несколько дополнений.
Как вы отметили в своей статье, система блокировок на уровне SAP служит для предотвращения коллизий и поддержания целостности базы данных на уровне бизнеса. Удаление блокировок, как вы так же отметили, крайне опасная операция.
Таким образом, идти на поводу пользователя, который просит освободить ему документ и удалить блокировку другого пользователя, при работающем в системе пользователе, по моему мнению, крайне некорректно. Такая просьба должна быть отклонена с подробнейшим рассказом про устройство системы блокировок. Решение проблемы долго блокирующих документ пользователей должно быть перенесено на уровень менеджмента и дополнено донесением до пользователей системы правил работы с ней.
Удаление режима пользователя (вместе с блокировками) без согласования с ним и сохранением результатов его работы, тоже выглядит странно. Администратор должен использовать свою силу только в крайних случаях. Оценить объем работы пользователя администратор (через просмотр транзакций SM04 и SM12) не может. А вдруг человек полдня заполнял формы на экране? А администратор, взмахом мыши, идя на поводу кого-то, перечеркивает его работу?
Удалять блокировки, как вы и указали, можно только лишь в случаях "старых" блокировок, которые остались при выходе (корректном или нет) пользователя из системы. И только в крайнем случае.
В целом, статья полезна, но посыл я бы сделал другим:
1. Удалять блокировки нельзя.
2. Выкидывать пользователей из системы (тран. SM04) некорректно.
3. Пользователей, которые не могут что-то поменять из-за блокировок, учить и не идти у них на поводу.
4. Старые блокировки чистить крайне осторожно.
Ну и + за пример того, что будет, если два пользователя сохранят документ без работающей системы блокировок.
По поводу "камня в огород" команды локализации могу сказать, что локализация базисных программ и транзакций минимальна. Считается, что специалист по базису должен работать в системе на английском языке. Документация вся на английском, общение со службой поддержки по поводу проблем базиса тоже на английском.
Основная цель статьи как раз и состояла в том чтобы донести до широких масс информацию о технических особенностях работы с блокировками. Описание того как регламентировать на проекте обработку такой ситуации не входило в мои планы.
Камнями я не разбрасываюсь - просто отметил что сообщение не возникает ВООБЩЕ. По вашему это допустимо?
Комментарий от
Вячеслав Шиболов
| 24 октября 2017, 10:38
Анатолий Халимовский 24 октября 2017, 10:21
Вячеслав, спасибо за отзыв!
Основная цель статьи как раз и состояла в том чтобы донести до широких масс информацию о технических особенностях работы с блокировками. Описание того как регламентировать на проекте обработку такой ситуации не входило в мои планы.
Камнями я не разбрасываюсь - просто отметил что сообщение не возникает ВООБЩЕ. По вашему это допустимо?
В целом, я разделяю ваше возмущение. Но тут вопрос скорее к разработчику программы, а не локализаторам.
Комментарий от
Анатолий Халимовский
| 24 октября 2017, 11:04
Вячеслав Шиболов 24 октября 2017, 10:38
Нет, это недопустимо, но скорее всего никто не тестировал эту транзакцию на русском языке, так как она базисная. А базисник должен знать про опасность работы с блокировками без финального сообщения при их удалении. :)
В целом, я разделяю ваше возмущение. Но тут вопрос скорее к разработчику программы, а не локализаторам.
Комментарий от
Олег Точенюк
| 24 октября 2017, 23:09
И было бы неплохо, если бы создатели системы предусмотрели при удалении записи блокировки в SM12 автоматическое удаление сеанса
===
Ну, что вам сказать, уровень неожиданной смертности среди базиса может значительно повыситься, после реализации этой "неплохи" :-) Кстати пример не очень, как говорил господин Григорий Остер, надо копать глубже. Вы при проводке, например отпуска запаса, блокировку с ОЗМ так снимите и в параллельной сессии еще один документ проведите, а потом первый сохраните, это будет гораздо веселее :-)
Комментарий от
Анатолий Халимовский
| 25 октября 2017, 12:52
Олег Точенюк 24 октября 2017, 23:09
===
И было бы неплохо, если бы создатели системы предусмотрели при удалении записи блокировки в SM12 автоматическое удаление сеанса
===
Ну, что вам сказать, уровень неожиданной смертности среди базиса может значительно повыситься, после реализации этой "неплохи" :-) Кстати пример не очень, как говорил господин Григорий Остер, надо копать глубже. Вы при проводке, например отпуска запаса, блокировку с ОЗМ так снимите и в параллельной сессии еще один документ проведите, а потом первый сохраните, это будет гораздо веселее :-)
"когда нечто подобное, описанному в примере, происходит с документом, при сохранении которого запускается цепочка документов и различные перерасчеты?"
Требовался пример простой.
И кстати, вопрос по SM12 был обычно первый, а иногда и единственный, который я задавал кандидатам ;)
Комментарий от
Олег Точенюк
| 25 октября 2017, 16:32
Анатолий Халимовский 25 октября 2017, 12:52
Олег, я упомянул в статье про более изощренные варианты:
"когда нечто подобное, описанному в примере, происходит с документом, при сохранении которого запускается цепочка документов и различные перерасчеты?"
Требовался пример простой.
И кстати, вопрос по SM12 был обычно первый, а иногда и единственный, который я задавал кандидатам ;)
Комментарий от
Анатолий Халимовский
| 25 октября 2017, 17:07
Олег Точенюк 25 октября 2017, 16:32
Кандидатам на базис или и функциональным консультантам?
Комментарий от
Сергей Куприянов
| 19 февраля 2019, 12:40
А можно как-то однозначно связать запись блокировки в SM12 и сессию пользователя в SM04? Пользователи работают через портал, кода транзакции в SM12 нет. На каждую сессию пользователя в портале - в SM04 отдельная сессия с типом HTTP.
Получить список SM04 можно так:
DATA(lt_session_list) = cl_system_info=>get_session_list( ).
Очередь блокировок через CALL FUNCTION 'ENQUEUE_READ'
но связать блокировку с сессией не получается. Есть какие-то еще варианты?
С уважением Сергей