|
Как заблокировать РегистрСведений на изменение пока открыта форма обработки | ☑ | ||
---|---|---|---|---|
0
BaronAlex
16.11.12
✎
18:51
|
Помогите плизз, Как заблокировать РегистрСведений на изменение пока открыта форма обработки согласования. Т.е. Есть администратор и пользователь. Имеются заявки которые создает пользователь, и есть Администратор который открывает свою обработку для согласования данных записей. Так вот надо чтобы пока Администратор работает в обработке согласования регистр полностью блокировался на изменения,как администратор выйдет с обработки чтобы регистр стал разблокированным. Спасибо.
|
|||
1
tuxik07
16.11.12
✎
19:05
|
никак
|
|||
2
Axel2009
16.11.12
✎
19:05
|
(0) устанавливай константу. при каждой попытке изменения обычным пользователем считывай эту константу
|
|||
3
Нуф-Нуф
16.11.12
✎
20:06
|
Управляемая блокировка?
|
|||
4
BaronAlex
19.11.12
✎
09:51
|
(3) А есть рабочий пример кода на блокировку регистра сведений управляемой блокировкой?
|
|||
5
AndyTLT63
19.11.12
✎
09:55
|
Никогда не занимался блокировкой регистров сведений.... Интересно посмотреть как лушче это реализовать...
|
|||
6
Нуф-Нуф
19.11.12
✎
09:57
|
БлокировкаДанных (DataLock)
БлокировкаДанных (DataLock) Элементы коллекции: ЭлементБлокировкиДанных Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы блокировки. Возможно обращение к элементам блокировки посредством оператора [...]. В качестве аргумента передается индекс (нумерация с 0). Методы: Добавить (Add) Заблокировать (Lock) Количество (Count) Получить (Get) Конструкторы: По умолчанию Описание: Предназначен для явной блокировки данных от чтения или изменения другими сессиями. Доступность: Сервер, толстый клиент, внешнее соединение. Возможен обмен с сервером. Сериализуется. Пример: Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ТоварыНаСкладах"); ЭлементБлокировки.УстановитьЗначение("Качество", Справочники.Качество.НайтиПоКоду("1")); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; ЭлементБлокировки.ИсточникДанных = ДокументОбъект.ВозвратнаяТара; ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура"); ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Склад", "Склад"); Блокировка.Заблокировать(); |
|||
7
ssh2012
19.11.12
✎
10:01
|
(4) рабочий код
БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировки = БлокировкаДанных.Добавить("РегистрСведений.НоменклатураКонтрагентов"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый); БлокировкаДанных.Заблокировать(); |
|||
8
Undefined vs NULL
19.11.12
✎
10:09
|
а разве после того как передастся управление обратно в интерфейс транзакция не откатится?
|
|||
9
ssh2012
19.11.12
✎
10:12
|
(8) да, конечно. Форму можно модально открыть, как вариант. В моем примере дальше обработка регистра была и фиксация транзакции.
|
|||
10
BaronAlex
19.11.12
✎
10:13
|
(7) не срабатывает. Указал данный код при открытии обработки, Открыл, далее под другим пользователем зашел в регистр и мне спокойно дает добавлять записи. а надо блокировать затем буду выдавать сообщение что типа подождите ока Админ закончит работу
|
|||
11
Reset
19.11.12
✎
10:14
|
(10) --> (8)
|
|||
12
Reset
19.11.12
✎
10:15
|
Начать транзакцию, открыть форму модально, после закрытия зафиксировать/откатить
|
|||
13
BaronAlex
19.11.12
✎
10:19
|
(12) У Меня внешняя обработка которая при открытии в табличную часть получает записи из регистра., а под другим сеансом в этот момент пользователь открывает форму регистр и непосредственно в регистр добавляет записи.
P.S Админ работает не в самом регистре сведений, а через сторонюю обработку. |
|||
14
Reset
19.11.12
✎
10:25
|
(13) Начать транзакцию, наложить блокировку, открыть форму модально, закрыть форму, отменить/зафиксировать транзакцию
|
|||
15
BaronAlex
19.11.12
✎
10:43
|
Вот в обработке внешней при открытии :
БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировки = БлокировкаДанных.Добавить("РегистрСведений.ЗаявкиНаДедубликацию"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый); БлокировкаДанных.Заблокировать(); В Регистре перед открытием: Если РольДоступна("ПолныеПрава") И НЕ ФормаЗаполнения Тогда Попытка ОбщегоНазначения.ОткрытьВнешнийМодуль("ЗаявкиНаДедубликацию"); ОткрытьВнешнийМодуль("ЗаявкиНаДедубликацию"); Функция ОткрытьВнешнийМодуль(Имя, Вид="Обработка", ДобавитьВКеш=Истина) Экспорт Обр = ОбщегоНазначения.ПолучитьВнешнийМодуль(Имя, Вид, ДобавитьВКеш); Если Обр <> Неопределено Тогда ФормаОбработки = Обр.ПолучитьФорму(); ФормаОбработки.ОткрытьМодально(); КонецЕсли; КонецФункции Вот в конце видно что форма открыта модально. Но зайдя под другим пользователем мне все равно дает изменить данные в форме списка.А надо чтобы не давало, пока открыта обрабокта у админа. |
|||
16
ssh2012
19.11.12
✎
10:50
|
(15) модально открывать надо внешнюю обработку, где транзакция
|
|||
17
BaronAlex
19.11.12
✎
10:56
|
а как проверять у пользователя что регистр заблокирован, и выдавать сообщение?
|
|||
18
ssh2012
19.11.12
✎
10:58
|
(17) сообщение сама система выдаст при записи пользователем.
|
|||
19
BaronAlex
19.11.12
✎
11:01
|
У меня при попытке добавления выдает сообщение что в данной транзакции уже происходили ошибки, и окно с кнопками завершить или перезапустить. Надо видимо как то явно проверять при попытке добавления если заблокирован, выдавать сообщение ЖДИТЕ!
|
|||
20
ssh2012
19.11.12
✎
11:06
|
(19) само добавление в попытке что ле происходит в явной транзакции? Что за код там у тебя?
|
|||
21
BaronAlex
19.11.12
✎
11:07
|
Ошибся - не при попытке добавления, а при попытке открытия на изменение существующего элемента.
|
|||
22
BaronAlex
19.11.12
✎
11:08
|
При попытке записи нового система выдает сообщение что привышено время ожидания, и не вываливается
|
|||
23
Maxus43
19.11.12
✎
11:08
|
про "ИзменяетДанные" было уже? это специально придумано чтоб блокировать записи не связанные с конкретным объектом
|
|||
24
BaronAlex
19.11.12
✎
11:17
|
(23) По подробнее можно?
|
|||
25
ssh2012
19.11.12
✎
11:20
|
(23) не вижу как это применить здесь
|
|||
26
Шапокляк
19.11.12
✎
11:22
|
(0) Может быть, как-то по-другому работу организовать? Например, пользователь создает документ, в котором есть как бы проект записей, а Администратор ставит в документе галку и при проведении записи добавляются?
Думаю, сама идея блокировать на запись регистр, если кто-то где-то открыл обработку - несколько странная. |
|||
27
BaronAlex
19.11.12
✎
11:22
|
Сейчас все заработало как мне подсказывали до этого, вот только мне надо как то проверять что заблокирован, при открытии формы записи. Ну и если у пользователя уже открыта была форма, то при записи.
|
|||
28
BaronAlex
19.11.12
✎
11:25
|
(26) Дело в том что Администратор открывает обработку для согласования заявок на дедубликацию контрагентов, и когда он это сделал, делает Заплонировать дедубликацию, которая выполняется регламентным заданием ночью, вот если в тот момент когда админ делал правки и ставил согласованно, пользователь чтото изменил в существующей записи, админ при заплонировании перезапишет изменения. вот для этого надо и блокировать какие лиюо изменения пользователю пока админ согласовывает
|
|||
29
Reset
19.11.12
✎
11:27
|
"Заплонировать дедубликацию" oO
|
|||
30
Reset
19.11.12
✎
11:28
|
" сама идея блокировать на запись регистр, если кто-то где-то открыл обработку - несколько странная" +1
|
|||
31
BaronAlex
19.11.12
✎
11:29
|
Открывать обработку согласованно будет только админ, а админов всего лишь два человека
|
|||
32
Reset
19.11.12
✎
11:30
|
Имхо как то по другому нужно все организовывать, как - нужно вникать в смысл (28), мне сейчас лень и некогда, поэтому придется ограничится троллингом
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |