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