Разработка и Конфигурация · 11 мин
Как сделать нумератор в 1С: настройка нумерации документов и справочников
Как создать и настроить нумератор в 1С: стандартные механизмы нумерации документов, периодичность, префиксы, ручная нумерация в коде и типичные ошибки.
Нумератор в 1С — это механизм, который автоматически присваивает номера документам, элементам справочников и другим объектам конфигурации. В типовых конфигурациях нумерация уже настроена, но при разработке собственных объектов или доработке существующих часто требуется изменить правила: задать периодичность, добавить префикс, сделать номер уникальным в рамках организации или перенумеровать документы после сбоев.
Есть два пути: использовать штатные средства платформы (свойства объекта метаданных и стандартные обработки) или реализовать собственную логику нумерации в коде. Первый вариант проще и надёжнее, второй даёт гибкость — например, позволяет формировать номера вида «СЧ-000123/МСК» с учётом подразделения и даты.
Как устроена стандартная нумерация в 1С
Платформа 1С:Предприятие хранит для каждого вида документов последний выданный номер и при записи нового объекта автоматически увеличивает его на единицу. Номер — строковое значение, поэтому он может содержать буквы, дефисы и ведущие нули: «000000001», «АВ-123», «2026/0077».
Ключевые свойства нумерации задаются в конфигураторе на вкладке «Нумерация» в палитре свойств объекта (документа, справочника, бизнес-процесса):
- Длина номера — максимальное количество символов. При переполнении нумерация останавливается, и платформа выдаёт ошибку, поэтому закладывайте запас.
- Периодичность — как часто нумерация начинается заново: непериодическая, в пределах дня, месяца, квартала, года.
- Контроль уникальности — платформа проверяет, что номер не повторяется в пределах периода.
- Автонумерация — если включена, номер присваивается автоматически при записи; если выключена, пользователь вводит номер вручную.
Важно понимать, что уникальность номера проверяется только в пределах периодичности. Два документа с номером «1» в январе и феврале при месячной периодичности — нормальная ситуация, а при непериодической нумерации — ошибка.
Настройка нумерации в конфигураторе
Чтобы настроить нумератор для нового документа, откройте конфигуратор, найдите нужный объект в дереве метаданных и вызовите палитру свойств (правый клик → «Свойства»). Перейдите на вкладку «Нумерация» и задайте параметры.
Выбор периодичности
Периодичность выбирайте исходя из требований учёта. Для счетов-фактур и первичных документов обычно требуется сквозная нумерация в пределах года — ставьте «В пределах года». Для внутренних служебных документов с большим оборотом иногда удобнее нумерация в пределах месяца, чтобы номера не вырастали до шестизначных значений.
Длина номера и префикс
Длину номера задавайте с запасом: если в год создаётся до 10 000 документов, минимальная длина — 5 символов, но разумно поставить 8–11, чтобы влезали префиксы и служебные символы. Префикс (например, код организации или базы в распределённой системе) настраивается через подписку на событие «ПриУстановкеНовогоНомера» или через механизм префиксации в типовых конфигурациях.
- 1Откройте конфигуратор и найдите нужный документ или справочник в дереве метаданных
- 2В палитре свойств перейдите на вкладку «Нумерация»
- 3Задайте длину номера с запасом (например, 11 символов)
- 4Выберите периодичность: год для финансовых документов, месяц или день для высокооборотных
- 5Включите контроль уникальности и автонумерацию
- 6Обновите конфигурацию базы данных (F7) и проверьте создание нового документа
Как добавить префикс к номеру
Префиксы нужны в двух типовых сценариях: обмен данными между базами (чтобы номера из разных узлов не конфликтовали) и разделение нумерации по организациям или подразделениям в одной базе.
В типовых конфигурациях (Бухгалтерия, Управление торговлей, ERP) префикс базы задаётся в настройках синхронизации или в реквизитах организации, и платформа подставляет его автоматически. В собственной конфигурации префикс добавляется через подписку на событие:
Процедура УстановитьПрефиксПриУстановкеНовогоНомера(Источник, СтандартнаяОбработка, Префикс) Экспорт
Префикс = Константы.ПрефиксОрганизации.Получить();
КонецПроцедуры
Подписка создаётся в ветке «Общие → Подписки на события», источником указывается нужный вид документов, событием — «ПриУстановкеНовогоНомера». Учтите, что префикс занимает часть длины номера: при длине 11 и префиксе из двух символов на цифровую часть остаётся 9.
Собственный нумератор в коде
Штатный механизм не умеет нумеровать документы независимо по нескольким измерениям — например, отдельная последовательность для каждой организации и каждого вида договора одновременно. В таких случаях разработчики создают собственный нумератор.
Классическая схема: номер хранится в константе или в регистре сведений с измерениями (организация, год, вид документа). В обработчике «ПриУстановкеНовогоНомера» или «ОбработкаЗаполнения» код читает текущее значение, увеличивает его и записывает обратно:
Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
СтандартнаяОбработка = Ложь;
Менеджер = РегистрыСведений.Нумераторы.СоздатьМенеджерЗаписи();
Менеджер.Организация = Организация;
Менеджер.Год = Год(Дата);
Менеджер.Прочитать();
СледующийНомер = Менеджер.ТекущийНомер + 1;
Менеджер.ТекущийНомер = СледующийНомер;
Менеджер.Записать();
Номер = Префикс + Формат(СледующийНомер, "ЧЦ=9; ЧВН=");
КонецПроцедуры
Главная проблема собственного нумератора — конкурентный доступ. Если два пользователя одновременно создают документы, оба могут прочитать одно и то же значение счётчика и получить дубли. Поэтому запись счётчика нужно выполнять в транзакции с блокировкой, а лучше — использовать управляемые блокировки через объект «БлокировкаДанных». Альтернатива — присваивать окончательный номер не при создании, а при проведении документа, когда коллизии менее вероятны.
Перенумерация существующих документов
Иногда нумерацию нужно исправить постфактум: после восстановления базы, загрузки данных из другой системы или смены правил. В типовых конфигурациях для этого есть стандартная обработка «Перенумерация объектов» (обычно доступна в разделе «Администрирование» или через «Все функции»).
Обработка проходит по документам выбранного вида за указанный период и присваивает номера заново в хронологическом порядке. Перед запуском убедитесь, что документы не участвуют в уже выгруженных отчётах и печатных формах: смена номера счёта-фактуры после отправки клиенту создаст расхождения в учёте.
Если штатной обработки нет, перенумерацию выполняют запросом: выбирают документы с упорядочиванием по дате и моменту времени, затем в цикле присваивают номера. Такую операцию всегда выполняйте сначала на копии базы и проверяйте отсутствие пропусков и дублей.
Проверка результата и контроль нумерации
После настройки нумератора проверьте его работу на тестовых документах. Создайте несколько документов подряд, убедитесь, что номера идут последовательно, префикс подставляется корректно, а при смене периода (месяца или года) счётчик сбрасывается, если задана периодичность.
Для действующей базы полезно периодически контролировать состояние нумерации: искать дубли номеров в пределах периода и необоснованные разрывы. Разрывы сами по себе не ошибка — они появляются при удалении документов, — но массовые пропуски могут указывать на сбои обмена данными или на ручное вмешательство.
Как проверить результат
Каждый следующий номер на единицу больше предыдущего в пределах периода
Номера дублируются или скачут большими шагами
Префикс соответствует организации или базе и не меняется произвольно
Префикс пустой, хотя настроен, или отличается у документов одной организации
При периодичности «год» первый документ нового года получает номер 1
Нумерация продолжается с прошлогоднего значения
При одновременном создании документов дублей нет
Появляются одинаковые номера у разных документов
Часто задаваемые вопросы
Можно ли сделать номер документа числовым без ведущих нулей?
Да, но Ведущие нули добавляются для выравнивания сортировки: без них «10» в списке окажется раньше «2». Если нули мешают в печатных формах, уберите их при выводе функцией Формат() или сокращением строки, не меняя сам номер в базе.
Почему номер присваивается с пропусками?
Платформа резервирует номер при создании объекта, и если пользователь закрыл форму без записи или произошёл откат транзакции, зарезервированное значение теряется. Это штатное поведение. Для документов, где непрерывность критична (например, счета-фактуры), номер лучше присваивать при проведении, а не при создании.
Как сделать отдельную нумерацию для каждой организации в одной базе?
Штатный нумератор платформы един для всего вида документов. В типовых конфигурациях раздельная нумерация по организациям реализована программно — через собственные механизмы в подписках на события. В собственной конфигурации потребуется тот же подход: регистр сведений со счётчиками в разрезе организаций и код, выдающий номер с блокировкой.
Что делать, если длина номера исчерпана и документы не записываются?
Нужно увеличить длину номера в свойствах объекта в конфигураторе и обновить конфигурацию базы данных. Операция вызывает реструктуризацию таблиц, поэтому на больших базах выполняется в монопольном режиме и может занять заметное время. Перед этим обязательно сделайте резервную копию.
Можно ли начать нумерацию не с единицы, а с произвольного числа?
Да. Самый простой способ — вручную присвоить первому документу нужный стартовый номер (например, «000000100») при включённой автонумерации: штатный механизм продолжит от этого значения. Для собственного нумератора просто запишите начальное значение счётчика в регистр или константу до начала работы.
Опасно ли перенумеровывать документы прошлых периодов?
Да, если по этим документам уже сдана отчётность, сформированы печатные формы или выполнены выгрузки в другие системы. Смена номера счёта-фактуры или накладной после отправки контрагенту приведёт к расхождениям. Перенумерацию безопасно делать только для внутренних документов текущего периода, предварительно проверив отсутствие связанных выгрузок.
Что важно запомнить
Штатная нумерация настраивается в конфигураторе через длину номера, периодичность и контроль уникальности — этого достаточно для большинства задач. Собственный нумератор в коде оправдан только при сложных форматах и раздельных последовательностях, и он обязательно требует блокировок от дублей. Любые изменения нумерации в рабочей базе выполняйте после резервной копии и проверяйте на тестовых документах.