Нумерация документов и справочников в 1С 8.3

· 10 мин

Содержание

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

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

Где платформа хранит номер и какого он типа

Номер — это не обычный реквизит, который вы добавляете на закладке «Данные». Это служебный реквизит документа, он есть всегда, и его свойства редактируются в палитре свойств самого документа, группа Нумерация.

Ключевые свойства:

  • 🔤 Тип номера — Строка или Число. По умолчанию строка. Строковый номер хранит буквы, дефисы и префиксы (АБ-000123), числовой — только цифры. Для документов почти всегда строка: без неё не будет префиксов.
  • 📏 Длина номера — сколько символов (или разрядов) отводится. Для строкового типа платформа дополняет номер слева нулями до этой длины, поэтому 123 показывается как 000000123.
  • 📅 Периодичность номера — интервал, внутри которого номер уникален и непрерывен (разбираем ниже).
  • ✅ Контроль уникальности — если включён, платформа не даст записать два документа с одинаковым номером в одном интервале.
  • Автонумерация — платформа подбирает номер сама. Если снять флажок, поле номера придётся заполнять вручную или кодом.

У справочников вместо «Номера» — Код. Отдельное свойство Серии кодов определяет область уникальности: Во всем справочнике, В пределах подчинения (для иерархических) или В пределах подчинения владельцу (для подчинённых справочников). Это и есть «интервал» для справочников.

Строковый номер сортируется как текст. Поэтому 10 окажется раньше 2, если не дополнять нулями. Длина номера и выравнивание нулями существуют именно для корректной сортировки.

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

Автонумерация и интервалы: периодичность номера

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

ПериодичностьКогда номер обнуляетсяТипичный пример
НепериодическаяНикогда, сквозная нумерацияДоговоры, внутренние приказы
В пределах года1 январяБольшинство учётных документов
В пределах кварталаНачало кварталаРеже, по регламенту организации
В пределах месяца1-го числаКассовые документы в части баз
В пределах дняКаждый день с 1ПКО/РКО при большом потоке

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

Нумераторы: общий счётчик на несколько документов

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

Периодичность и тип номера в этом случае берутся из нумератора, а не из документа.

Префиксы: зачем они и как работают в РИБ

Префикс — это неизменяемая приставка перед номером: ЦБ-000045, где ЦБ- отличает документы одной организации или одного узла обмена от других. Без префиксов две базы, обменивающиеся данными, легко создадут документы с одинаковыми номерами.

Префиксы нужны в двух сценариях:

  1. 🏢 Несколько организаций в одной базе. У каждой организации свой префикс, чтобы нумерация не пересекалась. В типовых конфигурациях (БП 3.0, УТ 11, ERP) префикс организации задаётся в карточке организации — реквизит Префикс.
  2. 🔁 Распределённая база (РИБ). Каждый узел получает свой префикс информационной базы, чтобы документы, созданные в разных узлах, не конфликтовали при обмене.

В типовых конфигурациях за это отвечает подсистема БСП «Префиксация объектов». Она складывает итоговый префикс из двух частей:

  • префикс информационной базы (узла) — хранится в константе и задаётся при настройке обмена;
  • префикс организации — из карточки организации.

Результат: номер ЦБ-АА-000045 = префикс ИБ + префикс организации + порядковый номер. Менять префикс у базы, которая уже участвует в обмене, нельзя — это приведёт к расхождению нумерации между узлами. Префикс закладывается один раз, на старте обмена.

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

Пропуски в нумерации: почему появляются и опасны ли

Пропуски — самая частая «страшилка». Документ №5 есть, №6 нет, №7 снова есть. Разберём механизм.

Основные причины пропусков:

  • 🗑 Удаление документа. Если документ №6 удалён (не помечен, а удалён физически), его номер не возвращается в оборот. Остаётся дырка.
  • ↩️ Откат транзакции. В клиент-серверном варианте номер выдаётся из внутреннего счётчика до фиксации записи. Если запись не прошла (ошибка, отмена пользователем), номер уже «израсходован» — появляется пропуск. Это штатное поведение платформы, а не сбой.
  • ✍️ Ручная правка номера. Кто-то вписал номер вручную, нарушив последовательность.
  • 📅 Смена периода. На границе года/месяца счётчик обнуляется — это не пропуск, а старт нового интервала.

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

Важный момент про механику: платформа подбирает следующий номер как максимальный в интервале + 1. Поэтому если удалить последний документ в периоде, его номер при создании следующего документа освободится и будет использован повторно. А вот дырку в середине автонумерация не закрывает — она не ищет пропущенные номера, только максимум.

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

Почему в нумерации появился пропуск — что проверить
Выполнено: 0 / 5

Программное управление номером

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

Обработчик ПриУстановкеНовогоНомера

Срабатывает в модуле документа в момент, когда платформа собирается присвоить номер новому документу. Сигнатура:

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

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

Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
    СтандартнаяОбработка = Ложь;
    Номер = СформироватьСвойНомер(); // ваша функция
КонецПроцедуры

При СтандартнаяОбработка = Ложь вся ответственность за уникальность номера — на вашем коде.

Метод УстановитьНовыйНомер

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

Документ = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
Документ.Дата = ТекущаяДата();
Документ.УстановитьНовыйНомер("РТ-");

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

Проверить, был ли номер назначен автоматически, можно методом НомерАвтоматически() — он возвращает Истина, если номер подобрала платформа, и Ложь, если его ввели вручную. Это полезно в обработчике ПередЗаписью: например, не давать пользователю вручную переписывать автоматический номер, если по регламенту номера должны идти только от платформы.

Ещё один практичный приём — временный документ для предпросмотра. Если нужно показать будущий номер в форме до записи, создают документ методом СоздатьДокумент, вызывают УстановитьНовыйНомер и читают полученное значение, но сам документ не записывают. Учтите: такой «подсмотренный» номер не резервируется, и к моменту реальной записи его может занять другой пользователь.

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

Как настроить нумерацию под задачу: порядок действий

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

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

Типичные ошибки и как их исправить

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

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

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

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

Можно ли убрать префикс из уже существующих документов?
Префикс — часть значения поля «Номер» записанного документа, автоматически он не пересчитывается. Убрать его у ранее проведённых документов можно только массовой обработкой, меняющей поле «Номер», и только если это не нарушит обмен с другими базами.
Почему у двух организаций в одной базе номера идут вперемешку?
Без префиксов организаций автонумерация считает единый максимум по всему виду документа. Задайте каждой организации свой префикс в её карточке — тогда последовательности разойдутся.
Как сделать непрерывную нумерацию без пропусков?
Штатная автонумерация непрерывность не гарантирует: откаты транзакций и удаление документов оставляют пропуски. Полностью непрерывный ряд обеспечивается только организационно (не удалять, а помечать документы) либо собственным кодом присвоения номеров с блокировкой — это нетиповое решение.
Чем «Серии кодов» у справочника отличаются от периодичности документа?
«Серии кодов» определяют область уникальности кода: весь справочник, в пределах иерархии или в пределах владельца. Это пространственный интервал, тогда как периодичность документа — временной (год, месяц). Смысл один — задать границу, внутри которой нумерация непрерывна.
Можно ли менять длину номера в рабочей базе?
Да, длину можно увеличить и обновить конфигурацию базы данных. Уменьшать длину ниже фактической длины существующих номеров нельзя — платформа не даст сохранить данные, которые не поместятся.