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

22.07.13

Разработка - Математика и алгоритмы

В этой статье описывается усовершенствованная технология автоматической установки даты запрета редактирования
Во-первых, можно определить несколько стратегий запрета редактирования с разными параметрами. Например, запрет в днях, запрет доступа в предыдущие месяцы кварталы и т.п., с указанием отступа от текущей даты.
То есть для некоторых пользователей (рядовых менеджеров) при входе в базе будет устанавливаться запрет по вчерашний день, для других (старших менеджеров) на 5 дней назад, для третьих (администраторов базы или руководителей отдела) - запрет предыдущего месяца с отступом в 10 дней..
Во-вторых, запрет будет устанавливаться для ВСЕХ без исключения пользователей базы данных. Для самых привилегированных это будет максимальная глубина, но запрет будет установлен.
Управление этой системой осуществляется через механизм дополнительных прав пользователей.
При необходимости пользователь с полными правами может открыть для себя закрытый период, но только на текущий сеанс работы.

Скачать файлы

Наименование Файл Версия Размер
МноговариантныйАвтоматическийЗапретРедактирования_УТ10_3
.rtf 51,17Kb
27
.rtf 51,17Kb 27 Скачать

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



В этой статье описывается усовершенствованная технология автоматической установки даты запрета редактирования

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

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

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

Вообще идея автоматического продвижения даты запрета редактирования для всех пользователей кажется мне очень удачной. Мне представляется, что все экономические программы, в том числе все конфигурации на 1С, должны автоматически передвигать дату запрета редактирования с течением времени.

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

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

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

Я сделал для нее небольшую доработку, в результате которой для некоторых пользователей при входе пользователя в базу автоматически устанавливался запрет редактирования документов до предыдущего дня включительно. Статья на Инфостарте: //infostart.ru/public/80499/.

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

В этой статье описывается усовершенствованная технология автоматической установки даты запрета редактирования

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

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

В-третьих, запрет будет устанавливаться ДЛЯ ВСЕХ ПОЛЬЗОВАТЕЛЕЙ базы данных. Для самых привилегированных это будет максимальная глубина из всех предусмотренных, но запрет будет установлен.

Управление этой системой осуществляется через механизм дополнительных прав пользователей.

Итак.

Задача.

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

Решение.

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

Все новые дополнительные права должны иметь вид "Автоматически НЕ закрывать предыдущий : N", где N - величина отступа от текущей даты в днях, положительное число, а может принимать значения "день" и "месяц" (желающие могут добавить еще и "квартал" и "год").

Например, введем три дополнительных права:

Автоматически НЕ закрывать предыдущий день: 0

Автоматически НЕ закрывать предыдущий день: 5

Автоматически НЕ закрывать предыдущий месяц: 0

Автоматически НЕ закрывать предыдущий месяц: 10

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

Работать с дополнительными правами пользователей могут только пользователи с полными правами.

Для этого:

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

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

Копируем это право и переименовываем в «Автоматически НЕ закрывать предыдущий период: 5». Копируем еще раз и переименовываем в «Автоматически НЕ закрывать предыдущий месяц: 0». И еще раз копируем и переименовываем в «Автоматически НЕ закрывать предыдущий месяц: 10»

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

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



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



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

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

Процедура ЗакрытиеПредыдущегоПериода() Экспорт
л_ПрефиксДополнительногоПрава1 = "Автоматически НЕ закрывать предыдущий день:";
л_ПрефиксДополнительногоПрава2 = "Автоматически НЕ закрывать предыдущий месяц:";
л_ТекущийПользователь = УправлениеПользователями.ОпределитьТекущегоПользователя();

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

Если л_ТаблицаДополнительныхПрав.Количество() = 0 Тогда
// если такой настройки в принципе в базе нет, то ничего и не делаем
Сообщить("Отсутствуют дополнительные права пользователей ""Автоматически НЕ закрывать предыдущий период: N"" или ""Автоматически НЕ закрывать предыдущий месяц: N""",СтатусСообщения.Информация);
Сообщить("Добвьте нужное количество дополнительных прав пользователя вида ""Автоматически НЕ закрывать предыдущий период: N"" или ""Автоматически НЕ закрывать предыдущий месяц: N"", где N - глубина запрета в днях.");
Возврат;
КонецЕсли;

л_ТаблицаДополнительныхПрав.Колонки.Добавить("ДатаЗапрета",Новый ОписаниеТипов("Дата"));
л_ТаблицаДополнительныхПрав.Колонки.Добавить("ГлубинаЗапрета",Новый ОписаниеТипов("Число"));
л_МаксимальнаяГлубина = 0;
л_Сутки = 24*60*60;
Для Каждого л_СтрокаТЗ из л_ТаблицаДополнительныхПрав Цикл
л_НаименованиеДополнительногоПрава = л_СтрокаТЗ.НаименованиеДополнительногоПрава;
Если Найти(л_НаименованиеДополнительногоПрава,л_ПрефиксДополнительногоПрава1) > 0 Тогда
л_ПараметрДополнительногоПрава = СокрЛП(Сред(л_НаименованиеДополнительногоПрава,44));
л_СтрокаТЗ.ГлубинаЗапрета = Число(л_ПараметрДополнительногоПрава);
л_СтрокаТЗ.ДатаЗапрета = ТекущаяДата() - л_СтрокаТЗ.ГлубинаЗапрета*л_Сутки;
ИначеЕсли Найти(л_НаименованиеДополнительногоПрава,л_ПрефиксДополнительногоПрава2) > 0 Тогда
л_ПараметрДополнительногоПрава = СокрЛП(Сред(л_НаименованиеДополнительногоПрава,45));
л_СтрокаТЗ.ГлубинаЗапрета = Число(л_ПараметрДополнительногоПрава);
л_СтрокаТЗ.ДатаЗапрета = НачалоМесяца(ТекущаяДата() - л_СтрокаТЗ.ГлубинаЗапрета*л_Сутки) - 1;
КонецЕсли;
Если л_МаксимальнаяГлубина < л_СтрокаТЗ.ГлубинаЗапрета Тогда
л_МаксимальнаяГлубина = л_СтрокаТЗ.ГлубинаЗапрета;
КонецЕсли;
КонецЦикла;
л_МассивСтрокТЗ = л_ТаблицаДополнительныхПрав.НайтиСтроки(Новый Структура("ГлубинаЗапрета",л_МаксимальнаяГлубина));
Для Каждого л_СтрокаТЗ из л_МассивСтрокТЗ Цикл
// Для максимальной глубины запрет не может быть отменен
// то ест ьдля ВСЕХ пользователей будет действовать установка запрета редактирования, хотя бы на максимальную глубину
л_СтрокаТЗ.ЗначениеДополнительногоПрава = Ложь;
КонецЦикла;

л_ТаблицаДополнительныхПрав.Сортировать("ЗначениеДополнительногоПрава Возр, ДатаЗапрета Убыв");

Если л_ТаблицаДополнительныхПрав[0].ЗначениеДополнительногоПрава = Истина Тогда
// отменена установка запретов редактирования для всех глубин, то есть ничего для этого пользователя не делаем.
// такого не будет
л_УстановитьЗапрет = Ложь;
Иначе
л_УстановитьЗапрет = Истина;
л_ДатаЗапрета = КонецДня(л_ТаблицаДополнительныхПрав[0].ДатаЗапрета);
Если л_ДатаЗапрета >= КонецДня(ТекущаяДата()) Тогда
л_ДатаЗапрета = НачалоДня(НачалоДня(ТекущаяДата()) - 1);
КонецЕсли;
КонецЕсли;

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

 

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

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

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



Вот и все.

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

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

Чтобы увеличить эту глубину для некоторых пользователей, надо установить для них флажок у соответствующих прав. Сделать это может уполномоченный пользователь. При этом следует учитывать, что запрет будет установлен на наименьшую глубину из всех не отмененных. Например, если установить только один флажок "Автоматически НЕ закрывать предыдущий день: 5", а флажок "Автоматически НЕ закрывать предыдущий день: 0" оставить не установленным, то окажется, что запрет редактирования предыдущего дня не отменен, он и будет установлен при входе пользователя в базу. То есть, если надо открыть для редактирования 5 дней или месяц, надо прежде всего установить флажок "Автоматически НЕ закрывать предыдущий день: 0".

ВАЖНО! период с максимальной глубиной запрета будет установлен в любом случае, даже если установить все флажки "Автоматически НЕ закрывать предыдущий ...". В нашем примере 10-го числа очередного месяца будет гарантировано закрыт предыдущий месяц для ЛЮБОГО пользователя, вошедшего в базу, даже для того, у кого установлен флажок "Автоматически НЕ закрывать предыдущий месяц: 10".

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

Делать изменения в закрытом периоде смогут только пользователи с полными правами. Для этого такой пользователь должен выполнить следующие действия:

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

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

См. также

Автоподбор ролей для профилей и групп доступа в любых типовых базах 1С УТ 11, КА 2, ERP2, Розница 2/3, УНФ 16/3, БП 3, ЗУП 3 и подобных (УФ, Платформа 8.3.14+)

Инструменты администратора БД Роли и права 8.3.14 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Документооборот 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Роли… Вы тратите много времени и сил на подбор ролей среди около 2400 в ERP или 1500 в Рознице 2, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 15.12.2023, версия 1.1.

12000 руб.

06.12.2023    3012    15    1    

34

Анализ расхождений выручки НДС и Налога на прибыль в декларациях (БП 3.0 ПРОФ и КОРП, КА 2, ЕRP)

Анализ учета Закрытие периода Платформа 1С v8.3 Бухгалтерский учет 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Налоговый учет Налог на прибыль НДС Платные (руб)

Каждый бухгалтер не раз сталкивался с требованием от налоговой инспекции пояснить расхождения в показателях декларации по Налогу на прибыль («Доходы от реализации» + «Внереализационные доходы») и налоговой базой по НДС за год. Являются ли ошибкой подобные расхождения? Как пояснить налоговой их причину? Отчет «Анализ расхождений выручки НДС и Налога на прибыль в декларациях» поможет найти все расхождения.

7200 руб.

21.10.2017    83627    252    167    

248

SALE! 20%

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 8000 руб.

10.11.2023    3642    11    1    

34

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

3600 2520 руб.

14.01.2013    177842    1074    0    

852

Помощник закрытия месяца

Закрытие периода Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

В современных конфигурациях УТ 11, КА 2, ERP 2 и их аналогах присутствует механизм закрытия периода. Но при ошибках учета закрыть период корректно становится практически невозможно! Давайте попробуем разобраться, как можно устранить ошибки и закрыть корректно месяц!

9000 руб.

20.03.2018    69895    266    58    

292

Обработка "Списание доходов будущих периодов" и расширение

Учет доходов и расходов Закрытие периода Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Решение регламентирует учет доходов будущих периодов(ДБП) в организации: сохраняет подробную информацию о объекте ДБП. По окончании месяца на основе введенной информации формируются проводки списания ДБП, отчеты для бухгалтерского и налогового учета. Подходит как для различных версий Бухгалтерии 8.3, так и для ERP и КА.

5500 руб.

09.10.2020    18717    40    18    

36

Ускоренное проведение документов (x4), устранение ошибок 60/62 счетов и зачет авансов (Бухгалтерия 3.0)

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    27420    79    146    

60
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. pepe 62 24.07.13 18:59 Сейчас в теме
Я делал более гибко, можно задавать формулу для вычисления даты запрета, использую метод Вычислить(). Тогда можно привязываться и к рабочему календарю и другим механизмам базы. Количество дней не сильно функционально.
2. pepe 62 24.07.13 19:01 Сейчас в теме
Механизм Ваш тоже не плох, я с него тоже начинал. Понравилась реализации через Доп права, я для этого создавал отдельный РС для реализации этой задачи.
3. 1malder1 7 18.10.13 17:08 Сейчас в теме
Меняет пользователь у себя дату, допустил на год назад и все дыра появляется ....
Нужно брать дату с сервера
4. acrk 749 18.10.13 18:34 Сейчас в теме
(3) 1malder1, Все дыры не заткнешь.
Это уже проблемы системщиков, чтобы пользователь не мог так сделать.
5. SirJon 12.08.14 10:58 Сейчас в теме
Спасибо за статью. И ессно за проделанный труд и желание поделиться с другими. Может показаться, что все мы умные и чего тут делать? Да действительно так с одной стороны, с другой уж больно не хочется изобретать велосипед, тем более, что люди эту проблему уже "прокурили". Так что спасибо.
6. kosas 03.09.14 11:35 Сейчас в теме
Здравствуйте.
В режиме файл-сервер возможна работа данного решения?
7. acrk 749 03.09.14 12:28 Сейчас в теме
(6) kosas, ну а почему нет? Конечно возможно!
8. ФораФарм 09.08.15 20:11 Сейчас в теме
ВОТ ТАК ЗАРАБОТАЛО

л_ТаблицаДополнительныхПрав.Колонки.Добавить("ДатаЗапрета",Новый ОписаниеТипов("Дата"));
л_ТаблицаДополнительныхПрав.Колонки.Добавить("ГлубинаЗапрета",Новый ОписаниеТипов("Число")); л_Сутки = 24*60*60;
Для Каждого л_СтрокаТЗ из л_ТаблицаДополнительныхПрав Цикл
л_НаименованиеДополнительногоПрава = л_СтрокаТЗ.НаименованиеДополнительногоПрава;
Если Найти(л_НаименованиеДополнительногоПрава,л_ПрефиксДополнительногоПрава1) > 0 Тогда
л_ПараметрДополнительногоПрава = СокрЛП(Сред(л_НаименованиеДополнительногоПрава,44));
л_СтрокаТЗ.ГлубинаЗапрета = Число(л_ПараметрДополнительногоПрава);
л_СтрокаТЗ.ДатаЗапрета = ТекущаяДата() - л_СтрокаТЗ.ГлубинаЗапрета*л_Сутки;
ИначеЕсли Найти(л_НаименованиеДополнительногоПрава,л_ПрефиксДополнительногоПрава2) > 0 Тогда
л_ПараметрДополнительногоПрава = СокрЛП(Сред(л_НаименованиеДополнительногоПрава,45));
л_СтрокаТЗ.ГлубинаЗапрета = Число(л_ПараметрДополнительногоПрава);
л_СтрокаТЗ.ДатаЗапрета = НачалоМесяца(ТекущаяДата() - л_СтрокаТЗ.ГлубинаЗапрета*л_Сутки) - 1;
КонецЕсли;
КонецЦикла;

л_ТаблицаДополнительныхПрав.Сортировать("ЗначениеДополнительногоПрава Убыв, ДатаЗапрета Возр");
// Для максимальной глубины запрет не может быть отменен
// то есть для ВСЕХ пользователей будет действовать установка запрета редактирования, хотя бы на максимальную глубину
л_ТаблицаДополнительныхПрав[0].ЗначениеДополнительногоПрава = Ложь;

л_ТаблицаДополнительныхПрав.Сортировать("ЗначениеДополнительногоПрава Возр, ДатаЗапрета Убыв");

Если л_ТаблицаДополнительныхПрав[0].ЗначениеДополнительногоПрава = Истина Тогда
// отменена установка запретов редактирования для всех глубин, то есть ничего для этого пользователя не делаем.
// такого не будет
л_УстановитьЗапрет = Ложь;
Иначе
л_УстановитьЗапрет = Истина;
л_ДатаЗапрета = КонецДня(л_ТаблицаДополнительныхПрав[0].ДатаЗапрета);
Если л_ДатаЗапрета >= КонецДня(ТекущаяДата()) Тогда
л_ДатаЗапрета = НачалоДня(НачалоДня(ТекущаяДата()) - 1);
КонецЕсли;
КонецЕсли;

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