К статье
Практический материал

Разработка и Конфигурация · 10 мин

1С: как получить код элемента справочника или документа

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

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

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

Важно понимать разницу между кодом, номером и уникальным идентификатором. У справочников и планов счетов используется «Код», у документов — «Номер», а внутренний идентификатор ссылки (GUID) — это отдельное значение, которое не видно в интерфейсе напрямую. Путать их нельзя: поиск по номеру документа и по коду справочника работает по-разному.

Что такое код в 1С и где он хранится

Код — стандартный реквизит, который платформа создаёт автоматически для справочников, планов видов характеристик, планов счетов и планов видов расчёта. Длина и тип кода (числовой или строковый) задаются в конфигураторе в свойствах объекта метаданных. По умолчанию код часто строковый, например длиной 9 или 11 символов, с лидирующими нулями: «000000123».

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

У документов аналогичная роль отводится реквизиту «Номер». Он тоже нумеруется автоматически, но может иметь префиксы и периодичность (в пределах года, месяца или без ограничений). Это важно при программном поиске: искать документ нужно по номеру и дате, а не по «коду».

Как посмотреть код в интерфейсе без программирования

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

Чтобы видеть коды сразу для всех элементов, включите колонку в списке: откройте список справочника, нажмите «Ещё» → «Изменить форму» (или «Настроить список» в более старых интерфейсах) и добавьте поле «Код» в состав колонок. После этого можно сортировать и искать элементы по коду прямо в списке.

Ещё один способ — строка поиска. Во многих конфигурациях поиск по списку работает одновременно по коду и наименованию: достаточно начать вводить код, и список отфильтруется. Это удобно, когда известен код из внешней системы и нужно быстро найти соответствующий элемент.

Как включить колонку «Код» в списке
  1. 1
    Откройте список нужного справочника.
  2. 2
    Нажмите «Ещё» и выберите «Изменить форму».
  3. 3
    Найдите в дереве элементов поле «Код» и отметьте его флажком.
  4. 4
    Нажмите «ОК» и проверьте, что колонка появилась в списке.

Как получить код программно через свойство объекта

Во встроенном языке код доступен как обычное свойство. Если у вас есть ссылка на элемент, достаточно обратиться к ней с точкой: платформа сама выполнит обращение к базе и вернёт значение. Это самый короткий, но не всегда самый быстрый способ — каждое обращение через точку к ссылке выполняет отдельное чтение данных.

bsl
КодНоменклатуры = СсылкаНаЭлемент.Код;
Сообщить("Код элемента: " + КодНоменклатуры);

Если нужно получить коды для большого списка ссылок, обращение через точку в цикле приведёт к массе отдельных запросов и заметно замедлит работу. В таких случаях правильнее использовать запрос — он получит все коды одним обращением к базе.

Для документа аналогичный код выглядит так: НомерДокумента = СсылкаНаДокумент.Номер;. Помните, что номер документа — строка, и сравнивать его с числом напрямую нельзя: «12» и «000000012» для платформы — разные значения.

Как получить код запросом

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

bsl
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.Код КАК Код
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ПометкаУдаления";

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
 Сообщить(Выборка.Код);
КонецЦикла;

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

Для поиска элемента по известному коду используется обратная задача: ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ Код = &Код. Либо встроенный метод Справочники.Номенклатура.НайтиПоКоду("000000123"), который быстрее писать и который использует индекс по коду.

Поиск элемента по коду: НайтиПоКоду и его нюансы

Метод НайтиПоКоду() возвращает ссылку на элемент с указанным кодом или пустую ссылку, если элемент не найден. У метода есть необязательные параметры: поиск по полному коду (без учёта лидирующих нулей), отбор по родителю и по владельцу для подчинённых справочников.

bsl
НайденнаяСсылка = Справочники.Номенклатура.НайтиПоКоду("000000123");
Если НайденнаяСсылка.Пустая() Тогда
 Сообщить("Элемент с таким кодом не найден");
Иначе
 Сообщить("Найден: " + НайденнаяСсылка.Наименование);
КонецЕсли;

Главная ловушка — тип и формат кода. Если код строковый с лидирующими нулями, поиск по «123» без нулей не найдёт элемент «000000123», если не включён режим поиска по полному коду. Перед поиском проверьте в конфигураторе длину и тип кода конкретного справочника.

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

Типичные ошибки
01
Поиск строкового кода без лидирующих нулей — элемент не находится, хотя существует.
02
Обращение Ссылка.Код в цикле по тысячам элементов — резкое падение производительности.
03
Сравнение кода с числом без приведения типов — условие никогда не срабатывает.
04
Поиск документа по номеру без указания даты — находится не тот документ или ничего.

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

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

bsl
НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлемент.Наименование = "Тестовая позиция";
НовыйЭлемент.Записать();
НовыйКод = НовыйЭлемент.Код;

Если нужно контролировать код вручную — например, при загрузке из внешней системы — установите свойство НовыйЭлемент.УстановитьНовыйКод("ПРЕФ-") с префиксом или присвойте код напрямую до записи. Установка собственного кода отключает автонумерацию для этого элемента.

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

Как проверить результат и избежать проблем

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

Контрольные точки

Как проверить результат

Значение кода после записи нового элемента
Норма

Код заполнен и соответствует формату справочника

Тревожный признак

Код пустой — запись не выполнена или есть ошибка в обработчиках

Результат НайтиПоКоду
Норма

Возвращена непустая ссылка, элемент открывается

Тревожный признак

Пустая ссылка — проверьте лидирующие нули и тип кода

Скорость получения кодов для списка
Норма

Выборка запросом обрабатывается быстро

Тревожный признак

Цикл с обращением через точку выполняется заметно долго

Если код в интерфейсе и код, который возвращает запрос, выглядят по-разному, проверьте, не сравниваете ли вы код с номером документа или с артикулом — в типовых конфигурациях у номенклатуры есть отдельный реквизит «Артикул», который часто путают с кодом.

Итог

Что важно запомнить

Код элемента виден в форме и включается в списке через настройку формы. Программно код читается как Ссылка.Код, но для массовых операций используйте запрос. Поиск выполняется методом НайтиПоКоду с учётом лидирующих нулей, а для документов — НайтиПоНомеру с указанием даты.

Частые вопросы

Чем код отличается от уникального идентификатора?

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

Почему НайтиПоКоду не находит существующий элемент?

Чаще всего причина в лидирующих нулях: код хранится как «000000123», а ищут по «123». Проверьте длину и тип кода в конфигураторе и передавайте значение в точном формате либо используйте режим поиска по полному коду.

Как получить код документа?

У документов нет реквизита «Код» — вместо него используется «Номер»: СсылкаНаДокумент.Номер. Для поиска применяйте Документы.ИмяДокумента.НайтиПоНомеру(Номер, Дата), где дата ограничивает период нумерации.

Можно ли изменить код уже записанного элемента?

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

Почему автонумерация выдаёт неожиданные коды?

Платформа вычисляет следующий код от максимального существующего. Если кто-то вручную ввёл большое значение, например «999», следующие элементы получат коды «1000», «1001» и так далее. Проверьте элементы с максимальными кодами и при необходимости исправьте их.

Как вывести код в печатную форму?

В модуле менеджера печати или в макете обратитесь к реквизиту объекта: для справочника — Ссылка.Код, для документа — Ссылка.Номер. В макете код подставляется как параметр области так же, как любое другое поле.