Как сделать блокировку записи регистра сведений при её редактировании в форме записи?

Доброго времени суток, уважаемые посетители! На нашем сайте уже не раз уделялось внимание работе с регистрами сведений. Например уже было написано Как открыть форму записи регистра сведений из строки табличного поля? или Как в регистре сведений обеспечить уникальность каждой записи? Кроме того были написаны небольшие заметки в статье, связанной с примерами работы в 1С здесьтут и здесь.


Заблокировать данные регистра сведений для редактирования

Бывает, что пользователь №1 редактирует запись регистра сведений, и в это же самое время пользователь №2 начинает редактировать ту же запись и сохраняет свои изменения до сохранения изменений пользователем №1. В таком случае запись дублируется, а этого необходимо избежать.

Чтобы запретить доступ к записи, которую уже кто-то редактирует, то её нужно блокировать. Для этого воспользуемся двумя функциями для работы с информационными базами ЗаблокироватьДанныеДляРедактирования и РазблокироватьДанныеДляРедактирования. В форме записи регистра сведений напишем следующий код:

Перем КлючУникальностиФормы, КлючРегистра;
Функция ПолучитьКлючЗаписиРегистраСведений()
	// У вас может быть другой регистр сведений и 
	// соответственно другие измерения
	ТекСтрока = РегистрСведенийМенеджерЗаписи;
	Отбор1 = Новый Структура;
	Отбор1.Вставить("Период", ТекСтрока.Период);
	Отбор1.Вставить("Ответственный", ТекСтрока.Ответственный);
	Отбор1.Вставить("Направление", ТекСтрока.Направление);
	Отбор1.Вставить("Приоритет", ТекСтрока.Приоритет);
	Отбор1.Вставить("Счетчик", ТекСтрока.Счетчик);
	Рег = РегистрыСведений.СписокДел;
	Возврат Рег.СоздатьКлючЗаписи(Отбор1);
КонецФункции

Процедура ПриОткрытии()
	ЗаблокироватьДанныеДляРедактирования(КлючРегистра, , КлючУникальностиФормы);
КонецПроцедуры

Процедура ПриЗакрытии()
	РазблокироватьДанныеДляРедактирования(КлючРегистра, КлючУникальностиФормы);
КонецПроцедуры

КлючРегистра = ПолучитьКлючЗаписиРегистраСведений();
КлючУникальностиФормы = Новый УникальныйИдентификатор;

Теперь, после сохранения кода, если пользователь №1 будет редактировать запись регистра сведений,
пользователь №2 не сможет этого сделать, так как запись будет заблокирована и
появится примерно такое сообщение:

Запрет редактирования заблокированной записи регистра сведений

Пользователь №2 сможет редактировать запись только после закрытия формы записи регистра сведений пользователем №1.


ПОДПИСКА

10 ответы
  1. Ангелина говорит:

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

  2. Softmaker говорит:

    Здравствуйте, Ангелина! Рад, что вам помогло объяснение о том, как сделать блокировку записи регистра сведений!

  3. Наталья говорит:

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

  4. Softmaker говорит:

    Здравствуйте, Ангелина! То что блокировка записей должна делаться в обязательном порядке, не совсем так. Но рад, что вы всё сделали как надо.

  5. Максим говорит:

    регистр сведений стал осваивать совсем недавно. В связи с этим вопрос: если уже произошло редактирование записи двумя пользователями, как то можно посмотреть \\\"перетертое\\\" значение? Или такая информация нигде не сохраняется?

  6. Softmaker говорит:

    Максим, если в регистре сведений такое произошло, то восстановить не удастся! Нигде значение не сохраняется.

  7. Максим говорит:

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

  8. Softmaker говорит:

    Да, Максим, ничего не поделаешь с этим в регистрах сведений, но блокировка поможет. Рад помочь в освоении системы 1С:Предприятие.

  9. Рустам говорит:

    А если я хочу защитить определенные записи регистра сведений от изменений программно?

  10. softmaker говорит:

    Здравствуйте, Рустам! Настройте ограничения на уровне записей — RLS.

Комментарии закрыты.