Объект «Последовательность» в 1С 8.3: граница, восстановление и типовые ошибки
Содержание
Последовательность в 1С — это объект метаданных, который следит за хронологией проведения документов. Он хранит «границу»: момент времени, до которого все документы проведены в правильном порядке. Если провести документ задним числом, граница сдвигается назад, и программа знает, что всё после неё надо перепровести.
Частое заблуждение — считать, что последовательность отвечает за номера документов. Нет: нумерацией занимаются префиксы и нумераторы. Последовательность работает с порядком проведения и нужна там, где результат документа зависит от предыдущих — например, при списании партий по FIFO.
Что такое последовательность документов в 1С и зачем ей граница
Представьте склад с партионным учётом. 10 марта отгрузили 50 штук, программа списала их из партии по 100 рублей. 15 марта бухгалтер вводит поступление от 5 марта по 90 рублей. Теперь себестоимость отгрузки 10 марта посчитана неверно, а программа об этом молчит.
Последовательность решает именно эту задачу. Как это устроено:
- 📄 Состав — список документов, которые входят в последовательность. При проведении такого документа платформа регистрирует его в ней.
- ⏱ Граница — момент времени, до которого порядок соблюдён. Документы позже границы считаются «нарушенными».
- 🔄 Сдвиг границы — если провести документ с датой раньше границы, граница отъезжает назад, к этому документу.
- 🛠 Восстановление — перепроведение документов от границы до текущей даты. После него граница переносится вперёд.
Платформа сама последовательность не восстанавливает. Она только отмечает, что порядок нарушен. Перепроведение выполняет код конфигурации: отдельная обработка, регламентное задание или закрытие месяца .
Последовательность — инструмент контроля, а не расчёта. Она не меняет движения документов, она подсказывает, какие документы пора пересчитать.
Чем последовательность отличается от справочника, перечисления и нумератора
Новички путают последовательность с объектами, у которых в названии или поведении есть что-то «по порядку». Сравним.
| Объект | Что хранит | Кто наполняет | Типичное применение |
|---|---|---|---|
| Последовательность | Ссылки на документы и границу | Платформа при проведении | Контроль хронологии проведения |
| Справочник | Элементы с реквизитами | Пользователь или обмен | Номенклатура, контрагенты |
| Перечисление | Фиксированный список значений | Разработчик в конфигураторе | Виды операций, статусы |
| Нумератор | Правила сквозной нумерации | Разработчик | Общий номер для нескольких видов документов |
Ключевая разница: справочник и перечисление описывают что есть в учёте. Последовательность описывает когда и в каком порядке документы проведены. Значения в неё руками не вводят, отдельной формы списка для пользователя у неё обычно нет.
С регистром сведений последовательность тоже не стоит путать. Записи в ней похожи на записи периодического регистра (период, регистратор, измерения), но ресурсов нет. Смысл объекта — в границе, а не в данных.
Варианты настройки последовательности в 1С
На уровне платформы объект один. «Виды» появляются за счёт настроек. Комбинируя их, разработчик получает разное поведение.
С измерениями и без
Без измерений граница одна на всю базу. Провели приход задним числом по одному складу — нарушена последовательность по всем складам и организациям.
С измерениями граница хранится отдельно для каждой комбинации значений. Например, измерения «Организация» и «Склад»: документ задним числом по складу «Основной» сдвинет границу только для него. Перепроводить придётся меньше.
По составу документов и по движениям
- 📌 Только по документам — граница сдвигается, когда задним числом проводят документ из состава.
- 📌 С учётом движений — в свойстве «Движения, влияющие на последовательность» указывают регистры. Тогда граница сдвигается и тогда, когда в эти регистры задним числом пишет документ, которого нет в составе.
Со сдвигом границы при проведении и без
Свойство «Перемещение границы при проведении» включает или выключает автоматический сдвиг. Выключают его редко: тогда за сдвигом следит код конфигурации, и ответственность целиком на разработчике.
| Настройка | Когда выбирать | Риск |
|---|---|---|
| Без измерений | Мало документов, одна организация | Лишнее перепроведение всей базы |
| С измерениями | Несколько организаций или складов | Больше записей границ, сложнее отладка |
| С регистрами в «Движениях» | Остатки меняют документы вне состава | Граница сдвигается чаще, чем ждут пользователи |
| Без автосдвига | Нужен свой алгоритм контроля | Легко пропустить нарушение |
Как создать последовательность в конфигураторе
Работа идёт в конфигураторе, в ветке Документы → Последовательности дерева метаданных. Если правите типовую конфигурацию
на поддержке, делайте это в расширении или со снятием с поддержки только нужного объекта — иначе обновления станут болезненными.
- Откройте ветку
Документы, внутри неё —Последовательности, и добавьте новый объект. - Задайте имя латиницей или кириллицей без пробелов, например
ПартионныйУчет, и синоним для пользователей. - На вкладке с документами отметьте все документы, которые влияют на расчёт: поступления, реализации, перемещения, возвраты, корректировки.
- Если нужна граница по разрезам, добавьте измерения. Тип измерения — обычно ссылка на справочник: организация, склад, номенклатура.
- Для каждого измерения заполните свойство «Соответствие»: какой реквизит каждого документа заполняет измерение. Для документа без подходящего реквизита оставьте значение пустым.
- В «Движениях, влияющих на последовательность» отметьте регистры, если граница должна реагировать на записи документов вне состава.
- Проверьте свойство «Перемещение границы при проведении». По умолчанию сдвиг включён.
- Сохраните конфигурацию и обновите конфигурацию базы данных.
Обновление конфигурации базы данных с изменением структуры требует монопольного доступа. Пользователей нужно попросить выйти: их сеансы будут завершены.
После этого последовательность начнёт копить документы при их проведении. Обработку восстановления вы пишете сами — платформа её не даёт.
Последовательности в типовых конфигурациях
Активнее всего последовательности использовались в конфигурациях прошлого поколения на обычных формах: УТ 10.3, УПП 1.3, Бухгалтерия 2.0. Там партионный учёт считался при проведении документа, и порядок проведения был критичен.
Типичная картина в таких базах:
- 📦 Бухгалтер вводит поступление задним числом.
- ⚠️ При следующем проведении или в отчётах программа сообщает, что последовательность нарушена.
- 🔄 Пользователь запускает обработку восстановления последовательности: она перепроводит документы с даты границы.
- ✅ Граница переезжает на конец периода, себестоимость пересчитана.
В современных конфигурациях на управляемых формах (УТ 11, КА 2, ERP 2) себестоимость считается регламентной операцией в конце месяца. Для отслеживания изменений там применяют собственные регистры заданий, а не платформенную последовательность. Поэтому пользователь УТ 11 сообщение «последовательность нарушена» обычно не видит.
Чтобы узнать, есть ли последовательности в вашей базе, откройте конфигуратор и разверните ветку Документы → Последовательности. Пустая ветка — значит, механизм не используется.
Если в старой базе восстановление последовательности идёт часами, проверьте глубину нарушения. Один документ задним числом за прошлый год заставит перепровести всё, что идёт после него.
Ошибки при работе с последовательностями
Ниже — то, на чём чаще всего спотыкаются разработчики и пользователи.
УстановитьГраницу. Добавьте установку границы после каждого успешно перепроведённого документа или после порции.Ещё одна системная ошибка — включать в состав «на всякий случай» все документы конфигурации. Последовательность разрастается, граница двигается от каждого ввода задним числом, а восстановление становится ежедневной рутиной.
Продвинутые приёмы работы с последовательностями
Восстановление порциями с установкой границы
Главный приём — перепроводить документы по моменту времени и после каждого сдвигать границу. Если обработка упадёт, повторный запуск начнёт не с начала, а с последнего успешного документа.
// ПартионныйУчет — условное имя последовательности
МенеджерПосл = Последовательности.ПартионныйУчет;
Граница = МенеджерПосл.ПолучитьГраницу();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Посл.Регистратор КАК Документ,
| Посл.МоментВремени КАК Момент
|ИЗ
| Последовательность.ПартионныйУчет КАК Посл
|ГДЕ
| Посл.МоментВремени > &Граница
|
|УПОРЯДОЧИТЬ ПО
| Посл.МоментВремени";
Запрос.УстановитьПараметр("Граница", Граница);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДокОбъект = Выборка.Документ.ПолучитьОбъект();
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
МенеджерПосл.УстановитьГраницу(Выборка.Момент);
КонецЦикла;
Ошибка проведения прервёт цикл исключением. Граница при этом останется на последнем успешном документе — именно это и нужно.
Измерения вместо одной общей границы
Если в базе несколько организаций, добавьте измерение «Организация». Тогда документ задним числом в одной фирме не заставит перепроводить другую. Для складского учёта то же самое делают по складу.
Фоновое задание и блокировки
Восстановление за месяц на крупной базе лучше запускать фоновым заданием ночью. Днём перепроведение конкурирует с пользователями за блокировки регистров и самой границы последовательности. Ожидания на блокировках и таймауты в это время — ожидаемое следствие, а не сбой.
Если ночное восстановление совпадает с обменом или регламентным расчётом, они будут мешать друг другу. Разведите их по времени.
Предупреждение пользователю о нарушенной границе
Пользователь не видит последовательность напрямую. Поэтому полезно показать ему, что расчёт устарел. Простой вариант — при открытии отчёта по себестоимости вызвать Проверить() на дату конца отчётного периода. Если метод вернул «Ложь», выведите сообщение с датой границы и кнопкой запуска восстановления.
Второй вариант — регламентное задание, которое раз в сутки проверяет границу и пишет ответственному. Так бухгалтер узнает о вводе задним числом в тот же день, а не в конце квартала, когда документов после границы накопятся тысячи.
Запрет ввода задним числом как профилактика
Последовательность фиксирует нарушение, но не мешает ему. Чтобы граница двигалась реже, ограничьте ввод документов в закрытом периоде датой запрета изменения данных. Тогда сдвиг возможен только в открытом месяце, а глубина восстановления остаётся небольшой.
Как отлаживать и проверять последовательность
Проверка начинается с вопроса «где сейчас граница». Его можно задать прямо в отладчике или во внешней обработке.
- 🔍
ПолучитьГраницу()у менеджера последовательности возвращает момент времени границы. Сравните его с датой последнего документа. - ✅ Метод
Проверить()отвечает, восстановлена ли последовательность до указанного момента. Удобно вызывать его перед закрытием периода или перед формированием отчёта. - 📋 Запрос к таблице
Последовательность.<Имя>показывает, какие документы зарегистрированы и с какими значениями измерений. Отсутствующий документ — признак ошибки в составе. - 🧾 Журнал регистрации покажет, кто и когда провёл документ задним числом. Отбор по событию проведения и по периоду быстро находит виновника сдвига.
Тестовый сценарий, который стоит прогнать после любой доработки:
Тестируйте на копии базы. Восстановление перепроводит документы и меняет движения, а в рабочей базе это сразу отразится в отчётах пользователей.