[ Вопрос дня ] Как избежать коллизии, когда два пользователя решили редактировать один документ?

Доброго дня, коллеги!

Как обещали, сегодня попробуем разобраться с интересным и весьма распространенным, на наш взгляд, вопросом, с которым сталкиваются на практике большинство разработчиков 1С.

Для начала вспомним, что платформа содержит метод глобального контекста ПоказатьОповещениеПользователя(). При помощи него можно показывать сообщения в правом нижнем углу приложения в небольшом затухающем окошке (рис. 1.):

Реализация услуг и прочих активов

Рис. 1.  Демонстрация работы метода ПоказатьОповещениеПользователя()

Наш слушатель, изучая курс, озадачился вот каким вопросом:

Вопрос

Возможно ли через ПоказатьОповещениеПользователя() реализовать такой процесс: если 2 пользователя открыли документ и первый внес изменение, тогда вывести второму пользователю сообщение “закройте документ”.

Ответ

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

1) При открытии формы повесить обработчик ожидания и в нем делать запрос к базе и проверять в нем, не изменилась ли ВерсияДанных документа. Способ не очень хороший, потому что будет грузить систему постоянными запросами.

2) Использовать недавно появившуюся возможность Системы взаимодействия. С версии 8.3.15.1489 реализовано взаимодействие между пользователями именно в тех случаях, когда они пытаются редактировать одни и те же данные. Более подробно об этом можно прочитать здесь.

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

Кстати, коллеги, может вы поделитесь своим опытом, сталкивались ли вы в своей практической работе с подобными задачами, когда нужно было вмешаться в механизм объектных блокировок при интерактивной работе пользователя? Комментарии открыты!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Вход на сайт

Зарегистрироваться

Подтверждение регистрации будет отправлено на указанный e-mail.

Я подтверждаю, что ознакомлен(а) с Пользовательским соглашением, принимаю его условия и даю свое согласие на обработку моих персональных данных.

Восстановить доступ

E-mail или логин

Ссылка на создание нового пароля будет отправлена на указанный e-mail.