Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Как запретить одновременное открытие отдельных внешних обработок?

Как запретить одновременное открытие отдельных внешних обработок?
Я
   МимохожийОднако
 
15.12.17 - 07:52
КА 1.1. Есть несколько внешних обработок. Примерно 15 пользователей. Потребовалось запретить одновременное открытие и запуск некоторых из них. Например, Петров открыл, а Сидоров при открытии получает сообщение (предупреждение) "Эта обработка открыта Петровым? С него и спрашивай".
Идеи есть?
 
 
   Гипервизор
 
1 - 15.12.17 - 07:59
Писать куда-нибудь по факту открытия и закрытия обработки. В регистр, в ЖР, в спортлото.
   Dotoshin
 
2 - 15.12.17 - 08:00
(0) Ну заведи регистр и в него пиши при открытии обработки, кто открыл. А перед записью проверяй открыл кто-то или нет, ну а при выходе удаляй запись о входе или делай запись о выходе.
   бомболюк
 
3 - 15.12.17 - 08:02
лучше заведи справочник, и при открытии блокируй элемент справочника методом Заблокировать - если проканало, значит путь свободен. Из плюсов, что блокировка снимается в случае нештатного выхода, а всякие записи в регистры естественно не удаляются сами собой.
   Aleksey
 
4 - 15.12.17 - 08:05
(3) так внешние обработк и так справочник. Зачем ещё один?
   бомболюк
 
5 - 15.12.17 - 08:08
(4) ну собственно да, можно его самого для этого использовать
   бомболюк
 
6 - 15.12.17 - 08:09
только определить элемент для блокировки придется из тела самой обработки, а вот это по моему затруднительно.
   1Сергей
 
7 - 15.12.17 - 08:27
(6) ещё до сохранения-открытия проверять
   МимохожийОднако
 
8 - 15.12.17 - 08:42
Особенность справочника ВнешниеОбработки в том, что при выборе из списка создаётся временный файл и из него открывается обработка. Хотелось бы использовать код обработки, которая лежит в реквизите ХранилищеВнешнейОбработки.
Пока выбираю из трёх вариантов:
1. Регистр сведений
2. Глобальная переменная
3. Поместить код блокировки в форму вызываемой обработки.
Первые 2 понятны.
   1Сергей
 
9 - 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) Вроде работает. Надо только отслеживать, чтобы не было одинаковых наименований для разных обработок в справочнике.
   1Сергей
 
13 - 15.12.17 - 09:03
(11) >> Спр=Справочники.ВнешниеОбработки.НайтиПоНаименованию(ЭтотОбъект.Метаданные().Представление());

Это что за фигня?
   1Сергей
 
14 - 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) Забыл добавить что добавил переменную формы НайдОбъект
   1Сергей
 
19 - 15.12.17 - 09:07
Наименование же не всегда равно Представлению обработки
   МимохожийОднако
 
20 - 15.12.17 - 09:10
(19) Конечно. Но в первом приближении подходит. Другого способа поиска элемента справочника Внешние обработки я пока не придумал.
   Ёпрст
 
21 - 15.12.17 - 09:15
(11) разблокировать лишне в коде, блокировка сама отвалится при закрытии
   Mort
 
22 - 15.12.17 - 09:46
(0) А зачем?
   МимохожийОднако
 
23 - 15.12.17 - 09:51
(22) У Заказчика есть обработка, которая скачивай по команде пользователя заказы. При одновременном открытии и запуске иногда дублируются заказы. Случается не часто, но их напрягает.
   МимохожийОднако
 
24 - 15.12.17 - 09:51
*скачивает
   Mort
 
25 - 15.12.17 - 10:05
(23) Имхо блокировка тут должна быть пониже уровня. Например курить в сторону управляемых блокировок и свойства документа "Поля блокировки данных".
   Mort
 
26 - 15.12.17 - 10:07
ЭлементБлокировкиДанных.УстановитьЗначение (DataLockItem.SetValue)
ЭлементБлокировкиДанных (DataLockItem)
УстановитьЗначение (SetValue)  + вот это в СП
   МимохожийОднако
 
27 - 15.12.17 - 14:01
(26) У меня стояла задача, не меняя конфигурацию заблокировать повторное открытие обработки из справочника Внешние обработки. И всё. Если есть пример, как это сделать по-другому - подскажи кодом.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует