В процессе эксплуатации систем на базе 1С:Предприятие часто возникают ситуации, когда в регистре границ последовательностей появляется «фантомная» запись. Чаще всего это происходит при ошибочном нажатии кнопки «Установка границы последовательности» без выбора конкретной организации. В результате в таблице Границы появляется запись с пустым измерением, которая может блокировать процессы удаления или корректировки данных. Давайте разберем, как исправить эту ситуацию, не прибегая к прямому вмешательству в SQL-таблицы, что является крайне рискованным методом.
Технически последовательность в 1С состоит из двух уровней: движений документов и регистра границ. Когда граница зафиксирована по пустой организации, система считает, что у вас есть «виртуальный» документ или состояние, требующее учета по этой пустой комбинации измерений. Стандартные методы, такие как УстановитьГраницу(), часто не помогают, так как система проверяет наличие реальных движений. Чтобы «выбить» эту запись, нам нужно заставить систему пересчитать актуальность для данной комбинации измерений.
Для решения этой задачи мы будем использовать механизм набора записей последовательности. Суть метода заключается в том, чтобы временно «привязать» какой-либо существующий документ к ошибочной комбинации измерений, а затем выполнить его перепроведение.
ПоследовательностьНаборЗаписей. Этот объект позволяет нам считывать и записывать данные в последовательность.Рассмотрим, как это выглядит в коде. Нам необходимо создать обработку или воспользоваться консолью кода, чтобы внести изменения в набор записей последовательности:
// Имя последовательности берем из конфигуратора
// Регистратор - это существующий документ, который должен двигать эту последовательность
НаборЗаписей = Последовательности.ПартионныйУчет.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(СсылкаНаВашДокумент);
// Добавляем новую запись в набор
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Период = СсылкаНаВашДокумент.Дата;
// Указываем ошибочное измерение, например, пустую организацию
НоваяЗапись.Организация = Справочники.Организации.ПустаяСсылка();
// Записываем изменения
НаборЗаписей.Записать();
После выполнения данного кода система «увидит» связь документа с «неправильной» организацией. Теперь нам нужно выполнить перепроведение этого документа в обычном режиме. При перепроведении механизм Последовательность автоматически пересчитает границы и, обнаружив, что документ на самом деле не имеет движений по этой пустой организации, самостоятельно удалит «зависшую» запись из таблицы границ.
Работая с последовательностями, помните о следующих правилах:
_SequenceBoundaries гарантированно приведет к нарушению ссылочной целостности и непредсказуемому поведению системы при расчете себестоимости или партионном учете.Данный подход является наиболее профессиональным и безопасным способом решения проблемы, так как он опирается на штатные алгоритмы работы платформы 1С:Предприятие.