Введение
Представьте: вы только что перенесли базу 1С на новый сервер или выполнили загрузку справочников из старой системы. Всё прошло успешно, но при попытке создать новый документ или добавить элемент справочника система выдаёт пугающую ошибку: «Значение поля номер не уникально» или «Код не уникален». И так по каждому новому объекту. С чем это связано и как быстро исправить ситуацию?
В старых конфигурациях это сообщение выглядело как на скрине ниже, но в новых текст сообщения не изменился:

Платформа 1С:Предприятие для оптимизации работы активно использует механизмы кэширования. Номера и коды объектов не запрашиваются каждый раз заново из базы данных, а хранятся в памяти сервера 1С. Это ускоряет работу, но в некоторых случаях приводит к рассогласованию кэша с реальными данными в информационной базе. Именно для синхронизации кэша и существует метод ОбновитьНумерациюОбъектов. Понимание его работы необходимо каждому специалисту, который занимается переносом данных, администрированием баз или разработкой на платформе 1С.
Синтаксис и параметры
Метод ОбновитьНумерациюОбъектов является процедурой глобального контекста, доступной на сервере, в толстом клиенте, внешнем соединении, а также в мобильных приложениях.
Синтаксис метода:
ОбновитьНумерациюОбъектов(<Метаданные>)
Параметры
| Параметр | Тип | Описание |
|---|---|---|
Метаданные (необязательный) |
Массив, ОбъектМетаданных |
Объект метаданных или массив объектов, для которых требуется обновить нумерацию. Если параметр не указан, обновление выполняется для всех типов объектов информационной базы |
Примеры вызова:
// Обновить нумерацию для всех объектов
ОбновитьНумерациюОбъектов();
// Обновить нумерацию только для справочника Номенклатура
ОбновитьНумерациюОбъектов(Метаданные.Справочники.Номенклатура);
// Обновить нумерацию для нескольких объектов
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(Метаданные.Документы.ПриходныйКассовыйОрдер);
МассивОбъектов.Добавить(Метаданные.Документы.РасходныйКассовыйОрдер);
ОбновитьНумерациюОбъектов(МассивОбъектов);
Принцип работы: как это работает под капотом?
Чтобы понять, зачем нужен этот метод, необходимо разобраться, как платформа 1С управляет нумерацией объектов.
1. Кэширование номеров в памяти сервера 1С
Для каждого документа или справочника с автонумерацией сервер 1С:Предприятие хранит в оперативной памяти актуальный максимальный номер для каждого использованного префикса и периода. Когда пользователь создаёт новый документ, платформа обращается не к базе данных, а к этому кэшу, мгновенно получает следующий номер и предлагает его пользователю. Это значительно повышает производительность, особенно при интенсивной работе большого количества пользователей.
2. Когда происходит рассогласование?
Кэш может устареть в следующих ситуациях:
-
Восстановление базы из резервной копии: После восстановления базы данных на SQL Server из бэкапа, данные в базе меняются, но кэш сервера 1С остаётся прежним. Сервер не знает, что данные изменились, продолжает оперировать старыми значениями максимальных номеров, что приводит к ошибкам уникальности при создании новых объектов.
-
Перенос данных из внешних источников: При переносе справочников и документов из другой базы данных с помощью универсальных механизмов обмена, нумерация объектов может быть «рваной» — содержать пропуски или символьные значения, не соответствующие стандартной маске.
-
Ручное изменение номеров: Если администратор или пользователь с правами редактирования вручную изменяет номера уже записанных объектов, это также может привести к рассинхронизации кэша с реальными данными.
3. Что делает метод ОбновитьНумерациюОбъектов?
Метод анализирует фактические номера, записанные в базе данных для указанных объектов, и обновляет кэш сервера 1С в соответствии с ними. Это приводит к синхронизации и корректной выдаче последующих номеров. Важно понимать, что метод не изменяет сами данные в базе, не перенумеровывает существующие документы, а лишь обновляет служебную информацию в памяти.
Когда использовать метод
Основные сценарии применения:
1. После восстановления базы данных из резервной копии
Это самый частый сценарий. При восстановлении клиент-серверной базы на SQL Server практически всегда требуется вызвать этот метод, чтобы избежать ошибок нумерации.
2. При загрузке данных из внешних источников
После загрузки справочников или документов из других информационных баз (например, из legacy-системы), особенно если в исходной базе были пропуски в нумерации или использовались нестандартные коды.
3. При исправлении ошибок «Номер не уникален»
Ошибка «Значение поля номер не уникально» — классический признак рассогласования кэша. Рекомендуемая последовательность действий:
-
Удалить объекты, помеченные на удаление, чтобы освободить номера;
-
Вызвать метод
ОбновитьНумерациюОбъектов()для проблемного типа объектов; -
Если не помогло — увеличить в конфигураторе длину номера объекта метаданных и снова вызвать метод.
4. При перенумерации объектов
Если вы выполнили перенумерацию некоторых объектов (например, с помощью специализированной обработки), но система продолжает выдавать одни и те же старые номера, необходимо вызвать ОбновитьНумерациюОбъектов, чтобы сбросить кэшированные значения.
Примеры использования
Простой вызов:
// Если проблема затронула все объекты в базе
ОбновитьНумерациюОбъектов();
Выборочное обновление:
// Обновить нумерацию только для конкретного документа
ОбновитьНумерациюОбъектов(Метаданные.Документы.РеализацияТоваровУслуг);
Обновление для нескольких объектов:
// Обработка ошибки "Номер не уникален" для нескольких видов документов
МассивДокументов = Новый Массив;
МассивДокументов.Добавить(Метаданные.Документы.ПриходныйКассовыйОрдер);
МассивДокументов.Добавить(Метаданные.Документы.РасходныйКассовыйОрдер);
МассивДокументов.Добавить(Метаданные.Документы.ПлатежноеПоручение);
ОбновитьНумерациюОбъектов(МассивДокументов);
Важные ограничения и меры предосторожности
При использовании метода необходимо учитывать несколько критических моментов:
-
Требуются административные права. Метод разрешено вызывать только пользователю с правами администратора системы. Вызов от имени обычного пользователя приведёт к ошибке.
-
Потеря выданных, но незаписанных номеров. После вызова метода все номера, которые были выданы платформой для новых объектов, но ещё не были сохранены в базу данных, становятся недействительными. Уникальность таких номеров не гарантируется. Это означает, что если пользователь в данный момент заполняет новый документ, после вызова метода его номер может оказаться уже занятым.
-
Метод не изменяет данные в базе. Он работает исключительно с кэшем в памяти сервера 1С. Не надейтесь, что он исправит дублирующиеся номера в уже сохранённых документах — для этого требуется перенумерация существующих объектов.
-
Работает на уровне всей таблицы. Нельзя выполнить обновление нумерации с отбором по организации или другому признаку — процедура действует на всю таблицу объектов в целом.
-
Периодичность выполнения. Нет необходимости вызывать этот метод регулярно — только при возникновении проблем с нумерацией.
Заключение
Метод ОбновитьНумерациюОбъектов — это не просто очередная служебная команда, а незаменимый инструмент в арсенале администратора и разработчика 1С, обеспечивающий синхронизацию кэша сервера с реальными данными в информационной базе. Как мы убедились, его правильное применение позволяет быстро устранять проблемы с нумерацией документов и справочников без тяжёлого перезапуска сервера или всей базы данных.
Особую ценность этот метод приобретает в трёх ключевых сценариях: после восстановления базы из резервной копии (особенно на SQL Server), при загрузке legacy-данных из внешних систем и при исправлении классической ошибки «Номер не уникален». В каждом из этих случаев вызов ОбновитьНумерациюОбъектов — первая и часто единственная мера, позволяющая вернуть нумерацию в штатное русло за секунды, а не часы.
Однако важно помнить и о скрытых рисках. Вызов метода приводит к сбросу всех «летучих» номеров, которые были выданы пользователям, но ещё не записаны в базу. Поэтому перед его выполнением в рабочей базе стоит предупредить коллег — попросить их сохранить открытые документы или хотя бы переоткрыть их после обновления нумерации. Также метод абсолютно бесполезен для исправления уже существующих дублей номеров — для этого нужна отдельная обработка перенумерации.
На практике рекомендуется следующий алгоритм действий при появлении ошибок нумерации:
-
Диагностика — определить, для какого именно объекта метаданных (документа или справочника) возникает проблема.
-
Перенумерация существующих объектов — если в базе есть дублирующиеся номера, их нужно исправить с помощью специализированной обработки (например, «Групповая обработка справочников и документов» или написанного под конкретную задачу кода).
-
Вызов
ОбновитьНумерациюОбъектов— синхронизировать кэш сервера с исправленными данными. Параметр (тип объекта или массив) лучше указывать явно, чтобы не нагружать систему полным перебором всех метаданных. -
Тестирование — создать новый объект и убедиться, что номер присваивается корректно и не конфликтует с существующими.
Таким образом, ОбновитьНумерациюОбъектов — это пример того, как один грамотно спроектированный метод платформы решает целый класс проблем, экономя часы рабочего времени и нервы коллектива.
Если описанные шаги не помогли, можно прибегнуть к «тяжёлой артиллерии»: временно увеличить длину номера в конфигураторе (например, с 9 до 10 символов) с последующей реструктуризацией данных, либо перезапустить сервер 1С:Предприятие, что также сбрасывает кэш, но требует больше времени и согласования с пользователями.
В долгосрочной перспективе системные администраторы и разработчики должны включать вызов ОбновитьНумерациюОбъектов в регламентные операции после любых массовых изменений данных, которые затрагивают нумерацию — будь то восстановление базы, импорт справочников из Excel или перенос документов из другой конфигурации. Лучше выполнить один короткий вызов сразу после операции, чем разбираться с десятками жалоб пользователей на дублирующиеся номера в течение следующей недели.
Конечно, в статье все подробно было описано, но если все-таки кому-то было непонятно, то я также к статье прикладываю рабочую обработку как пример использования этого метода для одного из объектов метаданных.
Проверено на следующих конфигурациях и релизах:
- Бухгалтерия предприятия КОРП, редакция 3.0, релизы 3.0.195.40
Вступайте в нашу телеграмм-группу Инфостарт