Многие пользователи и администраторы систем 1С, в частности сложных конфигураций вроде 1С:ERP или Комплексной автоматизации, сталкиваются с ситуацией, когда в реестре документов обнаруживаются пропуски номеров. Бухгалтеры часто воспринимают это как критическую ошибку или признак удаления документов. В этой статье мы подробно разберем, почему возникают «дыры» в нумерации, почему номер может увеличиться сразу на 10 единиц и является ли это ошибкой системы.
Прежде всего, давайте разберем, как платформа 1С присваивает номера новым объектам. Это поможет нам объяснить ситуацию, описанную автором вопроса, когда номера идут не по порядку (например, 51, затем 53) или совершают резкий скачок.
В платформе 1С:Предприятие механизм нумерации спроектирован так, чтобы обеспечить максимальную производительность при одновременной работе множества пользователей. Если бы система жестко контролировала последовательность без пропусков, это привело бы к блокировкам: пока один пользователь не запишет документ, другой не смог бы получить следующий номер. Чтобы этого избежать, используются специальные алгоритмы.
Самая распространенная причина единичных пропусков (например, есть 51, нет 52, есть 53) — это создание документа без его последующего сохранения.
Проанализируем процесс создания документа:
УстановитьНовыйНомер().Если после этого пользователь решит не сохранять документ (нажмет «Закрыть», ответит «Нет» на вопрос о сохранении) или если в процессе записи возникнет программная ошибка, транзакция отменится. Однако, выданный номер не возвращается обратно в пул свободных номеров.
Это сделано намеренно. Возврат номера потребовал бы сложного механизма блокировок, который замедлил бы работу всей системы. Поэтому номер 52 считается использованным («сожженным»), и следующий созданный документ получит номер 53.
Рассмотрим ситуацию, которая часто пугает пользователей больше всего: резкое увеличение номера, например, сразу на 10 единиц за один день. Это не ошибка и не чье-то ручное вмешательство, а особенность работы платформы в клиент-серверном варианте.
Для оптимизации работы с базой данных (особенно на SQL Server) сервер приложений 1С «захватывает» номера пачками. Этот механизм называется буферизацией нумерации.
Как это работает:
rphost (плановая или аварийная) или перезагрузка службы сервера 1С, все неиспользованные номера из текущего захваченного диапазона «сгорают».Пример: Сервер захватил диапазон с 50 по 60. Вы создали документ №51. Ночью произошла перезагрузка сервера. Оставшиеся номера (52-60) считаются потерянными. Утром первый же созданный документ спровоцирует захват нового диапазона и получит номер 61. Так образуется разрыв в 9-10 номеров.
В обсуждении проблемы на форуме справедливо отметили влияние изменения реквизитов документа уже после получения номера. В конфигурациях уровня ERP, КА и УТ нумерация ведется в разрезе организаций и имеет структуру: ПрефиксОрганизации + ПрефиксИБ + СобственноНомер.
Разберем сценарий, приводящий к пропуску:
АА-000055.ББ-000012.В этом случае номер АА-000055 остается «потерянным» для Организации А, так как он был выдан, но документ с таким номером не был записан. Исправить ситуацию поможет перенумератор документов с учетом префикса.
Иногда пропуски возникают из-за процессов, невидимых пользователю. Проанализируем возможные источники:
Нельзя исключать ситуацию, когда пропуск является «визуальным». Если в базе настроено ограничение доступа на уровне записей (RLS), пользователь может просто не видеть существующий документ.
Например, документ №52 создан менеджером другого подразделения. Текущий пользователь не имеет прав на просмотр документов этого подразделения, поэтому в его реестре после 51 сразу идет 53. Физически документ существует в базе.
Понимание технических причин — это половина успеха. Теперь давайте определим, как действовать в такой ситуации.
1. Объясните нормативность поведения
Важно донести до бухгалтеров, что в современных системах автоматизации (не только 1С) жесткая сплошная нумерация часто невозможна без ущерба для производительности. Согласно законодательству (в частности, для счетов-фактур), критичным является уникальность номера и хронологический порядок дат, а не отсутствие пропусков в натуральном ряде чисел.
2. Проверьте настройки нумератора (для программистов)
Если пропуски критичны (например, для кассовых ордеров, где требования строже), можно программно отключить буферизацию номеров для конкретного типа документа. Это делается в конфигураторе, в свойстве нумератора Автонумерация, однако это может снизить производительность при массовом вводе документов.
3. Программное обновление нумерации
Если нумерация сбилась критически (например, кто-то вручную ввел номер с лишним нулем, и автонумерация перестала работать), используйте встроенную обработку. В большинстве конфигураций она доступна через меню «Функции технического специалиста» (или «Все функции»).
Порядок действий для восстановления автонумерации:
ОбновитьНумерациюОбъектов() или используйте инструмент для восстановления нумерации объектов.4. Запрет редактирования номера
Чтобы исключить человеческий фактор, рекомендуется закрыть доступ пользователям к ручному редактированию поля «Номер». Это делается через настройки прав доступа или профили групп доступа.
Пропуски в нумерации реализации в 1С:ERP — это штатное поведение системы, обусловленное:
Бороться с этим явлением «любой ценой» не рекомендуется, так как это повлияет на скорость работы базы данных. Достаточно убедиться, что соблюдается хронология дат и отсутствуют дубли.