Граница последовательности в 1С 8.3: почему документы надо перепроводить по порядку

· 9 мин

Содержание

Последовательность в 1С — это объект конфигурации, который следит, в каком порядке проведены документы, и хранит границу: момент времени, до которого учёт гарантированно корректен. Нужна она там, где результат проведения документа зависит от предыдущих: списание партий, расчёт себестоимости, остатки по ФИФО. Если документ провели «задним числом», граница сдвигается назад, и всё, что после неё, нужно перепровести.

С нумерацией документов последовательность не связана. За номера отвечают нумераторы — отдельный объект в той же ветке дерева конфигурации. Эту путаницу встречают часто, поэтому разведём понятия сразу.

Как работает последовательность документов в 1С

Представьте склад с партионным учётом. 3 марта пришла партия по 100 ₽, 10 марта — по 120 ₽. 15 марта продали товар, и программа списала его по 100 ₽. Потом бухгалтер вспомнил про продажу 5 марта и провёл её задним числом. Первая партия ушла 5-го, значит продажа 15-го должна списаться уже по 120 ₽. Но документ от 15-го об этом не знает: его движения записаны раньше.

Последовательность решает эту проблему так:

  • 📌 В неё включают документы, порядок проведения которых важен.
  • 📍 Платформа хранит границу — момент времени последнего документа, проведённого в правильном порядке.
  • ⏪ При проведении документа раньше границы граница переносится на этот документ.
  • 🔁 Обработка восстановления перепроводит документы от границы вперёд в хронологическом порядке и сдвигает границу.

Порядок задаётся моментом времени: дата и время документа, а при равных датах — ссылка. Поэтому два документа с одинаковым временем всегда встают в одном и том же порядке.

Что последовательность не делает

ЗадачаЧем решается в 1С
Номера документов без пропусковНумератор, свойство «Номер» документа
Запрет правок закрытого периодаДаты запрета изменения данных
Порядок проведения и граница корректностиПоследовательность
Контроль остатковКод проведения и регистры накопления

Последовательность ничего не запрещает. Она только сигнализирует: «после этой точки данные могут быть неверными».

Зачем нужна последовательность: задачи, которые она закрывает

На практике объект используют для пяти задач.

  1. Партионный учёт и себестоимость. Классический случай: списание по ФИФО или по средней зависит от того, что было списано раньше.
  2. Контроль актуальности перед закрытием месяца. Если граница стоит раньше конца периода, закрывать месяц рано.
  3. Безопасное проведение задним числом. Пользователь может провести забытый документ, а система отметит, откуда нужно пересчитывать.
  4. Частичное перепроведение. Не нужно перепроводить всю базу с начала года. Достаточно идти от границы.
  5. Раздельный учёт по организациям. С измерением «Организация» у каждой фирмы своя граница. Ошибка в одной не тянет за собой перепроведение другой.

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

Из чего состоит последовательность: свойства объекта

В Конфигураторе объект находится в дереве метаданных: ветка Документы → Последовательности. Рядом — ветки Нумераторы и Журналы документов, их не путайте.

Основные свойства

  • 📄 Входящие документы — список видов документов, которые составляют последовательность.
  • 📊 Регистры движений, влияющие на последовательность. Если документ, проведённый раньше границы, меняет движения в этих регистрах, граница сдвигается. Сюда включают регистры, от которых зависит результат последующих документов, например остатки партий.
  • 🧩 Измерения — разрезы, в каждом из которых своя граница. Чаще всего это организация, реже склад.
  • ⚙️ Перемещение границы при проведении. Значение «Перемещать» означает, что граница уходит назад при проведении документа раньше неё. «Не перемещать» — граница меняется только программно.

Соответствие измерений реквизитам

Для каждого измерения указывают, какой реквизит какого документа ему соответствует. Например, измерение Организация → реквизит Организация в документе «Поступление», «Реализация», «Перемещение».

Если у документа такого реквизита нет, соответствие оставляют пустым. Тогда документ двигает границы по всем значениям измерения. Это частая причина того, что граница «прыгает» по всем организациям сразу.

Где хранятся данные

Последовательность хранит две вещи: записи о документах (регистратор и момент времени) и таблицу границ. В языке запросов границы доступны через виртуальную таблицу Границы:

ВЫБРАТЬ
    Границы.Организация,
    Границы.МоментВремени
ИЗ
    Последовательность.ДокументыОрганизаций.Границы КАК Границы

Имя ДокументыОрганизаций — пример. В вашей конфигурации подставьте имя своей последовательности, а поле Организация — своё измерение.

Как настроить последовательность в 1С: пошаговая инструкция

Настройка нужна разработчику, когда он добавляет в последовательность новый документ или создаёт её с нуля. Работать лучше в расширении или копии базы, а изменения переносить через сравнение и объединение.

Шаг 1. Создайте или откройте объект

  1. Откройте Конфигуратор: Конфигурация → Открыть конфигурацию.
  2. Разверните Документы → Последовательности.
  3. Добавьте новую последовательность или откройте существующую двойным щелчком.

Шаг 2. Укажите документы

  1. На вкладке с документами отметьте все виды документов, порядок которых важен.
  2. Не добавляйте «на всякий случай» документы, которые не влияют на расчёт. Каждый лишний вид увеличивает объём перепроведения.

Шаг 3. Задайте регистры и измерения

  1. Отметьте регистры, движения которых влияют на результат последующих документов.
  2. Добавьте измерения. Для каждого задайте тип и соответствие реквизитам в каждом документе.
  3. Выберите режим перемещения границы при проведении.

Шаг 4. Пропишите запись в последовательность

Включение документа в состав объекта — только половина работы. В обработке проведения документа нужно записать набор записей последовательности или убедиться, что типовой код это уже делает. Набор записей создаётся через менеджер последовательности, отбор ставят по регистратору.

Шаг 5. Обновите конфигурацию базы данных

  1. Сохраните конфигурацию и выполните Конфигурация → Обновить конфигурацию базы данных (F7).
  2. Изменение структуры требует монопольного доступа, поэтому планируйте его на время без пользователей.

Перед обновлением структуры базы сделайте резервную копию в формате .dt или средствами СУБД.

Шаг 6. Проверьте на тестовой базе

Проведите документ задним числом и посмотрите, сдвинулась ли граница. Затем запустите восстановление и убедитесь, что она дошла до текущей даты.

Проверка новой последовательности
Выполнено: 0 / 6

Как восстановить последовательность и читать её границу

Восстановление — это перепроведение документов последовательности от границы до нужной даты в строгом хронологическом порядке. Каждый успешно проведённый документ двигает границу вперёд.

Пример восстановления на цифрах

Вернёмся к складу из начала. До правки граница стояла на 15 марта. После проведения продажи от 5 марта она переехала на 5 марта.

Обработка восстановления делает следующее:

  1. Перепроводит продажу от 5 марта: списывает партию от 3 марта по 100 ₽.
  2. Перепроводит поступление от 10 марта: оно лишь добавляет партию по 120 ₽.
  3. Перепроводит продажу от 15 марта: первой партии уже нет, товар списывается по 120 ₽.
  4. Переносит границу на последний документ последовательности.

Разница в себестоимости — 20 ₽ на единицу. При продаже 50 единиц это 1 000 ₽ в расходах, которые без восстановления остались бы неучтёнными.

Как это выглядит программно

Менеджер последовательности даёт методы для работы с границей: ПолучитьГраницу() возвращает момент времени границы, УстановитьГраницу() переносит её, ПроверитьГраницу() сравнивает границу с заданным моментом. Пример проверки перед закрытием месяца:

Отбор = Новый Структура("Организация", Организация);
Граница = Последовательности.ДокументыОрганизаций.ПолучитьГраницу(Отбор);
Если Граница.Дата < КонецМесяца(ДатаЗакрытия) Тогда
    Сообщить("Последовательность не восстановлена с " + Формат(Граница.Дата, "ДФ=dd.MM.yyyy"));
КонецЕсли;

Сигнатуру методов и формат отбора уточните в синтакс-помощнике своей версии платформы: Справка → Синтакс-помощник, раздел менеджеров последовательностей.

Типовые конфигурации

В конфигурациях предыдущего поколения на обычных формах последовательность широко применялась для партионного учёта, и в них была отдельная обработка восстановления. В современных конфигурациях на управляемых формах (БП 3.0, УТ 11, ERP) актуальность расчётов отслеживают другими механизмами: регистрами заданий к расчёту и проверками в закрытии месяца. Если помощник закрытия месяца предлагает перепровести документы — это та же идея в новой форме.

Ошибки с последовательностями и как их исправить

Диагностика: выберите симптом

Частые ошибки и как их избежать

  • ❌ Восстанавливать при работающих пользователях. Пока обработка идёт с 1-го числа, кто-то проводит документ от 5-го, и граница снова откатывается. Запускайте восстановление вечером или после установки даты запрета.
  • ❌ Перепроводить вручную вразнобой. Групповое перепроведение не в хронологическом порядке даёт неверное списание. Порядок — только по моменту времени.
  • ❌ Путать последовательность с нумерацией. Сбитая нумерация лечится нумератором и перенумерацией, а не восстановлением.
  • ❌ Сдвигать границу вперёд программно, «чтобы не мешала». Граница на текущей дате при невосстановленных данных маскирует ошибку до сверки с контрагентами.

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

Последовательности в распределённых базах и обменах

В распределённой информационной базе (РИБ) и при обменах через планы обмена документы часто приходят с прошлой датой. Узел получил вчерашние продажи филиала — граница в нём откатывается.

Что учитывать:

  • 🔄 При загрузке с признаком ОбменДанными.Загрузка = Истина обработчики проведения не вызываются, так записывается уже готовое состояние объекта. Восстанавливать последовательность после каждого обмена в таком узле обычно не нужно.
  • 🏢 Восстанавливайте в одном узле. Если перепроводить один и тот же период и в центре, и в филиале, перепроведённые документы снова уйдут в обмен, а узлы начнут гонять изменения по кругу.
  • 📅 Согласуйте даты запрета. Закрытый период в центре должен быть закрыт и в узлах, иначе филиал откроет его своими документами.
  • 🧾 Проверяйте границу после крупного обмена. Запрос к таблице Границы покажет, по каким организациям нужно восстановление.

Оптимизация последовательностей: советы администраторам

Таблица записей последовательности растёт вместе с числом документов. На базах с миллионами документов восстановление за квартал может идти несколько часов.

ПриёмЧто даётРиск
Измерение «Организация»Восстановление только по нужной фирмеНужно заполнить соответствие у всех документов
Дата запрета измененияГраница не уходит в закрытые периодыПравки прошлых периодов только через ответственного
Восстановление по периодамКороткие транзакции, можно прервать и продолжитьДольше в сумме
Регламентное задание ночьюУтром граница на текущей датеОшибка документа ночью остановит процесс без присмотра
Минимальный состав документовМеньше перепроведенияПропущенный документ даёт неверный расчёт

Ещё несколько приёмов:

  1. Обновляйте статистику и индексы СУБД перед большим восстановлением — на клиент-серверной базе это заметно ускоряет запросы к записям последовательности.
  2. Перед закрытием месяца проверяйте границу запросом, а не открывая обработку: это занимает секунды.
  3. Если граница регулярно откатывается из-за одного вида документа, проверьте, нужен ли он в составе последовательности.
  4. Ведите короткий журнал восстановлений: дата запуска, период, на каком документе остановилось. Через пару месяцев станет видно, какие документы и какие пользователи чаще всего сбивают границу.
Влияет ли последовательность на номера документов?
Нет. Номера задают нумераторы и свойства документа. Последовательность отвечает только за порядок проведения и границу корректности.
Можно ли удалить последовательность из конфигурации?
Технически да, но если на ней построен партионный учёт, расчёт себестоимости перестанет отслеживать проведение задним числом. В типовой конфигурации для этого придётся включить возможность изменения, и обновления станут сложнее.
Нужен ли монопольный режим для восстановления последовательности?
Нет, восстановление идёт в обычном режиме. Монопольный доступ нужен только для изменения структуры объекта в Конфигураторе.
Почему документ с тем же временем встаёт раньше другого?
При равных дате и времени порядок определяет ссылка документа. Чтобы задать порядок явно, разведите время документов хотя бы на секунду.
Что будет, если не восстанавливать последовательность?
Отчёты покажут данные, рассчитанные по неверной очерёдности: себестоимость и остатки партий разойдутся с фактическими.