Нумератор документов в 1С 8.3: устройство, настройки, разрывы и блокировки

· 9 мин

Содержание

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

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

Как устроен нумератор 1С и чем он отличается от нумерации документа

Нумератор не хранит никаких данных сам по себе. Это набор правил: какого типа номер, какой длины, в каком периоде он уникален. Каждый документ, к которому привязан нумератор, берёт эти правила у него, а собственные настройки нумерации документа становятся недоступны для изменения.

Свойства нумератора совпадают с настройками на закладке «Нумерация» у документа:

  • 🔢 Тип номера — Строка или Число.
  • 📏 Длина номера — сколько символов отводится под номер вместе с префиксом.
  • 📐 Допустимая длина — Фиксированная (номер дополняется нулями слева) или Переменная.
  • 📅 Периодичность — в каком интервале номер уникален: без периода, в пределах года, квартала, месяца или дня.
  • ✅ Контроль уникальности — запрещать ли запись двух документов с одинаковым номером в одном периоде.

У справочников нумераторов нет. Их аналог — свойства кода справочника (тип, длина, серии кодов, контроль уникальности). Нумератор работает только с документами.

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

Алгоритм: как 1С вычисляет следующий номер

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

  1. Тот же вид документа или тот же нумератор (если он подключён).
  2. Тот же период — когда задана периодичность, например текущий год по дате документа.
  3. Тот же префикс — для строкового номера префикс отделяет один ряд от другого.

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

Для строкового номера платформа отделяет префикс и инкрементирует числовой хвост. Пример для длины 11 и префикса МСК-:

ПрефиксПоследний номерСледующий номер
нет0000000004100000000042
МСК-МСК-0000041МСК-0000042
СПБ-СПБ-0000007СПБ-0000008

Ряды МСК- и СПБ- считаются независимо, хотя документ один и тот же. На этом построена вся префиксация в типовых конфигурациях.

Когда номер присваивается

В управляемых формах 1С 8.3 новый документ получает номер при первой записи, а не при открытии формы. Пока документ не записан, поле номера пустое. Так меньше дыр: пользователь открыл форму, передумал и закрыл — номер никто не занял.

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

Автоматическая и ручная нумерация документов

За режим отвечает флажок Автонумерация в свойствах документа (закладка «Нумерация»). Варианты работы:

РежимКак получает номерКогда выбираютРиски
Автонумерация включенаПлатформа при записи, если поле номера пустоеПочти всегдаРазрывы после удаления документов
Автонумерация включена, номер введён вручнуюЗаписывается то, что ввёл пользовательВвод входящих документов, исправленияДубли, если контроль уникальности выключен
Автонумерация выключенаТолько вручную или кодомВходящие документы с номером контрагентаПустые и повторные номера

Ручное исправление номера не ломает автонумерацию. Но если вручную поставить номер больше текущего максимума, следующий автоматический номер продолжит уже с него. Типичная история: бухгалтер ввёл 0000-001000 вместо 0000-000100, и весь ряд «перепрыгнул» на тысячу.

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

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

Настройка нумератора: тип, длина, периодичность и префиксы

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

Создание нумератора в конфигураторе

  1. Откройте Конфигурация → Открыть конфигурацию.
  2. В дереве раскройте Общие → Нумераторы документов, нажмите «Добавить».
  3. Задайте имя, тип номера, длину, допустимую длину, периодичность и контроль уникальности.
  4. Откройте документ, перейдите на закладку «Нумерация» и выберите созданный нумератор в поле Нумератор.
  5. Повторите шаг 4 для всех видов документов, которые должны идти общим рядом.
  6. Обновите конфигурацию базы данных (F7).

После шага 4 настройки нумерации документа станут серыми: теперь они берутся из нумератора. Длину лучше закладывать с запасом. Строка длиной 11 вмещает префикс из 4–5 символов и 6–7 цифр — этого хватает на миллион документов в периоде.

Периодичность номера

Периодичность определяет, когда счёт начинается заново:

  • 📆 В пределах года — с 1 января каждый ряд снова с единицы. Стандарт для первичных документов.
  • 🗓️ В пределах квартала или месяца — для кассовых и складских документов в крупных компаниях с большим потоком.
  • 📌 В пределах дня — редко, для очень массовых операций.
  • ♾️ Непериодическая — сквозной номер на всё время существования базы.

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

Префиксы номеров в коде

Префикс задают в обработчике события модуля объекта документа:

Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
    // Префикс добавляется в начало номера и задаёт отдельный ряд
    Префикс = "МСК-";
КонецПроцедуры

Если установить СтандартнаяОбработка = Ложь, платформа не будет генерировать номер — его нужно присвоить самостоятельно. Так делают редко: свой генератор номеров почти всегда хуже встроенного по блокировкам.

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

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

Чтобы два пользователя не получили один номер, платформа блокирует ряд нумерации на время получения номера. Ряд — это сочетание вида документа или нумератора, периода и префикса. Блокировка держится до конца транзакции, в которой записывается документ.

Пока транзакция короткая, это незаметно. Проблемы начинаются в трёх ситуациях:

  • 🐢 Долгое проведение. Документ получает номер, а потом секунды уходят на движения по регистрам. Все, кто в этот момент записывает документ из того же ряда, ждут.
  • 📦 Пакетная загрузка в одной транзакции. Обработка создаёт тысячу документов внутри НачатьТранзакцию() — ряд занят до её завершения.
  • 🔗 Общий нумератор на много видов документов. Чем больше документов делят один ряд, тем выше шанс ожидания.

Симптомы — подвисание на записи нового документа и ошибки превышения времени ожидания блокировки при массовой работе. Что помогает:

  1. Разнести ряды префиксами — например, по организациям или складам. Каждый ряд блокируется отдельно.
  2. В обработках массовой загрузки писать каждый документ в своей транзакции, а не всё пачкой.
  3. Получать номер (УстановитьНовыйНомер()) как можно ближе к концу транзакции, после тяжёлых расчётов.
  4. Не подключать общий нумератор без реальной потребности в сквозном ряде.

В файловой базе картина другая: там блокировки грубее, и упираться в нумерацию начинают уже при 5–10 активных пользователях. Если ожидания на записи стали ежедневными, это сигнал к переходу на клиент-серверный вариант.

Разрывы в нумерации документов: откуда берутся

Сама по себе платформа номера не пропускает. Разрыв всегда объясняется действием с данными:

ПричинаЧто произошлоЧто делать
Удаление документа из середины рядаНомер исчез, максимум осталсяСоздать документ вручную с пропущенным номером или смириться
Ручной ввод номера больше максимумаРяд перепрыгнул вперёдИсправить завышенный номер, пока ряд не ушёл дальше
Смена даты на другой периодНомер получен в одном периоде, документ ушёл в другойОчистить номер и перезаписать документ
Смена префикса организации или базыНачался новый ряд с новым префиксомСтарые документы оставить как есть
Загрузка из другой базыПришли документы с чужими номерамиПроверить префиксы узлов обмена

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

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

Массово перенумеровывать документы задним числом рискованно. Номера уже ушли контрагентам в счетах и накладных, а разные номера одного документа у вас и у покупателя — источник проблем при сверках. Чаще правильнее оставить разрыв и при необходимости объяснить его причину.

Нумерация в распределённой информационной базе и при обмене

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

Решение — префикс информационной базы:

  1. Каждому узлу назначается свой уникальный префикс. В типовых конфигурациях он задаётся в разделе Администрирование → Синхронизация данных.
  2. Префикс попадает в номер каждого нового документа, созданного в узле.
  3. Ряды узлов не пересекаются: центр пишет свои номера, филиал — свои.

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

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

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

Частые вопросы о нумераторе 1С

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