Как сделать блокировку записи регистра сведений при её редактировании в форме записи?
Доброго времени суток, уважаемые посетители! На нашем сайте уже не раз уделялось внимание работе с регистрами сведений. Например уже было написано Как открыть форму записи регистра сведений из строки табличного поля? или Как в регистре сведений обеспечить уникальность каждой записи? Кроме того были написаны небольшие заметки в статье, связанной с примерами работы в 1С здесь, тут и здесь.
Бывает, что пользователь №1 редактирует запись регистра сведений, и в это же самое время пользователь №2 начинает редактировать ту же запись и сохраняет свои изменения до сохранения изменений пользователем №1. В таком случае запись дублируется, а этого необходимо избежать.
Чтобы запретить доступ к записи, которую уже кто-то редактирует, то её нужно блокировать. Для этого воспользуемся двумя функциями для работы с информационными базами ЗаблокироватьДанныеДляРедактирования и РазблокироватьДанныеДляРедактирования. В форме записи регистра сведений напишем следующий код:
Перем КлючУникальностиФормы, КлючРегистра; Функция ПолучитьКлючЗаписиРегистраСведений() // У вас может быть другой регистр сведений и // соответственно другие измерения ТекСтрока = РегистрСведенийМенеджерЗаписи; Отбор1 = Новый Структура; Отбор1.Вставить("Период", ТекСтрока.Период); Отбор1.Вставить("Ответственный", ТекСтрока.Ответственный); Отбор1.Вставить("Направление", ТекСтрока.Направление); Отбор1.Вставить("Приоритет", ТекСтрока.Приоритет); Отбор1.Вставить("Счетчик", ТекСтрока.Счетчик); Рег = РегистрыСведений.СписокДел; Возврат Рег.СоздатьКлючЗаписи(Отбор1); КонецФункции Процедура ПриОткрытии() ЗаблокироватьДанныеДляРедактирования(КлючРегистра, , КлючУникальностиФормы); КонецПроцедуры Процедура ПриЗакрытии() РазблокироватьДанныеДляРедактирования(КлючРегистра, КлючУникальностиФормы); КонецПроцедуры КлючРегистра = ПолучитьКлючЗаписиРегистраСведений(); КлючУникальностиФормы = Новый УникальныйИдентификатор;
Теперь, после сохранения кода, если пользователь №1 будет редактировать запись регистра сведений,
пользователь №2 не сможет этого сделать, так как запись будет заблокирована и
появится примерно такое сообщение:
Пользователь №2 сможет редактировать запись только после закрытия формы записи регистра сведений пользователем №1.
Во во! У нас на работе совсем недавно была такая ситуация, что одновременно аж три пользователя стали редактировать одну и ту же запись.. После этого случая стали искать как делается блокировка записей. Сейчас все работает нормально, с вашей конечно же помощью :)
Здравствуйте, Ангелина! Рад, что вам помогло объяснение о том, как сделать блокировку записи регистра сведений!
Блокировка записей должна делаться в обязательном порядке и даже странно что она не включена по умолчанию. Сейчас я все это исправила, но пока ее не было, случались неприятности.
Здравствуйте, Ангелина! То что блокировка записей должна делаться в обязательном порядке, не совсем так. Но рад, что вы всё сделали как надо.
регистр сведений стал осваивать совсем недавно. В связи с этим вопрос: если уже произошло редактирование записи двумя пользователями, как то можно посмотреть \\\"перетертое\\\" значение? Или такая информация нигде не сохраняется?
Максим, если в регистре сведений такое произошло, то восстановить не удастся! Нигде значение не сохраняется.
Печально, что данные восстановить не получится.. Тогда примите мои благодарности за быстрый и своевременный ответ. Плюс я обязательно сделаю такую блокировку. Не хочется, чтобы редактирование записи разными пользователями принесло потерю данных.
Да, Максим, ничего не поделаешь с этим в регистрах сведений, но блокировка поможет. Рад помочь в освоении системы 1С:Предприятие.
А если я хочу защитить определенные записи регистра сведений от изменений программно?
Здравствуйте, Рустам! Настройте ограничения на уровне записей — RLS.