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

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

Как найти запись в регистре сведений в 1С

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

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

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

Как устроен регистр сведений и почему это важно для поиска

Запись регистра сведений идентифицируется комбинацией значений измерений. Например, в регистре «Курсы валют» измерение — валюта, а уникальность строки определяется парой «период + валюта». В непериодическом регистре «Штрихкоды номенклатуры» уникальность обеспечивается измерением «Штрихкод». Поэтому поиск всегда строится по измерениям: именно они входят в индексы, и отбор по ним выполняется быстро.

Отдельный случай — регистры, подчинённые регистратору. Их записи создаются документами при проведении, и искать их имеет смысл либо по регистратору, либо через сам документ. Ручное редактирование таких записей в обход документа разрушает связность данных: движения перестанут соответствовать проведённым документам.

Поиск записи через форму списка в режиме 1С:Предприятие

Самый доступный способ — открыть регистр в пользовательском режиме. В типовых конфигурациях регистры сведений обычно доступны из разделов «НСИ и администрирование», «Справочники» или через командный интерфейс соответствующего раздела. Если регистра в меню нет, его можно открыть через «Функции для технического специалиста» (в файловом режиме — «Операции → Регистры сведений» либо через меню «Все функции»).

Когда список открыт, нажмите «Ещё → Настроить список» и добавьте условие по нужному измерению: выберите поле, вид сравнения («Равно», «Содержит», «В списке») и значение. После применения отбора в таблице останутся только подходящие записи. Для поиска по части строки удобен вид сравнения «Содержит», но учтите, что он не использует индекс и на больших регистрах работает медленно.

Порядок действий в форме списка
  1. 1
    Откройте регистр сведений через меню или «Все функции»
  2. 2
    Нажмите «Ещё → Настроить список»
  3. 3
    Добавьте отбор по измерению с нужным видом сравнения
  4. 4
    Примените отбор и проверьте найденные строки
  5. 5
    Двойным щелчком откройте запись для просмотра или редактирования

Если регистра нет в интерфейсе

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

Поиск записи программно: запрос и менеджер записи

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

bsl
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Курсы.Период,
| Курсы.Валюта,
| Курсы.Курс
|ИЗ
| РегистрСведений.КурсыВалют КАК Курсы
|ГДЕ
| Курсы.Валюта = &Валюта
| И Курсы.Период = &Период";
Запрос.УстановитьПараметр("Валюта", ВалютаСсылка);
Запрос.УстановитьПараметр("Период", ДатаКурса);
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
 Выборка = Результат.Выбрать();
 Выборка.Следующий();
 Сообщить("Курс: " + Выборка.Курс);
КонецЕсли;

Для чтения и изменения одной записи удобнее менеджер записи: создайте его методом СоздатьМенеджерЗаписи(), заполните измерения и период, вызовите Прочитать(), затем проверьте признак Выбран(). Если запись найдена, можно изменить ресурсы и записать её обратно.

bsl
Менеджер = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
Менеджер.Период = ДатаКурса;
Менеджер.Валюта = ВалютаСсылка;
Менеджер.Прочитать();
Если Менеджер.Выбран() Тогда
 Менеджер.Курс = НовыйКурс;
 Менеджер.Записать();
Иначе
 Сообщить("Запись не найдена");
КонецЕсли;

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

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

Администраторам и аналитикам удобна консоль запросов — типовая обработка с диска ИТС или аналогичные инструменты. В ней можно составить запрос к регистру визуально, указать параметры и сразу увидеть результат без написания кода в конфигураторе. Это безопасный способ: консоль только читает данные, если не выполнять код вручную.

Также существуют универсальные обработки поиска и редактирования данных, которые позволяют найти запись в любом регистре по произвольному условию и при необходимости изменить или удалить её. Такие инструменты требуют аккуратности: изменения выполняются напрямую в таблице, минуя бизнес-логику документов.

Особенности поиска в периодических регистрах

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

bsl
Запрос.Текст =
"ВЫБРАТЬ
| Срез.Валюта,
| Срез.Курс
|ИЗ
| РегистрСведений.КурсыВалют.СрезПоследних(&Дата, Валюта = &Валюта) КАК Срез";

Типичная ошибка — искать запись по точной дате, когда в регистре она записана с другим временем. Период в регистре хранится с точностью до секунды, поэтому условие «Период = 01.03.2026 00:00:00» не найдёт запись, сохранённую как «01.03.2026 12:30:15». Используйте диапазон дат или срез.

Как проверить, что найдена именно та запись

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

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

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

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

Количество найденных строк
Норма

Ровно столько, сколько ожидалось по логике задачи

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

Ноль строк при точно существующих данных или дубли

Значения измерений в найденной записи
Норма

Полностью совпадают с условием поиска

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

Часть измерений пустая или отличается

Период записи
Норма

Попадает в нужный диапазон дат

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

Дата отличается из-за времени в составе периода

Признак Выбран() у менеджера записи
Норма

Истина после Прочитать()

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

Ложь — запись по ключу не существует

Типичные ошибки и ограничения

Типичные ошибки
01
Отбор по ресурсу вместо измерения: поиск работает, но без индекса — на больших регистрах это занимает минуты и грузит сервер
02
Игнорирование времени в периоде: условие на равенство даты не находит записи, сохранённые с ненулевым временем
03
Поиск по строковому измерению без учёта регистра и пробелов: 'Арт-01' и 'арт-01 ' — разные ключи
04
Редактирование записей подчинённого регистра напрямую: движения расходятся с документами, помогает только перепроведение
05
Отсутствие проверки Пустой()/Выбран(): код молча работает с пустыми данными и записывает мусор

Ещё одно ограничение касается прав доступа: если у пользователя нет права «Чтение» на регистр, он не увидит его ни в интерфейсе, ни через запрос — запрос просто вернёт пустой результат или ошибку доступа. Проверяйте роль пользователя, если «запись точно есть, но не находится».

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

Как найти запись, если неизвестно точное значение измерения?

Используйте отбор в форме списка с видом сравнения «Содержит» или запрос с конструкцией ПОДОБНО и шаблоном "%фрагмент%". Учтите, что такой поиск не использует индекс и на больших таблицах выполняется медленно.

Чем отличается поиск через НайтиПоКлючу от менеджера записи?

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

Почему запрос не находит запись, которая видна в форме списка?

Чаще всего причина в несовпадении типов или значений параметров: ссылка другого вида, лишние пробелы в строке, время в составе даты. Сравните значения через отладчик или выведите их представления.

Можно ли найти записи без полного ключа измерений?

Да, через запрос с условием по любому подмножеству полей. Вернётся несколько записей. Менеджер записи в этом случае не подходит — он требует полного ключа.

Как найти записи, которые создал конкретный документ?

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

Безопасно ли удалять найденную запись вручную?

В независимом регистре — при понимании последствий и после резервной копии. В регистре, подчинённом регистратору, записи удаляются только отменой проведения или удалением документа, иначе нарушится целостность учёта.

Итог

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

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