Разработка и Конфигурация · 10 мин
1С: как получить код элемента справочника или документа
Как получить код элемента справочника или документа в 1С: просмотр в интерфейсе, запросом и встроенным языком. Примеры кода, типичные ошибки и проверка результата.
Код в 1С — это реквизит, который платформа автоматически присваивает элементам справочников, документам, планам счетов и другим объектам ссылочного типа. Он нужен для поиска, обмена данными, нумерации и быстрой идентификации записей. Получить код можно несколькими способами: посмотреть в форме объекта, вывести в списке, получить запросом или обратиться к нему из встроенного языка.
Выбор способа зависит от задачи. Бухгалтеру обычно достаточно включить отображение кода в списке справочника. Разработчику или администратору чаще нужно получить код программно — например, чтобы найти элемент по ссылке, сформировать печатную форму или организовать обмен с внешней системой. Ниже разобраны все рабочие варианты с примерами.
Важно понимать разницу между кодом, номером и уникальным идентификатором. У справочников и планов счетов используется «Код», у документов — «Номер», а внутренний идентификатор ссылки (GUID) — это отдельное значение, которое не видно в интерфейсе напрямую. Путать их нельзя: поиск по номеру документа и по коду справочника работает по-разному.
Что такое код в 1С и где он хранится
Код — стандартный реквизит, который платформа создаёт автоматически для справочников, планов видов характеристик, планов счетов и планов видов расчёта. Длина и тип кода (числовой или строковый) задаются в конфигураторе в свойствах объекта метаданных. По умолчанию код часто строковый, например длиной 9 или 11 символов, с лидирующими нулями: «000000123».
Автонумерация заполняет код при записи нового элемента, если пользователь не ввёл значение вручную. Платформа берёт максимальный существующий код и увеличивает его. Из-за этого при ручном вводе «круглого» кода вроде «999» следующая автонумерация может неожиданно продолжиться от него.
У документов аналогичная роль отводится реквизиту «Номер». Он тоже нумеруется автоматически, но может иметь префиксы и периодичность (в пределах года, месяца или без ограничений). Это важно при программном поиске: искать документ нужно по номеру и дате, а не по «коду».
Как посмотреть код в интерфейсе без программирования
Самый простой способ — открыть карточку элемента. В форме элемента справочника код обычно отображается в отдельном поле рядом с наименованием. Если поле не видно, его могли скрыть настройки формы, но в типовых конфигурациях код присутствует почти всегда.
Чтобы видеть коды сразу для всех элементов, включите колонку в списке: откройте список справочника, нажмите «Ещё» → «Изменить форму» (или «Настроить список» в более старых интерфейсах) и добавьте поле «Код» в состав колонок. После этого можно сортировать и искать элементы по коду прямо в списке.
Ещё один способ — строка поиска. Во многих конфигурациях поиск по списку работает одновременно по коду и наименованию: достаточно начать вводить код, и список отфильтруется. Это удобно, когда известен код из внешней системы и нужно быстро найти соответствующий элемент.
- 1Откройте список нужного справочника.
- 2Нажмите «Ещё» и выберите «Изменить форму».
- 3Найдите в дереве элементов поле «Код» и отметьте его флажком.
- 4Нажмите «ОК» и проверьте, что колонка появилась в списке.
Как получить код программно через свойство объекта
Во встроенном языке код доступен как обычное свойство. Если у вас есть ссылка на элемент, достаточно обратиться к ней с точкой: платформа сама выполнит обращение к базе и вернёт значение. Это самый короткий, но не всегда самый быстрый способ — каждое обращение через точку к ссылке выполняет отдельное чтение данных.
КодНоменклатуры = СсылкаНаЭлемент.Код;
Сообщить("Код элемента: " + КодНоменклатуры);Если нужно получить коды для большого списка ссылок, обращение через точку в цикле приведёт к массе отдельных запросов и заметно замедлит работу. В таких случаях правильнее использовать запрос — он получит все коды одним обращением к базе.
Для документа аналогичный код выглядит так: НомерДокумента = СсылкаНаДокумент.Номер;. Помните, что номер документа — строка, и сравнивать его с числом напрямую нельзя: «12» и «000000012» для платформы — разные значения.
Как получить код запросом
Запрос — основной способ массового получения кодов. Поле «Код» доступно в запросе к таблице справочника так же, как любой реквизит. Запрос возвращает выборку, из которой коды читаются в цикле без дополнительных обращений к базе.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.Код КАК Код
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ПометкаУдаления";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Код);
КонецЦикла;Если нужен код конкретного элемента, добавьте условие по ссылке через параметр. Параметры предпочтительнее прямой подстановки значений в текст запроса: это безопаснее и позволяет платформе повторно использовать скомпилированный запрос.
Для поиска элемента по известному коду используется обратная задача: ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ Код = &Код. Либо встроенный метод Справочники.Номенклатура.НайтиПоКоду("000000123"), который быстрее писать и который использует индекс по коду.
Поиск элемента по коду: НайтиПоКоду и его нюансы
Метод НайтиПоКоду() возвращает ссылку на элемент с указанным кодом или пустую ссылку, если элемент не найден. У метода есть необязательные параметры: поиск по полному коду (без учёта лидирующих нулей), отбор по родителю и по владельцу для подчинённых справочников.
НайденнаяСсылка = Справочники.Номенклатура.НайтиПоКоду("000000123");
Если НайденнаяСсылка.Пустая() Тогда
Сообщить("Элемент с таким кодом не найден");
Иначе
Сообщить("Найден: " + НайденнаяСсылка.Наименование);
КонецЕсли;Главная ловушка — тип и формат кода. Если код строковый с лидирующими нулями, поиск по «123» без нулей не найдёт элемент «000000123», если не включён режим поиска по полному коду. Перед поиском проверьте в конфигураторе длину и тип кода конкретного справочника.
Для документов аналогичный метод называется НайтиПоНомеру(Номер, Дата). Дата обязательна, потому что нумерация документов обычно периодическая: один и тот же номер может встречаться в разных периодах.
Как получить код нового элемента при записи
Если элемент создаётся программно, код появляется только после записи: до записи свойство «Код» пустое. Типовая последовательность: создать объект, заполнить реквизиты, вызвать Записать(), затем прочитать присвоенный код.
НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлемент.Наименование = "Тестовая позиция";
НовыйЭлемент.Записать();
НовыйКод = НовыйЭлемент.Код;Если нужно контролировать код вручную — например, при загрузке из внешней системы — установите свойство НовыйЭлемент.УстановитьНовыйКод("ПРЕФ-") с префиксом или присвойте код напрямую до записи. Установка собственного кода отключает автонумерацию для этого элемента.
При обмене данными будьте осторожны с ручным присвоением кодов: конфликтующие коды в разных базах затрудняют сопоставление. Для обмена надёжнее опираться на уникальный идентификатор ссылки, а код использовать только для отображения пользователю.
Как проверить результат и избежать проблем
После получения кода программно убедитесь, что значение соответствует ожиданиям: тип (строка или число), наличие лидирующих нулей, отсутствие пробелов. Простая проверка — вывести значение через Сообщить() или посмотреть в отладчике в табло переменных.
Как проверить результат
Код заполнен и соответствует формату справочника
Код пустой — запись не выполнена или есть ошибка в обработчиках
Возвращена непустая ссылка, элемент открывается
Пустая ссылка — проверьте лидирующие нули и тип кода
Выборка запросом обрабатывается быстро
Цикл с обращением через точку выполняется заметно долго
Если код в интерфейсе и код, который возвращает запрос, выглядят по-разному, проверьте, не сравниваете ли вы код с номером документа или с артикулом — в типовых конфигурациях у номенклатуры есть отдельный реквизит «Артикул», который часто путают с кодом.
Что важно запомнить
Код элемента виден в форме и включается в списке через настройку формы. Программно код читается как Ссылка.Код, но для массовых операций используйте запрос. Поиск выполняется методом НайтиПоКоду с учётом лидирующих нулей, а для документов — НайтиПоНомеру с указанием даты.
Частые вопросы
Чем код отличается от уникального идентификатора?
Код — видимый пользователю реквизит, который может повторяться в разных базах и меняться вручную. Уникальный идентификатор (GUID) — внутреннее значение ссылки, которое не меняется и однозначно определяет объект. Для обмена и синхронизации используют GUID, для отображения и ручного поиска — код.
Почему НайтиПоКоду не находит существующий элемент?
Чаще всего причина в лидирующих нулях: код хранится как «000000123», а ищут по «123». Проверьте длину и тип кода в конфигураторе и передавайте значение в точном формате либо используйте режим поиска по полному коду.
Как получить код документа?
У документов нет реквизита «Код» — вместо него используется «Номер»: СсылкаНаДокумент.Номер. Для поиска применяйте Документы.ИмяДокумента.НайтиПоНомеру(Номер, Дата), где дата ограничивает период нумерации.
Можно ли изменить код уже записанного элемента?
Да, если у пользователя есть права и в конфигурации не запрещено редактирование кода. В форме элемента код обычно доступен для правки, программно — присвоением нового значения перед записью. Учтите, что смена кода может нарушить связи с внешними системами, где старый код уже используется.
Почему автонумерация выдаёт неожиданные коды?
Платформа вычисляет следующий код от максимального существующего. Если кто-то вручную ввёл большое значение, например «999», следующие элементы получат коды «1000», «1001» и так далее. Проверьте элементы с максимальными кодами и при необходимости исправьте их.
Как вывести код в печатную форму?
В модуле менеджера печати или в макете обратитесь к реквизиту объекта: для справочника — Ссылка.Код, для документа — Ссылка.Номер. В макете код подставляется как параметр области так же, как любое другое поле.