Переход на новую архитектуру взаиморасчетов (онлайн-режим) в решениях на платформе «1С:Предприятие 8» (1С:ERP, 1С:Комплексная автоматизация, 1С:Управление торговлей) — это важный шаг, который позволяет значительно повысить точность оперативного учета, правильно рассчитывать курсовые разницы по расчетам в условных единицах (валюте) и оперативно формировать платежный календарь. Однако на практике многие специалисты сталкиваются с серьезными трудностями: «конские» запросы при проведении документов, задвоение проводок и попытки системы изменить данные в закрытых периодах.
В этой статье мы подробно разберем, как устроена новая архитектура взаиморасчетов «под капотом», почему возникают ошибки проведения документов прошлым числом и как программисту или аналитику локализовать и исправить эти проблемы.
В старой (офлайн) архитектуре распределение оплат по документам отгрузки происходило при запуске специальной регламентной обработки (актуализация расчетов) или в рамках процедуры закрытия месяца. Это приводило к тому, что оперативные остатки по взаиморасчетам часто «сворачивались» не сразу, а точные данные о долге и предоплатах в разрезе расчетных документов пользователи видели только после закрытия периода. Печать первичных документов (например, ТОРГ-12 в рублях при расчетах в валюте) требовала предварительного распределения взаиморасчетов вручную.
В новой онлайн-архитектуре логика кардинально изменилась. Внедрен так называемый балансовый подход к регистрам:
РасчетыСКлиентамиПоСрокам и РасчетыСПоставщикамиПоСрокам.Тем не менее, при переходе на этот режим (который в современных релизах ERP 2.5 уже стал обязательным и безальтернативным) разработчики сталкиваются с тем, что система начинает «возбуждаться» на закрытые периоды. Давайте выясним, почему это происходит.
Ситуация, когда документ текущего периода при проведении пытается записать движения в закрытый период, часто ставит в тупик даже опытных специалистов. Проанализируем основные технические причины этого поведения:
Если вы столкнулись с блокировками, сообщениями о закрытом периоде или задвоением проводок, рекомендуем выполнить следующие шаги.
В первую очередь необходимо определить, какие именно фоновые процессы перегружают систему. Перейдем в раздел Администрирование -> Обслуживание -> Регламентные и фоновые задания и проанализируем время выполнения заданий, связанных с расчетом взаиморасчетов. Обратите внимание на загрузку СУБД: если запросы выполняются слишком долго, проблема может быть в неактуальной статистике СУБД после массового проведения документов.
Если система настойчиво пытается провести расчеты в закрытом периоде, нужно проверить содержимое регистра сведений ЗаданияКРаспределениюВзаиморасчетов (или аналогичного служебного регистра в зависимости от релиза конфигурации). Если там обнаружены записи с датами прошлых периодов, их необходимо обработать или очистить (если данные за те периоды гарантированно выверены и закрыты).
Если в базе присутствуют доработки, необходимо проверить, корректно ли заполняется период для наборов записей регистров накопления по новым правилам взаиморасчетов. Рассмотрим пример программного заполнения периодов для регистров планов оплат и поставок при проведении нетиповых документов:
Процедура ЗаполнитьПериодыДвиженийВзаиморасчетов(Отказ, Источник) Экспорт
// Проверим, включена ли новая архитектура взаиморасчетов
Если ПолучитьФункциональнуюОпцию("НоваяАрхитектураВзаиморасчетов") Тогда
Для Каждого Движение Из Источник.Движения.РасчетыСКлиентамиПланОплат Цикл
Если Не ЗначениеЗаполнено(Движение.Период) Тогда
Движение.Период = Источник.Дата;
КонецЕсли;
КонецЦикла;
Для Каждого Движение Из Источник.Движения.РасчетыСПоставщикамиПоСрокам Цикл
Если Не ЗначениеЗаполнено(Движение.Период) Тогда
Движение.Период = Источник.Дата;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Этот простой код предотвратит появление пустых дат в движениях, из-за которых платформа может некорректно сопоставлять плановые и фактические платежи.
В тех случаях, когда алгоритм онлайн-расчетов выдает ошибку при пересчете курсовых разниц из-за старых расхождений, а перепроводить документы прошлых лет нельзя (период жестко закрыт), наиболее эффективным решением будет ручное выравнивание остатков. Для устранения коллизий без ручных проводок можно использовать обработку для автоматизации зачета авансов.
Мы можем создать документ Корректировка записей регистров, выбрать новые регистры расчетов по срокам и вручную добавить записи («закрыть» развернутое сальдо, убрать копейки или компенсировать отсутствующие котировки курсов), которые ожидает увидеть аналитический запрос системы. Это позволит «успокоить» алгоритм онлайн-расчета, и он перестанет обращаться к закрытому периоду.
Чтобы минимизировать риски при миграции на новую архитектуру, придерживайтесь следующих правил:
Применение комплексного подхода — очистка исторических данных, адаптация доработок под новые регистры и точечное исправление ошибок через КЗР — позволит успешно перевести вашу систему на современную и быструю архитектуру взаиморасчетов без потери производительности и сбоев в закрытых периодах. Для корректной актуализации данных можно использовать обработку для заполнения регистров взаиморасчетов по аналитике партнеров.