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