Данная обработка позволяет гибко и оперативно настраивать доступ (закрывать период для документов) пользователя к справочникам, документам и ПВХ. Для документов есть возможность установить границу доступа в часах, после которой пользователь не сможет изменить документ.
Для работы с обработкой нужно внести в конфигурацию несколько объектов метаданных, которые описаны в файлах "Необходимые объекты метаданных.txt" и "Текст подписок.txt". Файлы в архиве.
Необходимые объекты метаданных:
Регистр сведений "НастройкаДоступаПользователейИзменениеОбъектов"
Константа "ИспользоватьНастройкуДоступаНаИзменениеОбъектов" (тип булево)
Подписки на события:
"ПроверкаНаИзменениеСправочники" (тип источника "СправочникОбъект", событие "ПередЗаписью")
"ПроверкаНаИзменениеДокументы" (тип источника "ДокументОбъект", событие "ПередЗаписью")
"ПроверкаНаИзменениеПВХ" (тип источника "ПланВидовХарактеристикОбъект", событие "ПередЗаписью")
Структура РС "НастройкаДоступаПользователейИзменениеОбъектов":
Измерения:
- Пользователь (СправочникСсылка.Пользователи)
- ВидОбъекта (Строка(50))
- ИмяОбъекта (Строка(100))
- СрокДоступа (Число(10, 0))
Текст подписок:
Процедура ПроверкаВозможностиИзменения(ВидОбъекта, ИмяОбъекта, Отказ, Источник = Неопределено)
Если НЕ Константы.ИспользоватьНастройкуДоступаНаИзменениеОбъектов.Получить() Тогда
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| МАКСИМУМ(ВЫБОР
| КОГДА НастройкаДоступаПользователейИзменениеОбъектов.СрокДоступа = 0
| ТОГДА 9999999999
| ИНАЧЕ НастройкаДоступаПользователейИзменениеОбъектов.СрокДоступа
| КОНЕЦ) КАК СрокДоступа,
| НастройкаДоступаПользователейИзменениеОбъектов.Пользователь,
| НастройкаДоступаПользователейИзменениеОбъектов.ВидОбъекта,
| НастройкаДоступаПользователейИзменениеОбъектов.ИмяОбъекта
|ИЗ
| РегистрСведений.НастройкаДоступаПользователейИзменениеОбъектов КАК НастройкаДоступаПользователейИзменениеОбъектов
|ГДЕ
| НастройкаДоступаПользователейИзменениеОбъектов.ВидОбъекта = &ВидОбъекта
| И НастройкаДоступаПользователейИзменениеОбъектов.ИмяОбъекта = &ИмяОбъекта
| И НастройкаДоступаПользователейИзменениеОбъектов.Пользователь = &Пользователь
|
|СГРУППИРОВАТЬ ПО
| НастройкаДоступаПользователейИзменениеОбъектов.Пользователь,
| НастройкаДоступаПользователейИзменениеОбъектов.ВидОбъекта,
| НастройкаДоступаПользователейИзменениеОбъектов.ИмяОбъекта";
Запрос.УстановитьПараметр("ВидОбъекта", ВидОбъекта);
Запрос.УстановитьПараметр("ИмяОбъекта", ИмяОбъекта);
Запрос.УстановитьПараметр("Пользователь", глЗначениеПеременной("глТекущийПользователь"));
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Если ВидОбъекта = "Документы" Тогда
// Надо проконтролировать срок
Запрос.Текст =
"ВЫБРАТЬ
| РАЗНОСТЬДАТ(&ДатаНач, &ДатаКон, ЧАС) КАК РазницаДат";
Запрос.УстановитьПараметр("ДатаНач", Источник.Дата);
Запрос.УстановитьПараметр("ДатаКон", ТекущаяДата());
ВыборкаДаты = Запрос.Выполнить().Выбрать();
ВыборкаДаты.Следующий();
Если ВыборкаДаты.РазницаДат > Выборка.СрокДоступа Тогда
Сообщить("Изменение объекта запрещено", СтатусСообщения.Важное);
Отказ = Истина;
КонецЕсли;
Иначе
// Все нормально
КонецЕсли;
Иначе
// Доступа нет
Сообщить("Изменение объекта запрещено", СтатусСообщения.Важное);
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
Процедура ПроверкаНаИзменениеСправочникиПередЗаписью(Источник, Отказ) Экспорт
ПроверкаВозможностиИзменения("Справочники", Источник.Метаданные().Имя, Отказ);
КонецПроцедуры
Процедура ПроверкаНаИзменениеДокументыПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
ПроверкаВозможностиИзменения("Документы", Источник.Метаданные().Имя, Отказ, Источник);
КонецПроцедуры
Процедура ПроверкаНаИзменениеПВХПередЗаписью(Источник, Отказ) Экспорт
ПроверкаВозможностиИзменения("ПланыВидовХарактеристик", Источник.Метаданные().Имя, Отказ);
КонецПроцедуры
Обработка должна работать со всеми типовыми конфигурациями (обычное приложение), в которых есть справочник "Пользователи". Тестировалась на конфигурациях Управление торговлей 10.3, Комплексная автоматизация 1.1.