Автоматический запрет редактирования для пользователей УТ 10.3

Скачать текст статьи в формате RTF

  

В популярной конфигурации «1С:Управление торговлей 10.3» есть механизм установки запрета редактирования по пользователям базы данных.

С его помощью можно, например, запретить менеджерам редактировать информацию ранее определенной даты, например, текущей. Но есть один минус – это надо делать вручную. Как-то не технологично.

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

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

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

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

 Итак.

Задача.

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

Решение.

1. Вводим дополнительное право пользователя.

Назовем его «Автоматически закрывать предыдущий день».
  • В режиме Предприятие открываем меню «Операции / Планы видов характеристик / Права пользователей»
  • В группу «Документы» (или куда сочтете нужным) добавляем новое право «Автоматически НЕ закрывать предыдущий день», тип значения – Булево (составной тип отменяется).
  • Во избежание возможных эксцессов при последующих обновлениях код нового элемента лучше установить в «1000», например. Разработчики конфигурации при пополнении списка новыми предопределенными характеристиками вряд ли дойдут до такого кода.
  • Теперь в меню «Сервис / Пользователи / Настройка дополнительных прав пользователей» в группе «Документы» появился новый флажок, который можно установить тем менеджерам, для которых НЕ надо задействовать механизм автоматического закрытия вчерашнего дня от редактирования.

2. Дорабатываем конфигурацию

  • добавляем новый ПРИВИЛЕГИРОВАННЫЙ общий модуль. Назовем его, например, «АЦРК_Привилегированный». В свойствах модуля должны быть установлены галочки «Привилегированный» и «Сервер».
В этом модуле должны быть следующая процедура:


Процедура ЗакрытиеПредыдущегоДня() Экспорт
// НЕ зхакрывает предыдущий день если установлено право пользователя "Автоматически НЕ закрывать предыдущий день"
// в противном случае производится запрет редактирования по предыдущий день включительно.
// Для вновь введенных пользователей предыдущий день будет автоматически закрываться, потому что настройка 
// "Автоматически НЕ закрывать предыдущий день" не установлена.
л_Право = ПланыВидовХарактеристик.ПраваПользователей.НайтиПоНаименованию("Автоматически НЕ закрывать предыдущий день");
//л_Право = ПланыВидовХарактеристик.ПраваПользователей.НайтиПоНаименованию("Автоматически закрывать предыдущий день");
Если л_Право.Пустая() Тогда
// если такой настройки в принципе в базе нет, то ничего и не делаем
Возврат;
КонецЕсли;
л_ТекущийПользователь = УправлениеПользователями.ОпределитьТекущегоПользователя();
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ЗначенияДополнительныхПравПользователя.Значение
|ИЗ
| РегистрСведений.ЗначенияДополнительныхПравПользователя КАК ЗначенияДополнительныхПравПользователя
|ГДЕ
| ЗначенияДополнительныхПравПользователя.Пользователь = &Пользователь
| И ЗначенияДополнительныхПравПользователя.Право = &Право";
Запрос.УстановитьПараметр("Пользователь", л_ТекущийПользователь);
Запрос.УстановитьПараметр("Право", л_Право);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
л_УстановитьЗапрет = Истина;
Иначе
Выборка = Результат.Выбрать();
Выборка.Следующий();
л_УстановитьЗапрет = НЕ Выборка.Значение;
КонецЕсли;
Если л_УстановитьЗапрет Тогда
л_Запись = РегистрыСведений.ГраницыЗапретаИзмененияДанных.СоздатьМенеджерЗаписи();
л_Запись.Пользователь = л_ТекущийПользователь;
л_Запись.ГраницаЗапретаИзменений = НачалоДня(НачалоДня(ТекущаяДата())-60);
л_Запись.Записать();
КонецЕсли;
ПолныеПрава.УстановитьПараметрГраницыЗапретаИзмененияДанных();
КонецПроцедуры
  • Вставляем одну строку в модуль приложения, перед окончанием процедуры «ПриНачалеРаботыСистемы»
АЦРК_Привилегированный.ЗакрытиеПредыдущегоДня(); //АЦРК
КонецПроцедуры // ПриНачалеРаботыСистемы()


Вот и все.

3. Как это работает 

Когда такой менеджер утром заходит в базу данных для него автоматически устанавливается запрет редактирования по вчерашний день включительно. В этом можно убедиться, посмотрев в меню «Сервис / Настройка учета / Установка даты запрета изменения данных». На закладке «Основная дата» вы увидите записи по отмеченным менеджерам.

 Чтобы дать такому менеджеру возможность изменения документов уполномоченный пользователь должен выполнить следующие действия:

 

  выбрать меню «Сервис / Настройка учета / Установка даты запрета изменения данных». На закладке «Основная дата» отображаются записи по пользователям. Для нужного менеджера отодвинуть дату запрета на нужную дату, нажать кнопку «Установить»;

в настройке дополнительных прав пользователей для нужного менеджера установите флажок в строке «Автоматически НЕ закрывать предыдущий день»;

менеджер должен выйти из базы и снова в нее зайти;

после того, как менеджер войдет в базу, снова снимите флажок «Автоматически НЕ закрывать предыдущий день». После этого уполномоченный пользователь может продолжать свою работу. При очередном входе менеджера в базу (на следующий день) для него снова установится запрет редактирования на предыдущую дату.

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