Как в 1С установить дату запрета изменения данных для отдельных пользователей или документов?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

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

В современных конфигурациях на базе Библиотеки стандартных подсистем (таких как 1С:ERP Управление предприятием, 1С:Комплексная автоматизация, 1С:Управление торговлей 11, 1С:Бухгалтерия предприятия 3.0, 1С:ЗУП 3.1) механизм дат запрета обладает широкой гранулярностью. Разберем по шагам, как активировать разделение прав:

  1. Перейдем в раздел программы НСИ и администрирование (или Администрирование в зависимости от интерфейса) и откроем пункт Настройки пользователей и прав.
  2. Найдем группу настроек Даты запрета изменения и убедимся, что соответствующий флажок включен. Нажмем ссылку Настроить.
  3. В открывшемся окне по умолчанию часто установлен режим применения Для всех пользователей. Переключим положение переключателя в режим По пользователям.
  4. После смены режима в левой части формы появится список, куда с помощью кнопки добавления можно внести конкретных пользователей или целые группы пользователей.
  5. Установим требуемые даты: если выбрать пользователя в списке, для него в правой части задается индивидуальная дата. Для всех остальных пользователей, не добавленных в список явно, будут действовать правила из строки Для всех пользователей.

Проанализируем приоритеты применения: если пользователь входит в группу, для него действует ограничение этой группы. Если же пользователь указан в списке персонально, его индивидуальная настройка имеет наивысший приоритет и переопределяет правила группы.

Гранулярность по разделам и динамические даты

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

  1. Разделение по контурам учета: переключив способ указания даты запрета на вариант По разделам или По разделам и объектам, мы получаем возможность разнести даты для разных подсистем. Например, закрыть подсистемы Банк и Касса на одну дату, а контур Продажи — на другую, привязав ограничения к конкретным организациям.
  2. Относительные даты: вместо указания фиксированного календарного дня можно выбрать динамические интервалы (например, Конец прошлого месяца, Конец прошлого квартала или Предыдущий день). В таком случае дата запрета сдвигается автоматически при наступлении нового периода без ручного вмешательства администратора.
  3. Дни отсрочки: система позволяет указать количество дней после завершения периода, в течение которых редактирование еще разрешено для подготовки отчетности.

Настройка даты запрета в конфигурациях предыдущих поколений

Если учет ведется в конфигурациях с обычными формами (таких как 1С:Управление производственным предприятием 1.3, Комплексная автоматизация 1.1 или Управление торговлей 10.3), механизм устроен схожим образом. Выясним, как выполнить настройку в этих системах:

  1. Откроем главное меню и перейдем по пути: Сервис — Установить даты запрета изменения данных.
  2. В открывшейся форме нажимаем кнопку выбора объекта ограничения. Механизм опирается на регистр сведений ГраницыЗапретаИзмененияДанных.
  3. Выберем конкретного пользователя или группу пользователей. Чтобы задать общее правило, используется предопределенный элемент Для всех пользователей.
  4. Укажем дату запрета в разрезе организаций или для всех организаций сразу.

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

Как ограничить редактирование только для определенных видов документов

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

Способ 1. Использование подписки на событие

Наиболее надежный и правильный подход с точки зрения архитектуры 1С — использование подписки на событие. Это гарантирует контроль данных не только при работе пользователя через интерактивную форму, но и при попытке изменения документа обработками или обменами.

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

Процедура ЗапретРедактированияПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
    
    // Пропускаем проверку для новых документов
    Если Источник.ЭтоНовый() Тогда
        Возврат;
    КонецЕсли;
    
    // Пропускаем выполнение в фоновых и регламентных заданиях
    Если ПривилегированныйРежим() Тогда
        Возврат;
    КонецЕсли;
    
    // Получаем исходную дату документа из информационной базы
    СсылкаНаДокумент = Источник.Ссылка;
    ДатаВБазе = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаДокумент, "Дата");
    
    // Определяем границу запрета (например, из константы или регистра)
    ДатаЗапрета = Константы.ДатаЗапретаРедактированияДокументов.Получить();
    
    Если ЗначениеЗаполнено(ДатаЗапрета) И ДатаВБазе <= ДатаЗапрета Тогда
        // Проверяем наличие роли исключения у текущего пользователя
        Если Не РольДоступна("ПолныеПрава") Тогда
            Отказ = Истина;
            ВызватьИсключение "Редактирование данного документа за период до " + Формат(ДатаЗапрета, "ДФ=dd.MM.yyyy") + " запрещено!";
        КонецЕсли;
    КонецЕсли;

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

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

Способ 2. Интерфейсное ограничение формы документа

Если требуется запретить только ручное изменение данных пользователем через экранные формы без создания серверных блокировок на проведение фоновыми процессами, можно использовать перехват событий формы:

  1. В расширении подключаем обработчик события ПриЧтенииНаСервере или ПриСозданииНаСервере для формы целевого документа.
  2. Проверяем дату документа и права текущего пользователя.
  3. Если документ попадает в закрытый период, переводим форму в режим только для чтения:

&НаСервере
Процедура Расш_ПриЧтенииНаСервереПосле(ТекущийОбъект, СтандартнаяОбработка)
    
    ДатаЗапрета = Константы.ДатаЗапретаРедактированияДокументов.Получить();
    
    Если ЗначениеЗаполнено(ДатаЗапрета) И ТекущийОбъект.Дата <= ДатаЗапрета Тогда
        Если Не РольДоступна("ПолныеПрава") Тогда
            ЭтаФорма.ТолькоПросмотр = Истина;
        КонецЕсли;
    КонецЕсли;

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

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

← На главную