Что делать, если после обновления конфигурации 1С совпали коды у предопределенного и пользовательского элементов?

Программист 1С v8.3 (Управляемые формы) Сфера услуг, туризм и социальный сектор
← На главную

При обновлении отраслевых и типовых конфигураций 1С администраторы и разработчики нередко сталкиваются с ситуацией, когда в плане видов характеристик или справочнике появляются два элемента с абсолютно одинаковыми кодами. Один из этих элементов является предопределенным (внесенным разработчиком конфигурации), а второй — созданным ранее пользователями информационной базы. Выясним причину такого поведения платформы, проанализируем риски изменения кода и разберем пошаговый алгоритм исправления коллизии.

Почему возникает дублирование кодов при обновлении

Проанализируем механику платформы 1С:Предприятие. При реструктуризации и обновлении конфигурации платформа внедряет новые предопределенные элементы, свойства которых (включая строковый код) жестко заданы разработчиком в метаданных конфигуратора. Механизм контроля уникальности при обновлении конфигурации на уровне базы данных не блокирует вставку предопределенного элемента, даже если номер уже занят пользовательским элементом.

Такая ситуация обычно возникает в следующих случаях:

  1. Ручной ввод кодов пользователями: в процессе работы с базой пользователи вручную назначали произвольные коды новым элементам, заняв диапазон, который разработчик позже выделил под системные нужды.
  2. Сбой автонумерации: автонумератор платформы выдал порядковый номер, который в новом релизе конфигурации совпал со статическим кодом нового предопределенного элемента.

Влияет ли изменение кода на структуру данных и ссылки

Разберем фундаментальный принцип хранения данных в 1С. Вся ссылочная целостность в платформе базируется на уникальных идентификаторах объектов (UUID / GUID), а не на их строковых кодах. Поле Код является лишь прикладным реквизитом для визуального отображения и быстрого поиска пользователем.

Если изменить код у пользовательского элемента, произойдет следующее:

  1. Ссылки в документах и регистрах сохранятся: во всех документах, регистрах сведений и регистрах накопления ссылка останется прежней, данные не «поплывут» и не превратятся в «Объект не найден».
  2. Восстановится контроль уникальности: если для объекта метаданных включено свойство «Контроль уникальности», наличие дубля кода блокирует повторную запись любого из двух элементов до тех пор, пока коллизия не будет устранена.

Возможные риски и проверка конфигурации перед изменением

Несмотря на то, что замена кода безопасна для структуры базы данных, перед редактированием необходимо исключить специфические риски:

  1. Поиск по коду в программных модулях: если в нетиповых доработках или внешних обработках написан вызов метода НайтиПоКоду() с жестко заданным значением дублирующегося кода, система начнет возвращать предопределенный элемент вместо пользовательского. Рекомендуется выполнить глобальный поиск по конфигурации строки с данным кодом.
  2. Правила обмена и интеграции: в отраслевых решениях (например, в ЖКХ для взаимодействия с ГИС ЖКХ, личными кабинетами или внешними биллингами) сопоставление характеристик может производиться по коду. Если пользовательский элемент участвует в таком обмене, необходимо синхронизировать новый код с внешней системой.

Пошаговый порядок исправления дублирования кодов

Рассмотрим правильную последовательность действий для устранения проблемы:

  1. Определяем статус элементов: находим дублирующиеся элементы в списке. Предопределенный элемент помечен специальной пиктограммой с желтой точкой, а пользовательский отображается стандартной иконкой.
  2. Изменяем код пользовательского элемента: открываем форму пользовательского элемента и вручную присваиваем ему новый уникальный код, который не пересекается с существующими записями (например, следующий свободный номер в конце списка).
  3. Записываем изменения: сохраняем пользовательский элемент по кнопке «Записать и закрыть». Предопределенный элемент при этом редактировать не нужно — его код должен оставаться оригинальным, как заложено разработчиком.
  4. Восстанавливаем автонумерацию: если после ручной правки автонумератор платформы продолжит подставлять занятые коды, вызываем пересчет нумерации. Для этого выполним программный метод для соответствующего объекта метаданных.

Посмотрим на пример кода для сброса и обновления нумерации в плане видов характеристик через обработку или консоль кода:


// Сброс кэша нумератора и выравнивание последовательности номеров
ПланыВидовХарактеристик.ХарактеристикиПрочихОбъектов.ОбновитьНумерациюОбъектов();
Сообщить("Автонумерация успешно обновлена!");

После выполнения данного метода платформа проанализирует текущие коды в таблице базы данных и будет генерировать новые номера без повторных конфликтов с предопределенными элементами.

← На главную