РегистрСведенийНаборЗаписей.<Имя регистра сведений>.Отбор

Свойства · Filter

Тип: Отбор. Содержит объект Отбор, по которому осуществляется текущая фильтрация записей при считывании или записи набора. Список свойств объекта зависит от свойств регистра: для регистров сведений, для которых в Конфигураторе установлен режим записи "Подчинение регистратору", отбор возможен только по регистратору, для периодических регистров сведений отбор возможен по периоду и значениям измерений, для непериодических - только по значению измерений. Разделители с уровнем разделения НезависимоИСовместно, в состав которых входит регистр, используются наравне с измерениями. Важно! Отбор может устанавливаться только на равенство.

Полное описание, параметры и ограничения

РегистрСведенийНаборЗаписей.<Имя регистра сведений>.Отбор (InformationRegisterRecordSet.<Information register name>.Filter)

РегистрСведенийНаборЗаписей.<Имя регистра сведений> (InformationRegisterRecordSet.<Information register name>)

Отбор (Filter)

Доступен, начиная с версии 8.0.

Использование:
Только чтение.
Описание:
Тип: Отбор.
Содержит объект Отбор, по которому осуществляется текущая фильтрация записей при считывании или записи набора. Список свойств объекта зависит от свойств регистра: для регистров сведений, для которых в Конфигураторе установлен режим записи "Подчинение регистратору", отбор возможен только по регистратору, для периодических регистров сведений отбор возможен по периоду и значениям измерений, для непериодических - только по значению измерений.
Разделители с уровнем разделения НезависимоИСовместно, в состав которых входит регистр, используются наравне с измерениями.
Важно! Отбор может устанавливаться только на равенство.
Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.

Использование в версии:

Доступен, начиная с версии 8.0.

Методическая информация

Практические примеры

Установить отбор по учебному коду перед чтением набора

Показано чтение только одного собственного кода и проверка свойств элемента отбора. Отбор не заполнит автоматически измерение будущей новой записи.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Создайте НОВУЮ пустую файловую базу. В Конфигураторе корню задайте имя Учебная85; не добавляйте учебные регистры в рабочую УТ/КА2/УНФ/БП.

  2. Регистры сведений → Добавить: УчебныеЦены. Режим записи Независимый, периодичность Непериодический. Измерение КодТовара: Строка, длина 50, индексировать. Ресурс Цена: Число, 12 цифр, 2 дробных, неотрицательное.

  3. Проверку заполнения измерения установите Показывать ошибку. Модуль набора записей оставьте ПУСТЫМ; обработчики записи, обмена, фоновые задания и внешние сервисы для урока не создавайте.

  4. Обновите конфигурацию базы данных. Создайте серверный общий модуль УчебныеЗадачи и команду учебной обработки для вызова ВыполнитьПример() Экспорт.

  5. Фрагмент вставьте в тело ВыполнитьПример. Каждую задачу запускайте отдельно. Вымышленные коды не являются справочными ссылками на рабочие товары.

Описание = Метаданные.РегистрыСведений.Найти("УчебныеЦены");
Если Описание = Неопределено Тогда
    ВызватьИсключение "Сначала подготовьте собственный учебный регистр";
КонецЕсли;
Если Описание.РежимЗаписи <> Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый
    Или Описание.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда
    ВызватьИсключение "Настройки учебного регистра не соответствуют подготовке";
КонецЕсли;
Если Описание.Измерения.Количество() <> 1
    Или Описание.Измерения.Найти("КодТовара") = Неопределено
    Или Описание.Ресурсы.Найти("Цена") = Неопределено Тогда
    ВызватьИсключение "Нужны одно измерение КодТовара и ресурс Цена";
КонецЕсли;
Набор = РегистрыСведений.УчебныеЦены.СоздатьНаборЗаписей();
Фильтр = Набор.Отбор.Найти("КодТовара");
Если Фильтр = Неопределено Тогда
    ВызватьИсключение "Учебное измерение отсутствует в отборе";
КонецЕсли;
Фильтр.Установить("BOOK-A01", Истина);
Сообщить(Фильтр.Использование);
Сообщить(Фильтр.Значение = "BOOK-A01");
Сообщить(Фильтр.Имя = "КодТовара");
Сообщить(Фильтр.ТипЗначения.СодержитТип(Тип("Строка")));
Набор.Прочитать();
Для Каждого Запись Из Набор Цикл
    Если Запись.КодТовара <> "BOOK-A01" Тогда
        ВызватьИсключение "Прочитано значение вне установленного учебного отбора";
    КонецЕсли;
КонецЦикла;
Сообщить("Прочитано собственных учебных строк: " + Строка(Набор.Количество()));
Фильтр.Использование = Ложь;
Сообщить(Не Фильтр.Использование);
// Повторное чтение с отключенным отбором не выполняем.
Сообщить("Запись не выполнялась.");

Разбор по шагам

  1. Отбор принадлежит набору и создан платформой по структуре регистра.

  2. Находим измерение по Имя. Установить задаёт значение и признак использования одновременно.

  3. Прочитать выполняем только с включённым фильтром BOOK-A01, не читаем все цены рабочего регистра.

  4. В новой пустой базе результат обычно ноль строк. Если ранее вручную добавили свой BOOK-A01, выводится его фактическое количество.

  5. Выключаем фильтр лишь после чтения и не запускаем новое чтение: уже загруженные данные не исчезают от переключения признака.

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

  1. Пять булевых проверок Истина.

  2. В пустой подготовленной базе прочитано 0, никаких строк не записано.

  3. Всякая прочитанная строка должна иметь ровно BOOK-A01.

Ожидаемый результат

Новичок знает момент применения отбора и различает данные набора с настройкой будущего чтения.

На что обратить внимание

  1. Отбор не является безопасной заменой проверки измерений перед записью: новые строки нужно заполнить и проверить отдельно.

  2. Отключение отбора с последующим замещением может затронуть весь независимый регистр; здесь записи нет.

  3. Это не универсальный Отбор компоновки данных: в наборе поддержка сравнений ограничена.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Получить цену на дату по двум учебным изменениям

Цена менялась 15 сентября в 09:00 и 12:00. Внутри отменяемой транзакции проверяем точную запись, первое/последнее значение и табличные срезы.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Создайте НОВУЮ пустую файловую базу. В Конфигураторе корню задайте имя Учебная85; не добавляйте учебные регистры в рабочую УТ/КА2/УНФ/БП.

  2. Регистры сведений → Добавить: УчебныеЦены. Режим записи Независимый, периодичность Непериодический. Измерение КодТовара: Строка, длина 50, индексировать. Ресурс Цена: Число, 12 цифр, 2 дробных, неотрицательное.

  3. Проверку заполнения измерения установите Показывать ошибку. Модуль набора записей оставьте ПУСТЫМ; обработчики записи, обмена, фоновые задания и внешние сервисы для урока не создавайте.

  4. Обновите конфигурацию базы данных. Создайте серверный общий модуль УчебныеЗадачи и команду учебной обработки для вызова ВыполнитьПример() Экспорт.

  5. Фрагмент вставьте в тело ВыполнитьПример. Каждую задачу запускайте отдельно. Вымышленные коды не являются справочными ссылками на рабочие товары.

  6. Создайте второй независимый регистр УчебнаяИсторияЦен: периодичность В пределах секунды, измерение КодТовара (Строка 50, индексировать), ресурс Цена (Число 12,2, неотрицательное). Модуль также пустой.

  7. Обновите конфигурацию базы данных. Код первого регистра не заменяйте именем рабочего регистра цен.

  8. Здесь две кратковременные записи в собственный периодический регистр отменяются. Нужны пустой модуль регистра, права на свой регистр и отсутствие чужой активной транзакции.

  9. Обе строки дополнительно имеют тот же КодТовара, что отбор набора. Запись выполняется с Ложь — без замещения существующих строк.

Описание = Метаданные.РегистрыСведений.Найти("УчебнаяИсторияЦен");
Если Описание = Неопределено Тогда
    ВызватьИсключение "Сначала подготовьте собственный учебный регистр";
КонецЕсли;
Если Описание.РежимЗаписи <> Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый
    Или Описание.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Секунда Тогда
    ВызватьИсключение "Настройки учебного регистра не соответствуют подготовке";
КонецЕсли;
Если Описание.Измерения.Количество() <> 1
    Или Описание.Измерения.Найти("КодТовара") = Неопределено
    Или Описание.Ресурсы.Найти("Цена") = Неопределено Тогда
    ВызватьИсключение "Нужны одно измерение КодТовара и ресурс Цена";
КонецЕсли;
Если ТранзакцияАктивна() Тогда
    ВызватьИсключение "Для урока нужна собственная транзакция";
КонецЕсли;
Код = "TRAIN-" + Строка(Новый УникальныйИдентификатор);
Менеджер = РегистрыСведений.УчебнаяИсторияЦен;
Отбор = Новый Структура("КодТовара", Код);
Набор = Менеджер.СоздатьНаборЗаписей();
Набор.Отбор.КодТовара.Установить(Код);
Набор.Прочитать();
Если Набор.Количество() <> 0 Тогда
    ВызватьИсключение "Учебный ключ уже занят";
КонецЕсли;
Ранняя = Набор.Добавить();
Ранняя.Период = Дата(2026, 9, 15, 9);
Ранняя.КодТовара = Код;
Ранняя.Цена = 100;
Поздняя = Набор.Добавить();
Поздняя.Период = Дата(2026, 9, 15, 12);
Поздняя.КодТовара = Код;
Поздняя.Цена = 120;
НачатьТранзакцию();
Попытка
    Набор.Записать(Ложь);
    Точная = Менеджер.Получить(Дата(2026, 9, 15, 9), Отбор);
    ДоПолудня = Менеджер.ПолучитьПоследнее(Дата(2026, 9, 15, 11), Отбор);
    НаПолдень = Менеджер.ПолучитьПоследнее(Дата(2026, 9, 15, 12), Отбор);
    ПерваяПослеДесяти = Менеджер.ПолучитьПервое(Дата(2026, 9, 15, 10), Отбор);
    Сообщить(Точная.Цена = 100);
    Сообщить(ДоПолудня.Цена = 100);
    Сообщить(НаПолдень.Цена = 120);
    Сообщить(ПерваяПослеДесяти.Цена = 120);
    Последние = Менеджер.СрезПоследних(Дата(2026, 9, 15, 12), Отбор);
    Первые = Менеджер.СрезПервых(Дата(2026, 9, 15, 10), Отбор);
    Сообщить(Последние.Количество() = 1);
    Сообщить(Последние.Получить(0).Цена = 120);
    Сообщить(Первые.Количество() = 1);
    Сообщить(Первые.Получить(0).Цена = 120);
    ОтменитьТранзакцию();
Исключение
    Если ТранзакцияАктивна() Тогда
        ОтменитьТранзакцию();
    КонецЕсли;
    ВызватьИсключение;
КонецПопытки;
После = Менеджер.СоздатьНаборЗаписей();
После.Отбор.КодТовара.Установить(Код);
После.Прочитать();
Если После.Количество() <> 0 Тогда
    ВызватьИсключение "Откат истории учебного кода не подтверждён";
КонецЕсли;
Сообщить("Две учебные цены отменены; история рабочего регистра не использовалась.");

Разбор по шагам

  1. Период входит в ключ записи: один код может иметь цены в 09:00 и 12:00.

  2. Получить в 09:00 ищет точную запись, ПолучитьПоследнее в 11:00 — самое позднее изменение не позже границы.

  3. Граница включительная: ПолучитьПоследнее ровно в 12:00 уже даёт 120.

  4. ПолучитьПервое в 10:00 ищет первое изменение начиная с границы, то есть 12:00 и цену 120.

  5. Табличные СрезПоследних/СрезПервых возвращают строки по сочетаниям измерений; для нашего одного кода это одна строка.

  6. После проверки намеренно откатываем обе записи и новым набором доказываем отсутствие своего кода.

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

  1. Восемь сравнений Истина: точная/последняя/первая цены и два среза.

  2. В 11:00 цена 100, ровно в 12:00 уже 120.

  3. После отката сообщение о двух отменённых учебных ценах и ноль строк собственного кода.

Ожидаемый результат

Показана историческая цена на дату с точной включительной границей и различием структуры ресурсов/табличного среза.

На что обратить внимание

  1. Эти методы предназначены для периодического регистра; не переносите их в непериодический УчебныеЦены.

  2. Цена до 09:00 и ситуация без найденных изменений требуют отдельного решения; этот урок проверяет только приведённые две записи.

  3. Значения ресурсов в структуре сами по себе не заменяют проверку существования записи в общем случае.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.