При разворачивании копии информационной базы 1С из бэкапа СУБД (например, Microsoft SQL Server) специалисты часто сталкиваются с нестандартным поведением системы. В рабочей базе создание документов, таких как Расходный кассовый ордер (РКО), проходит без ошибок, однако в свежесозданной копии при попытке записать новый документ платформа выдает сообщение: «Значение поля "Номер" не уникально».
Разберем подробно причины возникновения этой проблемы и рассмотрим практические способы её решения.
Проанализируем ситуацию, которая происходит при разворачивании базы данных. Главная причина заключается в том, как платформа 1С:Предприятие работает с автонумерацией документов:
rphost) хранит в оперативной памяти зарезервированные диапазоны номеров, чтобы избежать блокировок в таблицах при одновременной работе множества пользователей.Рассмотрим самый быстрый и надежный способ устранения проблемы в конфигураторе или через внешнюю обработку. В платформе 1С предусмотрен специальный метод ОбновитьНумерациюОбъектов(). Он принудительно аннулирует кэшированные сервером номера и заставляет систему заново вычислить максимальный номер непосредственно из физических таблиц базы данных.
Для выполнения этой процедуры откроем внешнюю обработку или обработку инициализации и выполним следующий код:
// Обновление нумерации для конкретного типа документов (например, РКО)
ОбновитьНумерациюОбъектов(Метаданные.Документы.РасходныйКассовыйОрдер);
// Если необходимо обновить нумерацию для всех объектов метаданных
ОбновитьНумерациюОбъектов();
После вызова этого метода платформа 1С пересчитает текущую последовательность номеров, и создание новых документов возобновится в штатном режиме.
Если нет возможности запустить код 1С или нужно применить системный подход при разворачивании тестовых контуров, выполним следующие действия:
1C:Enterprise Server 8.3 принудительно очищает оперативную память процессов rphost и сбрасывает все закэшированные диапазоны номеров.Проанализируем журнал документов на наличие случайных ошибок ввода. Если метод ОбновитьНумерациюОбъектов() не помог с первого раза, проконтролируем следующие моменты:
0000-000123 записан номер 123 без лидирующих нулей). Из-за этого платформа не может корректно прибавить единицу к максимальному значению.Исправив вручную номера с нарушенным форматом и повторно вызвав ОбновитьНумерациюОбъектов(), мы полностью восстановим корректную работу автонумерации.