Заметки из Зазеркалья

14.12.2018

Взаимодействие при редактировании одних и тех же данных

Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.

Планируется в версиях 8.3.15, 8.3.14.

Мы реализовали возможность взаимодействия между пользователями в тех случаях, когда они пытаются редактировать одни и те же данные. Теперь пользователи могут согласовать между собой последовательность своих действий, а при необходимости – освободить данные, занятые другим пользователем.

Пессимистическая блокировка

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

В тот момент, когда первый пользователь начинает изменять данные (например, какой-то документ) в форме, форма устанавливает пессимистическую блокировку. Если после этого второй пользователь попытается отредактировать этот же документ, ему будет выдано сообщение о том, что не удалось заблокировать объект.

31.png

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

Неудобства пессимистической блокировки

Само название этой блокировки говорит о её неудобстве. Когда пользователь начинает редактировать данные в форме, неизвестно, чем это закончится. Может быть, он откажется от своих изменений, и не станет сохранять изменения в базе данных. Но платформа предполагает самый плохой вариант, пессимистический, что данные обязательно будут изменены. И до тех пор, пока форма не закрыта, платформа будет блокировать эти данные для других пользователей.

В результате могут возникать следующие неудобные ситуации:

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

Взаимодействие при пессимистической блокировке

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

Во-первых, в версии 8.3.14 мы изменили логику, по которой снимается пессимистическая блокировка. Раньше она снималась после того, как пользователь закрывает форму. Теперь она снимается раньше, после того, как данные, которые изменялись в форме, записаны. О том, что данные записаны, сигнализирует признак модифицированности формы. Через минуту после того, как у формы снимается признак модифицированности, платформа автоматически снимает и пессимистическую блокировку.

Поэтому теперь достаточно просто записать данные в форме, а саму форму можно оставить открытой. Через минуту другие пользователи смогут изменять эти же данные.

Во-вторых, в версии 8.3.15 мы пошли ещё дальше, и задействовали в этом процессе систему взаимодействия. Сервер взаимодействия 1С:Диалог, развернутый фирмой «1С», доступен для всех желающих. Поэтому любые пользователи прикладных решений могут зарегистрировать на нём свою информационную базу и пользоваться его возможностями.

Так вот теперь, если прикладное решение подключено к системе взаимодействия, сценарий редактирования одних и тех же данных будет выглядеть более простым и удобным. Рассмотрим пару примеров.

Пример 1. Менеджер по продажам решил добавить в заказ №17 ещё несколько товаров. Он открыл документ и начал подбирать товары. В этот момент администратор захотел изменить статус у этого же заказа.

Как только администратор нажмёт в форме кнопку Выполнен, он увидит такой диалог:

01.png

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

02.png

Допустим, администратор решает ничего не менять в сообщении и нажимает Отправить сообщение. Тогда у менеджера по продажам появляется такое оповещение:

03.png

Поскольку менеджер по продажам всё ещё редактирует заказ, он нажимает на это оповещение и через систему взаимодействия отвечает администратору:

04.png

Администратор решает подождать, и заняться пока другими делами. В клиентском приложении у администратора по-прежнему отображается самый первый диалог. Этот диалог отсчитывает время и ожидает возможности начать редактирование.

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

05.png

Теперь администратор просто нажмёт Перечитать, увидит новые данные, которые добавил в этот заказ менеджер по продажам, и сможет изменить статус заказа.

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

11.png

Поскольку он прекрасно помнит, что он хотел изменить в этом заказе, он решил не сохранять изменения, выполненные на работе, а сделать сейчас всё то же самое ещё раз. Он нажимает Начать редактировать и получает такое оповещение:

13.png

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

Администратор вносит изменения и сохраняет их.

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

12.png

Что будет, если нет системы взаимодействия?

Примеры, которые мы показали выше, были выполнены на файловой базе. Если вы используете клиент-серверный вариант работы, то всё будет выглядеть так же при условии, что база подключена к системе взаимодействия.

Когда вы работаете в клиент-серверном варианте, и система взаимодействия недоступна, отличие будет заключаться только в том, что в диалоге не будет предложения Написать сообщение пользователю?

А вот в том случае, когда используется файловый вариант работы и система взаимодействия недоступна, сообщение будет выглядеть, по сути, как и раньше:

21.png

Тут, к сожалению, можно будет только узнать о том, что данные заблокированы, и подождать, когда блокировка будет снята. Каждые 10 секунд диалог проверяет, не освободились ли данные.

Поэтому подключайтесь к системе взаимодействия, рассказывайте о ней своим заказчикам и клиентам. Подключиться к ней совсем не сложно, а удобства от неё становится всё больше и больше :), уже и на уровне «платформенных» механизмов.

Рассказать друзьям: