Ошибка возникает в том случае, когда выполняется попытка сохранить объект (элемент или группу справочника, плана видов характеристик и т.п.) с кодом, который уже имеется в информационной базе. В большинстве случаев при интерактивной работе, достаточно изменить код объекта вручную (увеличив на единицу) и попытаться сохранить его снова.
Но есть особые случаи, когда такой способ решения проблемы не поможет: например, когда диапазон номеров, выделенных для данного справочника, закончился. В этом случае текст ошибки будет выглядеть так: «Значение 999 поля код не уникально». В этом случае рекомендуется выполнить следующие действия:
- Попытаться высвободить свободные коды, удалив помеченные на удаление объекты;
- Затем, выполнить процедуру перенумерации объектов (справочника, плана видов характеристик и т.п.) и вызвать программно метод ОбновитьНумерациюОбъектов() для проблемного объекта метаданных;
- Если не помогло, увеличить в конфигураторе длину кода объекта метаданных (справочника, плана видов характеристик и т.п.) и также программно вызвать метод ОбновитьНумерациюОбъектов() для проблемного объекта метаданных;
Поделиться страницей в соц.сетях
Попробуем разобраться, почему появляется и как исправить ошибку: значение поля Код не уникально при обновлении 1С 8.3 (разновидности ошибки могут быть со значениями 002024, 002071 либо другими).
Она появляется когда мы создадим новый документ в 1с 8.3. Cистема присваивает новое значение элементу в автоматически, то есть в режиме автонумерации.
При этом, она не позволяет произвести сохранение объекта. Причина кроется в ошибочной нумерации в справочнике. Такая ситуация возникает в момент, когда пользователь, в ручном режиме, пытается отредактировать поле «Код» в элементах справочника.
Справочник в 1С имеет определенный принцип собственной нумерации. Код состоит из числового префикса предшествующего элемента на единицу больше. Представим, что код справочника представляет собой четыре цифры. Во всех элементах ставится префикс «А». Оставшиеся три символа отданы под числа, являющиеся составной частью кода.
В случае, если вручную элементу справочника будет присвоено значение «А999», при попытке создания следующего элемента отобразится ошибка «значение 999 поля код не является уникальным».
Причина заключается в том, что система пытается прибавить единицу к числу 999, но для получающегося в результате прибавления значения «А1000» не достает разрядов.
Данный вид ошибки может проявиться не сразу. Например, пользователь создал значение «А985». В таком случае, сообщение об не уникальном коде появиться на пятнадцатом по счету элементе, после упомянутого.
Решение проблемы заключается в поиске ошибочно пронумерованного элемента и исправления его на адекватный. Этот способ подразумевает смену нумерации кода и у всех последующих за ним элементов.
Упростить задачу, можно используя автоматическую обработку справочника, исправляющую коды нужных элементов, об этом ниже.
Наши постоянные клиенты по 1С:
Как починить?
Для устранения используем обработку вида «УниверсальныеПодборкиИОбработкаОбъектов» (нужен диск ИТС).
Выберем вкладку «Перенумерация объектов». Нужно указывается наименование настройки и стартовое значени, с которого нужно нумеровать. Нажать «Выполнить» и запустить обработки нумерации. Все должно работать!
Если все же ошибку устранить не получается — звоните мы поможем!
- Стоимость работ специалистов IT Rush — 2000 руб./час
- Абонемент от 50 часов в месяц – 1900 руб./час
- Абонемент от 100 часов в месяц – 1800 руб./час
Нам доверяют:
Такая ошибка возникает при добавлении нового элемента справочника, система автоматически присваивает элементу новый “Код”, но не дает сохранить объект.
Причиной является неправильная нумерация в справочнике. Происходит это когда пользователи вручную редактирует поле “Код” в элементах справочника.
Принцип нумерации справочника в 1С такой:
Код = Префикс+числовой код предыдущего элемента + 1.
Допустим код справочника состоит из 4-х символов, есть префикс “А” — он ставиться во всех элементах, остальные 3 знака используются под числовую составляющую кода. Если пользователь изменит код любого элемента справочника на “А999”, то при создании следующего элемента возникнет ошибка Значение поля “Код” не уникально, потому что система пытается прибавить к числовой составляющей кода единица, но разрядов для создания элемента с кодом А1000 не хватает. Такого рода ошибки могут всплыть не сразу, например если пользователь изменить код какого нибудь элемента на А990, то не уникальный код появится на десятом созданном впоследствии элементе.
Решить проблему можно, либо найдя неверно пронумерованный элемент и исправив его “Код” на корректный(а также перенумеровав все созданные после него элементы), либо если вручную эту работу проделать невозможно, то можно воспользоваться обработкой УниверсальныеПодборИОбработкаОбъектов (скачать можно по ссылке), при помощи нее перенумеровав все элементы справочника
+3
Значение поля Код не уникально или Значение поля Номер не уникально
При работе в 1С, особенно когда много документов или номера редактируются ручками, можно получить ошибки вида:
Значение поля «Код» не уникально или Значение поля «Номер» не уникально
Что делать? Перенумеровывать
Нужно восстановить нумерацию документов или элементов справочника:
Пользователю
Посмотрите: Перенумерация документов, справочников, и сама Обработка Универсальные подбор и обработка объектов
Сбилась автонумерация у документа или справочника с текстовым кодом, что делать?
Программисту:
Посмотрите примеры выше и дополнительно: Как сбросить счётчик нумерации документов или справочников
В модуле ПередЗаписью() дописать функционал проверки:
Код 1C v 8.х
…
//Проверим текущий номер документа и установим новый если он занят
Если НомерЗанят(Номер) Тогда
УстановитьНовыйНомер();
КонецЕсли;
//функция НомерЗанят() по функционалу очень проста
// в вашей ситуации возможно ее придется изменить
Функция НомерЗанят(НомерДока)
Результат = Ложь;
Попытка
Запрос = Новый Запрос;
Запрос.Текст = «ВЫБРАТЬ
| Документ_.Номер
|ИЗ
| Документ.Документ КАК Документ_
|ГДЕ
| Документ_.Номер =НомерДока
| И Не Документ_.Ссылка =ТекДок»;
Запрос.УстановитьПараметр(«НомерДока», НомерДока);
Запрос.УстановитьПараметр(«ТекДок», Ссылка);
Результат = не Запрос.Выполнить().Пустой();
Исключение
КонецПопытки;
возврат Результат;
КонецФункции //НомерЗанят()
bebibo
02.02.22
✎
14:17
Всем привет!
Есть рабочая серверная база. Снимаю с неё копию и загружаю в серверную тестовую базу.
При создании ЛЮБОГО документа в тестовой базе возникает ошибка Значение поля «Код» не уникально. В рабочую захожу — всё работает хорошо — ошибок нет. Как такое может быть?
Временные файлы удаляли, тестирование и исправление делали
lubitelxml
02.02.22
✎
14:18
ОбновитьНумерациюОбъектов делали?
shuhard
02.02.22
✎
14:19
(0)[Как такое может быть? ] легко
ты же нумерацию объектов не сбросил
pechkin
02.02.22
✎
14:19
(1) когда же наконец в бсп встроят
ДенисЧ
02.02.22
✎
14:23
(3) А зачем? Я, например, у себя во всех конфигурациях сам вставил…
acht
02.02.22
✎
14:29
(3) Когда оно в режиме разделения данных работать научится
pechkin
02.02.22
✎
14:31
(4) там можно дойти до того вообще все с 0 писать
1Сергей
02.02.22
✎
14:51
(4) по расписанию бахает?
ДенисЧ
02.02.22
✎
14:53
(7) При старте проверяет, что это копия и тогда бахает.
1Сергей
02.02.22
✎
14:56
(8) у меня очень редко, но в боевой базе слетает нумерация
ДенисЧ
02.02.22
✎
15:04
(9) Ну если очень редко — то можно и руками ткнуть.
bebibo
02.02.22
✎
15:07
(1) Делали, помогло. Но слетели все документы. Интересно почему просто…
Chai Nic
02.02.22
✎
15:10
Как вообще можно «обновлять нумерацию» просто так, если номер документа — это значимый и где-то важный реквизит? А первичку бумажную тоже перепечатывать при этом? Хрень какая-то. Вообще, в восьмерке и к номеру и к дате какое-то неадекватно расслабленное отношение. Например, время документа может двигаться само по себе при проведении, для обеспечения последовательности.
bebibo
02.02.22
✎
15:14
Проблема решилась. Кому интересно: перед загрузкой в тестовую базу (она была не пустая), её удаляем и заново создаем и только после этого грузим бэкап. Видимо где то там в таблицах сохранился кэш..КОроче в пустую базу надо грузить, чтобы такой фигни не было
ДенисЧ
02.02.22
✎
15:15
(12) Обновление нумерации — это не перенумерация. Это сброс счётчика номеров и установка его на последний использованный номер.
Garikk
02.02.22
✎
15:20
(13) это черещ sql бекап грузишь и так получается?
Lama12
02.02.22
✎
15:24
(15) Скорее всего на сервере приложений кэш не чистили. А удаление базы чистит серверных кэш.
1Сергей
02.02.22
✎
15:31
(16) +1
(14) +1
(11) Что значит «слетели все документы»?
bebibo
02.02.22
✎
15:41
(15) Да
bebibo
02.02.22
✎
15:42
(17) НУмерация то есть слетела, у всех документов
acht
02.02.22
✎
15:56
(13) Нет там никакого «кэша»…
Информация о текущем состоянии нумераторов (как и о автоматических блокировках) хранится в потрохах сервера приложений, ни в каком не в «кэшэ». И сервер приложений про то, что через восстановление из бэкапа у него увели одну SQL базу и подсунули другую, вообще не в курсе. Вызов обновления сбрасывает состояние нумераторов, заставляя перечитывать данны из базы.
А когда вы базу добавляете/удаляете, она считается новой, соответственно никакого состояния нумераторов для этой базы нет.
Chai Nic
02.02.22
✎
15:59
(14) А, понял, пардон
Garikk
02.02.22
✎
16:00
(20) < хранится в потрохах сервера приложений, ни в каком не в «кэшэ».>
как бы странно это не звучало, но вы как раз это и описали, ‘потроха сервера’ и есть кэш относительно БД
Garikk
02.02.22
✎
16:02
и он должен лежать гдето физически в т.ч., чтобы если провод из розетки выдернули у сервера, у нумераторов кукушка не уехала сразу после включения
вообще интересно, в (0) <Временные файлы удаляли>
так откуда сервер продолжает об этом помнить если его рестартили? или удалили кэш без рестарта службы?
===
я мож чёто уже забыл…давно не трогал одинесину
acht
02.02.22
✎
16:34
(22) > и есть кэш
Нет. Эти данные, хотя и могут быть сброшены на диск в ходе работы, но при рестарте сервера они не перечитываются, а создаются заново по текущему состоянию SQL базы.
acht
02.02.22
✎
16:37
(23) > если провод из розетки выдернули у сервера
То от него отваливаются все сеансы.
И информация о том, что номер 123 был зарезервирован за РН сеанса №5, становится бессмысленной.