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

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

В процессе эксплуатации систем на базе 1С:Предприятие часто возникают ситуации, когда в регистре границ последовательностей появляется «фантомная» запись. Чаще всего это происходит при ошибочном нажатии кнопки «Установка границы последовательности» без выбора конкретной организации. В результате в таблице Границы появляется запись с пустым измерением, которая может блокировать процессы удаления или корректировки данных. Давайте разберем, как исправить эту ситуацию, не прибегая к прямому вмешательству в SQL-таблицы, что является крайне рискованным методом.

Природа проблемы

Технически последовательность в 1С состоит из двух уровней: движений документов и регистра границ. Когда граница зафиксирована по пустой организации, система считает, что у вас есть «виртуальный» документ или состояние, требующее учета по этой пустой комбинации измерений. Стандартные методы, такие как УстановитьГраницу(), часто не помогают, так как система проверяет наличие реальных движений. Чтобы «выбить» эту запись, нам нужно заставить систему пересчитать актуальность для данной комбинации измерений.

Пошаговое решение проблемы

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

  1. Анализ объекта: Мы используем объект ПоследовательностьНаборЗаписей. Этот объект позволяет нам считывать и записывать данные в последовательность.
  2. Создание набора записей: Выбираем документ, который гарантированно должен попадать в данную последовательность.
  3. Добавление записи: Программно добавляем в этот набор запись, где в качестве организации указываем пустое значение (или то значение, которое «зависло» в границах).
  4. Перепроведение: После того как система увидит, что документ связан с этой комбинацией, штатное перепроведение документа инициирует очистку границ.

Пример программной реализации

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


// Имя последовательности берем из конфигуратора
// Регистратор - это существующий документ, который должен двигать эту последовательность
НаборЗаписей = Последовательности.ПартионныйУчет.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(СсылкаНаВашДокумент);

// Добавляем новую запись в набор
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Период = СсылкаНаВашДокумент.Дата;
// Указываем ошибочное измерение, например, пустую организацию
НоваяЗапись.Организация = Справочники.Организации.ПустаяСсылка(); 

// Записываем изменения
НаборЗаписей.Записать();

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

Важные рекомендации

Работая с последовательностями, помните о следующих правилах:

Данный подход является наиболее профессиональным и безопасным способом решения проблемы, так как он опирается на штатные алгоритмы работы платформы 1С:Предприятие.

← На главную