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

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

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

Способ 1. Использование механизма "Дополнительные сведения" (Самый безопасный путь)

Если вам нужно просто проставить признак (галочку) у документа, и вы находитесь на этапе проектирования этого решения, выясним причину, почему лучше не добавлять этот реквизит непосредственно в сам объект документа. Архитектура платформы 1С позволяет использовать Дополнительные реквизиты и сведения.

Разберем разницу:

  1. ДополнительныеРеквизиты хранятся в табличной части самого объекта. При их изменении документ модифицируется, перезаписывается, и система проверяет дату запрета.
  2. ДополнительныеСведения записываются в отдельный независимый регистр сведений (обычно он так и называется — ДополнительныеСведения).

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

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

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

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


Док = Документ.МойДокумент.ПолучитьОбъект();
Док.Галочка = Истина;
Док.ОбменДанными.Загрузка = Истина;
Док.Записать(РежимЗаписиДокументов.Запись);

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

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

Способ 3. Временное открытие периода и риски

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

Однако проанализируем скрытые риски этого метода:

  1. В зависимости от настроек конфигурации, обычная перезапись документа (даже без проведения) может сдвинуть границу последовательности проведения документов или границу расчетов.
  2. При следующем закрытии текущего месяца система обнаружит измененный документ в прошлом и может потребовать перепровести все документы начиная с этой даты.
  3. Массовое перепроведение прошлого года чревато изменением бухгалтерских итогов и "разрывом" уже сданной регламентированной отчетности.

Поэтому прибегать к этому методу стоит только в крайнем случае, четко осознавая последствия.

Способ 4. Использование типовых и универсальных обработок

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

Для решения этой проблемы с помощью обработок можно поступить так:

  1. Временно сдвинуть дату запрета индивидуально для вашего пользователя-администратора (чтобы другие пользователи не внесли случайных изменений в базу в этот момент).
  2. Воспользоваться инструментом УниверсальныйРедакторРеквизитов или внешними консолями разработчика, которые позволяют выполнять запись в режиме ОбменДанными.Загрузка = Истина.

Способ 5. Штатные возможности свежих релизов 1С:Бухгалтерии

Наконец, проанализируем новые возможности типовых конфигураций. Начиная с релизов 1С:Бухгалтерия 3.0.170, фирма "1С" добавила штатный механизм изменения поля "Комментарий" в закрытом периоде без открытия периода и перепроведения документа.

Эта опция включается в разделе настроек администрирования (настройки пользователей и прав, даты запрета изменения). Если бизнес-логика вашей задачи позволяет, вместо создания отдельной кастомной галочки мы рекомендуем использовать стандартизированные текстовые пометки в поле Комментарий. Для них функционал безопасного редактирования задним числом уже поддерживается системой "из коробки", что избавляет вас от необходимости писать код или рисковать целостностью данных закрытого периода.

← На главную