Имя: Пароль:
1C
1С v8
Как запретить одновременное выполнение обработки разными пользователями
0 Drufa
 
20.04.12
16:45
1С 8.1
Как запретить одновременное выполнение обработки разными пользователями?
Если я запустил обработку то у другого пользователя при нажатии на кнопку выполнить должно выскочить сообщение о том что эта обработка запущена "Ивановым Иваном Ивановичем"

Сохранять данные на время обработки в константу или регистр не вариант.
т.к. могут закрыть программу аварийно и тогда вообще никто не сможет запустить эту обработку, пока эту константу или регистр не очистить.
1 Нуф-Нуф
 
20.04.12
16:47
сделай документ
2 Drufa
 
20.04.12
16:48
(1) Для чего?
3 Нуф-Нуф
 
20.04.12
16:48
хз. сам еще думаю
4 mikecool
 
20.04.12
16:49
(1) +1
5 pumbaEO
 
20.04.12
16:49
Блокируй элемент справочника : внешние обработки.
6 mikecool
 
20.04.12
16:49
(3) а чо думать - создавать один в день
проверять заблокированность
7 Ненавижу 1С
 
гуру
20.04.12
16:49
(0) блокировать запросом ДЛЯ ИЗМЕНЕНИЯ, по идеи не прочтут, пока транзакция не окончится
8 mikecool
 
20.04.12
16:50
хотя с блокировкой - овно, не факт , что первый нажал Выполнить
задача - тоже овно, не стоит ее делать )))
9 NS
 
20.04.12
16:50
Блокировка служебного элемента справочника.
10 mikecool
 
20.04.12
16:50
(7) под постгри я не был бы так уверен
11 Drufa
 
20.04.12
16:52
Не получилось с методом Заблокировать() например справочника.
И не получилось с запросом ДЛЯ ИЗМЕНЕНИЯ вроде запрос выполняется в транзакции но 2-я сессия все ровно читает объект.
12 pumbaEO
 
20.04.12
16:54
[Сохранять данные на время обработки в константу или регистр не вариант. ] - ну сделай на обработке "Секретную кнопку" которая будет обходить этот вариант.
13 NS
 
20.04.12
16:54
(11) Не понял - два пользователя одновременно могут заблокировать один элемент справочника? Это шутка?
14 Stim
 
20.04.12
16:55
можно ЖР читать при открытии обработки. наверное..
15 Drufa
 
20.04.12
16:55
13 еще проверяю
Я использовал проверку Заблокирован() он говорит что не заблокирован.
Счас пробую по попытке заблокировать повторно другой сессией.
16 NS
 
20.04.12
16:56
(15) Зачем по попытке?
17 mikecool
 
20.04.12
16:56
(15) Заблокировать делай, когда начинает выполняться отчет
18 Drufa
 
20.04.12
17:01
Все получилось
Блокировка = Справочники.Блокировки.Выгрузка.ПолучитьОбъект();

Попытка
Блокировка.Заблокировать();
Результат = "Зашибись";
Исключение
Сообщить(ОписаниеОшибки());
Результат = "Заблокирован";
КонецПопытки;

Сообщить(Результат);
19 Ненавижу 1С
 
гуру
20.04.12
17:03
(11) разве читает? а мне Митичкин говорил, что и прочитать не сможет
20 kosts
 
20.04.12
17:04
+ к (18) Переменную Блокировка на уровень модуля вынести
21 Drufa
 
20.04.12
17:04
(19) Я думаю в обработке проведения не прочитает.
Но в обработке прочитал.
22 ssh2006
 
20.04.12
17:04
Или режим управления блокировками - управляемый или не в транзакции запрос
23 Argon
 
20.04.12
17:04
аварийный выход снимет блокировку?
24 Drufa
 
20.04.12
17:05
(22) Я в обработке начинал транзакцию не помогло.
25 Drufa
 
20.04.12
17:05
(23) Должен.
26 ssh2006
 
20.04.12
17:06
(22) режим управления блокировками в конф-ии какой?
27 NS
 
20.04.12
17:06
(18) У меня обработка загрузки с ФТП была написана так что может глюкнуть только если запустить с двух машин одновременно, на счет раз-два-три (файл после загрузки документа сразу удаляется).
Не поверишь - но начальник ночной смены с оператором именно так и сделали :)
Пришлось добавить блокировку на справочнике. С дебилами иначе бороться бесполезно. Надо было их еще и оштрафовать на всякий случай.
(24) На справочнике самое то, нет смысла делать иначе.
28 ssh2006
 
20.04.12
17:06
(26)2(24)
29 Конфигуратор1с
 
20.04.12
17:06
(0) в настройки пользователя писать, а при начале работы системы этого пользователя сбрасывать флаг
30 NS
 
20.04.12
17:07
(23) Да, снимет.
31 Ненавижу 1С
 
гуру
20.04.12
17:07
(21) просто транзакцию надо явно открыть
32 Конфигуратор1с
 
20.04.12
17:07
(29)+ естественно вручную настройку не давать менять
33 Тим
 
20.04.12
17:09
если не блокировки, то можно попробовать сохранять сведения
о сеансе, запустившем обработку.
В случае, когда не почистили данные, делать опрос текущих
сеансов, и если он не идентифицирован - снимать лок, т.е.
чистить данные, писать свои.
34 Тим
 
20.04.12
17:10
В прнципе, у запустившего сеанса время начала работы достаточно уникально. Если не найден сеанс под тем же номером
и с тем же временем - можно снимать лок.