Запретить пользователям одновременно запускать обработку

В этой статье я расскажу, как запретить пользователям одновременно запускать обработку.

1. Добавить в базу справочник «Блокировки» и добавить в него произвольный предопределенный элемент. В моем примере это элемент «ЗагрузкаЗаказовРозница»:

Предопределенный элемент справочника 1С
Предопределенный элемент справочника

Примечание: если вы не хотите менять конфу, то справочник добавлять не надо, просто создайте любой произвольный элемент в каком-нибудь никому не нужном справочнике прямо в режиме «Предприятие». Например, добавьте элемент «Служебная группа» в справочник «Группы номенклатуры», если данным справочником никто не пользуется. Или заведите номенклатуру «Служебная номенклатура» в заброшенной папке номенклатуры (У всех, кто работает в 1с больше года, есть папка «Не используем» или «Удаленные»).

2. В коде обработки написать следующий текст:

Если вы НЕ создавали справочник «Блокировки», то вместо

    • пишем:

Меняем текст сообщения на понятный пользователю, а между концом попытки и Разблокированием элемента пишем тот код, который можно делать только одному пользователю одновременно.
Пример процедуры, загружающей заказы с сайта:

Запретить пользователям одновременно запускать обработку 1С
Пример процедуры с блокировкой доступа

3. Даем права на новый справочник роли, которая есть у всех пользователей, причастных к нашей обработке.

4. Все, вы только что запретили пользователям одновременно запускать обработку!

На этом важная информация окончена, а теперь, если вам интересно, я расскажу, почему делать надо так, и не как иначе:

Почему бы не использовать константу или регистр сведений?

Потому что если сеанс работы пользователю будет аварийно завершен во время загрузки, то константа не будет переведена в режим, разрешающий загрузку, а в регистре сведений не появится записи о том, что загрузка окончена. Можно, конечно, создать секретную кнопку, меняющую константу или запись в регистре, но зачем вам эти сложности?

В случае же с блокировкой элемента, при аварийном завершении работы 1С объект автоматически разблокируется.

Почему новый справочник, а не элемент типового справочника?

Если конфа уже изменена, то вы ничего не потеряете, добавив справочник, но таким справочником вы, во-первых, не создадите лишний элемент в типовом справочнике, а во-вторых, защитите свою обработку от удаления (переименования/изменения кода) этого «ненужного» элемента каким-нибудь очень ответственным пользователем. К тому же, у вас может появиться потребность добавить такой же функционал в другой обработке и вы будете вынуждены создать еще один «ненужный» элемент в типовом справочнике. «Невидимый» справочник с предопределенными элементами, которые используете только вы – идеальный вариант.

Режим блокировки базы и справочника?

Я проверял на управляемых блокировках и на автоматических. Описанный выше алгоритм отлично работает в обоих вариантах блокировки.

Оставить комментарий

avatar
  Подписаться  
Уведомление о