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

· 9 мин

Содержание

Последовательность в 1С — это не нумерация документов и не их список. Это служебный механизм платформы, который следит, чтобы документы проводились строго в хронологическом порядке в тех случаях, когда результат одного документа зависит от результата другого. Классический пример — себестоимость: списание товара считается по тем поступлениям, что были проведены раньше. Если вставить поступление задним числом, все последующие списания окажутся посчитаны неверно, и программа должна об этом узнать.

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

Последовательность — объект конфигурации, его создаёт и настраивает разработчик в Конфигураторе. А вот восстанавливать её чаще приходится бухгалтеру уже в режиме 1С:Предприятие. Ниже — обе стороны: как механизм устроен внутри и что с ним делать на практике.

Где в учёте без последовательностей не обойтись

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

Типичные зоны, где последовательности работают в типовых конфигурациях:

  • 📦 Партионный учёт и себестоимость. Списание по ФИФО или по средней опирается на ранее проведённые поступления. Порядок критичен.
  • 💰 Взаиморасчёты с контрагентами. Зачёт авансов и погашение задолженности зависят от того, что было раньше — оплата или отгрузка.
  • 🏭 Производство. Выпуск продукции использует материалы, списанные более ранними документами.
  • 🧾 Налоговый и регламентированный учёт. Многие расчёты закрытия месяца требуют, чтобы первичка была проведена по порядку.

В 1С:Бухгалтерии 8.3 эти задачи во многом закрыты регламентными операциями закрытия месяца, но под ними всё равно лежит тот же принцип: документы должны быть пересчитаны в правильной очерёдности. Последовательность — это как раз учёт того, с какого момента порядок нарушен.

А вот где последовательность не нужна: справочники, настройки, документы, движения которых ни от чего не зависят (например, отметка о получении письма или служебная запись). Добавлять такие документы в последовательность вредно — они без пользы будут дёргать границу и нагружать восстановление. Объект стоит вводить только под те расчёты, где очерёдность реально влияет на результат.

Граница последовательности и контроль хронологии

Граница — это ключевое понятие. Технически она представляет собой момент времени (дата плюс ссылка на конкретный документ), до которого последовательность актуальна.

Разделите мысленно всю ленту документов на две части:

  • До границы — всё посчитано корректно, перепроводить не нужно.
  • После границы — учёт под вопросом, эти документы ждут восстановления.

Когда вы проводите новый документ с датой позже границы, платформа (при соответствующей настройке) двигает границу вперёд — к этому документу. Логика простая: раз всё до него уже было в порядке и новый документ встал в конец, порядок сохранён.

А вот при вводе или изменении документа задним числом — то есть с датой раньше текущей границы — граница откатывается назад, к моменту этого документа. Это и есть главный смысл механизма: программа запоминает самую раннюю точку, начиная с которой данные перестали быть достоверными.

Покажу на числах. 5 марта провели поступление 100 единиц товара по 50 ₽. 10 марта списали эти 100 единиц — себестоимость при ФИФО составила 5000 ₽. Пока всё верно, граница стоит на 10 марта. Затем задним числом, 3 марта, ввели ещё одно поступление: 100 единиц по 40 ₽.

Теперь по ФИФО списание 10 марта должно уйти из самой ранней партии — той, что от 3 марта, — и составить уже 4000 ₽, а не 5000 ₽. Разница в 1000 ₽ искажает и себестоимость, и финансовый результат. Граница откатывается к 3 марта: это прямая команда «пересчитать всё, что идёт после этой даты».

Важная деталь — измерения. У последовательности могут быть измерения, например Организация. Тогда граница хранится отдельно по каждому значению: ввод документа задним числом по одной организации не сбрасывает границу по другим. Это сильно экономит на восстановлении в многофирменных базах.

Почему граница «уезжает» назад

Сбой последовательности — не поломка, а штатная реакция на изменение задним числом. Чаще всего границу сдвигают назад такие действия:

  • 🕐 Ввод документа прошедшей датой. Забытое поступление или оплату провели сегодня, но датой прошлого месяца.
  • ✏️ Изменение проведённого документа. Поправили сумму, номенклатуру или контрагента в документе, который стоит до границы.
  • ❌ Отмена проведения. Распровели документ в середине периода — всё, что считалось после него, теперь под вопросом.
  • 🗑️ Пометка на удаление и удаление проведённого документа, попадающего в последовательность.
  • 🔁 Изменение движений влияющих регистров. Если в настройке последовательности указаны регистры, то правка их движений (в том числе из другого документа) тоже двигает границу.

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

Как последовательность настраивается в конфигураторе

Это уже работа разработчика. В дереве конфигурации есть отдельная ветка Последовательности. Новый объект добавляется туда, и у него настраивается несколько ключевых вещей.

Измерения. Задают, в каком разрезе хранить границу. Самое частое измерение — организация. Можно добавить склад , подразделение — всё, по чему учёт ведётся независимо.

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

Движения, влияющие на последовательность. Список регистров, по которым изменение движений двигает границу. Это нужно, когда на расчёт влияет не сам документ, а его движения, которые могут меняться косвенно.

Соответствия измерений. Здесь измерения последовательности связываются с реквизитами документов и измерениями регистров. Например, измерение Организация последовательности сопоставляется с реквизитом Организация каждого входящего документа и с одноимённым измерением влияющих регистров. Без этой привязки платформа не поймёт, к какому значению измерения относить границу, и будет вести её «общей» на всю базу.

Перемещать границу при проведении. Свойство с двумя режимами:

РежимЧто происходитКогда выбирают
ПеремещатьПри проведении документа граница сразу обновляетсяКогда важна актуальность в реальном времени
Не перемещатьГраница не трогается при проведении, восстанавливают отдельноКогда проведение должно быть быстрым, а пересчёт — пакетным

В программном коде граница доступна через методы менеджера последовательности: Последовательности.ИмяПоследовательности.ПолучитьГраницу() вернёт текущий момент времени, а УстановитьГраницу() позволит сдвинуть её вручную. Для чтения и правки отметок используется набор записей Записи. Если точных имён методов под задачу не помните — смотрите синтакс-помощник по объекту «Последовательность», там описан весь состав.

Как понять, что последовательность не актуальна

Бухгалтер обычно не смотрит на границу напрямую — он видит её последствия. Главный индикатор — закрытие месяца . Если граница откатилась внутрь закрываемого периода, помощник закрытия месяца сообщит, что часть документов требуется перепровести, и не даст корректно завершить расчёт, пока порядок не восстановлен.

Косвенные признаки заметны в отчётах:

  • 📊 странная себестоимость в отчёте по номенклатуре — суммы списания не бьются с поступлениями;
  • 🔀 «висящие» авансы и задолженность в оборотно-сальдовой ведомости по счетам 60 и 62, хотя оплата и отгрузка проведены;
  • 🔁 расхождения, которые уходят после повторного проведения документов.

Разработчик проверяет состояние точнее: метод ПолучитьГраницу() возвращает момент времени, до которого последовательность актуальна. Если этот момент раньше даты последнего документа — последовательность сбита, и нужно восстановление.

Как восстановить последовательность на практике

Восстановить последовательность — значит перепровести документы от границы до конца периода в правильном порядке, чтобы граница снова дошла до актуального момента. Руками по одному документу это никто не делает — есть пакетные инструменты.

В 1С:Бухгалтерии 8.3 (интерфейс «Такси») самый прямой путь — раздел Операции, группа Сервис, команда «Групповое перепроведение документов ». В форме задаётся период и виды документов, после чего программа перепроводит их по датам. Это и восстанавливает границы затронутых последовательностей.

Второй путь — штатное закрытие месяца. Регламентные операции (Операции → Закрытие месяца) перед расчётом сами перепроводят документы за месяц в нужной очерёдности, поэтому отдельно гонять восстановление обычно не требуется — достаточно перезапустить закрытие месяца с момента, к которому откатилась граница.

Перед запуском пакетного перепроведения на рабочей базе стоит проверить несколько вещей:

Перед восстановлением последовательности
Выполнено: 0 / 5

Массовое перепроведение — тяжёлая операция. Оно нагружает сервер и может надолго замедлить работу всех, кто сидит в базе. Запускайте восстановление в нерабочее время и только после резервной копии: если расчёт прервётся на середине, вернуть исходное состояние проще из бэкапа.

Для разработчика восстановление сводится к выборке документов после границы и их перепроведению по порядку. Упрощённый шаблон для одного вида документа:

Граница = Последовательности.ПартионныйУчет.ПолучитьГраницу();

Запрос = Новый Запрос;
Запрос.Текст =
    "ВЫБРАТЬ Ссылка
    |ИЗ Документ.РеализацияТоваровУслуг
    |ГДЕ Дата > &Дата
    |УПОРЯДОЧИТЬ ПО Дата, Ссылка";
Запрос.УстановитьПараметр("Дата", Граница.Дата);

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
    ДокОбъект = Выборка.Ссылка.ПолучитьОбъект();
    ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
КонецЦикла;

Здесь перепроводятся документы одного вида. Если в последовательность входит несколько видов документов, их нужно собрать вместе и упорядочить по моменту времени, а не по каждому виду отдельно — иначе порядок между видами нарушится. В типовых конфигурациях на базе БСП это уже реализовано, и писать свою обработку обычно не нужно.

Как последовательности влияют на скорость работы

Механизм не бесплатный, и его стоимость зависит от настройки.

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

Режим «Не перемещать» делает проведение легче, зато переносит всю тяжесть на момент восстановления — а это уже перепроведение десятков или сотен документов разом.

Само восстановление — самая затратная часть. На большой базе перепроведение квартала может идти десятки минут, а то и часы, и всё это время документы блокируются от изменений другими пользователями. Чем глубже откатилась граница, тем больше документов попадёт под пересчёт, поэтому выгоднее не допускать больших откатов, чем потом героически их закрывать. Отсюда практические правила:

  • 🌙 плановое восстановление и закрытие месяца выносят на ночь или выходные;
  • 📅 датой запрета редактирования закрывают прошлые периоды, чтобы туда не попадали правки задним числом и граница не откатывалась далеко;
  • 🧩 измерения (организация, склад) дробят границу — чем детальнее разрез, тем меньше документов попадает под перепроведение при локальной правке.

Отдельно стоит следить за регистрами в списке влияющих движений: если туда попадает «активный» регистр, который меняется часто, граница будет дёргаться постоянно, и восстановление превратится в ежедневную процедуру. Это повод пересмотреть настройку объекта в Конфигураторе.

Частые вопросы

Чем последовательность отличается от нумерации документов?
Это совершенно разные вещи. Нумерация задаёт номер документа и к очерёдности расчётов отношения не имеет. Последовательность следит за хронологией проведения и за тем, какие документы надо пересчитать после правок задним числом.
Нужно ли восстанавливать последовательность вручную в 1С:Бухгалтерии 8.3?
Как правило, нет. Закрытие месяца само перепроводит документы в правильном порядке. Отдельное «Групповое перепроведение документов» нужно, когда закрытие ещё не запускают, а порядок уже важен — например, для корректной себестоимости в середине периода.
Что будет, если границу не восстанавливать?
Расчёты, зависящие от порядка, останутся неверными: себестоимость, взаиморасчёты, зачёт авансов. В отчётах появятся расхождения, а закрытие месяца выдаст предупреждение о необходимости перепровести документы.
Можно ли отключить последовательность?
В типовой конфигурации убирать объект из метаданных не нужно и опасно — на нём держатся расчёты. Снизить нагрузку можно настройкой режима перемещения границы и датой запрета редактирования, а не отключением механизма.
Влияет ли дата запрета редактирования на границу?
Напрямую — нет, запрет лишь не даёт менять закрытые периоды. Но косвенно он очень помогает: раз правок задним числом в старых периодах нет, граница туда и не откатывается, и восстанавливать приходится меньше.