Как загрузить документы в закрытый период с помощью обработки «Универсальный обмен данными XML»?

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

При переносе данных между базами 1С (например, при выгрузке документов из «1С:Управление торговлей» в «1С:Бухгалтерия предприятия») специалисты часто сталкиваются с жестким ограничением — датой запрета изменения данных. Типичный сценарий: необходимо перенести старый документ (например, реализацию двухлетней давности или связанный с ней возврат) в закрытый период. При этом документы должны быть записаны в базу-приемник исключительно в непроведенном виде, чтобы не нарушить уже сданную отчетность.

В этой статье мы подробно разберем, как обойти ограничение даты запрета изменений при использовании типовой обработки «Универсальный обмен данными в формате XML», рассмотрим внутренние механизмы платформы «1С:Предприятие 8» и разберем особенности интеграции с Библиотекой стандартных подсистем (БСП).

---

Способ 1. Использование встроенного режима загрузки (ОбменДанными.Загрузка = Истина)

Выясним причину, почему платформа 1С блокирует запись документов в закрытых периодах при обычном сеансе работы. При попытке интерактивной записи срабатывают встроенные подписки на события и обработчики в модулях объектов, которые проверяют дату документа и сравнивают её с установленной в системе датой запрета.

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

Рассмотрим подробнее, как активировать этот режим интерактивно в обработке «Универсальный обмен данными в формате XML»:

  1. Откроем обработку «Универсальный обмен данными в формате XML» в базе-приемнике.
  2. Перейдем на вкладку «Загрузка данных».
  3. Найдем и установим флажок «Загружать данные в режиме обмена (ОбменДанными.Загрузка = Истина)».
  4. Выберем файл данных и выполним загрузку.

В типовом коде подписок на события конфигураций 1С проверка даты запрета изменений обычно выглядит следующим образом:


Если Источник.ОбменДанными.Загрузка Тогда
    Возврат; // Проверки обходятся, документ успешно записывается
КонецЕсли;

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

---

Способ 2. Учет «Даты запрета загрузки» в современных конфигурациях БСП

Разберем по шагам ситуацию, когда флажок в обработке установлен, но документы все равно не загружаются, и система выдает ошибку прав доступа или блокировки периода. В современных конфигурациях, построенных на базе БСП (например, БП 3.0, УТ 11, ERP 2), механизмы защиты разделены на два независимых контура:

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

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

Проанализируем алгоритм обхода этой защиты:

  1. Перейдем в раздел АдминистрированиеСинхронизация данных (или Настройки пользователей и прав в зависимости от версии БСП).
  2. Найдем гиперссылку «Даты запрета изменения данных».
  3. Если используется разделение по пользователям или по объектам, проверим настройки для учетной записи, под которой выполняется загрузка через «Универсальный обмен».
  4. Временно сдвинем дату запрета загрузки назад (в прошлое) или полностью отключим проверку на период выполнения процедуры переноса данных. После завершения загрузки обязательно вернем настройки в исходное состояние для обеспечения безопасности данных.

---

Способ 3. Программное отключение проверок через БСП в правилах обмена (КД 2.1)

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

Для этого используется процедура общего модуля ДатыЗапретаИзменения.ОтключитьПроверкуДатЗапрета().

Посмотрим на пример реализации данного обхода внутри правил конвертации данных (КД 2.1). Нам потребуется прописать код в обработчиках событий самого файла правил:

  1. В конфигурации «Конвертация данных» откроем наши правила обмена.
  2. Перейдем в обработчик события «Перед загрузкой данных» (этот обработчик выполняется на стороне приемника в самом начале чтения XML-файла) и напишем следующий код:

Попытка
    ДатыЗапретаИзменения.ОтключитьПроверкуДатЗапрета(Истина);
Исключение
    // Обработка исключения, если в базе-приемнике отсутствует данный модуль БСП
КонецПопытки;
  1. Чтобы вернуть систему в безопасный режим работы сразу после окончания загрузки, в обработчике события «После загрузки данных» пропишем обратную команду:

Попытка
    ДатыЗапретаИзменения.ОтключитьПроверкуДатЗапрета(Ложь);
Исключение
    // Обработка исключения
КонецПопытки;

Важное примечание: Чтобы этот программный метод сработал без ошибок, пользователь, под сеансом которого запускается обработка «Универсальный обмен данными в формате XML», должен обладать Полными правами или ролью, позволяющей изменять даты запрета. В противном случае платформа вызовет исключение нарушения прав доступа.

---

Способ 4. Назначение временных ролей пользователю

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

В такой ситуации рекомендуется временно назначить данному пользователю специальную роль в базе-приемнике:

Это позволит пользователю успешно выполнить импорт документов XML в закрытый период без необходимости предоставления полных прав администратора ко всей информационной системе.

← На главную