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

Обновлено: 04.07.2024

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Мы уже познакомились с таким понятием, как объект в 1С , следующим шагом будет логично познакомиться с таким понятием, как ссылка в 1С.

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

Мы помним, что в платформе 1С 8.3. существуют три вида объектов. Это объекты метаданных, общие объекты и универсальные коллекции значений.

Так вот, ссылка может быть только у объектов метаданных.

Замечу что, ссылка указывает не на сам объект, а на экземпляр объекта. Хотя, очень часто употребляют выражения «ссылка объекта», «ссылка на объект» и т.п.

Все ссылки объектов имеют тип СправочникСсылка.<НазваниеОбъекта>, ДокументСсылка.<НазваниеОбъекта> и т.д.

Ссылку можно использовать в качестве переменной, и также ссылку можно указывать, как реквизит других объектов метаданных.

Например, в моей конфигурации есть справочник Контрагенты.

Справочник в конфигурации 1С

Ссылка на справочник у реквизита документа 1С

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

Ссылка на справочник у реквизита документа 1С

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

Поясню на примере. Я выше создал документ Оплата и реквизит Оплативший для этого документа с типом СправочникСсылка.Контрагенты.

Если я переименую элемент справочника Контрагенты.

Элемент справочника 1С

Затем, зайду обратно в выше созданный документ Оплата, то увижу, что отображение контрагента в реквизите поменялось автоматически.

Документ 1С

Что это значит? Это не значит, что реквизит Оплативший элемента и сам элемент справочника Номенклатура поменялся автоматически. Нет, это значит, что данный реквизит хранит указатель на экземпляр объекта, который отображается посредством наименования. Поменяли наименование, поменялось только отображение, если бы поменяли какой-нибудь другой реквизит справочника Контрагенты, то пользователь бы ничего не заметил.

Получить ссылку 1С

Каким образом программно получить ссылку на экземпляр объекта, который уже есть в базе?

Сделать это можно несколькими способами: найти по коду, найти по наименованию, найти по реквизиту и найти по нескольким реквизитам через запрос. Я рассмотрю первые два метода.

Для демонстрации этих методов, на основной форме документа Оплата я создам команду «Установить контрагента», которую размещу в командной панели формы.

Команда основной формы 1С

При выполнении этой команды я буду в поле Оплативший записывать определенного контрагента. Для этого я создам обработчики команды на клиенте и на сервере.

Обработчики команды 1С

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

Функция НайтиПоКоду вернёт ссылку на экземпляр объекта справочник Контрагенты, которому соответствует код 000000002. Почему мы задали код в виде строки, а не в виде цифры, например? Чтобы понять это, нужно открыть непосредственно редактор справочника Контрагенты в конфигураторе, перейти на закладку «Данные» и посмотреть, какой тип кода у этого справочника.

Тип кода справочника 1С

Таким образом, данный код:

Рассмотрим синтаксис этой функции для менеджера справочника:

НайтиПоКоду(<Код>,<ПоискПоПолномуКоду>,<Родитель>,<Владелец>)

Код – непосредственно тот код, по которому мы ищем наш элемент;

Данное поле необязательно, по умолчанию – Ложь;

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

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

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

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

Например, у справочников этот реквизит имеется.

Стандартный реквизит Наименование справочника 1С

А у документов его нет.

Отсутствие стандартного реквизита Наименование документа 1С

В случае этой функции, поиск ведется по тому значению, которое в поле Наименование объекта

Синтаксис функции для менеджера справочника следующий:

НайтиПоНаименованию(<Наименование>,<ТочноеСоответствие>,<Родитель>,<Владелец>)

«Наименование» – непосредственно то наименование, по которому мы ищем наш элемент;

Данное поле необязательно, по умолчанию – Ложь.

Помните это, что по умолчанию поиск ведется не точно;

Параметры «Родитель» и «Владелец» точно такие же, как для процедуры НайтиПоКоду.

Пустая ссылка 1С

Выглядит он так:

ПустаяНоменклатура= Справочники.Номенклатура.ПустаяСсылка();

ПустаяОплата = Документы.Оплата.ПустаяСсылка();

Переменные ПустаяНоменклатура и ПустаяОплата содержат в себе пустые ссылки на каждый объект.

Обращаю Ваше внимание, что для каждого вида справочника и каждого документа будет своя собственная пустая ссылка.

Данный метод очень удобно использовать, когда нам необходимо знать, найден ли элемент справочника по коду (названию) или нет.

Метод Пустая() удобно использовать работая в клиентском контексте (в том числе на тонком клиенте), потому что менеджер объекта это «тяжелый» объекта и с ним можно работать только в серверном контексте. Т.е. установку контрагента можно сделать таким способом:

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

Пустая ссылка в 1С

Программировать в 1С за 11 шагов

  1. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  2. Научитесь понимать архитектуру 1С;
  3. Станете писать код на языке 1С;
  4. Освоите основные приемы программирования;
  5. Закрепите полученные знания при помощи задачника.

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

Основы разработки в 1С такси

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog


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

можно оплатить вручную:

Использование кодов (номеров) объектов конфигурации

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

Методическая рекомендация (полезный совет)

Длины кодов (номеров) объектов конфигурации задаются в зависимости от их прикладного смысла.

    Необходимость применения кодов (номеров) объектов конфигурации определяется из их прикладного смысла. Основания для применения кодов (номеров):

1.1. Пользователям предстоит работать со списками, содержащими большое количество элементов.
Пример: справочник Номенклатура .

1.2. Искать данные по коду (номеру) удобнее, чем по другим свойствам.
Например, справочник Статьи расходов . Пользователю проще запомнить код, чем каждый раз вчитываться в название статьи. Кроме того, названия статей могут меняться.

1.3. Код имеет прикладной смысл, продиктованный спецификой автоматизируемой области.
Например, код справочника Единицы измерения соответствует коду единицы измерения в ОКЕИ, код справочника Номера ГТД соответствует номеру грузовой таможенной декларации и т.д.

2.1. Код используется как краткое представление элемента данных в виде строки.
Например, для справочника Пользователи автонумерация не применяется, т.к. в коде хранится краткое имя пользователя (логин).

2.2. Код (номер) получается из внешних источников (т.н. входящие данные).
Например, это все классификаторы.
Другой пример - справочник Номера ГТД , код которого вводится исходя из данных входящих документов.

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

При разработке типовых конфигураций рекомендуемыми, но не обязательными к применению являются длины кодов (номеров) из следующего ряда: 3, 5, 9, 11. При этом в длине номера необходимо учитывать длину префиксов нумерации, например, префикс информационной базы, префикс организации, если это предусмотрено конфигурацией и т.п.

Если в конфигурации используется подсистема Префиксация объектов из Библиотеки стандартных подсистем , то совокупную длину (с учетом префикса) номеров документов и кодов справочников рекомендуется устанавливать не менее 11 символов (11, 13, 15, …). Подробнее см. документацию к подсистеме "Префиксация объектов" на ИТС.

3.2. Для объектов, в которых код используется как краткое представление элемента данных в виде строки (см. п. 2.1) длина кода устанавливается достаточной для хранения краткого строкового представления объектов исходя из прикладного смысла кода.

3.3. Для объектов, в которых код (номер) получается из внешних источников (см. п. 2.2), длина кода (номера) зависит от этого источника.

3.4. Рекомендуется устанавливать допустимую длину кода (номера) объектов переменной.

В случае если прикладное решение рассчитано на работу с данными, которые могут вводиться параллельно из нескольких мест (в рамках РИБ, в других программах), в нем должна быть реализована возможность автоматической префиксации объектов конфигурации, для которых выполняются следующие условия:
- используется строковый код (номер),
- используется автонумерация,
- данные, соответствующие области, в пределах которой коды (номера) должны быть уникальными, могут вводиться параллельно из нескольких мест (узлов РИБ, программ) и впоследствии консолидироваться, например, в результате выполнения синхронизации данных. Пример такой области для большинства видов документов – организация и период.
При использовании в конфигурации Библиотеки стандартных подсистем реализовать данное требование позволяет подсистема Префиксация объектов .


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

Справочник в 1С 8.3

Структура справочника

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

Справочник в 1С 8.3

Если добавить в справочник несколько реквизитов:

Справочник в 1С 8.3

То в таблицу базы данных автоматически будут добавлены две колонки: Артикул и Поставщик:

СсылкаНаименованиеКодАртикулПоставщик

Каждый элемент справочника хранится в отдельной строке (записи) таблицы. Например, если в пользовательском режиме добавить несколько элементов:

Справочник в 1С 8.3

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

СсылкаНаименованиеКодАртикулПоставщик
8eae102c-86d5-11eb-80a3-e0d55e4e2669Клавиатура000000001Клав20Привезу все
8eae102d-86d5-11eb-80a3-e0d55e4e2669Смартфон000000002См-30Привезу все

Табличные части справочника

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

Если мы добавим в справочник табличную часть для хранения цен:

Табличные части справочника в 1С 8.3

И для элемента Клавиатура заполним ее следующим образом:

Табличные части справочника в 1С 8.3

То в базе данных будет создана следующая таблица:

СсылкаНомер строкиВид ценыЦена
8eae102c-86d5-11eb-80a3-e0d55e4e26691Оптовая500
8eae102c-86d5-11eb-80a3-e0d55e4e26692Розничная1000

В поле Ссылка хранится тот же самый идентификатор, что и в основной таблице справочника.

Иерархические справочники

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

Иерархические справочники в 1С 8.3

Если установить флаг Иерархический справочник, то в пользовательском режиме можно будет создавать как элементы, так и группы:

Иерархические справочники в 1С 8.3

Элементы можно перетаскивать в группы, тогда они будут находиться внутри этой группы:

Иерархические справочники в 1С 8.3

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

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

СсылкаНаименованиеКодЭто группаРодитель
СмартфоныСмартфоны000000004Да
СмартфонСмартфон000000002НетСмартфоны
Составляющие ПКСоставляющие ПК000000003Да
КлавиатураКлавиатура000000001НетСоставляющие ПК

Для элементов или групп, которые находятся на верхнем уровне иерархии поле Родитель не заполнено.

Иерархия может быть двух видов:

  • Иерархия групп и элементов
  • Иерархия элементов

Пример иерархии групп и элементов можно увидеть выше. Это когда есть группы и есть элементы. Иерархия элементов выглядит следующим образом:

Иерархия элементов в 1С 8.3

В этом случае нет разделения на группы и элементы. При этом элементы могут быть вложены друг в друга.

Флаг Размещать группы сверху определяет как будет выполняться сортировка. Если данный флаг установлен, то группы всегда будут выше элементов:

Иерархические справочники в 1С 8.3

Если снять данный флажок, то сортировка будет выполняться независимо от признака ЭтоГруппа:

Иерархические справочники в 1С 8.3

Также можно ограничить использование реквизитов. Для этого у каждого в реквизита в свойствах можно указать Использование:

Подчиненные справочники

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

Настройка подчиненности выполняется на закладке Владельцы в подчиненном справочнике:

Подчиненные справочники в 1С 8.3

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

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

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

Подчиненные справочники в 1С 8.3

Нумерация

Настройка нумерации справочников выполняется на закладке Нумерация:

Нумерация справочников в 1С 8.3

Флаг Автонумерация позволяет автоматически заполнять поле Код при записи. Новый код будет на единицу больше предыдущего. Если данный флаг снят, то поле Код придется заполнять вручную. Как правило данный флаг оставляют включенным.

Флаг Контроль уникальности позволяет контролировать уникальность кодов справочника. Ниже можно указать в пределах чего контролировать уникальность:

Также на закладке Данные можно указать Длину кода и Тип кода. Тип может быть строковым или числовым:

Нумерация справочников в 1С 8.3

Формы справочника

На закладке формы можно создать формы для справочника и указать некоторые из них как основные:

Формы справочника в 1С 8.3

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