Критерии отбора 1с 8.3. Критерии отбора "изнутри". Сортировка данных в запросе

Был рассмотрен простой пример настройки и использования объекта конфигурации "критерий отбора". Подробнее узнать информацию о нем Вы можете в синтаксис-помощнике или на официальном сайте .

Сегодня в статье рассмотрим закулисную работу платформы 1С:Предприятие с СУБД при использовании критериев отбора. В примере будет использоваться Microsoft® SQL Server® 2008 Express with Advanced Services .

Что у нас есть?

В тестовой конфигурации содержатся три документа и справочник, связанные между собой следующим образом:
В его состав включены следующие объекты с реквизитами, выбранными в соответствии со связями между объектами метаданных.


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

В запросе

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

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

"За кулисами"

Сразу стоит оговориться, что отдельной SQL-таблицы для критерия отбора не создается. Платформа получает данные динамически, формирую SQL-запрос в зависимости от настроек критерия отбора.

Например, если мы выполним следующий запрос с ссылкой на элемент справочника "Товары" в параметре:


,

то платформа сформирует следующий SQL-запрос к СУБД:

На скриншоте выше подробно рассмотрен SQL-запрос, формируемый платформой. Наш пример усложнен тем, что для элемента справочника "Товары" ищутся документы по наличию ссылки на этот товар в их табличных частях. Поэтому в SQL-запросе присутствует конструкция "EXIST" для проверки наличия хотя бы одной ссылки на товар в табличной части документа.

Для каждой таблицы документа формируется отдельный SELECT. После результаты объединяются с помощью конструкции "UNION ALL". Из полученной таблицы во вложенном запросе получают все ссылки на документы, в табличных частях которых присутствует искомый элемент справочника.

При создании критерия отбора, как уже говорилось выше, никаких отдельных таблиц в структуре информационной базы не создается. Но некоторые изменения в структуре таблиц все же имеются. Для реквизитов, используемых в критерии отбора, создается индекс для тех объектов, которые содержат эти реквизиты и входят в его состав.

Подобные SQL-запросы платформа формирует для всех случаев использования критерия отбора в конфигурации.

Выводы

Таким образом, критерий отбора - это механизм платформы, который выступает в качестве инструкции платформе для формирования SQL-запросов к базе данных на получения ссылок на связанные объекты информационной базы. В противном случае разработчику пришлось бы самостоятельно писать такие запросы и настраивать индексы для реквизитов объектов.

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

Влияние на производительность с их стороны незначительная. Из-за создания дополнительных индексов может увеличиться время записи, так как появляется необходимость в обновлении индекса при помещении данных в информационную базу.

Критерии отбора 1C — объект метаданных, служащий для отбора различной информации в информационной базе по установленным отборам. С помощью критерия отбора можно быстро получить список документов и справочников, связанных с заданным объектом. Обычно используется для отображения структуры подчиненности и других целей.

Рассмотрим использование, настройку и свойства критериев отбора в 1С 8.3.

Свойства критерия отбора в 1С

Основные свойства критериев отбора — тип (вкладка Данные) и состав (вкладка Состав).

Получите 267 видеоуроков по 1С бесплатно:

  • Тип — это необходимый тип объекта, для чего нужно будет отбирать данные.
  • Состав — список реквизитов объектов с типом значения из поля Тип , элементы которых мы будем получать в результате отбора.

Пример настройки критерия отбора

Например, мы хотим получить список банковских счетов по выбранному банку.

Для этого на вкладке Данные необходимо указать тип — СправочникСсылка.Банки. А на вкладке Состав выбрать справочник БанковскиеСчета:

Печать (Ctrl+P)

Критерии отбора

Критерии отбора – одна из составляющих механизма отбора информации. С их помощью специалист, осуществляющий конфигурирование системы, создает предопределенные правила отбора. В режиме 1С:Предприятие по этим правилам будет выполняться отбор информации в списках.
В окне редактирования объекта Критерий отбора нужно указать имя, синоним и комментарий.
Тип критерия отбора может быть любым из стандартных типов или определенных как объекты дерева конфигурации. Допускается включение реквизитов с составным типом, заданным как СправочникСсылка , ДокументСсылка и т. д., а также реквизитов с составным типом, определенным планом видов характеристик (Характеристика…).
При создании типа критерия отбора следует указать те типы, по которым требуется производить отбор. На закладке Состав по этому типу будет сформирован состав объектов конфигурации, содержащих данные, тип которых входит в тип критерия отбора. В списке требуется установить отметку для тех реквизитов, по которым будет производиться данный отбор.
Чтобы критерий отбора выполнял свои функции, в конфигураторе для него должен быть создан список (закладка Состав), состоящий из реквизитов справочников и документов. На состав списка не накладывается практически никаких ограничений: например, в отличие от графы журнала, для критерия отбора можно выбрать несколько реквизитов одного документа и реквизитов табличной части документа.
Критериев отбора может быть произвольное число, а каждый критерий может иметь несколько форм представления результатов отбора. Этот механизм полезен в случае поиска различной информации. Например, требуется отобрать все документы, в которых используется (в реквизитах и табличных частях) определенный контрагент. При этом можно учитывать и другие условия отбора информации (например, поиск ведется только среди проведенных документов или в определенном интервале дат и т. д.).
ПРИМЕЧАНИЕ. При открытии формы отбора следует передавать в нее параметр Отбор с установленным значением отбора (элемент Значение).
Критерий отбора может иметь произвольное число форм для визуального представления результатов отбора. Для оперативности получения информации по отбору вызов формы можно разместить в пользовательском меню или на панели инструментов.
Если форм критерия отбора несколько, то в свойстве Основная форма указывается та форма, которая будет вызываться по умолчанию.
Если в конфигурации определено несколько подсистем, нужно выбрать ту, к которой относится данный критерий отбора. Можно указать несколько различных подсистем.
Для вызова формы критерия отбора система размещает соответствующую команду в панели навигации формы.

/
Прикладные объекты

Назначение и устройство критериев отбора

В составе метаданных 1С:Предприятия 8 существует объект Критерий отбора . Этот объект, в отличие от большинства прикладных объектов конфигурации, не описывает каких-либо самостоятельных данных, которые будут храниться в информационной базе 1С:Предприятия. Он предназначен исключительно для описания некоторого правила выборки информации из объектных данных различных типов.

Суть решаемой задачи очень проста – нужно найти ссылки на все объекты заданных типов, которые хранят некоторое искомое значение в указанных реквизитах. Например, нужно найти все документы, связанные с определенным контрагентом, то есть имеющие в своих реквизитах (или реквизитах табличной части) ссылку на конкретный элемент справочника Контрагенты.

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

Например, если, мы будем искать по контрагенту документы " ПриходнаяНакладная ", " РасходнаяНакладная " и "Взаимозачет", то нужно выбрать реквизиты:

  • Документ.ПриходнаяНакладная .Реквизит.Поставщик;
  • Документ.РасходнаяНакладная.Реквизит.Покупатель;
  • Документ. Взаимозачет.ТабличнаяЧасть.Состав.Реквизит.Кто;
  • Документ. Взаимозачет.ТабличнаяЧасть.Состав.Реквизит.Кому.

На примере документа "Взаимозачет" заметим, что можно выбирать реквизиты из табличных частей и можно выбирать несколько реквизитов в одном объекте. Данный критерий отбора позволит найти все документы указанных трех типов, содержащие ссылку на искомого контрагента в указанных реквизитах. Фактически, критерий отбора описывает некоторую область поиска.

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

При включении в конфигурацию критерия отбора система не создает никаких таблиц, однако для оптимизации поиска создается индекс по каждому реквизиту, который указан в составе критериев отбора. Индексы будут использоваться СУБД для оптимизации получения выборки при использовании критерия отбора. Таким образом, при описании критерия отбора нужно учитывать, что система будет тратить дополнительные ресурсы на поддержание необходимых индексов.

Критерий отбора может использоваться несколькими способами.

  • может быть получена выборка с помощью метода Найти() менеджера критерия отбора;
  • может быть выполнено обращение к виртуальной таблице критерия отбора в запросе (КритерийОтбора.<имя>);
  • можно сделать форму критерия отбора или вставить в любую форму табличное поле, связанное с объектом КритерийОтбораСписок.<имя> , для отображения выборки в табличном поле;
  • можно использовать критерий отбора в отборе списка документов.

Во всех случаях выборка выполняется одним и тем же способом. Система формирует запрос к СУБД для поиска объектов, которые включают искомое значение, и формирует выборку, состоящую из найденных ссылок на объекты. Формируемый запрос представляет собой объединение запросов по каждой таблице, в которой нужно осуществить поиск.

Запросы формируются только к тем данным (таблицам), из числа описанных в критерии отбора, у которых в реквизите может быть значение того типа, значение которого в данный момент ищется. Например, критерий отбора включает ссылки на справочник физических лиц и справочник организаций, а в конкретном реквизите конкретного документа может быть ссылка только на справочник физических лиц. Тогда запрос по этому документу будет выполняться, только если в данный момент поиск выполняется по физическому лицу.

Важно учитывать, что критерий отбора всегда выбирает все искомые данные. Ни в списке, ни в других режимах не поддерживается динамическая выборка, так как информация выбирается путем объединения данных из разных таблиц. Формируемый для критерия отбора индекс позволяет сделать это достаточно быстро, но если данных в выборке окажется очень много, то выборка не будет формироваться эффективно. Поэтому целесообразно создавать критерии отбора по данным, имеющим большой разброс значений, чтобы выборки получались не очень большие. В противном случае теряется смысл такого отбора и снижается его эффективность.



Понравилась статья? Поделиться с друзьями: