Часто при переносе или восстановлении информационных баз 1С средствами SQL-сервера возникает неприятная ситуация: система выдает ошибку «Значение поля номер не уникально» при создании новых документов или процессов. Это происходит из-за того, что данные в таблицах SQL обновились, а внутренние счетчики 1С, отвечающие за генерацию новых номеров, остались в «старом» состоянии. Давайте разберемся, как исправить эту проблему вместе.
В платформе 1С существует встроенный механизм нумерации. При каждом создании документа 1С обращается к своим внутренним метаданным, чтобы понять, какой номер был последним, и увеличить его на единицу. Когда вы восстанавливаете базу напрямую через SQL, эти метаданные не всегда обновляются автоматически. В результате 1С пытается присвоить номер, который уже есть в базе, а SQL-сервер, согласно настройкам уникальности поля, блокирует такую операцию.
Самое главное, что нам нужно сделать — это синхронизировать текущие значения в базе данных с системными счетчиками платформы. Для этого не нужно заниматься ручной перенумерацией всех существующих документов — это может повредить ссылочную целостность системы. Нам поможет штатная процедура.
Воспользуйтесь встроенной функцией ОбновитьНумерациюОбъектов(). Вы можете запустить ее через «Файл» -> «Открыть» (используя внешнюю обработку) или через «Консоль кода». Просто выполните следующий код:
// Выполнение обновления нумерации всех объектов метаданных
ОбновитьНумерациюОбъектов();
Эта команда заставляет платформу просканировать существующие номера документов и справочников, найти среди них максимальный и установить счетчик на это значение. После выполнения этой процедуры 1С будет выдавать следующие номера корректно.
Если после выполнения кода проблема сохраняется, возможно, дело в кэшировании данных на уровне сервера приложений. Сервер 1С хранит метаданные в оперативной памяти для ускорения работы, и эти данные могут не «видеть» изменений, внесенных напрямую в SQL-таблицы.
Чтобы сбросить кэш и принудительно обновить информацию о структуре базы:
1С:Предприятие 8.3 Server Agent через оснастку управления службами Windows.Рассмотрим несколько правил, которые помогут вам избежать дополнительных проблем:
Таким образом, мы выяснили, что ошибка уникальности — это лишь вопрос расхождения данных между SQL и метаданными 1С. Выполнив ОбновитьНумерациюОбъектов() и произведя перезапуск сервера, вы быстро вернете систему в рабочее состояние.