При настройке системы 1С:Документооборот (как в редакции 2.1, так и в новой 3.0) пользователи часто сталкиваются со следующей проблемой: при создании или регистрации новых документов программа упорно присваивает им один и тот же номер (например, «1») или выдает ошибку уникальности номера. Казалось бы, автонумерация включена, правила настроены, но цепочка последовательных номеров 1, 2, 3, 4 постоянно прерывается.
В этой статье мы подробно разберем, почему автонумерация может сбоить, как правильно диагностировать проблему и какими способами восстановить корректный порядок номеров без ручного вмешательства в базу данных.
Проанализируем классическую ситуацию, с которой часто сталкиваются начинающие администраторы системы. Допустим, вы настроили общий нумератор и привязали его к нескольким видам документов. Однако при создании документов номера начинают дублироваться или постоянно сбрасываются на «1».
Выясним причину такого поведения системы. Дело в том, что в карточке нумератора есть вкладка «Независимая нумерация». Если на этой вкладке установлены флаги в разделе «Нумеровать независимо по:», система разделяет один сквозной поток номеров на несколько изолированных очередей. Рассмотрим наиболее опасные в этом плане разрезы:
Решение: Перейдем в настройки нумератора. Для этого откроем карточку нумератора, дважды кликнем по полю формата номера (где отображается шаблон, например, «..12345»), нажмем кнопку открытия (или сочетание клавиш Ctrl+Shift+F4) и перейдем на вкладку «Независимая нумерация». Проанализируем установленные флаги и снимем лишние (в большинстве случаев требуется снять флаги «Виду документа» и «Подразделению»).
Бывают ситуации, когда все настройки выполнены абсолютно верно, но система все равно выдает неуникальный номер или сбрасывает счетчик. В клиент-серверных базах данных платформа 1С:Предприятие 8.3 использует оптимизированный механизм генерации номеров, кэшируя свободные номера на стороне сервера приложений для ускорения работы транзакций.
Кэш может некорректно обновиться или «зависнуть» в следующих случаях:
Решение: Для устранения сбоя кэша администратору необходимо принудительно обновить счетчики платформы. Сделать это можно через выполнение программного метода ОбновитьНумерациюОбъектов(). Нам понадобится запустить внешнюю обработку или консоль кода и выполнить следующий скрипт для проблемного метаданного (например, для внутренних документов):
// Сброс и обновление кэша автонумерации для внутренних документов
ОбновитьНумерациюОбъектов(Метаданные.Справочники.ВнутренниеДокументы);
Если программный метод не помог, гарантированным решением является перезапуск службы сервера «1С:Предприятие» (1C:Enterprise 8.3 Server Agent) в нерабочее время.
Механизм автонумерации в экосистеме «1С» работает по простому математическому принципу: алгоритм ищет в базе данных документ с самым большим номером в рамках текущего пространства номеров (с учетом периодичности) и прибавляет к нему единицу. Ручное вмешательство пользователей ломает эту логику.
Рассмотрим две типичные ошибки ручного ввода:
0000-000015. Если пользователь вручную отредактирует его и запишет как 15 или 15-А, алгоритм платформы больше не сможет корректно распознать числовую часть для инкремента. При попытке создать следующий документ система либо выдаст ошибку неуникальности, либо сбросит автонумерацию на единицу.000025б), алгоритм автоинкремента споткнется на символе «б» и не сможет прибавить единицу, вновь выдав ошибку.Решение: Разберем по шагам, как исправить последствия ручного ввода:
15 в правильный формат 0000-000015.Каждый нумератор имеет важную настройку — «Периодичность». Доступны варианты: «В пределах года», «В пределах месяца», «В пределах дня» или «Непериодический».
Если для нумератора установлена периодичность «В пределах года», то 1 января каждого нового года счетчик автоматически обнуляется, и первый созданный документ гарантированно получит номер «1». Это нормальное поведение системы.
Однако проблемы могут возникнуть при программном переносе документов или их создании задним числом. Если рабочая дата документа попадает в другой период (например, документ создается текущей датой, но реквизит «Дата» вручную меняется на прошлый год), алгоритм автонумерации выделит номер из старого периода, что может нарушить хронологию и вызвать конфликты уникальности номеров в текущем году.
Посмотрим на процесс создания документа в 1С:Документооборот. В этой системе четко разделены понятия временного номера (присваивается проекту документа в момент его первичной записи) и регистрационного номера (присваивается только в момент официального завершения согласования и регистрации документа).
Пользователи часто пугаются, когда видят, что при записи нового внутреннего документа поле «Номер» остается пустым, либо содержит странный префикс вида ВР-000001. Это не означает, что автонумерация сломалась. Полноценный регистрационный номер появится только после того, как документ пройдет по процессу или будет зарегистрирован вручную нажатием кнопки «Зарегистрировать». Настройки этих двух нумераторов производятся в программе независимо друг от друга. При необходимости можно воспользоваться расширением для автоматической регистрации внутренних документов при записи.
Очень часто организация начинает работать в 1С:Документооборот не с начала года, а, например, в середине отчетного периода. Нам необходимо продолжить существующую бумажную или стороннюю нумерацию (например, начать регистрацию документов в системе с номера 534), не регистрируя при этом 533 фиктивных документа в базе.
Не нужно пытаться вручную перебивать первый документ. Для этого в системе предусмотрен штатный механизм установки текущего номера:
533 (последний использованный номер вне системы).534.