Сбросить счётчик нумерации документов или справочников в 1С
Иногда вследствие ручной правки номера документа или кода справочника или после обменов с распределенными информационными базами в 1С нарушается автонумерация.
Вы можете написать код перенумерации или воспользоваться какой-либо обработкой, но иногда, даже после этого номер генерируется опять не верный.
Система «кэширует» последний выделенный номер.
Для того, чтобы обнулить этот кэш существует функция ОбновитьНумерациюОбъектов.
- После вызова объекты с номерами становятся невалидными, т.е. в момент записи, если этот номер уже был выдан, но не записан выйдет ошибка контроля уникальности.
- Для уже записанных документов, ничем не грозит — их номера останутся прежними, даже если они не уникальные.
- Название функции дает неверное толкование, никакого обновления не происходит.
- Вызов допустим либо на сервере, либо в режиме толстого клиента
- Права требуется Полные» или «Административные»
Использование ОбновитьНумерациюОбъектов
ОбновитьНумерациюОбъектов(Метаданные.Документы.ПоступлениеТоваровУслуг);//Один вид документа
МассивМета = Новый Массив;
ОбновитьНумерациюОбъектов();//Все объекты системы, не рекомендуется такой вызов
Еще одной причиной неверной нумерации может быть подписки события ПриУстановкеНовогоНомера, если в них заложен какой-то альтернативный алгоритм установки номера, например: добавление префикса узла, организации, склада.
Как проверить ?
- Найти вызовы функций начинающихся с»ДобавитьПрефикс» или вызов метода объекта УстановитьНовыйНомер()
- Перебрать все подписки в конфигурации
Код перенумерации одного вида документа
- Написано для ситуации, когда нумерация у клиента ежемесячно начинается с 0.
- Выполняется без контроля уникальности (Объект.ОбменДанными.Загрузка = Истина)
- Без промежуточных перенумераций (обычно обработки сначала меняют нумерацию на другой префикс, а затем вызывают стандартный УстановитьНовыйНомер(«»), получается аналогично, но дольше.
- В конце можно вызывать ОбновитьНумерациюОбъектов(Метаданные.Документы.ПоступлениеТоваровУслуг); (в монопольном режиме не обязательно)
НачатьС = 1;
Префикс =»10-«;
ПолнаяДлинаНомера = 8;
НачПериода = Дата(2016,10,1);
КонПериода = Дата(2016,10,31);
ТекНомер = НачатьС;
ДлинаНомера = ПолнаяДлинаНомера -СтрДлина(Префикс);
Док = Документы.ПоступлениеТоваровУслуг.Выбрать(НачПериода,КонецДня(КонПериода));
Счетчик = 0;
Пока Док.Следующий() Цикл
Объект = Док.ПолучитьОбъект();
НомерНовый = префикс+Прав(«000000000000″+формат(ТекНомер,»ЧГ Выполнено замен «+Счетчик);
Реклама — это когда изо всех сил колотят палкой по днищу пустой кастрюли.
— Джордж Оруэлл
Как сбросить счётчик нумерации документов или справочников
Тип:
Массив; Объекты метаданных. Объект метаданного или массив объектов метаданных, для объектов которого будет выполнено обновление. Если значение параметра не указано, то обновление будет выполнено для всех типов объектов.
Описание:
Выполняет обновление номеров в соответствии с номерами, записанными в базе данных. После вызова данного метода все выданные, но не записанные номера, становятся невалидными, т.к. не гарантируется их уникальность. Данный метод разрешено вызывать только администратору системы.
Доступность:
Сервер, толстый клиент, внешнее соединение
Пример:
Код 1C v 8.х

//Обновим нумерацию у документа Реализация товаров и услуг
ОбновитьНумерациюОбъектов(Метаданные.Документы.РеализацияТоваровУслуг)
// другие примеры:
ОбновитьНумерациюОбъектов(Метаданные.Документы.ОтчетПроизводстваЗаСмену);
ОбновитьНумерациюОбъектов(Метаданные.Документы.ТребованиеНакладная);
ОбновитьНумерациюОбъектов(Метаданные.Документы.ПриходныйКассовыйОрдер);
ОбновитьНумерациюОбъектов(Метаданные.Документы.РасходныйКассовыйОрдер);
ОбновитьНумерациюОбъектов(Метаданные.Справочники.Номенклатура);
ОбновитьНумерациюОбъектов(Метаданные.Справочники.Абонементы);
Сброс неверной нумерации объектов
Как-то на работе возникла проблема с нумерацией документов. Пользователь ввёл номер нового документа вручную, причём вместо «000000675» указал «00_000675». После этого все последующие документы стали нумероваться с префиксом «00_». При этом ни банальное пересохранение объекта с номером «правильного» формата, ни пометка на удаление, ни удаление его из базы не помогли исправить ситуацию. Пришлось разбираться с механизмом автонумерации 1С.
Прежде всего я, естественно, обратился к ресурсам ИТС (благо фирма предоставляет такую возможность). Максимум, что я смог найти по своей тематике, — это две статьи Автонумерация и Особенности работы механизма автонумерации. Данные в них, мягко говоря, не свежие и где-то даже противоречащие реальности (например, там утверждается, что для восстановления нумерации достаточно удалить объекты), но общие представления о механизме дают. Из них стало понятно, что одним из решений вставшей проблемы является установка настройки конфигурации «Режим автонумерации объектов» в значение «Освобождать автоматически». Но, во-первых, это неприменимо в случае использования типовой конфигурации «на поддержке», а, во-вторых, противоречит продвигаемому 1С «новому» режиму нумерации. Поэтому я продолжил рыть дальше.
Как выяснилось, типовых механизмов работы с автонумерацией , как-то обработки, отчёты и прочее, нет. Но, слава Нуралиеву, нам предоставили методы встроенного языка: ОбновитьНумерациюОбъектов, УстановитьНовыйКод и УстановитьНовыйНомер.
ОбновитьНумерациюОбъектов, согласно СП, «выполняет обновление номеров в соответствии с номерами, записанными в базе данных. После вызова данного метода все выданные, но не записанные номера, становятся невалидными, т.к. не гарантируется их уникальность.» Соотнеся это описание со статьями по этой тематике и тестовыми данными, становится понятно, что в базе хранится таблица выданных номеров, которые независимо от того, существуют объекты, для которых они были записаны в таблицу или нет, повторно быть выданы уже не могут, если не осуществить «сброс». Как раз процедура ОбновитьНумерациюОбъектов и применяется для «выправления» нумерации объектов. Главное, перед запуском не забудьте удалить из базы объекты с «неправильными» номерами. Это может быть как реальное удаление, так и перезапись их с предварительным присвоением «правильных» номеров.
В принципе, умения использовать вышеуказанную процедуру достаточно, чтобы, в случае необходимости, выправить нумерацию, но хочется упомянуть ещё о «максимальном номере». Под «максимальным номером» я подразумеваю номер, исходя из значения которого система выдаёт следующее значение. Как пример его знание необходимо, чтобы определить, выправлена ли нумерация или нет.
В 1С нет возможности напрямую получить текущий максимальный номер объекта метаданных. Решить эту проблему можно двумя способами:
- использовать запрос;
- получить следующий номер, используя методы УстановитьНовыйКод или УстановитьНовыйНомер .
При формировании запроса система считывает данные базы данных. Можно отсортировать объекты по коду/номеру по убыванию, т.о. верхним в списке окажется обладатель максимального номера. Тут существуют следующие «загвоздки»:
- результат не будет содержать данные о занятых номерах, а только о записанных ;
- сортировка не всегда выводит наверх «максимальные» с точки зрения системы номера (например, объект с номером «0_01» в результате запроса будет расположен ниже номера «0001», но при вводе нового объекта ему будет присвоен номер с префиксом «0_» ).
УстановитьНовыйКод и УстановитьНовыйНомер устанавливают код или номер соответственно и заносят это значение в таблицу номеров. При этом неважно, будет ли записан объект или нет, «максисальный номер» всё равно будет обновлён на выданный. Таким образом, если использовать эти методы для проверки, то после этого необходимо обновить нумерацию объектов.
К публикации прикреплена обработка обновления нумерации. В ней:
- кнопка «Обновить» запускает выполнение метода Обновить нумерацию объектов;
- список объектов содержит результат динамически формируемого запроса;
- на результат запроса накладывается отбор согласно свойствам объектов метаданных: по владельцу, родителю или периоду;
- поле «номер содержит» накладывает отбор на данные кода или номера;
- флаг в колонке «Макс.» указывает на то, какой номер на момент обновления будет считаться максимальным, все вышерасположенные объекты получат номер согласно указанному максимальному;
- при установке флага «Макс.» во всех вышерасположенных строках автоматически рассчитывается новый номер, но запись происходит только после нажатия кнопки «Обновить»;
- добавление объектов в список недоступно, но возможно ручное перераспределение строк, т.о. для выправления нумерации необходимо переместить объекты с номерами, требующими коррекции в позицию над строкой с установленным флагом «Макс.».
Буду рад комментариям и замечаниям.
Восстановить нумерацию документов
Столкнулся с пока нерешаемой проблемой. УТ11.4 кто-то случайно или намеренно поменял номер Был 11-значный фиксированный, стал 9-значным (и плевала 1С программа на отметку «фиксированная длина»). Когда-то сталкивался с таким и вопрос решился просто, поменял номер на нужный и следующий прибавляет 1 и присваивает как надо. Сейчас фигушки. Пара обработок и шаманство из примеров в интернете ни к чему не привели. Какой бы ни был последний номер, следующий 9-значный. Номер «предыдущий» не находится в базе, нет его. В регистре РеестрДокументов номера соответствуют правильным, новый номер — неверный, исправляем номер, в реестре исправленный, создаем новый док — опять 9-ти значный (тот же) и так до бесконечности
Может кто-то сталкивался или есть мысли по исправлению. Клиенту пока приходится вручную править
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Как Организовать Нумерацию Документов
Задача возникает, если организовать в одной базе учет нескольких фирм. Как тогда нумеровать.

Восстановить нумерацию по порядку после удаления записей
Друзья, всех приветствую! Никак не удаётся найти тему, где говориться о том, как восстановить.
есть ли возможность оптимизировать сквозную нумерацию различных документов word и excel?
Приветствую! В работе существует необходимость нумеровать большое количество файлов word и excel.
Отбор по банковскому счету документов в журнале документов (банковская выписка)
Добрый день! Подскажите, пож, как правильно написать код для отбора по банковскому счету документов.
61 / 39 / 24
Регистрация: 24.09.2017
Сообщений: 170
ОбновитьНумерациюОбъектов(Метаданные.Документы.НазваниеМоегоДукумента)
2017 / 1388 / 494
Регистрация: 16.01.2015
Сообщений: 5,987
volodya334455, Раз надцать выполнил. Это как раз
Сообщение от polax 
и шаманство из примеров в интернете ни к чему не привели
КАК делать начитался, беда в том, что ни один метод не работает. Вопрос к тем кто ДЕЛАЛ и СДЕЛАЛ
61 / 39 / 24
Регистрация: 24.09.2017
Сообщений: 170
1. всетаки в пределах года (или какая там периодичность документа) есть 9-ти значный номер документа в базе
2. Обновить нумерацию нужно под правами пользователя с админскими правами на 1С, и когда в базе нет ни единого пользователя
3. может програмно написанная своя нумерация, и последний «максимальный» номер где-то хранится (например в константах)
2017 / 1388 / 494
Регистрация: 16.01.2015
Сообщений: 5,987
Сообщение от volodya334455 
1. всетаки в пределах года (или какая там периодичность документа) есть 9-ти значный номер документа в базе
Самый логический вывод. Прошерстил все! Нет такого документа!
Сообщение от volodya334455 
2. Обновить нумерацию нужно под правами пользователя с админскими правами на 1С, и когда в базе нет ни единого пользователя
Условие выполнено, не работает
Сообщение от volodya334455 
3. может програмно написанная своя нумерация, и последний «максимальный» номер где-то хранится (например в константах)
Изначально база сопровождалась мною. Нет программной нумерации. Константы сейчас проверил (мало ли не знаю что-то). Не нашел типовой (нетиповой быть не может, никто не вмешивался в базу кроме меня)
![]()
3768 / 2951 / 586
Регистрация: 10.03.2011
Сообщений: 11,619
Записей в блоге: 1
polax, база на SQL ?
Добавлено через 1 минуту
там где-то есть табличка где хранятся эти самые номера, откуда 1С и берет последний номер
Добавлено через 4 минуты
с ИТСа
Восстановление при ошибочно введенном максимальном номере
Механизм автонумерации имеет возможности по восстановлению максимального номера после исправления или удаления неверно введенного максимального номера. Например, имеем текущий максимальный номер АА001, пользователь при вводе документа ошибся и явно ввел номер ААБСД. После этого автонумератор запомнил введенный номер и перестал выдавать корректные номера, все время выдавая номер ААБСД. Пользователь исправил неправильно введенный номер документа на АА002. Поcле этого автонумератор стал выдавать правильные номера — АА003, АА004. Альтернативой исправлению может быть удаление объекта с неверно введенным номером.
Данная возможность избавляет пользователя от проблем, связанных с остановкой сервера или вызовом функции ОбновитьНумерациюОбъектов, которые были необходимы ранее для восстановления нумерации объектов.
- После изменения/удаления номера определенного объекта (в момент записи/удаления) автонумератор определяет, нужно ли сбрасывать максимальный номер.
- Номер нужно сбрасывать, если номер, который изменили/удалили, являлся максимальным записанным номером по данному пространству номеров и не открыта ни одна транзакция, получившая или установившая номера по данному пространству номеров.
- Если номер нужно сбрасывать, то автонумератор обновляет для данного пространства номеров нумерацию объектов, получая тем самым номер, который стал максимальным после изменения/удаления текущего номера. После обновления все возвращаемые для переиспользования номера больше максимального игнорируются.
- Если после ошибочно введенного номера были получены и записаны другие номера, то нужно исправить/удалить их все (включая ошибочно введенный). После этого нумерация по данному пространству номеров будет восстановлена.
Рассмотрим, как работает механизм автонумерации при первом получении номера, при очередном получении номера, при явной установке номера, при удалении объекта, при изменении реквизитов объекта, касающихся автонумерации, а также при фиксации и откате транзакции.
При первом получении номера по определенному пространству номеров и префиксу выполняется неблокирующее чтение максимального номера из базы данных, т. е. механизм автонумерации использует базу данных для получения максимального номера по определенному пространству номеров и префиксу только один раз.
При последующих попытках получить очередной номер механизм автонумерации использует свободные номера, а также максимальный номер по данному пространству номеров и префиксу, как было описано ранее.
При явной установке номера механизм автонумерации увеличивает максимальный номер, если явно устанавливаемый номер больше максимального, и блокирует все свободные номера меньше явно устанавливаемого номера. Блокированные свободные номера не используются при получении очередного номера. При явной установке номера префикс не указывается, поэтому механизм автонумерации использует уже выданные номера для определения префикса. Для этого по всем префиксам пространства номеров ищется, подходит ли явно устанавливаемый номер под префикс. Если да, то найденный префикс используется при явной установке номера (таких префиксов может быть несколько). Следствием этого алгоритма является то, что явная установка номера может повлиять на выдачу номеров по нескольким префиксам. Например, по префиксу 00 мы получили номер 001, далее по префиксу 0 мы получили номер 002, далее мы установили номер 005, по префиксу 0 будет получен номер 006, а по префиксу 00 будет получен номер 007, т. к. префиксы 0 и 00 являются зависимыми.
При удалении объекта автонумератор уведомляется об этом факте с тем, чтобы если максимальный номер по пространству номеров (или нескольким пространствам номеров), соответствующему удаляемому номеру, еще не был загружен, учесть факт наличия удаляемого номера при загрузке максимального номера.
Некоторые реквизиты объекта могут неявно влиять на номер. Так, например, владелец и родитель справочника, родитель плана вида характеристик, дата документа или бизнес-процесса участвуют в формировании пространства номеров, в рамках которого выдается номер объекта. Их изменение неявно приводит к изменению пространства номеров объекта и эквивалентно тому, как автонумератор реагирует на явную установку номера. Например, имеем справочник с нумерацией в пределах подчинения. Имеем элемент справочника с номером 001, который находится в группе 001. При переносе элемента справочника в группу с номером 002 механизм автонумерации возвращает номер 001 по пространству номеров родителя 001 и выполняет действия по явной установке номера 001 в пространстве номеров родителя 002.
При фиксации транзакции блокированные свободные номера удаляются из списка свободных, а при откате транзакции разблокируются и снова могут использоваться для получения очередного номера.
