Каталог решений - Монопольное открытие формы обработки 1с77

Монопольное открытие формы обработки 1с77

Монопольное открытие формы обработки 1с77

В наличии

Блокировка открытия формы обработки одним пользователем.

Категория:

Описание

// ********************************************************************
Функция ПользовательАктивен(СпрБлокировки)  
    //если файл отсутствует или его можно удалить, то значит пользователя нет в базе
    //если же рользователь в базе, то эти строки просто не срабатывают
    //и мы получаем ответ о активности пользователя  
    имяФайла = СокрЛП(СпрБлокировки.КаталогПользователя) + "1Cv7.LCK";
    фс.УдалитьФайл(имяФайла); 
    Возврат фс.СуществуетФайл(имяФайла); 
		
КонецФункции	

// ********************************************************************
Функция ЗаблокироватьДляДругихПользователей()
	                    
	мИд = Форма.Параметр.Получить("Идентификатор");
	
	Если ПустоеЗначение(мИд) = 1 Тогда
		Возврат 1;
	КонецЕсли;	
	
	СпрБлокировки = СоздатьОбъект("Справочник.Блокировки");
	Если СпрБлокировки.НайтиПоНаименованию(мИд) = 1 Тогда 
		
		Если СокрЛП(СпрБлокировки.Пользователь) = СокрЛП(ИмяПользователя()) Тогда  
			Возврат 1; 

		ИначеЕсли ПользовательАктивен(СпрБлокировки.ТекущийЭлемент()) = 0 Тогда
			Возврат 1;

		Иначе
			Предупреждение("Карточка заблокирована пользователем " + СпрБлокировки.Пользователь); 
			Возврат 0;
		КонецЕсли;	
	КонецЕсли;	
	
	СпрБлокировки.Новый();
	СпрБлокировки.Код          = мИд;  
	СпрБлокировки.Наименование = мИд; 
	СпрБлокировки.Пациент      = "" + Форма.Параметр.Получить("ФИОПациента") + " " + Форма.Параметр.Получить("АмбКарта");
	СпрБлокировки.КаталогПользователя = КаталогПользователя();
	СпрБлокировки.Пользователь = ИмяПользователя();
	
	Попытка 
	   СпрБлокировки.Записать(); 
	   Возврат 1;
	Исключение    
		Предупреждение("Карточка заблокирована");
		//форма.инфоБлокировки.Заголовок("Только просмотр");
		Возврат 0;		
	КонецПопытки;   
    
	Возврат 1;
	
КонецФункции
//********************************************************************
Процедура РазблокироватьДляДругихПользователей()  
	
	мИд = Форма.Параметр.Получить("Идентификатор");
	СпрБлокировки = СоздатьОбъект("Справочник.Блокировки");
	Если СпрБлокировки.НайтиПоНаименованию(мИд) = 1 Тогда  
		СпрБлокировки.Удалить(1);
	КонецЕсли;	
	
КонецПроцедуры
//**********************************************
Процедура ПриОткрытии() 
	
    Если ЗаблокироватьДляДругихПользователей() = 0 Тогда 
		СтатусВозврата(0);
		Форма.Закрыть();
    КонецЕсли;

КонецПроцедуры
//**********************************************
Процедура ПриЗакрытии()                    
	
	РазблокироватьДляДругихПользователей();

КонецПроцедуры

Форма элемента справочника или документа в 1с77 может быть открыта только одним пользователем, но форма отчета или обработки не имеет таких ограничений, и одновременно пользоваться одной обработкой могут несколько пользователей.

В нашем случае возникла задача ограничить это дело программно, поскольку через форму редактировались строки документа и периодически происходил конфликт правок разными пользователями. Я решил выложить материал в статью, поскольку не нашел в инете готовых решений,

Также вы можете в цикле поверить доступы к файлам "1Cv7.LCK" в каталоге пользователей 1с77 и таким образом получить список активных пользователей в базе 1с77.

Предлагаю следующее решение. 

1. В документ Запись на прием была добавлена колонка Уникальный идентификатор, которая заполнялась автоматически при добавлении строки в документ

2. Был создан справочник "Блокировки" с реквизитами "Пользователь", "Идентификатор", "КаталогПользователя" в который при открытии формы обработки в процедурах "ПриОткрытии()" и "При Закрытии()"  соответственно добавляются и удаляются элементы.

3.  Также присутствует проверка доступа к файлу "1Cv7.LCK" в каталоге пользователя 1с.

Таким образом можно контролировать совместный доступ и даже проверять, у какого пользователя открыт данный объект.

Привожу в статье весь основной код. В прилагаемом файле к скачиванию находится он же.

Я буду расценивать его скачивание как донат. Всем благ и удачного кодинга. Спасибо.

has been added to your cart:
Оформление заказа