Код ошибки 145 в 1С: Значение поля 'Код' не уникально
Механизм автонумерации в 1С и причины сбоя
Ошибка «Значение поля "Код" (или "Номер") не уникально (Код ошибки 145)» возникает в момент попытки записать новый элемент справочника или новый документ в базу данных. В платформе 1С:Предприятие встроен механизм автоматической нумерации: при создании объекта платформа запрашивает последний (максимальный) код/номер в таблице и прибавляет к нему 1. Ошибка 145 происходит, если этот автосгенерированный номер уже существует в базе. Бизнес-риски: блокировка ввода первичных документов, невозможность заведения новой номенклатуры.
Почему сбивается счетчик нумератора?
| Причина сбоя | Техническое объяснение |
|---|---|
| Ручное изменение кода | Пользователь с полными правами вручную изменил код элемента, например с "000010" на "000099". При следующем создании 1С попытается создать "000100". Если элементы 100-110 уже есть, возникнет конфликт. |
| Обмен данными (РИБ) | Из узла прилетел документ с номером, который пересекается с локальной нумерацией (не настроены префиксы узлов). |
| Изменение длины/типа кода | Программист в Конфигураторе изменил длину поля "Код" или поменял его тип с Числа на Строку (или наоборот). |
Методы восстановления уникальности нумерации
Сценарий 1: Программное обновление нумераторов (Быстрое решение)
Платформа 1С кэширует последние номера для скорости. Если кэш рассинхронизировался с базой, его нужно сбросить.
// В любой внешней обработке или в консоли кода выполните:
// Обновление нумерации для конкретного справочника
ОбновитьНумерациюОбъектов(Метаданные.Справочники.Номенклатура);
// Обновление нумерации для конкретного документа
ОбновитьНумерациюОбъектов(Метаданные.Документы.РеализацияТоваровУслуг);
// Глобальное обновление для всей конфигурации (выполняется долго)
ОбновитьНумерациюОбъектов();Сценарий 2: Поиск и исправление аномального номера (Ручной режим)
Если обновление не помогло, значит в базе реально есть элемент с "кривым" кодом (например, кто-то ввел строковый код "ЯЯЯ999", и 1С не знает, как прибавить к нему единицу).
- Откройте список справочника/журнал документов.
- Отсортируйте колонку "Код" или "Номер" по убыванию (стрелочка вниз).
- Найдите элементы с нестандартными кодами (без ведущих нулей, с русскими буквами вместо английских префиксов).
- Вручную измените их коды на правильные или перенумеруйте их с помощью стандартной обработки "Универсальные подбор и обработка объектов".
Типовые ошибки администраторов
- Отказ от префиксов в распределенных базах: В архитектуре РИБ каждый узел обязан иметь свой уникальный строковый префикс (например, ЦБ00, МГ01). Если префиксы не заданы, базы неизбежно сгенерируют одинаковые номера, и при обмене возникнет Ошибка 145.
Нарушение хронологии нумерации — повод для штрафов со стороны ФНС. Эксперты ITSTM разработают и внедрят строгие правила формирования номеров (с привязкой к организации, году и подразделению) и напишут скрипты автоматической перенумерации прошлых периодов.
Частые вопросы (FAQ)
Почему 1С сама не может найти свободный номер?
Для оптимизации работы СУБД 1С не сканирует всю таблицу в поиске 'дыр'. Она берет максимальное значение (MAX) и инкрементирует его. Если номера 10, 11, 15 заняты, 1С будет создавать 16, 17, оставляя 12, 13, 14 пустыми.
Можно ли отключить контроль уникальности?
В Конфигураторе у Справочника/Документа есть свойство 'Контроль уникальности'. Его можно снять, но это крайне не рекомендуется, так как это сломает логику поиска и ссылочную целостность во многих типовых алгоритмах.
Что означает префикс организации?
В типовых конфигурациях номер состоит из Префикса_Организации + Префикса_Базы + Тире + Самого номера (например, ООБП-000123). Это нужно для раздельной нумерации документов разных юридических лиц внутри одной базы.
Как исправить номер 'вручную', если поле недоступно для редактирования?
В типовых конфигурациях код защищен от изменения. В карточке объекта нажмите 'Еще' -> 'Разрешить редактирование реквизитов' (или 'Изменить номер'). Система выдаст предупреждение, согласитесь и поле разблокируется.