Объект «Последовательность» в 1С 8.3: граница, восстановление и типовые ошибки

· 9 мин

Содержание

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

Частое заблуждение — считать, что последовательность отвечает за номера документов. Нет: нумерацией занимаются префиксы и нумераторы. Последовательность работает с порядком проведения и нужна там, где результат документа зависит от предыдущих — например, при списании партий по FIFO.

Что такое последовательность документов в 1С и зачем ей граница

Представьте склад с партионным учётом. 10 марта отгрузили 50 штук, программа списала их из партии по 100 рублей. 15 марта бухгалтер вводит поступление от 5 марта по 90 рублей. Теперь себестоимость отгрузки 10 марта посчитана неверно, а программа об этом молчит.

Последовательность решает именно эту задачу. Как это устроено:

  • 📄 Состав — список документов, которые входят в последовательность. При проведении такого документа платформа регистрирует его в ней.
  • ⏱ Граница — момент времени, до которого порядок соблюдён. Документы позже границы считаются «нарушенными».
  • 🔄 Сдвиг границы — если провести документ с датой раньше границы, граница отъезжает назад, к этому документу.
  • 🛠 Восстановление — перепроведение документов от границы до текущей даты. После него граница переносится вперёд.

Платформа сама последовательность не восстанавливает. Она только отмечает, что порядок нарушен. Перепроведение выполняет код конфигурации: отдельная обработка, регламентное задание или закрытие месяца .

Последовательность — инструмент контроля, а не расчёта. Она не меняет движения документов, она подсказывает, какие документы пора пересчитать.

Чем последовательность отличается от справочника, перечисления и нумератора

Новички путают последовательность с объектами, у которых в названии или поведении есть что-то «по порядку». Сравним.

ОбъектЧто хранитКто наполняетТипичное применение
ПоследовательностьСсылки на документы и границуПлатформа при проведенииКонтроль хронологии проведения
СправочникЭлементы с реквизитамиПользователь или обменНоменклатура, контрагенты
ПеречислениеФиксированный список значенийРазработчик в конфигуратореВиды операций, статусы
НумераторПравила сквозной нумерацииРазработчикОбщий номер для нескольких видов документов

Ключевая разница: справочник и перечисление описывают что есть в учёте. Последовательность описывает когда и в каком порядке документы проведены. Значения в неё руками не вводят, отдельной формы списка для пользователя у неё обычно нет.

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

Варианты настройки последовательности в 1С

На уровне платформы объект один. «Виды» появляются за счёт настроек. Комбинируя их, разработчик получает разное поведение.

С измерениями и без

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

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

По составу документов и по движениям

  • 📌 Только по документам — граница сдвигается, когда задним числом проводят документ из состава.
  • 📌 С учётом движений — в свойстве «Движения, влияющие на последовательность» указывают регистры. Тогда граница сдвигается и тогда, когда в эти регистры задним числом пишет документ, которого нет в составе.

Со сдвигом границы при проведении и без

Свойство «Перемещение границы при проведении» включает или выключает автоматический сдвиг. Выключают его редко: тогда за сдвигом следит код конфигурации, и ответственность целиком на разработчике.

НастройкаКогда выбиратьРиск
Без измеренийМало документов, одна организацияЛишнее перепроведение всей базы
С измерениямиНесколько организаций или складовБольше записей границ, сложнее отладка
С регистрами в «Движениях»Остатки меняют документы вне составаГраница сдвигается чаще, чем ждут пользователи
Без автосдвигаНужен свой алгоритм контроляЛегко пропустить нарушение

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

Работа идёт в конфигураторе, в ветке Документы → Последовательности дерева метаданных. Если правите типовую конфигурацию на поддержке, делайте это в расширении или со снятием с поддержки только нужного объекта — иначе обновления станут болезненными.

  1. Откройте ветку Документы, внутри неё — Последовательности, и добавьте новый объект.
  2. Задайте имя латиницей или кириллицей без пробелов, например ПартионныйУчет, и синоним для пользователей.
  3. На вкладке с документами отметьте все документы, которые влияют на расчёт: поступления, реализации, перемещения, возвраты, корректировки.
  4. Если нужна граница по разрезам, добавьте измерения. Тип измерения — обычно ссылка на справочник: организация, склад, номенклатура.
  5. Для каждого измерения заполните свойство «Соответствие»: какой реквизит каждого документа заполняет измерение. Для документа без подходящего реквизита оставьте значение пустым.
  6. В «Движениях, влияющих на последовательность» отметьте регистры, если граница должна реагировать на записи документов вне состава.
  7. Проверьте свойство «Перемещение границы при проведении». По умолчанию сдвиг включён.
  8. Сохраните конфигурацию и обновите конфигурацию базы данных.

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

После этого последовательность начнёт копить документы при их проведении. Обработку восстановления вы пишете сами — платформа её не даёт.

Последовательности в типовых конфигурациях

Активнее всего последовательности использовались в конфигурациях прошлого поколения на обычных формах: УТ 10.3, УПП 1.3, Бухгалтерия 2.0. Там партионный учёт считался при проведении документа, и порядок проведения был критичен.

Типичная картина в таких базах:

  • 📦 Бухгалтер вводит поступление задним числом.
  • ⚠️ При следующем проведении или в отчётах программа сообщает, что последовательность нарушена.
  • 🔄 Пользователь запускает обработку восстановления последовательности: она перепроводит документы с даты границы.
  • ✅ Граница переезжает на конец периода, себестоимость пересчитана.

В современных конфигурациях на управляемых формах (УТ 11, КА 2, ERP 2) себестоимость считается регламентной операцией в конце месяца. Для отслеживания изменений там применяют собственные регистры заданий, а не платформенную последовательность. Поэтому пользователь УТ 11 сообщение «последовательность нарушена» обычно не видит.

Чтобы узнать, есть ли последовательности в вашей базе, откройте конфигуратор и разверните ветку Документы → Последовательности. Пустая ветка — значит, механизм не используется.

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

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

Ниже — то, на чём чаще всего спотыкаются разработчики и пользователи.

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

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

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

Восстановление порциями с установкой границы

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

// ПартионныйУчет — условное имя последовательности
МенеджерПосл = Последовательности.ПартионныйУчет;
Граница = МенеджерПосл.ПолучитьГраницу();

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

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

Ошибка проведения прервёт цикл исключением. Граница при этом останется на последнем успешном документе — именно это и нужно.

Измерения вместо одной общей границы

Если в базе несколько организаций, добавьте измерение «Организация». Тогда документ задним числом в одной фирме не заставит перепроводить другую. Для складского учёта то же самое делают по складу.

Фоновое задание и блокировки

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

Если ночное восстановление совпадает с обменом или регламентным расчётом, они будут мешать друг другу. Разведите их по времени.

Предупреждение пользователю о нарушенной границе

Пользователь не видит последовательность напрямую. Поэтому полезно показать ему, что расчёт устарел. Простой вариант — при открытии отчёта по себестоимости вызвать Проверить() на дату конца отчётного периода. Если метод вернул «Ложь», выведите сообщение с датой границы и кнопкой запуска восстановления.

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

Запрет ввода задним числом как профилактика

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

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

Проверка начинается с вопроса «где сейчас граница». Его можно задать прямо в отладчике или во внешней обработке.

  • 🔍 ПолучитьГраницу() у менеджера последовательности возвращает момент времени границы. Сравните его с датой последнего документа.
  • ✅ Метод Проверить() отвечает, восстановлена ли последовательность до указанного момента. Удобно вызывать его перед закрытием периода или перед формированием отчёта.
  • 📋 Запрос к таблице Последовательность.<Имя> показывает, какие документы зарегистрированы и с какими значениями измерений. Отсутствующий документ — признак ошибки в составе.
  • 🧾 Журнал регистрации покажет, кто и когда провёл документ задним числом. Отбор по событию проведения и по периоду быстро находит виновника сдвига.

Тестовый сценарий, который стоит прогнать после любой доработки:

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

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

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

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