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

· 9 мин

Содержание

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

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

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

Зачем нужен отдельный объект, а не просто номер документа

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

Отдельный объект «Нумератор» нужен в одном случае — когда несколько видов документов должны делить общий сквозной номер. Классический пример: исходящие документы одной организации (счета, акты, накладные) идут единой последовательностью 1, 2, 3… независимо от того, какой это вид.

  • 📄 Один вид документа, свой счётчик — настраиваем номер в самом документе.
  • 🔗 Несколько видов, общая последовательность — заводим объект «Нумератор» и назначаем его всем этим документам.

Важная оговорка про справочники и регистры. Нумератор как объект применяется только к документам. У справочников есть свой код с похожими настройками (длина, тип, контроль уникальности, серии кодов), но общего объекта-нумератора для них нет. У регистров номеров нет вовсе — нумеровать там нечего.

Настройка номера прямо в свойствах документа

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

Основные параметры:

ПараметрЧто задаётТипичное значение
АвтонумерацияПлатформа сама присваивает номер при записиВключена
Тип номераСтрока или ЧислоСтрока
Длина номераСколько символов в номере9–11
ПериодичностьКогда счётчик начинается зановоВ пределах года
Проверка уникальностиПлатформа не даст два одинаковых номераВключена

Пара практических замечаний.

Тип Строка гибче: в нём сохраняются ведущие нули (000000012) и можно добавить буквенный префикс. Тип Число — только цифры, без префикса и без ведущих нулей. Для хозяйственных документов почти всегда берут Строка.

Длину задавайте с запасом. Если номеров за период станет больше, чем помещается в заданную длину (вместе с префиксом), платформа не сможет выдать новый номер и выдаст ошибку. Для документа с потоком в тысячи штук в год 9 символов мало, если ещё и префикс занимает 3–4 знака.

Создаём общий нумератор и привязываем к документам

Когда нужна сквозная нумерация, порядок такой:

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

После этого собственные параметры номера у документа становятся неактивны — он подчиняется настройкам нумератора. Все документы, привязанные к одному нумератору, берут номера из общего счётчика: записали счёт под номером 5 — следующая накладная получит 6.

Нумератор удобно заводить сразу «на вырост»: даже если сейчас на нём один документ, позже к той же последовательности можно подключить новые виды без перенумерации.

Перед вводом общего нумератора проверьте
Выполнено: 0 / 5

Префикс и периодичность: формат номера под задачу

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

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

ПериодичностьКогда счётчик сбрасывается
НепериодическийНикогда — сквозной номер за всё время
В пределах годаС 1 января каждого года
В пределах кварталаВ начале каждого квартала
В пределах месяцаВ начале каждого месяца
В пределах дняКаждый день с единицы

Для большинства документов берут «В пределах года»: удобно, что номера за год не разрастаются до огромных значений, и видно, к какому периоду относится документ.

Префикс — это буквы или цифры перед числовой частью (ОРГ-000000045). Через настройки его не задать: префикс устанавливается кодом в событии документа (см. следующий раздел). Типичные задачи для префикса:

  • 🏢 различать организации в одной базе (префикс по коду организации);
  • 🧩 различать узлы распределённой базы, чтобы номера не пересекались;
  • 🔤 помечать вид операции буквой.

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

Программная установка номера и префикса

Префикс и нестандартный номер задаются в модуле документа. Главный инструмент — событие ПриУстановкеНовогоНомера. Платформа вызывает его, когда готовится присвоить новый номер.

Сигнатура обработчика:

Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
    // СтандартнаяОбработка = Истина — платформа сама добавит числовую часть
    // Префикс — строка, которую нужно поставить перед номером
КонецПроцедуры

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

Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
    Если ЗначениеЗаполнено(Организация) Тогда
        Префикс = СокрЛП(Организация.Код) + "-";
    КонецЕсли;
КонецПроцедуры

Здесь платформа по-прежнему сама подбирает свободную числовую часть (СтандартнаяОбработка остаётся Истина), а мы лишь дописываем префикс. Итог: ОРГ-000000045.

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

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

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

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

Если номер формируете полностью сами, то в обработчике отключаете стандартную обработку и присваиваете значение напрямую. В простом случае это выглядит так:

Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
    СтандартнаяОбработка = Ложь;
    Номер = Документы.РеализацияТоваровУслуг.ПолучитьНомер() + "/РУЧ";
КонецПроцедуры

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

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

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

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

Решение — разные префиксы у каждого узла. Тогда номера физически не могут совпасть:

  • узел «Центр» → Ц-000000100;
  • узел «Филиал» → Ф-000000100.

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

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

Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
    Префикс = СокрЛП(ПланыОбмена.Филиалы.ЭтотУзел().Код) + "-";
КонецПроцедуры

Что держать в голове при обмене:

  • 🔢 тип номера должен быть Строка — иначе префикс поставить некуда;
  • 📏 длины номера должно хватать на префикс узла плюс числовую часть;
  • 🔁 проверку уникальности в каждой базе оставляйте включённой — внутри узла дубли недопустимы;
  • 🧭 префиксы узлов задайте один раз и больше не меняйте — иначе в истории документов окажется разнобой.

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

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

Параметры кода почти те же, что у документа: Автонумерация, Тип кода (Строка или Число), Длина кода, Контроль уникальности. Добавляется один специфический параметр — серии кодов, который определяет, в каких границах код должен быть уникальным:

Серия кодовГде код уникален
Во всём справочникеЕдиная сквозная нумерация по всему справочнику
В пределах подчиненияСвоя нумерация внутри каждой группы (для иерархии групп и элементов)
В пределах подчинения владельцуСвоя нумерация у каждого владельца (для подчинённых справочников)

Для префикса кода у справочника есть собственное событие — ПриУстановкеНовогоКода:

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

Логика та же, что у документа: СтандартнаяОбработка оставляете Истина, чтобы платформа подобрала числовую часть, а в Префикс кладёте нужные символы.

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

Разрывы, дубли и другие частые проблемы

Несколько ситуаций, с которыми сталкиваются чаще всего.

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

Нельзя записать документ — номер превысил длину. Числовая часть вместе с префиксом перестала помещаться в заданную длину. Увеличьте длину номера у документа или нумератора (это изменение структуры — через резервную копию и обновление в нерабочее время).

Появились дубли номеров. Как правило, это следствие отключённой проверки уникальности либо ручной установки номера кодом без собственной проверки. Включите проверку уникальности; если номер ставите сами — проверяйте занятость перед записью.

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

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

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