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

24.12.12

Администрирование - Информационная безопасность

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке [?]
Текст статьи
.doc 25,50Kb
151
151
0 SM
Скачать

Автоматический запрет редактирования (для конфигураций УТ 10.3)

редакция 2

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

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

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

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

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

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

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

Итак.

Задача.

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

Решение.

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

Назовем его «Автоматически НЕ закрывать предыдущий день».

}39; В режиме Предприятие открываем меню «Операции / Планы видов характеристик / Права пользователей»

}39; В группу «Документы» (или куда сочтете нужным) добавляем новое право «Автоматически НЕ закрывать предыдущий день», тип значения – Булево (составной тип отменяется).

}39; Во избежание возможных эксцессов при последующих обновлениях код нового элемента лучше установить в «1000», например. Разработчики конфигурации при пополнении списка новыми предопределенными характеристиками вряд ли дойдут до такого кода.

}39; Теперь в меню «Сервис / Пользователи / Настройка дополнительных прав пользователей» в группе «Документы» появился новый флажок, который можно установить тем пользователям, для которых НЕ надо задействовать механизм автоматического закрытия вчерашнего дня от редактирования.

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

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

В этом модуле должны быть следующая процедура:

Процедура ЗакрытиеПредыдущегоДня() Экспорт

// НЕ зхакрывает предыдущий день если установлено право пользователя "Автоматически НЕ закрывать предыдущий день"

// в противном случае производится запрет редактирования по предыдущий день включительно.

// Для вновь введенных пользователей предыдущий день будет автоматически закрываться, потому что настройка 

// "Автоматически НЕ закрывать предыдущий день" не установлена.

л_Право = ПланыВидовХарактеристик.ПраваПользователей.НайтиПоНаименованию("Автоматически НЕ закрывать предыдущий день");

//л_Право = ПланыВидовХарактеристик.ПраваПользователей.НайтиПоНаименованию("Автоматически закрывать предыдущий день");

Если л_Право.Пустая() Тогда

// если такой настройки в принципе в базе нет, то ничего и не делаем

Возврат;

КонецЕсли;



л_ТекущийПользователь = УправлениеПользователями.ОпределитьТекущегоПользователя();

Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ

| ЗначенияДополнительныхПравПользователя.Значение

|ИЗ

| РегистрСведений.ЗначенияДополнительныхПравПользователя КАК ЗначенияДополнительныхПравПользователя

|ГДЕ

| ЗначенияДополнительныхПравПользователя.Пользователь = &Пользователь

| И ЗначенияДополнительныхПравПользователя.Право = &Право";

Запрос.УстановитьПараметр("Пользователь", л_ТекущийПользователь);

Запрос.УстановитьПараметр("Право", л_Право);

Результат = Запрос.Выполнить();

Если Результат.Пустой() Тогда

л_УстановитьЗапрет = Истина;

Иначе

Выборка = Результат.Выбрать();

Выборка.Следующий();

л_УстановитьЗапрет = НЕ Выборка.Значение;

КонецЕсли;



Если л_УстановитьЗапрет Тогда

л_Запись = РегистрыСведений.ГраницыЗапретаИзмененияДанных.СоздатьМенеджерЗаписи();

л_Запись.Пользователь = л_ТекущийПользователь;

л_Запись.ГраницаЗапретаИзменений = НачалоДня(НачалоДня(ТекущаяДата())-60);

л_Запись.Записать();

КонецЕсли;

ПолныеПрава.УстановитьПараметрГраницыЗапретаИзмененияДанных();

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



}39; Вставляем одну строку в модуль приложения, перед окончанием процедуры «ПриНачалеРаботыСистемы»

…

АЦРК_Привилегированный.ЗакрытиеПредыдущегоДня(); //АЦРК

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

Вот и все.

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

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

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

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

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

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

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

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

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

См. также

Информационная безопасность Системный администратор Программист Платные (руб)

AUTO VPN (portable) - автоматизация подключения пользователей к удаленному рабочему месту или сети посредством создания автоматического VPN (L2TP или L2TP/IPSEC и т.д.) подключения без ввода настроек пользователем (с возможностью скрытия этих настроек от пользователя). Программа автоматически выполняет подключение к VPN серверу и после успешного коннекта , если необходимо, подключение к серверу удаленных рабочих столов (RDP).

1200 руб.

24.03.2020    14808    24    32    

34

Информационная безопасность Пароли Платформа 1С v8.3 Бесплатно (free)

Все еще храните пароли в базе? Тогда мы идем к вам! Безопасное и надежное хранение секретов. JWT авторизация. Удобный интерфейс. Демо конфигурация. Бесплатно.

30.05.2024    4621    kamisov    16    

58

Информационная безопасность Программист Платформа 1С v8.3 Бесплатно (free)

Рассмотрим в статье более подробную и последовательную настройку аутентификации в 1С с использованием распространенной технологии JWT, которая пришла в программу в платформе версии 8.3.21.1302.

27.02.2024    4815    PROSTO-1C    10    

38

Информационная безопасность Программист Платформа 1С v8.3 Абонемент ($m)

Интеграционные решения стали неотъемлемой частью нашей жизни. Правилом хорошего тона в современных приложениях является не давать интегратору доступ к чувствительным данным. Device flow позволяет аутентифицировать пользователя, не показывая приложению чувствительные данные (например: логин и пароль)<br> Рассмотрим Device flow аутентификацию, в приложении, на примере OpenID провайдера Yandex.

1 стартмани

27.10.2023    2093    platonov.e    1    

23

Информационная безопасность Системный администратор Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

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

5 стартмани

24.04.2023    5879    18    soulner    7    

32

Информационная безопасность Системный администратор Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

1С, начиная с версии платформы 8.3.21, добавили в систему возможность двойной аутентификации. Как это работает: в пользователе информационной базы появилось свойство «Аутентификация токеном доступа» (АутентификацияТокеномДоступа во встроенном языке), если установить этот признак и осуществить ряд манипуляций на встроенном языке, то появляется возможность при аутентификации отправлять HTTP запросы, которые и реализуют этот самый второй фактор. Данное расширение позволяет организовать двухфакторную аутентификацию с помощью электронной почты или мессенджера Telegram.

2 стартмани

08.12.2022    6590    39    Silenser    12    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. reynagroup 21.01.11 00:51 Сейчас в теме
С точки зрения бухгалтерского учёта - не совсем правильно изменять документы в прошлом периоде.
необходимо сторнировать.
2. Поручик 4683 21.01.11 18:14 Сейчас в теме
http://infostart.ru/public/71590/

Там же есть и список аналогичных работ.
3. acrk 753 21.01.11 19:05 Сейчас в теме
(2) Прямой аналог только один - Мотива... Но он гораздо круче, поэтому платный.
Зато здесь минимальные изменения, вносимые в код разработчика: 1 строка, меньше не бывает.
4. metakot 12 15.09.11 22:35 Сейчас в теме
В рознице работает без проблем, как раз искал подобное
5. trunix 14.10.11 08:35 Сейчас в теме
Если использовать вместо ПланыВидовХарактеристик.ПраваПользователя, ПланыВидовХарактеристик.НастройкиПользователей можно будет указывать количество дней запрета.
6. acrk 753 14.10.11 09:32 Сейчас в теме
(5) Настройки пользователя доступны пользователю, так что он сможет сам отодвинуть дату запрета на сколько захочет. Использование прав пользователя более правильно, потому что к ним доступ есть не у всех.
7. esa35 89 15.11.11 11:37 Сейчас в теме
eAkademik пишет:

В рознице работает без проблем, как раз искал подобное


у меня в Рознице 8.2 не работает((( подскажите как быть. у меня почему то кассиры (с ролью РМК) спокойно проводят предыдущий день, а старые документы(предыдущего месяца) не могут. бьюсь и не пойму в чем проблема. дата запртеа ставится, но они все равно могут изменить(((

я еще немного изменила код процедуры в конце, я добавила константу КоличествоДнейЗапрета, чтобы регулировать с какого дня документы нельзя трогать

Если л_УстановитьЗапрет Тогда
КолДней = Число(Константы.КоличествоДнейЗапрета.Получить());

л_Запись = РегистрыСведений.ГраницыЗапретаИзмененияДанных.СоздатьМенеджерЗаписи();
л_Запись.Пользователь = л_ТекущийПользователь;
//л_Запись.ГраницаЗапретаИзменений = НачалоДня(НачалоДня(ТекущаяДата())-60);
л_Запись.ГраницаЗапретаИзменений = НачалоДня(НачалоДня(ТекущаяДата())-(60+86400*КолДней));
Сообщить(КолДней);
л_Запись.Записать();
КонецЕсли;

ПолныеПрава.УстановитьПараметрГраницыЗапретаИзмененияДанных();


кто подскажет что может быть не так?
8. dynamite 18.04.12 23:39 Сейчас в теме
Я что то не то делаю скорее всего и у меня выходит ошибка при запуске


{МодульОбычногоПриложения(206,3)}: Переменная не определена (АЦРК_Привилегированный)
<<?>>АЦРК_Привилегированный.ЗакрытиеПредыдущегоДня(); //АЦРК
9. acrk 753 19.04.12 11:54 Сейчас в теме
(8) dynamite,
АЦРК_Привилегированный - это общий модуль. Проверьте его свойства, внимательно по инструкции.
10. dynamite 19.04.12 20:17 Сейчас в теме
вроде все сделал по инструкции. Создал общий модель "АЦРК_Привилегированный" в свойствах установил галочки в «Привилегированный» и «Сервер», в новосозданном модуле с копировал это

Процедура ЗакрытиеПредыдущегоДня() Экспорт
// НЕ зхакрывает предыдущий день если установлено право пользователя "Автоматически НЕ закрывать предыдущий день"
// в противном случае производится запрет редактирования по предыдущий день включительно.
// Для вновь введенных пользователей предыдущий день будет автоматически закрываться, потому что настройка
// "Автоматически НЕ закрывать предыдущий день" не установлена.
л_Право = ПланыВидовХарактеристик.ПраваПользователей.НайтиПоНаименованию("Автоматически НЕ закрывать предыдущий день");
//л_Право = ПланыВидовХарактеристик.ПраваПользователей.НайтиПоНаименованию("Автоматически закрывать предыдущий день");
Если л_Право.Пустая() Тогда
// если такой настройки в принципе в базе нет, то ничего и не делаем
Возврат;
КонецЕсли;

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

Если л_УстановитьЗапрет Тогда
л_Запись = РегистрыСведений.ГраницыЗапретаИзмененияДанных.СоздатьМенеджерЗаписи();
л_Запись.Пользователь = л_ТекущийПользователь;
л_Запись.ГраницаЗапретаИзменений = НачалоДня(НачалоДня(ТекущаяДата())-60);
л_Запись.Записать();
КонецЕсли;
ПолныеПрава.УстановитьПараметрГраницыЗапретаИзмененияДанных();
КонецПроцедуры


вроде и все. А так же в модуле обычного приложении перед окончанием процедуры «ПриНачалеРаботыСистемы» вставил это

АЦРК_Привилегированный.ЗакрытиеПредыдущегоДня(); //АЦРК

может я что то не да понял или еще что надо дописать
11. dynamite 19.04.12 20:35 Сейчас в теме
все нашел ошибку, просто надо было в общем модуле свойствах поставит галочку не в привилегированный а в Клиент (обычное приложении)
всем спасибо!
12. Bud78 8 20.10.12 12:51 Сейчас в теме
Установил на последней версии УТ (10.3.19.3).
дата запрета не устанавливается :(
13. acrk 753 22.10.12 23:26 Сейчас в теме
(12) Bud78,
Специально проверил на релизе 10.3.19.3 - все работает.
Причина скорее всего в том, что у пользователя, которого вы проверяете, установлены полные права. На таких запрет не действует. На мой взгляд это неправильно, но это уже вопрос к 1С.
Но ведь логично же не давать полные права тем пользователям, которых вы хотите ограничить.
16. azeraus 23.10.12 14:58 Сейчас в теме
Помогите пожалуйста, сделал все по инструкции, но выдает ошибку

{ОбщийМодуль.АЦРК_Привилегированный.Модуль(13)}: Метод объекта не обнаружен (ОпределитьТекущегоПользователя)
л_ТекущийПользователь = УправлениеПользователями.ОпределитьТекущегоПользователя();
17. acrk 753 23.10.12 15:29 Сейчас в теме
(16) azeraus,
У вас точно УТ 10.3 ?
А то может вы это в УТ 11 проделали ?
18. azeraus 24.10.12 07:12 Сейчас в теме
(17) У меня стоит Управление торговлей для Казахстана локализация САПА версия 2.2.12.7, платформа 8.2.14.537
Это может как то повлиять?
19. acrk 753 24.10.12 09:29 Сейчас в теме
(18) azeraus,
Не знаю. Наверное может. Может они там все процедуры экспортные переименовали.
Надо смотреть.
Вы сами можете посмотреть, есть ли в конфигурации общий модуль "УправлениеПользователями" (судя по сообщению - есть) и есть ли в нем процедура "ОпределитьТекущегоПользователя" (судя по сообщению - нет).
20. azeraus 24.10.12 10:53 Сейчас в теме
(19) Все точно так как вы написали, есть общий модуль "УправлениеПользователями", но нет процедура "ОпределитьТекущегоПользователя", посоветуйте как быть, сам я не программист, но нееемного разбираюсь в 1С :)
21. acrk 753 24.10.12 18:26 Сейчас в теме
(20) azeraus,
вышлите модуль на info@acrk.ru
14. Bud78 8 23.10.12 10:41 Сейчас в теме
Проверяю на пользователях. у которых нету полных прав.

А по поводу вопроса к 1с, то в настройках учетной политики есть галочка, которая разрешает применение даты запрета для полных прав.
15. acrk 753 23.10.12 14:01 Сейчас в теме
(14) Bud78,
у модуля галка "Привилегированный" установлена ?
22. LexBG 15.02.13 15:14 Сейчас в теме
Спасибо огромное! Как раз стояла такая задача, сэкономил массу времени!
23. xoxmaister 1 15.10.13 17:04 Сейчас в теме
Отлично написано! очень подробно! Спасибо большое!
24. masik85 21 30.09.14 13:26 Сейчас в теме
Спасибо огромное за разработку!! Во- первых очень интересный метод , с помощью ПлановВидовХарактеристик. Мне Ваш способ понравился больше всего.Мало изменений и практически одноразово в конфе, все остальное можно добавлять через меню. Просто молодец! Переделаю под УПП. Единственно , наверное еще переделаю чтобы "галки" ставить тем у кого обрубать период, их меньше. Остальные по общей дате практически умещаются. В любом случае Спасибо огромное! за труд, за идею, за воплощение.
25. acrk 753 01.10.14 11:20 Сейчас в теме
(24) masik85,
В первом варианте так и было - галочки ставились тем, кому надо обрубать период.
Потом специально переделал, потому что это неправильно - принцип автоматического запрета нарушается. Вот забыли Вы общую дату изменить, значит и запрет забыл установиться.
Тем более, если у Вас УПП, значит пользователей много, текучка есть. Один кладовщик уволился, другой пришел. Нового пользователя создали, а галочки установить забыли - период не закрылся.
А так он зароется автоматически по вчерашний день.
Если этот рядовой кладовщик будет недоволен - вы ему объясните, что ему так положено. А если этот новый пользователь начальник какой-нибудь, и вы ему должны были бы открыть больший период, но забыли, он к Вам сам обратится и напомнит, и Вы тогда ему откроете период какой надо.
26. makskov 89 18.12.18 15:41 Сейчас в теме
Скажите пожалуйста, а можно чтобы данное правило работало для всех документов кроме определенного?
27. acrk 753 20.12.18 16:07 Сейчас в теме
(26) Смысл в публикации в том, чтобы с минимальным вмешательством решить поставленную задачу.
А в поставленной задаче не было пункта, чтобы "кроме одного".
Вашу задачу тоже можно решить, но это надо уже глубже в конфигурацию лезть.
28. makskov 89 21.12.18 08:39 Сейчас в теме
29. ital 29.05.20 06:36 Сейчас в теме
Респект автору в УТ10 взлетело сразу, то что надо.
Оставьте свое сообщение