Как решить проблемы при переходе на новую архитектуру взаиморасчетов в 1С:ERP и почему документы лезут в закрытый период?

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

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

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

Разбираем концепцию: чем онлайн-режим отличается от старого офлайна

В старой (офлайн) архитектуре распределение оплат по документам отгрузки происходило при запуске специальной регламентной обработки (актуализация расчетов) или в рамках процедуры закрытия месяца. Это приводило к тому, что оперативные остатки по взаиморасчетам часто «сворачивались» не сразу, а точные данные о долге и предоплатах в разрезе расчетных документов пользователи видели только после закрытия периода. Печать первичных документов (например, ТОРГ-12 в рублях при расчетах в валюте) требовала предварительного распределения взаиморасчетов вручную.

В новой онлайн-архитектуре логика кардинально изменилась. Внедрен так называемый балансовый подход к регистрам:

Тем не менее, при переходе на этот режим (который в современных релизах ERP 2.5 уже стал обязательным и безальтернативным) разработчики сталкиваются с тем, что система начинает «возбуждаться» на закрытые периоды. Давайте выясним, почему это происходит.

Почему система лезет в закрытый период при переходе на онлайн-взаиморасчеты?

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

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

Как локализовать и устранить проблему: пошаговый алгоритм

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

Шаг 1. Анализ фоновых заданий и СУБД

В первую очередь необходимо определить, какие именно фоновые процессы перегружают систему. Перейдем в раздел Администрирование -> Обслуживание -> Регламентные и фоновые задания и проанализируем время выполнения заданий, связанных с расчетом взаиморасчетов. Обратите внимание на загрузку СУБД: если запросы выполняются слишком долго, проблема может быть в неактуальной статистике СУБД после массового проведения документов.

Шаг 2. Очистка и актуализация заданий к распределению

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

Шаг 3. Исправление движений в кастомных документах

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


Процедура ЗаполнитьПериодыДвиженийВзаиморасчетов(Отказ, Источник) Экспорт
    
    // Проверим, включена ли новая архитектура взаиморасчетов
    Если ПолучитьФункциональнуюОпцию("НоваяАрхитектураВзаиморасчетов") Тогда
        
        Для Каждого Движение Из Источник.Движения.РасчетыСКлиентамиПланОплат Цикл
            Если Не ЗначениеЗаполнено(Движение.Период) Тогда
                Движение.Период = Источник.Дата;
            КонецЕсли;
        КонецЦикла;
        
        Для Каждого Движение Из Источник.Движения.РасчетыСПоставщикамиПоСрокам Цикл
            Если Не ЗначениеЗаполнено(Движение.Период) Тогда
                Движение.Период = Источник.Дата;
            КонецЕсли;
        КонецЦикла;
        
    КонецЕсли;
    
КонецПроцедуры

Этот простой код предотвратит появление пустых дат в движениях, из-за которых платформа может некорректно сопоставлять плановые и фактические платежи.

Шаг 4. Использование документа «Корректировка записей регистров» (КЗР)

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

Мы можем создать документ Корректировка записей регистров, выбрать новые регистры расчетов по срокам и вручную добавить записи («закрыть» развернутое сальдо, убрать копейки или компенсировать отсутствующие котировки курсов), которые ожидает увидеть аналитический запрос системы. Это позволит «успокоить» алгоритм онлайн-расчета, и он перестанет обращаться к закрытому периоду.

Практические советы для успешного перехода

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

  1. Выполняйте переход только на тестовой копии. Замеряйте время выполнения операции. На крупных базах первоначальное заполнение новых регистров может занимать от 1.5 до 8 и более часов. Планируйте эти работы на выходные дни.
  2. Проверьте соответствие остатков. Перед запуском перехода сверьте остатки оперативного учета взаиморасчетов с остатками по бухгалтерским счетам (60, 62, 76). Любые расхождения приведут к ошибкам при формировании новых движений по срокам.
  3. Регулярно обновляйте конфигурацию. Механизм онлайн-взаиморасчетов постоянно оптимизируется разработчиками 1С. Ошибки, связанные с избыточным чтением данных СУБД и взаимоблокировками, оперативно устраняются в новых релизах ERP. Для автоматического обслуживания и обновления нескольких баз 1С по расписанию можно настроить автоматическое обновление информационных баз 1С.

Применение комплексного подхода — очистка исторических данных, адаптация доработок под новые регистры и точечное исправление ошибок через КЗР — позволит успешно перевести вашу систему на современную и быструю архитектуру взаиморасчетов без потери производительности и сбоев в закрытых периодах. Для корректной актуализации данных можно использовать обработку для заполнения регистров взаиморасчетов по аналитике партнеров.

← На главную