РегистрСведенийМенеджер.<Имя регистра сведений>.Выбрать

Методы · Select

Формирует выборку записей регистра сведений.

Синтаксис

Выбрать(<НачалоИнтервала>, <КонецИнтервала>, <Отбор>, <Порядок>)
Выбрать(<Отбор>, <Порядок>)

Примеры платформы

Курсы = РегистрыСведений.КурсыВалют;
ОтборВалют = Новый Структура("Валюта");
ОтборВалют.Валюта = ВыбВалюта;
ВыборкаКурсовВалют = Курсы.Выбрать(,,ОтборВалют);
Пока ВыборкаКурсовВалют.Следующий() Цикл
    Сообщить("Дата " + ВыборкаКурсовВалют.Период +
    " Валюта "+СокрЛП(ВыборкаКурсовВалют.Валюта) +
    ", Курс "+  ВыборкаКурсовВалют.Курс );
КонецЦикла;
Полное описание, параметры и ограничения

РегистрСведенийМенеджер.<Имя регистра сведений>.Выбрать (InformationRegisterManager.<Information register name>.Select)

РегистрСведенийМенеджер.<Имя регистра сведений> (InformationRegisterManager.<Information register name>)

Выбрать (Select)

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

Вариант синтаксиса: Для периодического регистра

Синтаксис:
Выбрать(<НачалоИнтервала>, <КонецИнтервала>, <Отбор>, <Порядок>)
Параметры:

<НачалоИнтервала> (необязательный)
Тип: Дата, МоментВремени, Граница.
Начало интервала, за который будут выдаваться записи периодического регистра сведений. Если не указан, то будут выдаваться записи с самого ранней включительно. Может задаваться значениями типа Дата, МоментВремени или Граница.

<КонецИнтервала> (необязательный)
Тип: Дата, МоментВремени, Граница.
Конец интервала, за который будут выдаваться записи периодического регистра сведений. Если не указан, то будут выдаваться записи до самой поздней включительно. Может задаваться значениями типа Дата, МоментВремени или Граница.

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

<Порядок> (необязательный)
Тип: Строка.
Может содержать слово "Возр" или "Убыв", тогда стандартный порядок будет использоваться с указанным направлением.
Может содержать имя поля (реквизита или измерения, для которых указано индексирование) и слово "Возр" или "Убыв", тогда упорядочивание будет производится по указанному полю в указанном порядке.
Значение по умолчанию: "Возр".
Вариант синтаксиса: Для непериодического регистра

Синтаксис:
Выбрать(<Отбор>, <Порядок>)
Параметры:

<Отбор> (необязательный)
Тип: Структура.
Задает поле и значение отбора открываемой выборки. Ключ структуры описывает имя поля, а значение структуры - значение отбора по этому полю. В качестве полей для отбора могут задаваться измерения или реквизиты, для которых в конфигураторе признак индексирования установлен в значение "Индексировать" или установлен признак "Ведущее".
Структура дополнительно может иметь элементы, соответствующие разделителям регистра с уровнем разделения НезависимоИСовместно, в состав которых входит регистр. Если такой элемент структуры задан для используемого в сеансе разделителя, значение для этого элемента должно совпадать со значением разделителя, иначе будет вызвано исключение.
Если параметр не указан, то отбор не используется.
Важно! Структура может содержать только один элемент.

<Порядок> (необязательный)
Тип: Строка.
Может содержать слово "Возр" или "Убыв", тогда стандартный порядок будет использоваться с указанным направлением.
Может содержать имя поля (реквизита или измерения для которых указано индексирование) и через пробел слово "Возр" или "Убыв", тогда упорядочивание будет производится по указанному полю в указанном порядке.
В качестве значения параметра может быть задана строка "<Нет>" ("<No>"). Это будет означать, что система выберет наиболее оптимальный порядок обхода такой выборки, который в общем случае не будет соответствовать порядку обхода по умолчанию.
Значение по умолчанию: "Возр".
Возвращаемое значение:
Тип: РегистрСведенийВыборка.<Имя регистра сведений>.

Описание:

Формирует выборку записей регистра сведений.

Доступность:

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

Пример:

Курсы = РегистрыСведений.КурсыВалют;
ОтборВалют = Новый Структура("Валюта");
ОтборВалют.Валюта = ВыбВалюта;
ВыборкаКурсовВалют = Курсы.Выбрать(,,ОтборВалют);
Пока ВыборкаКурсовВалют.Следующий() Цикл
Сообщить("Дата " + ВыборкаКурсовВалют.Период +
" Валюта "+СокрЛП(ВыборкаКурсовВалют.Валюта) +
", Курс "+ ВыборкаКурсовВалют.Курс );
КонецЦикла;

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

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

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

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

Записать одну учебную цену и доказать откат транзакции

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

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

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

Подготовка

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

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

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

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

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

  6. Для этого урока выполняется настоящая кратковременная запись в СОБСТВЕННУЮ учебную базу. Не используйте рабочую базу или чужую транзакцию.

  7. Длина КодТовара 50 обязательна: TRAIN- + UUID занимает 42 символа. В регистрах не должно быть обработчиков, выполняющих внешние действия.

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

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

  1. Отказываемся работать внутри существующей транзакции. Не отменяем чужие незавершённые изменения.

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

  3. Записать(Ложь) не замещает другую существующую запись с тем же ключом. Это не универсальная защита от ошибок бизнес-обработчиков.

  4. Внутри собственной транзакции читаем свою запись новым менеджером, через Получить ресурсы и через выборку.

  5. ПолучитьМенеджерЗаписи вызывается только после успешного Следующий: выборка позиционирована на строке.

  6. Намеренно отменяем, а не фиксируем транзакцию. После отката читаем новым менеджером и требуем отсутствие строки.

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

  1. Четыре проверки внутри транзакции Истина: цена, выбранность менеджера, цена из выборки, отсутствие второй строки.

  2. После отката сообщение о подтверждённом отсутствии учебной цены.

  3. В списке регистра не остаётся нового кода TRAIN-…, ФиксироватьТранзакцию нигде не вызывается.

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

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

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

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

  2. После отката старый объект в памяти может хранить прежние поля; состояние базы проверяем новым экземпляром.

  3. Получить возвращает структуру ресурсов, не полный объект записи с ключом.

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

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

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

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

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