Можно ли редактировать или помечать на удаление непроведенные документы в закрытом периоде 1С?

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

Механизм даты запрета изменений является одним из ключевых инструментов обеспечения целостности данных в любой информационной системе на базе «1С:Предприятие 8». Основная цель этого механизма — предотвратить случайное или намеренное изменение данных в прошлых периодах, по которым уже сформирована и сдана отчетность. Однако у пользователей часто возникает вопрос: распространяется ли этот запрет на документы, которые не делают движений в регистрах (непроведенные) или на процедуру их пометки на удаление? Разберем эту ситуацию подробно, опираясь на логику современных типовых конфигураций (ERP, КА, ЗУП 3.1, БП 3.0).

Как работает механизм запрета на уровне программного кода

Проанализируем техническую сторону вопроса. В современных конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), проверка даты запрета осуществляется не только в формах объектов (визуально), но и на уровне серверных процедур. Основная логика сосредоточена в подписках на события, таких как ПередЗаписьюДокумента.

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

  1. Пользователь нажимает кнопку «Записать» или «Пометить на удаление».
  2. Система инициирует событие ПередЗаписью в модуле объекта.
  3. Срабатывает подписка на событие, которая обращается к общему модулю ДатыЗапретаИзменения.
  4. Функция проверяет дату документа, его статус и права текущего пользователя.
  5. Если дата документа меньше или равна установленной дате запрета, выполнение прерывается с выводом ошибки «Редактирование данных в закрытом периоде запрещено».

Важно понимать, что пометка на удаление — это тоже запись объекта. При установке пометки меняется значение реквизита DeletionMark (ПометкаУдаления), что требует вызова метода Записать(). Следовательно, штатный механизм даты запрета должен блокировать это действие так же, как и обычное редактирование.

Влияние статуса «Проведен» на возможность редактирования

Существует распространенное мнение, что если документ не проведен, то он «ни на что не влияет», и его можно изменять. С точки зрения учета — это часто верно, но с точки зрения системы — это все равно изменение данных в закрытом интервале. Рассмотрим, почему в разных ситуациях поведение программы может отличаться:

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

Роль полных прав и настройки исключений

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

Перейдем в раздел Администрирование — Настройки пользователей и прав — Даты запрета изменения. Там мы увидим список установленных дат. Обратим внимание на гиперссылку или флажок «Распространять на пользователей с полными правами». Рассмотрим два сценария:

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

Программное изменение данных в обход интерфейса

Иногда возникают задачи, когда необходимо программно изменить объект в закрытом периоде. Посмотрим на пример кода, который может быть использован в обработке:


ДокОбъект = ВыбДок.ПолучитьОбъект();
ДокОбъект.УстановитьПометкуУдаления(Истина);
// В типовых конфигурациях этот вызов все равно вызовет проверку даты запрета
Попытка
    ДокОбъект.Записать();
Исключение
    Сообщить("Ошибка: " + ОписаниеОшибки());
КонецПопытки;

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


ДокОбъект = ВыбДок.ПолучитьОбъект();
ДокОбъект.ДополнительныеСвойства.Вставить("ПропуститьПроверкуДатыЗапрета", Истина);
ДокОбъект.Записать();

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

Почему в ЗУП или ERP все же разрешается редактирование?

Если вы убедились, что флаг «Для полных прав» стоит, но редактирование все равно доступно, проанализируем следующие факторы:

Итоги и рекомендации

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

  1. У пользователя есть полные права, а в настройках разрешен обход даты запрета для администраторов.
  2. Конфигурация была доработана через расширение или изменение кода (модуль ДатыЗапретаИзмененияПереопределяемый).
  3. Используется старая версия платформы/конфигурации, где проверка реализована только при проведении документа.

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

← На главную