Отбор в форме списка

Для программной установки отбора в форме списка предназначено свойство Filter объекта V8ListDataSource.
Свойство Filter является коллекцией FilterCollection, в которой содержатся элементы типа V8Filter.
Каждый элемент V8Filter задает одно условие отбора, связанное с одним полем таблицы.

Класс V8Filter содержит следующие свойства и методы:

Наименование свойства Тип свойства Описание
FieldName string Возвращает или задает имя поля, по которому устанавливается отбор
Condition V8FilterCondition Возвращает или задает условие отбора (равно, не равно, больше, меньше и т.д.)
Value1 object Возвращает или задает значение, с которым произодится сравнение
ValueType1 V8TypeInfo Возвращает или задает тип значения (тип свойства Value1)
Presentation1 string Возвращает или задает представление значения (свойства Value1)
Value2 object Возвращает или задает второе значение, с которым производится сравнение (в случае использования интервала в качестве условия сравнения)
ValueType2 V8TypeInfo Возвращает или задает тип второго значения (тип свойства Value2)
Presentation2 string Возвращает или задает представление второго значения (свойства Value2)
Disabled bool Возвращает или задает доступность условия отбора
Visible bool Возвращает или задает видимость условия отбора
Checked bool Возвращает или задает использование условия отбора

Наименование метода Описание
ToString Возвращает строковое представление условия отбора. Используется для передачи в качестве параметра в формах приложения
Parse Создает объект V8Filter по его строковому представлению

Примеры использования

Установка отбора

Копировать в буфер обмена
private void Page_Load(object sender, EventArgs e)
{
if (!IsPostabck)
{
V8TypeInfo typeInfo = ListDataSource.Metadata.TypesInfo[V8Consts.kBooleanTypeString];

V8Filter filter = new V8Filter();
filter.FieldName = "Проведен";
filter.ValueType1 = typeInfo;
filter.Value1 = true;
filter.Presentatiion1 = typeInfo.EnumPresentations[1];
filter.Condition = V8FilterCondition.Equal;
filter.Checked = true;
filter.Disabled = false;
filter.Visible = true;

ListDataSource.Filter["Проведен"] = filter;
}
}

Установка отбора по ссылочному полю

В этом примере переменная keyRef содержит ссылку на элемент справочника "Склады".

Копировать в буфер обмена
private void Page_Load(object sender, EventArgs e)
{
if (!IsPostabck)
{
V8TypeInfo typeInfo = ListDataSource.Metadata.TypesInfo["СправочникСсылка_Склады"];

V8Filter filter = new V8Filter();
filter.FieldName = "Склад";
filter.ValueType1 = typeInfo;
filter.Value1 = keyRef;
filter.Presentatiion1 = V8WebUtil.FormatValue(keyRef, "", ListDataSource.Metadata,
ListDataSource.TableInfo, "Склад");
filter.Condition = V8FilterCondition.Equal;
filter.Checked = true;
filter.Disabled = false;
filter.Visible = true;

ListDataSource.Filter["Склад"] = filter;
}
}

Установка отбора по  полю типа Перечисление

Копировать в буфер обмена
private void Page_Load(object sender, EventArgs e)
{
if (!IsPostabck)
{
V8TypeInfo typeInfo = ListDataSource.Metadata.TypesInfo["ПеречислениеСсылка_ВидыСкладов"];

V8Filter filter = new V8Filter();
filter.FieldName = "ВидСклада";
filter.ValueType1 = typeInfo;
filter.Value1 = _1C.V8.ПеречислениеСсылка_ВидыСкладов.НеавтоматизированнаяТорговаяТочка;
filter.Presentatiion1 =
V8.GetEnumPresentation(_1C.V8.ПеречислениеСсылка_ВидыСкладов.НеавтоматизированнаяТорговаяТочка,
ListDataSource.Metadata);
filter.Condition = V8FilterCondition.Equal;
filter.Checked = true;
filter.Disabled = false;
filter.Visible = true;

ListDataSource.Filter["ВидСклада"] = filter;
}
}

В этих примерах также продемонстрированы различные способы получения представлений значений.

Установка отбора с видом условия Интервал

Копировать в буфер обмена
private void Page_Load(object sender, EventArgs e)
{
if (!IsPostabck)
{
V8TypeInfo typeInfo = ListDataSource.Metadata.TypesInfo[V8Consts.kDateType];

V8Filter filter = new V8Filter();
filter.FieldName = "Дата";
filter.ValueType1 = typeInfo;
filter.Value1 = new DateTime(2005, 1, 1);
filter.Presentatiion1 = V8WebUtil.FormatValue(filter.Value1, "", ListDataSource.Metadata,
ListDataSource.TableInfo, "Дата");
filter.ValueType2 = typeInfo;
filter.Value2 = new DateTime(2006, 1, 1);
filter.Presentatiion2 = V8WebUtil.FormatValue(filter.Value2, "", ListDataSource.Metadata,
ListDataSource.TableInfo, "Дата");
filter.Condition = V8FilterCondition.IntervalGreatEqLess;
filter.Checked = true;
filter.Disabled = false;
filter.Visible = true;

ListDataSource.Filter["Дата"] = filter;
}
}

Работа пользователей с отборами

Отборы, заданные через свойство Filter объекта V8ListDataSource, редактируются при помощи авто-формы DefaultFilterForm.
Для управления видимостью и доступностью изменения предназначены свойства Visible и Disabled объекта V8Filter.

Пример 1: установить отбор в списке по полю "Склад" и запретить пользователю изменять этот отбор (переменная keyRef содержит ссылку на элемент справочника "Склады").

Копировать в буфер обмена
private void Page_Load(object sender, EventArgs e)
{
if (!IsPostabck)
{
V8TypeInfo typeInfo = ListDataSource.Metadata.TypesInfo["СправочникСсылка_Склады"];

V8Filter filter = new V8Filter();
filter.FieldName = "Склад";
filter.ValueType1 = typeInfo;
filter.Value1 = keyRef;
filter.Presentatiion1 = V8WebUtil.FormatValue(keyRef, "", ListDataSource.Metadata,
ListDataSource.TableInfo, "Склад");
filter.Condition = V8FilterCondition.Equal;
filter.Checked = true;
filter.Disabled = true;
filter.Visible = true;

ListDataSource.Filter["Склад"] = filter;
}
}

Пример 2: скрыть из формы отборов отбор по полю "Склад".

Копировать в буфер обмена
private void Page_Load(object sender, EventArgs e)
{
if (!IsPostabck)
{
ListDataSource.Filter["Склад"].Visible = false;
}
}

ВАЖНО!
Если у объекта V8Filter свойство Visible=false, то все настройки условия отбора не сохраняются. То есть, значения свойств Disabled, Checked, Condition, Value, ValueType и т.д. не используются и сбрасываются в значения по умолчанию.

Если у объекта V8Filter свойство Checked=false, то все настройки условия отбора, кроме значения свойств Visible и Disabled, не сохраняются.

ПРИМЕЧАНИЕ
Коллекция Filter объекта V8ListDataSource сохраняется во ViewState. Поэтому заполнение этой коллекции при каждом postback'е не требуется.