1с уриб не работает автонумерация

Обновлено: 02.07.2024

Автонумерация

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

Что такое автонумерация и зачем она нужна?

Автоматическая нумерация элементов справочников позволяет устанавливать во вновь создаваемых элементах уникальные коды. При этом создаваемые коды элементов последовательно увеличиваются.

Формирование нового уникального кода справочника зависит от того, как у справочника настроены серии кодов:

  • во всем справочнике - в процессе формирования нового кода для элемента справочника будет сформирован код, уникальный во всем справочнике;
  • в пределах подчинения - в процессе формирования нового кода для элемента справочника будет сформирован код, уникальный в пределах иерархии элемента (элементы, имеющие одного и того же родителя будут иметь различные коды, элементы, имеющие разных родителей могут иметь одинаковые коды);
  • в пределах подчинения владельцу - в процессе формирования нового кода для элемента справочника будет сформирован код, уникальный в пределах подчинения (элементы, имеющие одного и того же владельца будут иметь различные коды; элементы, имеющие различных владельцев могут иметь одинаковые коды).

Последовательное увеличение кодов элементов справочника в процессе автонумерации будет происходить таким образом, чтобы создаваемый код справочника соответствовал настройке серии кодов.

Рассмотрим пример. Пусть есть справочник: иерархический, иерархия элементов, серии кодов - в пределах подчинения, автонумерация - включена.

Добавим в справочник первый элемент:

На рисунке видно, что автоматическая нумерация элементов справочника началась с 000001.

Добавим в справочник второй элемент:

Добавим в него еще один элемент, который будет дочерним для второго элемента:

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

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

Обеспечить правильную сортировку, например, документов по их номеру без использования лидирующих нулей невозможно. Например, пусть у нас есть документы со строковыми номерами "Док11" и "Док3". В этом случае документ с номером "Док3" будет идти после документа с номером "Док11", что неправильно.

Работа с префиксом кода справочника в процессе автонумерации

Установка префикса при формировании нового номера кода элемента имеет смысл только в том случае, если код элемента является строкой.

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

ПриУстановкеНовогоКода(<Стандартная обработка>, <Префикс>),

  • <Стандартная обработка> - признак выполнения стандартной (системной) обработки события. Если в теле процедуры-обработчика установить данному параметру значение Ложь, стандартная генерация нового кода производиться не будет;
  • <Префикс> - префикс, который будет использоваться для генерации кода.

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

// Процедура обработчик события ПриУстановкеНовогоКода
// Подменяет префикс кода на предопределенный для данной ИБ
//
Процедура ПриУстановкеНовогоКода(СтандартнаяОбработка, Префикс)

КонецПроцедуры // ПриУстановкеНовогоКода(СтандартнаяОбработка, Префикс)

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

// Выдает префикс нового номера
//
// Возвращаемое значение:
// Строка – Префикс нового номера
//
Функция ПолучитьПрефиксНомера() Экспорт

Наряду с использованием обработчика события При установке нового кода можно использовать метод объекта справочника УстановитьНовыйКод() . В параметре метода может быть передан нужный префикс - в этом случае среди кодов, имеющих данный префикс, будет найден максимальный, и новый код будет установлен как следующий от найденного максимального. Если префикс опущен - будет найден имеющийся максимальный код и новый код будет получен за счет увеличения правой числовой части найденного максимального. Нечисловая часть будет оставлена без изменений.

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

Поддержка автонумерации другими объектами метаданных

Кроме справочника, автонумерацию поддерживают следующие объекты метаданных:

  • Документ;
  • План видов характеристик;
  • Бизнес-процесс;
  • Задача.

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

Для плана видов характеристик установку нового кода можно обработать в обработчике события При установке нового кода .

Особенности работы механизма автонумерации

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

В "1С:Предприятии 8.1" реализован специальный менеджер автонумерации, который отвечает за выдачу номеров. Использование менеджера автонумерации позволяет существенно повысить параллельность работы за счет отсутствия блокировок базы данных.

Существуют две возможные стратегии нумерации для разных категорий объектов:

  • для объектов, требующих непрерывной нумерации, - нумерация при записи с поддержкой заполнения пропусков в нумерации, образующихся при откатах транзакций;
  • для объектов, не требующих непрерывной нумерации, - нумерация при открытии формы, но без какого-либо переиспользования номеров.

Режимы автонумерации

Механизм автонумерации позволяет работать в двух режимах: в режиме с возвратом неиспользованных номеров и в режиме без возврата неиспользованных номеров. Режим устанавливается свойством объекта метаданных "Конфигурация" РежимАвтонумерацииОбъектов .

  • Значение данного свойства ОсвобождатьАвтоматически проставляется для ранее созданных конфигураций и используется для обеспечения режима работы нумерации, аналогичного версии 8.0. Полученные автоматически номера и коды будут в дальнейшем использоваться, если объект, для которого они получены, не записан. Этот вариант предполагается использовать для конфигураций, разработанных для версии 8.0 и использующихся в версии 8.1 без изменений.
  • Значение данного свойства НеОсвобождатьАвтоматически используется для поддержки нового режима работы с нумерацией, реализованного в версии 8.1. Этот вариант предполагается использовать для конфигураций, в которых для объектов, требующих непрерывной нумерации, будет реализована нумерация при записи, а не при открытии формы.

Свойство Автонумерация формы объекта (элемента справочника, документа. ) отвечает за автоматическое получение номера при открытии формы. Если в этом свойстве указано значение НеИспользовать, это означает, что при открытии формы номер будет не заполнен и он будет получен автоматически при записи объекта.

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

  • для объектов, требующих непрерывной нумерации, - РежимАвтонумерацииОбъектов = НеОсвобождатьАвтоматически, Автонумерация = НеИспользовать ;
  • для объектов, не требующих непрерывной нумерации, - РежимАвтонумерацииОбъектов = НеОсвобождатьАвтоматически, Автонумерация = Авто;
  • для работы механизма автонумерации аналогично версии 8.0 - РежимАвтонумерацииОбъектов = ОсвобождатьАвтоматически , Автонумерация = Авто .

Особенности хранения номеров и использования префиксов

Механизм автонумерации выдает номера в разрезе пространств номеров и префиксов. Пространство номера в зависимости от типа объекта может содержать метаданные, владельца, период и др. В пределах пространства номеров номер выдается в разрезе префиксов. По каждому префиксу хранится максимальный выданный номер, на основании которого выдается следующий номер. Один и тот же максимальный номер может соответствовать нескольким префиксам.

Например, в БД хранится максимальный номер 001. Мы получили очередной номер по префиксу 0, нам вернули 002. Далее мы получили очередной номер по префиксу 00, нам вернули номер 003, т. к. в этом случае максимальный номер соответствует обоим префиксам. Механизм автонумерации учитывает этот факт и изменяет максимальный номер зависимых префиксов соответствующим образом. Следует отметить, что на максимальный номер, соответствующий пустому префиксу, влияет изменение максимального номера по любому префиксу, если он превышает максимальный номер по пустому префиксу. Например, мы по пустому префиксу получили номер 001, далее по префиксу 0 получили номер 002, далее по префиксу А получили номер А01, далее по пустому префиксу получили номер А02, т. к. максимальный номер по пустому префиксу соответствует наибольшему из максимальных выданных номеров.

В режиме автоматического возврата номеров механизм автонумерации по каждому пространству номеров и префиксу хранит список свободных номеров. Номер становится свободным, если он не записан в базу данных, а объект был удален из памяти или после автоматического получения номера номер был установлен явно. Под явной установкой номера подразумеваем любое изменение номера объекта, не связанное с его автоматическим получением. Это может быть программная установка номера через свойство объекта Номер или Код (в зависимости от типа объекта) или заполнение номера в форме объекта вручную. Номер может стать свободным также при откате транзакции.

При получении очередного номера механизм автонумерации сначала ищет свободный номер. Если номер найден, то он удаляется из списка свободных и выдается объекту. Если номер не найден, выполняется увеличение максимального номера и полученный номер выдается объекту. Свободные номера хранятся до перезапуска сервера для серверных информационных баз и до момента закрытия последнего клиентского приложения, работающего с данной информационной базой, для файловых информационных баз. Если необходимо, чтобы номер переиспользовался только в пределах заданного периода (день, месяц), то нужно явно установить номер, больший максимального номера по данному пространству номеров и префиксу. Тогда механизм автонумерации удалит все свободные номера меньше устанавливаемого, и следующий номер будет получен от установленного.

Работа автонумерации в различных режимах

Рассмотрим, как работает механизм автонумерации при первом получении номера, при очередном получении номера, при явной установке номера, при удалении объекта, при изменении реквизитов объекта, касающихся автонумерации, а также при фиксации и откате транзакции.

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

При последующих попытках получить очередной номер механизм автонумерации использует свободные номера, а также максимальный номер по данному пространству номеров и префиксу, как было описано ранее.

При явной установке номера механизм автонумерации увеличивает максимальный номер, если явно устанавливаемый номер больше максимального, и блокирует все свободные номера меньше явно устанавливаемого номера. Блокированные свободные номера не используются при получении очередного номера. При явной установке номера префикс не указывается, поэтому механизм автонумерации использует уже выданные номера для определения префикса. Для этого по всем префиксам пространства номеров ищется, подходит ли явно устанавливаемый номер под префикс. Если да, то найденный префикс используется при явной установке номера (таких префиксов может быть несколько). Следствием этого алгоритма является то, что явная установка номера может повлиять на выдачу номеров по нескольким префиксам. Например, по префиксу 00 мы получили номер 001, далее по префиксу 0 мы получили номер 002, далее мы установили номер 005, по префиксу 0 будет получен номер 006, а по префиксу 00 будет получен номер 007, т. к. префиксы 0 и 00 являются зависимыми.

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

Некоторые реквизиты объекта могут неявно влиять на номер. Так, например, владелец и родитель справочника, родитель плана вида характеристик, дата документа или бизнес-процесса участвуют в формировании пространства номеров, в рамках которого выдается номер объекта. Их изменение неявно приводит к изменению пространства номеров объекта и эквивалентно тому, как автонумератор реагирует на явную установку номера. Например, имеем справочник с нумерацией в пределах подчинения. Имеем элемент справочника с номером 001, который находится в группе 001. При переносе элемента справочника в группу с номером 002 механизм автонумерации возвращает номер 001 по пространству номеров родителя 001 и выполняет действия по явной установке номера 001 в пространстве номеров родителя 002.

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

Восстановление при ошибочно введенном максимальном номере

Механизм автонумерации имеет возможности по восстановлению максимального номера после исправления или удаления неверно введенного максимального номера. Например, имеем текущий максимальный номер АА001, пользователь при вводе документа ошибся и явно ввел номер ААБСД. После этого автонумератор запомнил введенный номер и перестал выдавать корректные номера, все время выдавая номер ААБСД. Пользователь исправил неправильно введенный номер документа на АА002. Поcле этого автонумератор стал выдавать правильные номера - АА003, АА004. Альтернативой исправлению может быть удаление объекта с неверно введенным номером.

Данная возможность избавляет пользователя от проблем, связанных с остановкой сервера или вызовом функции ОбновитьНумерациюОбъектов , которые были необходимы ранее для восстановления нумерации объектов.

Принцип нумерации в программах 1С 8.3. Почему сбивается нумерация документов и договоров в 1С и какие эффективные способы отладки присвоения номеров в программе.

Отладка автоматической нумерации в программах 1С

Принцип автоматической нумерации в 1С 8.3

Каждый элемент, занесенный в систему 1С (независимо от того, это элемент справочника или документ), имеет свой номер. Каждый номер уникален и присваивается объекту автоматически. Автоматическая нумерация 1С 8.3 для документов может задаваться:

  • по типу документа;
  • по периоду (обычно, уникальные номера присваиваются единицам каталога в пределах года, как того требуют нормативные акты).

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

Присвоение идентификаторов осуществляется по порядку от самого короткого номера. Номер документа пользователь задает самостоятельно, при этом он не может изменить прификс базы данных. Например, если документ создается через бухгалтерию, то ему не изменяемый в дальнейшем присваивается префикс «БП».

Сбои автоматической нумерации, устранение неполадок

Автоматическая нумерация договоров 1с сбивается при ручном редактировании данных при создании документа. Вторая часть идентификатора состоит из шестизначного номера по умолчанию. Для примера: «00БП-000639». При создании следующего элемента пользователь вправе заменить не только номер документа, но и количество символов во второй части идентификатора документа/договора. К примеру, на «00БП-99». Логично, что следующим документом в этой последовательности будет файл с именем «00БП-100».

Однако, этого не случится, поскольку пользователь присвоил второй части имени двузначную нумерацию. Теперь ПО от 1С не сможет присваивать обозначения автоматически, а будет создавать новые файлы с одинаковым именем с «99» на конце, так это максимальное двузначное число. Это типичная ошибка пользователей 1С, приводящая к сбою нумерации.

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

Как восстановить автоматическую нумерацию в 1С

Для проверки и восстановления нумерации в 1С предусмотрено диагностическое средство под наименованием «Экспресс-проверка ведения учета». Минус инструмента в том, что он проверяет правильность последовательности идентификаторов только для счетов-фактур и кассовых документов.

Алгоритм использования «Экспресс-проверки»:

Инструмент «Экспресс-проверка» после диагностики самостоятельно предложит новый номер для проблемного файла. Рекомендуется принять это наименования для избежания дальнейших ошибок.

Второй способ того, как изменить нумерацию в 1с 8.3 автоматически – создание обработки. Нужно создать новую внешнюю обработку, включив в нее такие реквизиты:

  • Дата начала;
  • Дата окончания;
  • Начальный номер.

Если учет осуществляется по нескольким подведомственным организациям, то нужно добавить реквизиты «Организация» или «Префикс». Далее, нужно создать ряд серверных команд, делать это нужно с привлечение компетентного программиста.

Выглядеть это должно так.


Применение данной обработки выравнивает нумерацию

При создании нового документа система 1С использует встроенный механизм автонумерации объектов. Номера содержат заранее назначенную разработчиком длину и тип значения. Например, при использовании только численных значений – число, при использовании буквенных и численных значений – строка. В данной статье разберём исправление автонумерации документов в 1С.

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


Механизм автонумерации интуитивно понятен, но не лишён своих особенностей.

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

Под пространством имён подразумевается та область применения нумерации, в которой находится этот элемент.

Например: создаётся новый документ реализации, база проверяет последний максимальный номер среди всех реализаций, пусть он будет 000-000785, новому документу назначается номер 0000-000786. Если же создаётся новый документ в банковских выписках, то 1С уже анализирует весь журнал документов (и поступления на р/с и списания с р/с) на предмет максимального номера, так как у всех банковских выписок одно пространство имён.


Пространство имён не ограничивается подчинением единому журналу документов. Среди границ использования номеров выступают:

  1. Период, если задана периодичность использования номеров.

Например: у документа, введённого 31 декабря, номер ААБП-000456, следующий введённый документ уже следующим годом от 1 января будет иметь номер ААБП -000001, так как у документов по умолчанию периодичность задана в пределах года.


Например: последний документ, созданный до введения префикса для организации, содержит номер 0000-000005, после установки префикса «ПК» в организации и ввода последующих документов код начнётся с ПК00-000001. При этом не важно, будет ли редактироваться префикс в номере в документах вручную, автонумератор в кодах создаваемых документов будет указывать префикс «ПК» этой организации *.


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

Использовался спецсимвол «/» вместо 0 в нумерации в реализациях.



2) Перезапустить текущий сеанс работы 1С**.


В 1С также поддерживается сквозная нумерация для различных объектов, то есть помещение номеров отличающихся типов элементов в одно пространство имён. В типовых конфигурациях это используется для документов группы «Персонифицированный учёт» с одноимённым названием нумератора. Реализован этот механизм через объект конфигурации «Нумератор», который отвечает за вид («маску») номера документов в группе, а уже присвоение новых номеров и контроль уникальности лежит на механизме автонумерации.

Если у вас остались вопросы по теме материала, то можете их задать на нашей Линии консультаций 1С. Первое обращение совершенно бесплатно!

* Стоит отметить, что префиксы созависимы по частичному указанию: если ввести префикс АБ, то документы с указанным префиксом А будут получать номера АБ, так как с точки зрения базы префикс А относится к группе префикса АБ.

** Либо нетиповыми способами вызвать функцию глобального контекста ОбновитьНумерациюОбъектов с указанием в качестве параметра типа объектов метаданных.

Читайте также: