Скачать текст статьи в формате RTF
В популярной конфигурации «1С:Управление торговлей 10.3» есть механизм установки запрета редактирования по пользователям базы данных.
С его помощью можно, например, запретить менеджерам редактировать информацию ранее определенной даты, например, текущей. Но есть один минус – это надо делать вручную. Как-то не технологично.
В этой статье описывается, как сделать небольшую доработку конфигурации, которая будет автоматически устанавливать дату запрета редактирования по вчерашний день включительно для определенного круга пользователей.
В первой редакции было сделано так, что если для пользователя никаких действий не предпринималось, то и запрет редактирования для него автоматически не устанавливался, а для установки надо было установить пользователю дополнительную настройку.
Но потом я подумал, что автоматический запрет нужен для тех пользователей, которые чаще всего меняются, потому что это как правило младшие персонал. А для новых сотрудников надо вводить нового пользователя. А для нового пользователя надо установить дополнительную настройку. А эту настройку можно забыть установить, потому что ответственного сотрудника отвлекли или потому что он в отпуске и вместо него работает не такой ответственный, который может про это просто забыть.
Поэтому во второй редакции сделано так, что пользователю, в том числе новому, для которого никаких дополнительных действий не предпринималось, при входе в базу будет автоматически устанавливаться запрет редактирования по вчерашний день включительно. А чтобы этого не происходило, пользователю надо установить дополнительную настройку. В этом случае забыть ничего не возможно, потому что про запрет напомнит сам пользователь, когда с ним столкнется. Пользователь обратиться к соответствующему сотруднику, который либо объяснит, что так и задумано и ему не положено, либо установит настройку, отменяющую автоматический запрет редактирования.
Итак.
Задача.
- Требуется доработать конфигурацию таким образом, чтобы при входе некоторого пользователя в систему для него автоматически закрывался для редактирования вчерашний день (и соответственно все предыдущие). При этом уполномоченные пользователи должны иметь возможность открыть для редактирования определенный период при необходимости.
Решение.
-
1. Вводим дополнительное право пользователя.
- Назовем его «Автоматически закрывать предыдущий день».
-
- В режиме Предприятие открываем меню «Операции / Планы видов характеристик / Права пользователей»
-
- В группу «Документы» (или куда сочтете нужным) добавляем новое право «Автоматически НЕ закрывать предыдущий день», тип значения – Булево (составной тип отменяется).
-
- Во избежание возможных эксцессов при последующих обновлениях код нового элемента лучше установить в «1000», например. Разработчики конфигурации при пополнении списка новыми предопределенными характеристиками вряд ли дойдут до такого кода.
-
- Теперь в меню «Сервис / Пользователи / Настройка дополнительных прав пользователей» в группе «Документы» появился новый флажок, который можно установить тем менеджерам, для которых НЕ надо задействовать механизм автоматического закрытия вчерашнего дня от редактирования.
2. Дорабатываем конфигурацию
-
-
-
- добавляем новый ПРИВИЛЕГИРОВАННЫЙ общий модуль. Назовем его, например, «АЦРК_Привилегированный». В свойствах модуля должны быть установлены галочки «Привилегированный» и «Сервер».
- В этом модуле должны быть следующая процедура:
- Процедура ЗакрытиеПредыдущегоДня() Экспорт
- // НЕ зхакрывает предыдущий день если установлено право пользователя "Автоматически НЕ закрывать предыдущий день"
- // в противном случае производится запрет редактирования по предыдущий день включительно.
- // Для вновь введенных пользователей предыдущий день будет автоматически закрываться, потому что настройка
- // "Автоматически НЕ закрывать предыдущий день" не установлена.
- л_Право = ПланыВидовХарактеристик.ПраваПользователей.НайтиПоНаименованию("Автоматически НЕ закрывать предыдущий день");
- //л_Право = ПланыВидовХарактеристик.ПраваПользователей.НайтиПоНаименованию("Автоматически закрывать предыдущий день");
- Если л_Право.Пустая() Тогда
- // если такой настройки в принципе в базе нет, то ничего и не делаем
- Возврат;
- КонецЕсли;
-
- л_ТекущийПользователь = УправлениеПользователями.ОпределитьТекущегоПользователя();
- Запрос = Новый Запрос;
- Запрос.Текст = "ВЫБРАТЬ
- | ЗначенияДополнительныхПравПользователя.Значение
- |ИЗ
- | РегистрСведений.ЗначенияДополнительныхПравПользователя КАК ЗначенияДополнительныхПравПользователя
- |ГДЕ
- | ЗначенияДополнительныхПравПользователя.Пользователь = &Пользователь
- | И ЗначенияДополнительныхПравПользователя.Право = &Право";
- Запрос.УстановитьПараметр("Пользователь", л_ТекущийПользователь);
- Запрос.УстановитьПараметр("Право", л_Право);
- Результат = Запрос.Выполнить();
- Если Результат.Пустой() Тогда
- л_УстановитьЗапрет = Истина;
- Иначе
- Выборка = Результат.Выбрать();
- Выборка.Следующий();
- л_УстановитьЗапрет = НЕ Выборка.Значение;
- КонецЕсли;
-
- Если л_УстановитьЗапрет Тогда
- л_Запись = РегистрыСведений.ГраницыЗапретаИзмененияДанных.СоздатьМенеджерЗаписи();
- л_Запись.Пользователь = л_ТекущийПользователь;
- л_Запись.ГраницаЗапретаИзменений = НачалоДня(НачалоДня(ТекущаяДата())-60);
- л_Запись.Записать();
- КонецЕсли;
- ПолныеПрава.УстановитьПараметрГраницыЗапретаИзмененияДанных();
- КонецПроцедуры
-
- Вставляем одну строку в модуль приложения, перед окончанием процедуры «ПриНачалеРаботыСистемы»
- …
- АЦРК_Привилегированный.ЗакрытиеПредыдущегоДня(); //АЦРК
- КонецПроцедуры // ПриНачалеРаботыСистемы()
- Вот и все.
-
3. Как это работает
- Когда такой менеджер утром заходит в базу данных для него автоматически устанавливается запрет редактирования по вчерашний день включительно. В этом можно убедиться, посмотрев в меню «Сервис / Настройка учета / Установка даты запрета изменения данных». На закладке «Основная дата» вы увидите записи по отмеченным менеджерам.
Чтобы дать такому менеджеру возможность изменения документов уполномоченный пользователь должен выполнить следующие действия:
・ выбрать меню «Сервис / Настройка учета / Установка даты запрета изменения данных». На закладке «Основная дата» отображаются записи по пользователям. Для нужного менеджера отодвинуть дату запрета на нужную дату, нажать кнопку «Установить»;
・ в настройке дополнительных прав пользователей для нужного менеджера установите флажок в строке «Автоматически НЕ закрывать предыдущий день»;
・ менеджер должен выйти из базы и снова в нее зайти;
・ после того, как менеджер войдет в базу, снова снимите флажок «Автоматически НЕ закрывать предыдущий день». После этого уполномоченный пользователь может продолжать свою работу. При очередном входе менеджера в базу (на следующий день) для него снова установится запрет редактирования на предыдущую дату.
Нетрудно и развить это решение, добавив для пользователя количество дней, на которое (от текущей даты) следует отодвигать дату запрета редактирования при входе пользователя в базу. Например, для простого менеджера это может быть один день, а для старшего — три или пять дней. К сожалению в настройках дополнительных прав пользователей не предусмотрено хранение числовых значений, поэтому придется вносить более существенные изменения в конфигурацию.