Доброго дня, коллеги!
Как обещали, сегодня попробуем разобраться с интересным и весьма распространенным, на наш взгляд, вопросом, с которым сталкиваются на практике большинство разработчиков 1С.
Для начала вспомним, что платформа содержит метод глобального контекста ПоказатьОповещениеПользователя(). При помощи него можно показывать сообщения в правом нижнем углу приложения в небольшом затухающем окошке (рис. 1.):
Рис. 1. Демонстрация работы метода ПоказатьОповещениеПользователя()
Наш слушатель, изучая курс, озадачился вот каким вопросом:
Вопрос
Ответ
ПоказатьОповещениеПользователя само по себе не умеет оповещать другого пользователя. Если один пользователь изменил документ, то другой узнает об этом только когда попытается записать документ. В принципе, описанную задачу можно решить двумя способами:
1) При открытии формы повесить обработчик ожидания и в нем делать запрос к базе и проверять в нем, не изменилась ли ВерсияДанных документа. Способ не очень хороший, потому что будет грузить систему постоянными запросами.
2) Использовать недавно появившуюся возможность Системы взаимодействия. С версии 8.3.15.1489 реализовано взаимодействие между пользователями именно в тех случаях, когда они пытаются редактировать одни и те же данные. Более подробно об этом можно прочитать здесь.
Подводя итог, отметим, что даже если ничего не делать из вышеописанного, то платформа содержит эффективный механизм объектных блокировок, которые не позволяют интерактивно изменить двум пользователям один объект. Этот механизм работает по умолчанию для предотвращения подобного рода коллизий.
Кстати, коллеги, может вы поделитесь своим опытом, сталкивались ли вы в своей практической работе с подобными задачами, когда нужно было вмешаться в механизм объектных блокировок при интерактивной работе пользователя? Комментарии открыты!
Профессиональная разработка интерфейсов и форм в 1С:Предприятие 8.3.