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