Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 ноя 2021, 20:26

временное блокировку

Автор Nika Vibliani, 18 ноя 2020, 13:33

0 Пользователей и 1 гость просматривают эту тему.

Nika Vibliani

привет всем, а можна чтоб поставить временное блокировку на текушим сеансе, когда нечего не происходит за некоторое время?

MuI_I_Ika

Речь о программной блокировке или вы спрашиваете как это сделать в режиме пользователя?

Nika Vibliani

MuI_I_Ika,

Для входа в режим временной блокировки нужно выбрать пункт «Сервис – Временная блокировка»  и мне интересно как это сделать автоматически когда нечего не происходит, условно Через 20 минут


MuI_I_Ika

Для блокировки есть метод ЗаблокироватьРаботуПользователя().

Для того чтобы отслеживать, что ничего не происходит можно использовать глобальный обработчик ожидания, который считывает последнюю запись из журнала регистрации по текущему пользователю и если время этой записи меньше текущего на 30 минут, блокирует работу программы.

Nika Vibliani

MuI_I_Ika,

а как можно мне ето сделать? в смисле с конфигураций ето надо сделать, приамо с программи или с внешной оброботки?

MuI_I_Ika

Глобальный обработчик ожидания не получится внешней обработкой подключить. По крайней мере я пока не видел конфигураций, где встроен вызов подключенной внешней обработки в штатный обработчик ожидания. Так что придется пару строчек кода внести в саму конфигурацию или расширение сделать. Там уже можно прописать вызов внешней обработки.

Nika Vibliani

MuI_I_Ika,

а можете сказать что именно мне будет надо внести  в конфигурацию? и в каком модуле?

спосибо заранее

MuI_I_Ika

Стандартно это Модуль приложения Процедура ПриНачалеРаботыСистемы()

Но чтобы не вносить изменения в этот модуль можно пройтись по процедурам, которые там вызываются и внести код там. Нежелательно вносить изменения непосредственно в этот модуль потому что при обновлении конфигурации вам каждый раз придется повторять свои внесенные изменения. А поскольку это по сути основной модуль, то меняется он довольно часто самими разработчиками конфигурации.

Например, у меня эта процедура выглядит следующим образом:

Процедура ПриНачалеРаботыСистемы()

// СтандартныеПодсистемы
СтандартныеПодсистемыКлиент.ПриНачалеРаботыСистемы();
// Конец СтандартныеПодсистемы

// ПодключаемоеОборудование
МенеджерОборудованияКлиент.ПриНачалеРаботыСистемы();
// Конец ПодключаемоеОборудование

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



Я перехожу в процедуру СтандартныеПодсистемыКлиент.ПриНачалеРаботыСистемы();

И смотрю что там.

Процедура ПриНачалеРаботыСистемы(Знач ОповещениеЗавершения = Неопределено, НепрерывноеВыполнение = Истина) Экспорт

Если ВыполняетсяИнтерактивнаяОбработкаПередНачаломРаботыСистемы() Тогда
Возврат;
КонецЕсли;

Если ОтключенаЛогикаНачалаРаботыСистемы() Тогда
Возврат;
КонецЕсли;

Если ОповещениеЗавершения <> Неопределено Тогда
ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("СтандартныеПодсистемыКлиент.ПриНачалеРаботыСистемы",
"ОповещениеЗавершения", ОповещениеЗавершения, Тип("ОписаниеОповещения"));
КонецЕсли;
ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("СтандартныеПодсистемыКлиент.ПриНачалеРаботыСистемы",
"НепрерывноеВыполнение", НепрерывноеВыполнение, Тип("Булево"));

Параметры = ПараметрыОбработкиПриНачалеРаботыСистемы();

// Внешние параметры описания результата.
Параметры.Вставить("Отказ", Ложь);
Параметры.Вставить("Перезапустить", Ложь);
Параметры.Вставить("ДополнительныеПараметрыКоманднойСтроки", "");

// Внешние параметры управления выполнением.
Параметры.Вставить("ИнтерактивнаяОбработка", Неопределено); // ОписаниеОповещения.
Параметры.Вставить("ОбработкаПродолжения",   Неопределено); // ОписаниеОповещения.
Параметры.Вставить("НепрерывноеВыполнение", НепрерывноеВыполнение);

// Внутренние параметры.
Параметры.Вставить("ОповещениеЗавершения", ОповещениеЗавершения);
Параметры.Вставить("ОбработкаЗавершения", Новый ОписаниеОповещения(
"ДействияПриНачалеРаботыСистемыОбработкаЗавершения", ЭтотОбъект));

// Подготовка перехода к следующей процедуре.
Параметры.Вставить("ОбработкаПродолжения", Новый ОписаниеОповещения(
"ДействияПриНачалеРаботыСистемыВИнтеграционнойПроцедуре", ЭтотОбъект));

Попытка
УстановитьРасширенныйЗаголовокПриложения(Истина); // Для главного окна.

Если НЕ ОбработатьПараметрыЗапуска() Тогда
Параметры.Отказ = Истина;
ВыполнитьОбработкуОповещения(Параметры.ОбработкаЗавершения);
Возврат;
КонецЕсли;
Исключение
ОбработатьОшибкуПриНачалеРаботыСистемы(Параметры, ИнформацияОбОшибке(), Истина);
КонецПопытки;
Если ИнтерактивнаяОбработкаПриНачалеРаботыСистемы(Параметры) Тогда
Возврат;
КонецЕсли;

ВыполнитьОбработкуОповещения(Параметры.ОбработкаПродолжения);

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


Среди всех параметров в этой процедуре замечаем параметр ДействияПриНачалеРаботыСистемыВИнтеграционнойПроцедуре

Он приводит нас в модуль СтандартныеПодсистемыКЛиент к этой самой процедуре.

Там есть другой параметр ДействияПриНачалеРаботыСистемыВМодуляхИнтеграционнойПроцедуры

Это процедура того же модуля

Еще несколько таких же скачков и мы приходим к выводу что в итоге идет вызов процедуры ПриНачалеРаботыСистемы() из модуля ОбщегоНазначенияКлиентПереопределяемый

Можно конечно было сразу обратиться к этому модулю, но не уверен, что он есть в каждой конфигурации.

Если в название модуля добавлено "Переопределяемый", то это значит что разработчик конфигурации предусмотрел его специально для изменения на нашем уровне. И соответственно при обновлении, предполагается, что разработчики конфигурации не будут вносить изменения туда. Вот туда и вставляем наш код.

Код может быть таким. Если у нас конфигурация на бсп, то все просто

ВнешнийОтчетОбработкаСсылка = ОбщийМодульСлужебный.ПолучитьСсылкуНаВнешнийОтчетОбработкуПоИмениНаСервере("Имя обработки контроля работы пользователя");

ИмяОбработкиСлужебное = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(ВнешнийОтчетОбработкаСсылка );

ОбработкаОбъект = ВнешниеОбработки.Создать(ИмяОбработкиСлужебное );
ОбработкаОбъект.ВыполнитьОбработку();




Nika Vibliani

MuI_I_Ika,

Не со мной процедуру "СтандартныеПодсистемыКлиент.ПриНачалеРаботыСистемы();"

есть только это:

Процедура ПриНачалеРаботыСистемы()

ГлЗащищеннаяОбработка = Обработки.ГлЗащищеннаяОбработка.Создать();
БИ = Обработки.БухгалтерскиеИтоги.Создать();

ОпределитьФактИспользованияРИБ();

// Определим параметры сеанса, необходимые для ограничения прав доступа.
ПараметрыСеанса.ОбластьДанныхБухгалтера  = Перечисления.НаборПравПользователей.Бухгалтер;
ПараметрыСеанса.ОбластьДанныхГлавногоБухгалтера = Перечисления.НаборПравПользователей.ГлавныйБухгалтер;
ПараметрыСеанса.ПустаяОрганизация = Справочники.Организации.ПустаяСсылка();

ОписаниеОшибкиОпределенияПользователя = "";
Если НЕ УправлениеПользователями.ОпределитьТекущегоПользователя(глТекущийПользователь, ОписаниеОшибкиОпределенияПользователя) Тогда

Предупреждение(ОписаниеОшибкиОпределенияПользователя);
ЗавершитьРаботуСистемы(Ложь);
Возврат;

КонецЕсли;

УстановитьПараметрыСеанса(глТекущийПользователь);

ЗаголовокСистемы = Константы.ЗаголовокСистемы.Получить();
Если НЕ Пустаястрока(ЗаголовокСистемы) Тогда
УстановитьЗаголовокСистемы(ЗаголовокСистемы);
КонецЕсли;

// Завершение обновления конфигурации
Обработки.ОбновлениеКонфигурации.Создать().ЗавершитьОбновлениеКонфигурации();

глУчетнаяПолитикаПоБухгалтерскомуУчету = СоздатьКЭШУчетнойПолитики("БухгалтерскийУчет");
ПараметрыСеанса.УчетнаяПолитикаПоБухгалтерскомуУчету = Новый ХранилищеЗначения(глУчетнаяПолитикаПоБухгалтерскомуУчету,
Новый СжатиеДанных(0));

глУчетнаяПолитикаПоНалоговомуУчету = СоздатьКЭШУчетнойПолитики("НалоговыйУчет");
ПараметрыСеанса.УчетнаяПолитикаПоНалоговомуУчету = Новый ХранилищеЗначения(глУчетнаяПолитикаПоНалоговомуУчету,
Новый СжатиеДанных(0));

ОсновнаяОрганизация  = ПолучитьЗначениеПоУмолчанию(глТекущийПользователь, "ОсновнаяОрганизация");

УчетПоВсемОрганизациям = ПолучитьЗначениеПоУмолчанию(глТекущийПользователь, "УчетПоВсемОрганизациям");

// Открытие Панели функций
//ОткрытьПанельФункций = ПолучитьЗначениеПоУмолчанию(глТекущийПользователь, "ОткрыватьПриЗапускеПанельФункций");
//Если ОткрытьПанельФункций Тогда
// Обработки.ПанельФункцийНовый.ПолучитьФорму().Открыть();
//КонецЕсли;

ПервыйЗапуск = (Константы.НомерВерсииКонфигурации.Получить()="");

ВыполнитьОбновлениеИнформационнойБазы();

// отработка режима завершения работы системы

Если ОМЗавершениеРаботыПользователей.ОбработатьПараметрЗапуска() Тогда
Возврат;
КонецЕсли;

ОМЗавершениеРаботыПользователей.УстановитьКонтрольРежимаЗавершенияРаботыПользователей();

ЗаполнениеУчетнойПолитикиПоПерсоналуОрганизации();

ОпределитьНеобходимостьПерестановкиГраницыИтогов(ПервыйЗапуск);

ПроверитьНаличиеОбновлений();

ПодключитьТорговоеОборудование();

глОбработкаАвтоОбменДанными = ОМОбменДанными.ВыполнитьИнициализациюАвтообменаПриНачалеРаботы();
// автообмен данными
Если глОбработкаАвтоОбменДанными <> Неопределено Тогда

// подключим обработчик обменов данными
ПодключитьОбработчикОжидания("ПроверкаОбменаДанными", глКоличествоСекундОпросаОбмена);

КонецЕсли;

// Открытие Быстрого освоения
ПоказыватьБыстроеОсвоение = ПолучитьЗначениеПоУмолчанию(глТекущийПользователь, "ПоказыватьБыстроеОсвоениеПриНачалеРаботыСистемы");
Если ПоказыватьБыстроеОсвоение Тогда
Обработки.БыстроеОсвоение.ПолучитьФорму().Открыть();
КонецЕсли;

АвтоЗапускПрограми();

ПроверитьНапоминанияКалендарьБухгалтераСобытия();

КонецПроцедуры // ПриНачалеРаботыСистемы()

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск