1с получить новый код справочника

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Примеры кода для 1С 8.x. Часть 3. Справочники.

Как обойти все элементы справочника запросом 1с 8.3:

Как обойти элементы с помощью менеджера справочника 1с 8.3:

Создание и запись нового элемента справочника 1с 8.3:
//метод: СоздатьЭлемент()

Создание и запись новой группы справочника (для иерархического справочника) 1с 8.3

Поиск элемента справочника запросом:

Поиск элемента через менеджер справочника 1с 8.3:

//Если элемент найден, возвращается ссылка, иначе пустая ссылка. Если реквизит КодНаименование в справочнике не используется, возвращается Неопределено.

//методы: НайтиПоКоду(), НайтиПоНаименованию(), НайтиПоРеквизиту();

Удаление элементагруппы справочника 1с 8.3:

Выборка элементов подчиненного справочника 1с 8.3:

Перенести элемент в другую группу 1с 8.3:

Как получить и проверить пустую ссылку справочника 1с 8.3

Как узнать принадлежность элемента справочника группе 1с 8.3:

Как скопировать существующий элемент справочника 1с 8.3

Как выяснить уровень вложенности элемента справочника 1с 8.3

Как заблокировать элемент справочника перед изменениями 1с 8.3

Как заполнить новый элемент справочника на основании 1с 8.3

Как открыть форму существующего элемента справочника, имея ссылку на него 1с 8.3

Как открыть форму существующей группы справочника, имея ссылку на нее 1с 8.3

Как открыть форму выбора элемента справочника и отследить её закрытие 1с 8.3

Как открыть форму списка справочника и установить отбор по реквизиту 1с 8.3

Как открыть форму списка справочника с нужным отображением 1с 8.3

Как открыть форму только что созданного, но ещё не записанного элемента справочника в 1с 8.3

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

Доступность:
Сервер, толстый клиент, внешнее соединение.
Примечание:
Префикс имеет смысл, если для справочника в конфигураторе выбран тип кода Строка.
Пример:
Код 1C v 8.х

Оцените статью