Каталог решений - Как уменьшить количество заблокированных объектов

Как уменьшить количество заблокированных объектов

Как уменьшить количество заблокированных объектов

В наличии

История о том как я решил пересобрать форму справочника клиентов и чем это все закончилось…

Категория:

Описание

После удачного упорядочения формы я решил добавить новые возможности или нечто подобное. Долго думать не пришлось, и идея родилась моментально.

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

Что можно сделать ? Первая мысль была изменить пользователям параметр «Режим открытия объектов» с «Редактирование» на «Просмотр». Но тут, же появилась вторая мысль, а что делать, если нужно все-таки редактировать объект, а не смотреть на него. Не очень удобно.

Вот так и родилась моя идея. (Надеюсь, новый велосипед не изобрел :))

Суть состоит в том, что бы по умолчанию открывать объект на просмотр, а при необходимости нажать на соответствующую кнопку на форме для редактирования. При сохранении объекта сбрасывается режим редактирования, объект становится открытым только для чтения.

В итоге получилось: две переменки и три процедуры. Смотрим ниже. Алгоритм работает как для справочников, так и для документов.


Глобальный модуль:

//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Перем гОбъект, гРежимОбъекта Экспорт;
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Процедура ОткрытьОбъект()

ОбъектОткрыто = 0;
ТипОбъекта = ТипЗначенияСтр(гОбъект);
Если ТипОбъекта = «Справочник» Тогда

ОбъектОткрыто = ОткрытьФорму(гОбъект.ТекущийЭлемент(),,гРежимОбъекта);

ИначеЕсли ТипОбъекта = «Документ» Тогда

ОбъектОткрыто = ОткрытьФорму(гОбъект.ТекущийДокумент(),,гРежимОбъекта);

КонецЕсли;

Если ОбъектОткрыто = 1 Тогда

гОбъект = 0;
ОбработкаОжидания(«ОткрытьОбъект», 0);

КонецЕсли;

КонецПроцедуры
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Процедура РедактироватьОбъект(Кт) Экспорт

гОбъект = 0;
гРежимОбъекта = 0;
ТипОбъекта = «»;
ВидОбъекта = Кт.Вид();

Попытка

Объект = Кт.ТекущийЭлемент();
ТипОбъекта = «Справочник»;

Исключение

Объект = 0;

КонецПопытки;

Если Объект = 0 Тогда

Попытка

Объект = Кт.ТекущийДокумент();
ТипОбъекта = «Документ»;

Исключение

Объект = 0;

КонецПопытки;

КонецЕсли;

Если Объект = 0 Тогда

Возврат;

КонецЕсли;

гОбъект = СоздатьОбъект(ТипОбъекта + «.» + ВидОбъекта);
Если ТипОбъекта = «Справочник» Тогда

гОбъект.НайтиЭлемент(Объект);

ИначеЕсли ТипОбъекта = «Документ» Тогда

гОбъект.НайтиДокумент(Объект);

КонецЕсли;

Если гОбъект.Блокировка(1) = 0 Тогда

Предупреждение(«Объект заблокирован другим пользователем.», 60);
Возврат;

Иначе

гОбъект.Блокировка(0);
Кт.Форма.Закрыть();

КонецЕсли;

ОбработкаОжидания(«ОткрытьОбъект», 1);

КонецПроцедуры
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Процедура ПосмотретьОбъект(Кт) Экспорт

гОбъект = 0;
гРежимОбъекта = 1;
ТипОбъекта = «»;
ВидОбъекта = Кт.Вид();

Попытка

Объект = Кт.ТекущийЭлемент();
ТипОбъекта = «Справочник»;

Исключение

Объект = 0;

КонецПопытки;

Если Объект = 0 Тогда

Попытка

Объект = Кт.ТекущийДокумент();
ТипОбъекта = «Документ»;

Исключение

Объект = 0;

КонецПопытки;

КонецЕсли;

Если Объект = 0 Тогда

Возврат;

КонецЕсли;

гОбъект = СоздатьОбъект(ТипОбъекта + «.» + ВидОбъекта);
Если ТипОбъекта = «Справочник» Тогда

гОбъект.НайтиЭлемент(Объект);

ИначеЕсли ТипОбъекта = «Документ» Тогда

гОбъект.НайтиДокумент(Объект);

КонецЕсли;

Кт.Форма.Закрыть();

ОбработкаОжидания(«ОткрытьОбъект», 1);

КонецПроцедуры
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


Модуль «Справочника\Документа»:

//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Процедура кРедактировать()

РедактироватьОбъект(Контекст);

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

//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Процедура ПриЗаписи()

ПосмотретьОбъект(Контекст);

КонецПроцедуры
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


Теперь для того что б это все заработало нужно:

1. Установить параметр «Режим открытия объектов» = «Просмотр» для всех пользователей;

2. На форму «справочника\документа» повесить «кнопку\перехватчик сочетания клавиш» и привязать к процедуре кРедактировать();

3. В процедуру при призаписи добавляем ссылку на ПосмотретьОбъект(Контекст);

4. Наличи внешней компоненты «1ссрр\formex». (У меня 1срр версия 2.0.3.7) (Больше не требуется)

Вот собственно и все. Надеюсь этот алгоритм приглянется кому то еще.

1. В ближайшем будущем планирую добавить режим сброса блокировки если в объекте, открытом на редактирование, нажата кнопка записать. (Записал — освободил) (Выполнил)

2. В ближайшем будущем планирую добавить режим сброса блокировки если в объекте нет активности в течении N-минут.

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