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

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

Как получить код объекта в 1С

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

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

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

Что такое код объекта и чем он отличается от идентификатора

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

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

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

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

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

Для массового просмотра удобно вывести список на печать или сохранить его в табличный документ: меню «Ещё» → «Вывести список». В открывшемся табличном документе будут все отображаемые колонки, включая код, и его можно сохранить в Excel.

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

Если у вас есть ссылка на объект, код доступен напрямую через свойство «Код». Платформа сама выполнит обращение к базе и вернёт значение реквизита.

КодНоменклатуры = НоменклатураСсылка.Код;

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

НомерДокумента = ДокументСсылка.Номер;

Когда нужно получить коды множества объектов, обращение к реквизитам через ссылку в цикле неэффективно — каждое обращение идёт в базу отдельным запросом. В этом случае правильнее использовать запрос:

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Номенклатура.Ссылка КАК Ссылка,

| Номенклатура.Код КАК Код

|ИЗ

| Справочник.Номенклатура КАК Номенклатура

|ГДЕ

| НЕ Номенклатура.ПометкаУдаления";

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

Сообщить(Выборка.Код);

КонецЦикла;

bsl
КодОбъекта = СсылкаНаОбъект.Код;

Как получить уникальный идентификатор (GUID) объекта

Для обмена между базами и интеграций нужен не код, а GUID. Он получается методом ссылки:

ГУИД = XMLСтрока(НоменклатураСсылка);

// или

ГУИД = Строка(НоменклатураСсылка.УникальныйИдентификатор());

Обратная задача — найти объект по известному GUID — решается конструктором ссылки:

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

Новый УникальныйИдентификатор("значение-гуид"));

Если НоваяСсылка.ПолучитьОбъект() = Неопределено Тогда

// объекта с таким идентификатором в базе нет

КонецЕсли;

Перед использованием найденной ссылки всегда проверяйте, что объект реально существует. Ссылка, сконструированная по GUID, может оказаться «битой» — указывать на удалённый или никогда не существовавший объект.

Как найти объект по известному коду

Обратная задача — по коду получить сам объект — решается методом «НайтиПоКоду»:

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

Если НайденнаяСсылка.Пустая() Тогда

Сообщить("Элемент с таким кодом не найден");

КонецЕсли;

Учтите особенности: у строковых кодов поиск идёт с учётом лидирующих нулей, поэтому «123» и «000000123» — разные значения. Если включена серия кодов или подчинение (например, код уникален в пределах владельца), используйте дополнительные параметры метода. Для документов аналогичный метод — НайтиПоНомеру с указанием даты интервала, так как номера документов уникальны только в пределах периода нумерации.

Выбор способа в зависимости от задачи

Маршрут решения

Как выбрать действие

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

Проверка результата и типичные ошибки

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

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

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

Значение кода в переменной
Норма

Совпадает с колонкой «Код» в форме списка, включая нули

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

Пропали лидирующие нули или обрезана часть значения

Ссылка, найденная по коду
Норма

Не пустая, объект открывается в интерфейсе

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

Пустая ссылка или ошибка при открытии объекта

GUID для обмена
Норма

Строка из 36 символов формата xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

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

Получен код вместо GUID или пустая строка

FAQ

Можно ли изменить код существующего объекта?

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

Почему у двух разных элементов одинаковый код?

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

Как узнать код объекта, если база файловая и нет конфигуратора?

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

Что вернёт Ссылка.Код, если объект удалён физически?

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

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

Код — системный реквизит нумерации, который платформа присваивает автоматически. Артикул — прикладной реквизит, который заполняет пользователь по правилам учёта. Для поиска и интеграций чаще используют артикул или GUID, а не код.

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

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

Итог

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

Для просмотра кода достаточно формы списка, программно код берётся через Ссылка.Код или запросом, а для обмена между базами используйте УникальныйИдентификатор. При поиске по коду учитывайте лидирующие нули, пометку удаления и период нумерации документов.