При переносе данных между базами 1С (например, при выгрузке документов из «1С:Управление торговлей» в «1С:Бухгалтерия предприятия») специалисты часто сталкиваются с жестким ограничением — датой запрета изменения данных. Типичный сценарий: необходимо перенести старый документ (например, реализацию двухлетней давности или связанный с ней возврат) в закрытый период. При этом документы должны быть записаны в базу-приемник исключительно в непроведенном виде, чтобы не нарушить уже сданную отчетность.
В этой статье мы подробно разберем, как обойти ограничение даты запрета изменений при использовании типовой обработки «Универсальный обмен данными в формате XML», рассмотрим внутренние механизмы платформы «1С:Предприятие 8» и разберем особенности интеграции с Библиотекой стандартных подсистем (БСП).
---
Выясним причину, почему платформа 1С блокирует запись документов в закрытых периодах при обычном сеансе работы. При попытке интерактивной записи срабатывают встроенные подписки на события и обработчики в модулях объектов, которые проверяют дату документа и сравнивают её с установленной в системе датой запрета.
Для решения этой проблемы разработчики платформы предусмотрели специальное свойство объектов — ОбменДанными.Загрузка. Если установить данное свойство в значение Истина, платформа понимает, что объект записывается в процессе автоматического обмена. В этом режиме отключается большинство прикладных проверок, включая стандартные проверки даты запрета изменений в коде конфигурации.
Рассмотрим подробнее, как активировать этот режим интерактивно в обработке «Универсальный обмен данными в формате XML»:
В типовом коде подписок на события конфигураций 1С проверка даты запрета изменений обычно выглядит следующим образом:
Если Источник.ОбменДанными.Загрузка Тогда
Возврат; // Проверки обходятся, документ успешно записывается
КонецЕсли;
Важное ограничение: Этот режим гарантирует успешную запись объектов только в том случае, если они записываются в базу без проведения (в непроведенном виде или просто сохраняются текущие движения). Если в правилах обмена (созданных в «Конвертации данных») настроено автоматическое проведение документов после загрузки, платформа принудительно инициирует транзакцию проведения, при которой режим обмена сбрасывается, и система заблокирует операцию.
---
Разберем по шагам ситуацию, когда флажок в обработке установлен, но документы все равно не загружаются, и система выдает ошибку прав доступа или блокировки периода. В современных конфигурациях, построенных на базе БСП (например, БП 3.0, УТ 11, ERP 2), механизмы защиты разделены на два независимых контура:
Если в базе-приемнике включена «Дата запрета загрузки данных», то даже при включенном свойстве ОбменДанными.Загрузка = Истина система заблокирует загрузку документов, дата которых меньше установленной границы.
Проанализируем алгоритм обхода этой защиты:
---
Если у вас нет возможности или прав каждый раз вручную менять настройки дат запрета в пользовательском интерфейсе базы-приемника, мы можем обойти эту проверку программно. БСП предоставляет разработчикам удобный программный интерфейс для временного отключения проверок дат запрета в рамках текущего сеанса работы.
Для этого используется процедура общего модуля ДатыЗапретаИзменения.ОтключитьПроверкуДатЗапрета().
Посмотрим на пример реализации данного обхода внутри правил конвертации данных (КД 2.1). Нам потребуется прописать код в обработчиках событий самого файла правил:
Попытка
ДатыЗапретаИзменения.ОтключитьПроверкуДатЗапрета(Истина);
Исключение
// Обработка исключения, если в базе-приемнике отсутствует данный модуль БСП
КонецПопытки;
Попытка
ДатыЗапретаИзменения.ОтключитьПроверкуДатЗапрета(Ложь);
Исключение
// Обработка исключения
КонецПопытки;
Важное примечание: Чтобы этот программный метод сработал без ошибок, пользователь, под сеансом которого запускается обработка «Универсальный обмен данными в формате XML», должен обладать Полными правами или ролью, позволяющей изменять даты запрета. В противном случае платформа вызовет исключение нарушения прав доступа.
---
В случаях, когда перенос данных выполняется не администратором системы, а рядовым сотрудником (например, ведущим бухгалтером), у него может не быть полных прав для обхода системных ограничений. Даже при включенном режиме загрузки платформа заблокирует транзакцию записи.
В такой ситуации рекомендуется временно назначить данному пользователю специальную роль в базе-приемнике:
Это позволит пользователю успешно выполнить импорт документов XML в закрытый период без необходимости предоставления полных прав администратора ко всей информационной системе.