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