Иногда вследствие ручной правки номера документа или кода справочника или после обменов с распределенными информационными базами в 1С нарушается автонумерация.

Вы можете написать код перенумерации или воспользоваться какой-либо обработкой, но иногда, даже после этого номер генерируется опять не верный.

Система «кэширует» последний выделенный номер. 

Для того, чтобы обнулить этот кэш существует функция ОбновитьНумерациюОбъектов.

  • После вызова объекты с номерами становятся невалидными, т.е. в момент записи, если этот номер уже был выдан, но не записан выйдет ошибка контроля уникальности.
  • Для уже записанных документов, ничем не грозит — их номера останутся прежними, даже если они не уникальные. 
  • Название функции дает неверное толкование, никакого обновления не происходит.
  • Вызов допустим либо на сервере, либо в режиме толстого клиента
  • Права требуется Полные» или «Административные»

Использование ОбновитьНумерациюОбъектов

ОбновитьНумерациюОбъектов(Метаданные.Документы.ПоступлениеТоваровУслуг);//Один вид документа

МассивМета = Новый Массив;

МассивМета.Добавить(Метаданные.Документы.ПоступлениеТоваровУслуг);

МассивМета.Добавить(Метаданные.Документы.РеализацияТоваровУслуг);

ОбновитьНумерациюОбъектов(МассивМета);//Несколько видов

ОбновитьНумерациюОбъектов();//Все объекты системы, не рекомендуется такой вызов

Еще одной причиной неверной нумерации может быть подписки события ПриУстановкеНовогоНомера, если в них заложен какой-то альтернативный алгоритм установки номера, например: добавление префикса узла, организации, склада.

Как проверить ?

  • Найти вызовы функций начинающихся с»ДобавитьПрефикс» или вызов метода объекта УстановитьНовыйНомер()
  • Перебрать все подписки в конфигурации

Код перенумерации одного вида документа

  • Написано  для ситуации, когда нумерация у клиента ежемесячно начинается с 0.
  • Выполняется без контроля уникальности (Объект.ОбменДанными.Загрузка = Истина)
  • Без промежуточных перенумераций (обычно обработки сначала меняют нумерацию на другой префикс, а затем вызывают стандартный УстановитьНовыйНомер(«»), получается аналогично, но дольше.
  • В конце можно вызывать ОбновитьНумерациюОбъектов(Метаданные.Документы.ПоступлениеТоваровУслуг); (в монопольном режиме не обязательно)

НачатьС = 1;
Префикс ="10-";
ПолнаяДлинаНомера = 8;
НачПериода = Дата(2016,10,1);
КонПериода = Дата(2016,10,31);

ТекНомер = НачатьС;
ДлинаНомера = ПолнаяДлинаНомера -СтрДлина(Префикс);
Док = Документы.ПоступлениеТоваровУслуг.Выбрать(НачПериода,КонецДня(КонПериода));
Счетчик = 0;
Пока Док.Следующий() Цикл
Объект = Док.ПолучитьОбъект();
НомерНовый = префикс+Прав("000000000000"+формат(ТекНомер,"ЧГ="),ДлинаНомера);
Если не Лев(Объект.Номер,ПолнаяДлинаНомера) = НомерНовый Тогда
Объект.Номер = НомерНовый;

Объект.ОбменДанными.Загрузка = Истина;
Объект.Записать();
Счетчик = Счетчик+1;
КонецЕсли;
ТекНомер = ТекНомер+1;

КонецЦикла;
Сообщить("Выполнено замен "+Счетчик);

Впервые в истории планеты Земля все люди во всех странах задались единой целью: заработать столько денег, чтобы уподобиться героям рекламы.

— Фредерик Бегбедер