|
Как запретить запуск внешней обработки если она открыта другим пользователем | ☑ | ||
---|---|---|---|---|
0
Мимохожий Однако
29.08.16
✎
17:03
|
Обычное приложение. УТ10.3. Может быть, есть ссылки или идеи на этот велосипед?
|
|||
1
hitodom
29.08.16
✎
17:05
|
делай блокировку какогонибудь элемента справочника
|
|||
2
Лефмихалыч
29.08.16
✎
17:05
|
блокируй в базе что-нибудь проверяй наличие блокировки перед открытием.
Но лучше расскажи, зачем это надо |
|||
3
Мимохожий Однако
29.08.16
✎
17:06
|
Уточню. Я про обработку, хранимую в справочнике Внешние обработки
|
|||
4
Горогуля
29.08.16
✎
17:06
|
выбрать 0 из РС.ОткрытыеОбработки где РС.Обработка=&Нужная
|
|||
5
Горогуля
29.08.16
✎
17:07
|
(3) открывается каждый раз разная
|
|||
6
Лефмихалыч
29.08.16
✎
17:07
|
(4) а потом сеанс был завершен администратороом и с тех пор больше ни кто не может открыть обработку
|
|||
7
hitodom
29.08.16
✎
17:07
|
(3) тогда уже есть элемент, который можно блокировать
|
|||
8
Мимохожий Однако
29.08.16
✎
17:08
|
(2) Обработкой могут пользоваться несколько человек, но запускать должен только один из них. Обработка загружает данные, в этой обработке есть промежуточные действия. По итогам действий создаются документы. Надо избежать дублей.
|
|||
9
hitodom
29.08.16
✎
17:08
|
(6) блокировки вообще то сами снимаются
|
|||
10
Мимохожий Однако
29.08.16
✎
17:10
|
(4) Такого объекта в типовой УТ10.3 нет.
(7) Фрагмент кода можешь сбросить для примера? |
|||
11
Лефмихалыч
29.08.16
✎
17:11
|
(9) смотри в (4) - он предлагает блокировки ХРАНИТЬ в БД
(8) во-первых, если делать, как в (2), то так и будет работать. Во-вторых, говно твоя обработка. Сделай так, чтобы она не делал дублей и всё. |
|||
12
Мимохожий Однако
29.08.16
✎
17:12
|
Пока склоняюсь к варианту записывать в регистр сведений Сохраненные настройки запись-флажок при открытии обработки. Если запись уже есть, то закрывать форму с сообщением пользователю что другой уже с этой обработкой работает.
|
|||
13
Лефмихалыч
29.08.16
✎
17:13
|
(10)
СправочникОбъект.<Имя справочника>.Заблокировать (CatalogObject.<Имя справочника>.Lock) СправочникОбъект.<Имя справочника> (CatalogObject.<Имя справочника>) Заблокировать (Lock) Синтаксис: Заблокировать() Описание: Выполняет блокировку объекта от изменения другими режимами или пользователями. Доступность: Сервер, толстый клиент, внешнее соединение. Пример: Попытка Объект.Заблокировать(); Исключение Предупреждение(НСтр("ru = 'Не удалось заблокировать объект';" + " en = 'Can't lock the object'") + " '" + Объект + '"! |"+ ОписаниеОшибки()); КонецПопытки; |
|||
14
Мимохожий Однако
29.08.16
✎
17:13
|
+(12) А при закрытии очищать от этой записи
|
|||
15
Лефмихалыч
29.08.16
✎
17:13
|
(12) что будет, если сеанс пользователя завершится аварийно до того, как он успеет удалить эту запись?
|
|||
16
Мимохожий Однако
29.08.16
✎
17:16
|
(15) Плохо будет ))
(13) Хороший метод. Но для этого надо наверное лепить дополнительную подписку на событие при открытии конкретной обработки. |
|||
17
Лефмихалыч
29.08.16
✎
17:17
|
(16) какая в хрен подписка?! Я же в самом начале написал - перед открытием формы обработки это делай и всё!
|
|||
18
Лефмихалыч
29.08.16
✎
17:17
|
и подписок на события форм не бывает
|
|||
19
Мимохожий Однако
29.08.16
✎
17:18
|
(17) Спасибо за пинок. Попробую этот вариант.
|
|||
20
takefive
29.08.16
✎
17:27
|
У меня обработка обмена пишет в текстовый файл историю обмена между узлами. Кто первый открыл - тот и пользуется. Если файл недоступен - остальные идут в сад
|
|||
21
Мимохожий Однако
29.08.16
✎
17:34
|
(20) Это похоже на вариант с регистром сведений. И, вероятно, работает только для файловых баз.
|
|||
22
Мимохожий Однако
29.08.16
✎
17:37
|
Фокус в том, что особенностью справочника Внешние обработки является открытие обработки во временном файле и связь с элементом справочника теряется. И не удаётся применить метод Блокировать(). Во всяком случае я не смог пока реализовать.
|
|||
23
Лефмихалыч
29.08.16
✎
17:39
|
(22) хоспади, что ж ты такой беспомощный?!
Найди ссылку на элемент справочника по коду или по наименованию |
|||
24
Лефмихалыч
29.08.16
✎
17:40
|
можно подумать, если бы не из временного файла открывалось, связь бы не терялась...
|
|||
25
Мимохожий Однако
29.08.16
✎
17:40
|
(23) К вечеру туплю. По наименованию, это достаточно просто.
|
|||
26
Мимохожий Однако
29.08.16
✎
17:41
|
(24) Спасибо еще раз
|
|||
27
Torquader
29.08.16
✎
18:40
|
При регистрации обработки в справочнике присваиваем ей уникальный идентификатор, который в ней же и хранится, находим элемент по этому идентификатору и блокируем его.
Блокировать лучше при открытии, чтобы пользователь видел сообщение о том, что обработка кем-то открыта. Если в комментарий элемента записать кем открыта, то можно будет также узнать, кто и зачем её открыл. |
|||
28
Лефмихалыч
29.08.16
✎
19:39
|
(27) при аварийном завершении это всё превратится в тыкву
|
|||
29
Torquader
29.08.16
✎
19:41
|
(28) При аварийном завершении блокировка снимется, и тыкву можно будет затереть.
|
|||
30
breezee
29.08.16
✎
20:47
|
Почему бы не блокировать данные, к которым обращается обработка?
|
|||
31
Deon
29.08.16
✎
21:14
|
(30) Видать, она новые данные создает. Нечего там блокировать
|
|||
32
Dmitry77
29.08.16
✎
21:33
|
Можно блокировать файлы из которых идёт загрузка
Или их как нибудь копировать/перемещать |
|||
33
Dmitry77
29.08.16
✎
21:48
|
Ну или совсем банально
В неком каталоге создаётся файл (элемент стправочника, константа, запись регистра сведений) При старте обработки Проверяется что в файле (справочнике, константе) Если там есть пользователь - выводиться сообщение Занято тем-то При закрытии обработки элемент очищается. В случае фарс мажера надо открыть и закрыть обработку тем, кто числиться в файле(...) |
|||
34
Лефмихалыч
29.08.16
✎
21:50
|
(29) я про блокировку не прочитал, извини
на самом деле надо обработки писать так, чтоб они не ломали ни чего при повторном запуске. Ибо два раза нажать "Выполнить" и один пользователь может |
|||
35
Torquader
29.08.16
✎
22:40
|
(33) Не надо закрывать-открывать - обработка открывает файл на запись и пишет в него данные пользователя, а другие - читают. Только писать, видимо, придётся не через 1С, так как она не умеет писать, то что другие читают, и читать, что она пишет.
В 7.7. был объект Scripting.TextStream, который с этой задачей справлялся на ура - видимо - здесь можно также и его использовать, а в Linux-е просто подключить .Net, как тут люди писали. P.S. файл можно использовать, если обработка не в базе, а открывается через Файл,Открыть. И самое место файла в директории файловой базы, а в случае клиент-сервера - в TEMP для процесса сервера. |
|||
36
Torquader
29.08.16
✎
22:41
|
(34) Видимо, автор предполагает, что два пользователя будут делать одно и то же - например - можно один документ вводить сразу на нескольких рабочих местах, только в результате, будет два одинаковых документа.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |