|
Как запретить одновременное открытие отдельных внешних обработок? | ☑ | ||
---|---|---|---|---|
0
Мимохожий Однако
15.12.17
✎
07:52
|
КА 1.1. Есть несколько внешних обработок. Примерно 15 пользователей. Потребовалось запретить одновременное открытие и запуск некоторых из них. Например, Петров открыл, а Сидоров при открытии получает сообщение (предупреждение) "Эта обработка открыта Петровым? С него и спрашивай".
Идеи есть? |
|||
1
Гипервизор
15.12.17
✎
07:59
|
Писать куда-нибудь по факту открытия и закрытия обработки. В регистр, в ЖР, в спортлото.
|
|||
2
Dotoshin
15.12.17
✎
08:00
|
(0) Ну заведи регистр и в него пиши при открытии обработки, кто открыл. А перед записью проверяй открыл кто-то или нет, ну а при выходе удаляй запись о входе или делай запись о выходе.
|
|||
3
бомболюк
15.12.17
✎
08:02
|
лучше заведи справочник, и при открытии блокируй элемент справочника методом Заблокировать - если проканало, значит путь свободен. Из плюсов, что блокировка снимается в случае нештатного выхода, а всякие записи в регистры естественно не удаляются сами собой.
|
|||
4
Aleksey
15.12.17
✎
08:05
|
(3) так внешние обработк и так справочник. Зачем ещё один?
|
|||
5
бомболюк
15.12.17
✎
08:08
|
(4) ну собственно да, можно его самого для этого использовать
|
|||
6
бомболюк
15.12.17
✎
08:09
|
только определить элемент для блокировки придется из тела самой обработки, а вот это по моему затруднительно.
|
|||
7
1Сергей
15.12.17
✎
08:27
|
(6) ещё до сохранения-открытия проверять
|
|||
8
Мимохожий Однако
15.12.17
✎
08:42
|
Особенность справочника ВнешниеОбработки в том, что при выборе из списка создаётся временный файл и из него открывается обработка. Хотелось бы использовать код обработки, которая лежит в реквизите ХранилищеВнешнейОбработки.
Пока выбираю из трёх вариантов: 1. Регистр сведений 2. Глобальная переменная 3. Поместить код блокировки в форму вызываемой обработки. Первые 2 понятны. |
|||
9
1Сергей
15.12.17
✎
08:47
|
(8) посоветовали же. Блокируй эл-т справочника Внешние обработки
|
|||
10
бомболюк
15.12.17
✎
08:48
|
(8) а глобальная переменная то тут каким боком?
|
|||
11
Мимохожий Однако
15.12.17
✎
09:03
|
В форму внешней обработки, которую подключаю в справочник Внешние обработки, добавил следующий код:
.. Процедура ПередОткрытием(Отказ, СтандартнаяОбработка) Спр=Справочники.ВнешниеОбработки.НайтиПоНаименованию(ЭтотОбъект.Метаданные().Представление()); НайдОбъект=Спр.ПолучитьОбъект(); Попытка НайдОбъект.Заблокировать(); Исключение Предупреждение("Обработка "+НайдОбъект+"уже открыта ранее");// + "!"+ ОписаниеОшибки()); Отказ=Истина; КонецПопытки; КонецПроцедуры Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) Попытка НайдОбъект.Разблокировать(); Исключение //Предупреждение("Не удалось разблокировать объект " //+НайдОбъект + "!"+ ОписаниеОшибки()); КонецПопытки; КонецПроцедуры |
|||
12
Мимохожий Однако
15.12.17
✎
09:03
|
(11) Вроде работает. Надо только отслеживать, чтобы не было одинаковых наименований для разных обработок в справочнике.
|
|||
13
1Сергей
15.12.17
✎
09:03
|
(11) >> Спр=Справочники.ВнешниеОбработки.НайтиПоНаименованию(ЭтотОбъект.Метаданные().Представление());
Это что за фигня? |
|||
14
1Сергей
15.12.17
✎
09:04
|
а... понял
|
|||
15
бомболюк
15.12.17
✎
09:04
|
Из фрагмента не видно, но НайдОбъект надо "держать", сделай его переменной модуля формы.
|
|||
16
бомболюк
15.12.17
✎
09:05
|
а ваще то да, ты его уже сделал, звиняй
|
|||
17
Мимохожий Однако
15.12.17
✎
09:05
|
(13) При подключении новой обработки в справочник представление обработки подкидывается в наименование элемента.
|
|||
18
Мимохожий Однако
15.12.17
✎
09:06
|
(15) Забыл добавить что добавил переменную формы НайдОбъект
|
|||
19
1Сергей
15.12.17
✎
09:07
|
Наименование же не всегда равно Представлению обработки
|
|||
20
Мимохожий Однако
15.12.17
✎
09:10
|
(19) Конечно. Но в первом приближении подходит. Другого способа поиска элемента справочника Внешние обработки я пока не придумал.
|
|||
21
Ёпрст
15.12.17
✎
09:15
|
(11) разблокировать лишне в коде, блокировка сама отвалится при закрытии
|
|||
22
Mort
15.12.17
✎
09:46
|
(0) А зачем?
|
|||
23
Мимохожий Однако
15.12.17
✎
09:51
|
(22) У Заказчика есть обработка, которая скачивай по команде пользователя заказы. При одновременном открытии и запуске иногда дублируются заказы. Случается не часто, но их напрягает.
|
|||
24
Мимохожий Однако
15.12.17
✎
09:51
|
*скачивает
|
|||
25
Mort
15.12.17
✎
10:05
|
(23) Имхо блокировка тут должна быть пониже уровня. Например курить в сторону управляемых блокировок и свойства документа "Поля блокировки данных".
|
|||
26
Mort
15.12.17
✎
10:07
|
ЭлементБлокировкиДанных.УстановитьЗначение (DataLockItem.SetValue)
ЭлементБлокировкиДанных (DataLockItem) УстановитьЗначение (SetValue) + вот это в СП |
|||
27
Мимохожий Однако
15.12.17
✎
14:01
|
(26) У меня стояла задача, не меняя конфигурацию заблокировать повторное открытие обработки из справочника Внешние обработки. И всё. Если есть пример, как это сделать по-другому - подскажи кодом.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |