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

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

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

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

Способ 1. Настройка прав доступа на уровне ролей (рекомендуемый подход)

Проанализируем типовые возможности системы прав 1С:Предприятие. Самым надежным и архитектурно правильным решением является разделение прав пользователей в дереве метаданных без внесения изменений в код экранных форм.

В конфигураторе для каждого объекта типа Документ предусмотрен детальный набор прав:

  1. Интерактивное проведение и Проведение — определяют возможность формирования движений по регистрам.
  2. Интерактивная отмена проведения и Отмена проведения — отвечают за распроведение документа.
  3. Интерактивное добавление, Интерактивное изменение и Интерактивная запись — позволяют создавать, редактировать и записывать документ без проведения.

Разберем по шагам настройку ролей:

  1. Создаем или редактируем роль для пользователей, которым запрещено проведение (например, операторов ввода).
  2. Для нужного документа снимаем флаги Интерактивное проведение и Проведение. Оставляем доступными права на чтение, просмотр, добавление, изменение и интерактивную запись.
  3. Для роли согласующих или проводящих сотрудников (бухгалтеров, менеджеров) оставляем полные права на проведение.

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

Способ 2. Программное переопределение режима записи в управляемой форме

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

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

Посмотрим на пример кода клиентского обработчика формы документа:


&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
    
    // Проверяем, есть ли у текущего пользователя ограничение на проведение
    Если Не РольДоступна("ПравоПроведенияДокументов") Тогда
        // Принудительно меняем режим на обычную запись
        ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Запись;
    КонецЕсли;

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

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

Обработка перезаписи ранее проведенных документов

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

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

Разберем пример обработки при открытии и перед записью формы:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    Если Объект.Проведен И Не РольДоступна("ПравоПроведенияДокументов") Тогда
        // Запрещаем автоматическое перепроведение при интерактивной записи
        ПриЗаписиПерепроводить = Ложь;
        
        // Либо полностью блокируем форму проведенного документа от изменений
        // ТолькоПросмотр = Истина;
    КонецЕсли;

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

Важное предостережение: сохранение проведенного документа без перепроведения (с флагом ПриЗаписиПерепроводить = Ложь) приводит к рассинхронизации данных шапки/табличных частей и сформированных ранее движений по регистрам. Наиболее безопасным подходом в учете является полная блокировка редактирования проведенного документа (установка свойства ТолькоПросмотр = Истина) для сотрудников без права проведения.

Способ 3. Переопределение параметров записи в обычных формах (толстый клиент)

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

Посмотрим на пример кода для обычной формы:


Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    
    Если Не РольДоступна("ПолныеПрава") Тогда
        // Переопределяем режим записи напрямую
        РежимЗаписи = РежимЗаписиДокумента.Запись;
    КонецЕсли;

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

Альтернативные архитектурные решения

Проанализируем варианты, когда процесс согласования и заполнения документа состоит из множества шагов:

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

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

← На главную