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