Разработка и Конфигурация · 8 мин
Как получить код объекта в 1С
Как узнать код элемента справочника, документа или другого объекта в 1С: через интерфейс, запросом и программно. Примеры кода, проверка результата и типичные ошибки.
Код объекта в 1С — это реквизит, который платформа автоматически присваивает элементам справочников, документам (там он называется номером), планам видов характеристик и другим ссылочным объектам. Он нужен для поиска, обмена данными, печатных форм и интеграций, поэтому задача «получить код» возникает и у пользователя, и у разработчика.
Способ зависит от ситуации: иногда достаточно вывести колонку «Код» в списке, иногда нужен запрос к базе, а в механизмах обмена вместо кода используется уникальный идентификатор (GUID). Ниже разобраны все основные сценарии — от просмотра в интерфейсе до программного получения кода и идентификатора, с проверкой результата и типичными ошибками.
Что такое код объекта и чем он отличается от идентификатора
Код — это прикладной реквизит, который виден пользователю и участвует в нумерации. У справочников он может быть числовым или строковым, его длина и тип задаются в конфигураторе. У документов аналогичную роль играет номер. Код может повторяться в разных базах и даже внутри одной базы, если отключен контроль уникальности или используется ручная нумерация.
Уникальный идентификатор (GUID) — это внутренний 36-символьный ключ ссылки, который платформа генерирует автоматически и который гарантированно уникален. Именно GUID используется в планах обмена, веб-сервисах и при сопоставлении объектов между базами. Путать эти два понятия — частая причина ошибок в интеграциях.
Как посмотреть код объекта в интерфейсе без программирования
В форме списка справочника колонка «Код» обычно присутствует по умолчанию. Если её нет, откройте меню «Ещё» → «Настроить список» (или «Изменить форму» в управляемых формах) и добавьте поле «Код» в состав колонок. После этого код будет виден для каждой строки списка.
Второй способ — открыть сам элемент. В карточке объекта код обычно отображается в заголовке формы или в отдельном поле. У документов аналогично отображается номер. Этого достаточно, если нужно разово узнать код одного-двух объектов.
Для массового просмотра удобно вывести список на печать или сохранить его в табличный документ: меню «Ещё» → «Вывести список». В открывшемся табличном документе будут все отображаемые колонки, включая код, и его можно сохранить в Excel.
Как получить код объекта программно
Если у вас есть ссылка на объект, код доступен напрямую через свойство «Код». Платформа сама выполнит обращение к базе и вернёт значение реквизита.
КодНоменклатуры = НоменклатураСсылка.Код;
Если объект открыт для редактирования (тип «Объект»), обращение аналогично: Объект.Код. Для документов вместо кода используется свойство «Номер»:
НомерДокумента = ДокументСсылка.Номер;
Когда нужно получить коды множества объектов, обращение к реквизитам через ссылку в цикле неэффективно — каждое обращение идёт в базу отдельным запросом. В этом случае правильнее использовать запрос:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.Код КАК Код
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ПометкаУдаления";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Код);
КонецЦикла;
КодОбъекта = СсылкаНаОбъект.Код;Как получить уникальный идентификатор (GUID) объекта
Для обмена между базами и интеграций нужен не код, а GUID. Он получается методом ссылки:
ГУИД = XMLСтрока(НоменклатураСсылка);
// или
ГУИД = Строка(НоменклатураСсылка.УникальныйИдентификатор());
Обратная задача — найти объект по известному GUID — решается конструктором ссылки:
НоваяСсылка = Справочники.Номенклатура.ПолучитьСсылку(
Новый УникальныйИдентификатор("значение-гуид"));
Если НоваяСсылка.ПолучитьОбъект() = Неопределено Тогда
// объекта с таким идентификатором в базе нет
КонецЕсли;
Перед использованием найденной ссылки всегда проверяйте, что объект реально существует. Ссылка, сконструированная по GUID, может оказаться «битой» — указывать на удалённый или никогда не существовавший объект.
Как найти объект по известному коду
Обратная задача — по коду получить сам объект — решается методом «НайтиПоКоду»:
НайденнаяСсылка = Справочники.Номенклатура.НайтиПоКоду("000000123");
Если НайденнаяСсылка.Пустая() Тогда
Сообщить("Элемент с таким кодом не найден");
КонецЕсли;
Учтите особенности: у строковых кодов поиск идёт с учётом лидирующих нулей, поэтому «123» и «000000123» — разные значения. Если включена серия кодов или подчинение (например, код уникален в пределах владельца), используйте дополнительные параметры метода. Для документов аналогичный метод — НайтиПоНомеру с указанием даты интервала, так как номера документов уникальны только в пределах периода нумерации.
Выбор способа в зависимости от задачи
Как выбрать действие
Проверка результата и типичные ошибки
После получения кода убедитесь, что значение соответствует ожиданиям: тип (строка или число), длина, наличие лидирующих нулей. Если код используется для выгрузки во внешнюю систему, сверьте несколько значений вручную с формой списка — так вы сразу заметите проблему с форматом.
Как проверить результат
Совпадает с колонкой «Код» в форме списка, включая нули
Пропали лидирующие нули или обрезана часть значения
Не пустая, объект открывается в интерфейсе
Пустая ссылка или ошибка при открытии объекта
Строка из 36 символов формата xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Получен код вместо GUID или пустая строка
FAQ
Можно ли изменить код существующего объекта?
Да, если в конфигурации не запрещено редактирование кода и у вас есть права. Откройте элемент и измените поле «Код». Учтите, что при участии объекта в обмене данными смена кода может нарушить сопоставление с другой базой, поэтому без необходимости коды лучше не трогать.
Почему у двух разных элементов одинаковый код?
Это возможно, если в свойствах справочника выключен контроль уникальности, включена серия кодов «в пределах владельца» или «в пределах подчинения», либо код присваивается вручную. Проверьте настройки нумерации в конфигураторе и при необходимости запустите перенумерацию на тестовой копии.
Как узнать код объекта, если база файловая и нет конфигуратора?
Достаточно пользовательского режима: откройте список, добавьте колонку «Код» через настройку формы или выведите список в табличный документ. Конфигуратор для просмотра кодов не требуется.
Что вернёт Ссылка.Код, если объект удалён физически?
Если ссылка «битая» (объект физически отсутствует), обращение к реквизитам вернёт значения по умолчанию — для кода это пустая строка или ноль. Перед использованием проверяйте существование объекта через ПолучитьОбъект() или запросом.
Чем код отличается от артикула номенклатуры?
Код — системный реквизит нумерации, который платформа присваивает автоматически. Артикул — прикладной реквизит, который заполняет пользователь по правилам учёта. Для поиска и интеграций чаще используют артикул или GUID, а не код.
Как получить код нового объекта до записи?
До записи код может быть ещё не присвоен, если включена автонумерация. Надёжный способ — записать объект, затем прочитать значение Объект.Код. Если код нужен до записи, вызовите метод УстановитьНовыйКод() с нужным префиксом.
Что важно запомнить
Для просмотра кода достаточно формы списка, программно код берётся через Ссылка.Код или запросом, а для обмена между базами используйте УникальныйИдентификатор. При поиске по коду учитывайте лидирующие нули, пометку удаления и период нумерации документов.