Как настроить автоматическую дату запрета изменения данных для определенных пользователей в 1С:Бухгалтерия 8.2

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

В процессе работы с конфигурацией 1С:Бухгалтерия 8.2 (редакция 2.0) часто возникает необходимость ограничить операторам возможность ввода и редактирования документов за прошедшие дни. Типичный сценарий: операторы должны иметь право проводить первичные документы только текущей датой, а попытка изменить вчерашний документ должна блокироваться.

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

Особенности штатного механизма дат запрета в 1С:Бухгалтерия 2.0

Проанализируем работу встроенной системы дат запрета в редакции 2.0. В отличие от современной редакции 3.0, где в Библиотеку Стандартных Подсистем (БСП) встроена поддержка динамических относительных дат (например, «Предыдущий день» или «Конец прошлой недели»), в редакции 2.0 дата запрета задается как фиксированное значение календаря.

Однако типовой механизм позволяет устанавливать индивидуальные настройки безопасности: можно задать дату запрета с детализацией «По организациям и пользователям». Это дает возможность ограничить права только для конкретной группы операторов, не затрагивая работу главных бухгалтеров и администраторов.

Вариант 1. Автоматическая запись даты запрета при старте или регламентным заданием

Разберем самый распространенный способ решения задачи в редакции 2.0 — программную запись актуальной даты в регистр сведений.

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

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

Рассмотрим пример кода для обновления даты запрета:


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

МенеджерЗаписи.Пользователь = ТекущийПользователь();
МенеджерЗаписи.Организация = Справочники.Организации.ПустаяСсылка();
МенеджерЗаписи.ДатаЗапрета = ДатаЗапрета;
МенеджерЗаписи.Записать();

Важное замечание по безопасности: Если операционная смена пользователей не завершается на ночь (сеанс 1С остается открытым на рабочем столе), событие запуска программы не сработает повторно на следующий день. Поэтому более надежным решением является создание серверного регламентного задания, которое выполняется еженощно (например, в 00:01) и обновляет записи регистра РегистрыСведений.ДатыЗапретаИзмененияДанных для всей группы операторов.

Вариант 2. Переход на 1С:Бухгалтерия 8.3 (редакция 3.0)

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

  1. Переходим в раздел Администрирование — Настройка пользователей и прав — Даты запрета изменения.
  2. Устанавливаем флаг Даты запрета изменения.
  3. Настраиваем правило с детализацией по пользователям и выбираем значение Предыдущий день.

При такой настройке система каждый день автоматически смещает границу запрета без участия программиста.

Вариант 3. Использование подписки на событие

Посмотрим на вариант контроля даты проведения документа с помощью подписки на событие ПередЗаписью или ОбработкаПроведения.

Этот метод позволяет полностью изолировать логику проверки от регистра дат запрета. В обработчике события проверяется дата документа и текущая дата системы:


Если НЕ РольДоступна("ПолныеПрава") Тогда
    Если Источник.Дата < НачалоДня(ТекущаяДата()) Тогда
        ВызватьИсключение "Запрещено проводить и редактировать документы за прошлые даты!";
    КонецЕсли;
КонецЕсли;

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

Вариант 4. Настройка специализированного журнала документов

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

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

Резюме

Мы проанализировали основные пути решения задачи. Для редакции 2.0 оптимальным техническим решением является использование серверного регламентного задания для ежедневного обновления записей в РегистрыСведений.ДатыЗапретаИзмененияДанных либо применение подписок на события. Если же предприятие планирует обновление конфигурации, наиболее простым решением будет переход на 1С:Бухгалтерия 3.0.

← На главную