Как исправить ситуацию, когда обмен 1С записывает движения в закрытый период через документ Корректировка реализации?

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

При работе с синхронизацией данных между конфигурациями Управление торговлей 11 и Бухгалтерия предприятия 3.0 часто возникает сложная коллизия. Документ Корректировка реализации, созданный текущей датой, исправляет данные прошлого года. Если в программе 1С:Бухгалтерия не установлен специальный флаг, блокирующий корректировки прошлых периодов, система при обмене может сформировать проводки в уже закрытом и сданном году, несмотря на установленную общую дату запрета редактирования. Разберем подробно, почему это происходит и как исправить последствия без перепроведения всего года.

Выясняем причину: почему дата запрета не сработала

Проанализируем ситуацию с технической точки зрения. В системе 1С:Предприятие 8 существует два механизма защиты данных: Дата запрета редактирования (для пользователей) и Дата запрета загрузки данных (для обменов). Однако в случае с документом Корректировка реализации возникает нюанс:

  1. Проверка даты запрета при загрузке обычно выполняется по дате самого объекта (регистратора). Если документ создан 23.04.2020, а дата запрета установлена на 31.03.2020, система считает документ «новым» и разрешает его запись.
  2. Механизм обмена не всегда анализирует даты движений, которые этот документ порождает в регистре Хозрасчетный.
  3. В документе Корректировка реализации для БП 3.0 есть реквизит УчетПрошлогоПериодаЗакрытДляКорректировки (на форме он отображается как флаг «Бухгалтерский учет прошлого года закрыт для корректировки»). Если в УТ 11 этот флаг отсутствует или не передан, в БП он по умолчанию принимает значение Ложь, что заставляет документ делать сторнирующие проводки датой 31.12 прошлого года.

Способ 1: Программное удаление проводок без открытия периода

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

Для удаления записей регистра бухгалтерии нам необходимо использовать свойство ОбменДанными.Загрузка = Истина. Это позволит обойти проверки даты запрета. Проанализируем пример кода:


// Определим ссылку на проблемный документ
ДокументОбъект = ПроблемнаяСсылка.ПолучитьОбъект();

// Очищаем движения по регистру бухгалтерии
НаборХозрасчетный = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
НаборХозрасчетный.Отбор.Регистратор.Установить(ДокументОбъект.Ссылка);

// Устанавливаем режим загрузки, чтобы обойти дату запрета
НаборХозрасчетный.ОбменДанными.Загрузка = Истина;
НаборХозрасчетный.Записать(); // Записываем пустой набор, фактически удаляя движения

// Чтобы документ не перепровелся случайно, пометим его на удаление
ДокументОбъект.ОбменДанными.Загрузка = Истина;
ДокументОбъект.ПометкаУдаления = Истина;
ДокументОбъект.Записать();

Важный момент: После выполнения этого кода проводки в 2019 году исчезнут, а сам документ в 2020 году будет помечен на удаление. Это самый «чистый» способ исправления с точки зрения системы.

Способ 2: Административное исправление через сдвиг границы последовательности

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

  1. Временно снимите дату запрета редактирования в БП 3.0.
  2. Найдите документ Корректировка реализации и отмените его проведение или пометьте на удаление.
  3. Снова установите дату запрета редактирования.
  4. Теперь самое важное: бухгалтерия увидит сообщение о том, что последовательность документов нарушена и требуется перепроведение с 2019 года. Нам нужно этого избежать.
  5. Перейдем в раздел Операции — Закрытие месяца. Нажмем правой кнопкой мыши на пункт «Перепроведение документов» и выберем «Установить до этого месяца как выполненное» (или аналогичную команду изменения актуальности учета).
  6. Система зафиксирует в регистре сведений ИзмененияРегистрацииПериодов новую точку актуальности, и прошлый год больше не будет требовать внимания.

Способ 3: Автоматизация установки флага при обмене

Чтобы ситуация не повторилась, нам нужно сделать так, чтобы при загрузке из УТ 11 флаг УчетПрошлогоПериодаЗакрытДляКорректировки автоматически принимал значение Истина. Рассмотрим, как реализовать это через расширение конфигурации в БП 3.0.

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


&После("ПередЗаписью")
Процедура Расш_ПередЗаписьюКорректировки(Отказ, РежимЗаписи, РежимПроведения)
    
    // Проверяем, что запись происходит в режиме обмена
    Если ЭтотОбъект.ОбменДанными.Загрузка Тогда
        
        // Если дата документа и дата корректируемого периода в разных годах
        Если Год(ЭтотОбъект.Дата) > Год(ЭтотОбъект.ДокументОснование.Дата) Тогда
            // Устанавливаем признак, что отчетность прошлого года подписана
            ЭтотОбъект.УчетПрошлогоПериодаЗакрытДляКорректировки = Истина;
            
            // В этом режиме проводки будут сделаны текущим периодом (2020), 
            // а не концом прошлого года (2019).
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры

Этот код гарантирует, что даже если в УТ 11 пользователь не знает о бухгалтерских нюансах, система БП 3.0 принудительно выставит правильный режим отражения корректировки, который не затронет закрытый баланс прошлого года.

Рекомендации по настройке синхронизации

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

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

← На главную