Сбилась нумерация в 1С: как восстановить порядок номеров

· 9 мин

Содержание

Первым делом проверьте три вещи: периодичность нумерации (в типовых конфигурациях номер сбрасывается 1 января — это норма, а не сбой), префикс организации и префикс информационной базы. В 90% обращений «сбилась нумерация» дело именно в них, а не в повреждении базы.

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

Из-за чего ломается порядок номеров

Номер документа в 1С состоит из трёх частей: префикс информационной базы + префикс организации + собственно порядковый номер. Платформа присваивает номер автоматически при записи, если поле номера пустое.

Разберём на примере. Номер ЦБ00-000123 читается так: ЦБ — префикс организации (здесь «Центральная база»), 00 — префикс информационной базы (пустой обмен, поэтому нули), 000123 — порядковый номер с ведущими нулями под заданную длину. Когда порядок номеров выглядит странно, почти всегда «виновата» одна из этих трёх частей, а не повреждение данных.

Самые частые причины, по которым нумерация «уезжает»:

  • 📅 Смена года. Для большинства документов периодичность номера — «в пределах года». 1 января счёт обнуляется, и первый документ снова получает номер 1. Это штатное поведение.
  • 🏢 Несколько организаций в одной базе. Если у организаций одинаковый или пустой префикс, их номера пересекаются и выглядят как дубли.
  • 🔢 Исчерпана длина номера. Когда разрядность закончилась (например, дошли до 99999), платформа начинает нумеровать некорректно.
  • 🗑 Удаление документов. После пометки на удаление и последующего удаления в последовательности остаются пропуски. Освободившиеся номера повторно не выдаются.
  • 🔁 Обмен данными (РИБ, синхронизация). В узлах распределённой базы номера расходятся, если префиксы ИБ не настроены.
  • ✍️ Ручной ввод номера. Кто-то вбил номер руками, и автонумерация с этого места сбилась.

Прежде чем что-то исправлять, определите, с каким именно симптомом вы имеете дело: пропуски, дубли, сброс с нового года или выход за длину. Лечение у них разное.

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

С чего начать: префиксы в режиме «Предприятие»

Большинство проблем закрывается без конфигуратора — правильной настройкой префиксов.

Префикс организации. Откройте карточку организации в разделе Главное → Организации (в УТ 11 и ERP — НСИ и администрирование → Организации). Поле префикса обычно состоит из одного-двух символов. Задайте каждой организации свой уникальный префикс — так их номера перестанут пересекаться.

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

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

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

Есть нюанс с символами в префиксе. Если тип номера у документа числовой, буквы в префикс поставить нельзя — только цифры. Для буквенных префиксов (ЦБ, ОП) тип номера должен быть строковым; в типовых конфигурациях он такой и есть, но при доработках это иногда меняют и получают неожиданный результат.

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

Как устроена нумерация: настройки в конфигураторе

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

Откройте свойства нужного документа в дереве метаданных. За нумерацию отвечают:

СвойствоЧто задаётТиповое значение
Периодичность номераКогда счёт сбрасываетсяВ пределах года
Длина номераРазрядность порядковой части6–11 знаков
Тип номераЧисловой или строковыйСтрока
Проверка уникальностиЗапрещать ли повтор номераВключена

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

Изменение этих свойств меняет структуру конфигурации. Для сохранения потребуется монопольный доступ к базе (обновление структуры БД выполняется монопольно). Делайте это, когда в базе никто не работает, и обязательно с резервной копией.

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

Перенумерация документов штатными средствами

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

1. Пустой номер + перезапись. Если очистить номер у документа и записать его, платформа присвоит следующий свободный номер по текущим настройкам. На практике номер руками недоступен, поэтому массово это делают обработкой.

2. Обработка перенумерации. Самый распространённый способ для диапазона документов — внешняя обработка «Перенумерация документов». Она перебирает документы за период, очищает номер и присваивает заново по порядку. Такие обработки входят в типовые комплекты инструментов администратора базы.

3. Небольшой код в обработке. Для разового исправления подойдёт обработка с перебором документов:

Запрос = Новый Запрос;
Запрос.Текст =
    "ВЫБРАТЬ Ссылка ИЗ Документ.РеализацияТоваровУслуг
    |ГДЕ Дата МЕЖДУ &Начало И &Конец
    |УПОРЯДОЧИТЬ ПО Дата, МоментВремени";
Запрос.УстановитьПараметр("Начало",  НачалоГода(ТекущаяДата()));
Запрос.УстановитьПараметр("Конец",   КонецГода(ТекущаяДата()));

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
    Объект = Выборка.Ссылка.ПолучитьОбъект();
    Объект.Номер = ""; // очистили — платформа присвоит следующий свободный
    Объект.Записать(РежимЗаписиДокумента.Запись);
КонецЦикла;

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

Обратите внимание на порядок обхода: документы перебираются по дате и моменту времени, а не в случайном порядке, иначе номера снова лягут вперемешку.

Ещё несколько практических моментов перед запуском перенумерации:

  • 👥 Монопольность не обязательна, но желательна. Пока обработка идёт, пользователи не должны создавать и перепроводить документы того же вида — иначе новые записи вклинятся в середину диапазона. Проще выполнить в нерабочее время.
  • 📦 Проведённые и непроведённые документы. Режим РежимЗаписиДокумента.Запись сохраняет документ без перепроведения и не трогает движения — это безопаснее для закрытых периодов, чем Проведение.
  • ⏱ Большой объём. На десятках тысяч документов перебор идёт долго. Разбейте период на части (помесячно) и перенумеруйте по шагам, контролируя результат после каждого.

Правка через запросы и SQL: когда и почему не стоит

Отдельно про идею «поправить номера напрямую». Язык запросов 1С — только на чтение. Оператор ВЫБРАТЬ данные не меняет; UPDATE, INSERT и DELETE в консоли запросов 1С недоступны в принципе. Поэтому исправить нумерацию «одним запросом» в 1С нельзя.

Остаётся прямой SQL к таблицам СУБД (MS SQL или PostgreSQL). Технически поле номера лежит в таблице документа (_Document… с полем вида _Number), и его можно переписать запросом к базе. Но этого делать категорически не рекомендуется:

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

Правильный инструмент для массовой правки — объектная модель (обработка выше), а не SQL. SQL-доступ к боевой базе 1С оставляйте только для диагностики: прочитать, посчитать, найти дубли — да; переписать номер в таблице — нет. Любая запись мимо платформы рано или поздно аукнется расхождением данных, которое искать будет дороже, чем аккуратная перенумерация штатными средствами.

Дубли и пропуски: как привести в порядок

Пропуски номеров. Чаще всего это следствие удалённых или перепроведённых задним числом документов. Для бухгалтерского и налогового учёта пропуск в нумерации нарушением не является — важна корректность сумм и проводок, а не непрерывность счёта. Специально «затыкать дыры» не нужно. Если же сквозная нумерация принципиальна (например, для бланков строгой отчётности), применяйте перенумерацию диапазона.

Дубли номеров. Это уже проблема: два документа с одинаковым номером мешают поиску и выгрузке. Алгоритм:

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

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

Если нумерация завязана на нумератор, помните: он общий для нескольких видов документов, и правка затронет их все сразу. Проверьте это до перенумерации.

Как не допустить повторного сбоя

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

Чтобы нумерация не сбивалась
Выполнено: 0 / 7

Полезно раз в год, перед началом нового периода, проверять две цифры: сколько документов каждого вида создаётся за год и какая длина номера задана. Если за год набегает, скажем, 60–70 тысяч реализаций, а длина номера шесть знаков, запаса хватит надолго; если же база растёт быстрее, длину лучше увеличить заранее, а не в момент, когда номера упрутся в потолок и начнут вести себя непредсказуемо.

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

И держите под рукой свежую резервную копию. Любая массовая операция с номерами — это перезапись документов, а значит, и движений. Копия превращает рискованную правку в обратимую.

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

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