Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Программный отбор на форме списка
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
l2d808
1С:Підприємство 8.3 (8.3.12.1440)

Добрый день уважаемое сообщество. Нужна помощь.Конфигурация самописная.
Делаю Отбор на форме списка.По трём реквизитам. При отборе срабатывает только 1 раз. Второй отбор уже не срабатывает.

Код
&НаСервере
Процедура ВстановитиВідбірМодель()
    Если ЗначениеЗаполнено(ВідбірМодель) Тогда
//ТекЭлементОтбора = Список.Отбор.Элементы;
//ТекЭлементОтбора.Очистить();

ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.РежимОтображения =  РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("МодельТранспортногоЗасобу");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = ВідбірМодель;
ЭлементОтбора.Использование = Истина;

ИначеЕсли ЗначениеЗаполнено(ВідбірПідрозділ) Тогда
//ТекЭлементОтбора = Список.Отбор.Элементы;
//ТекЭлементОтбора.Очистить();

ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.РежимОтображения =  РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Підрозділ");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = ВідбірПідрозділ;
ЭлементОтбора.Использование = Истина;


ИначеЕсли ЗначениеЗаполнено(ВідбірНадходження) Тогда
//ТекЭлементОтбора = Список.Отбор.Элементы;
//ТекЭлементОтбора.Очистить();

ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.РежимОтображения =  РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СпосібНадходження");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = ВідбірНадходження;
ЭлементОтбора.Использование = Истина;

Иначе
ТекЭлементОтбора = Список.Отбор.Элементы;
ТекЭлементОтбора.Очистить();
КонецЕсли;
КонецПроцедуры


Так же делаю и по другому реквизиту :
&НаСервере
Процедура ВстановитиВідбірНадходження()
    Если ЗначениеЗаполнено(ВідбірНадходження) Тогда
ТекЭлементОтбора = Список.Отбор.Элементы;
ТекЭлементОтбора.Очистить();

ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.РежимОтображения =  РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СпосібНадходження");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = ВідбірНадходження;
ЭлементОтбора.Использование = Истина;
ИначеЕсли ЗначениеЗаполнено(ВідбірМодель) Тогда
//ТекЭлементОтбора = Список.Отбор.Элементы;
//ТекЭлементОтбора.Очистить();

ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.РежимОтображения =  РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("МодельТранспортногоЗасобу");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = ВідбірМодель;
ЭлементОтбора.Использование = Истина;
ИначеЕсли ЗначениеЗаполнено(ВідбірПідрозділ) Тогда
//ТекЭлементОтбора = Список.Отбор.Элементы;
//ТекЭлементОтбора.Очистить();

ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.РежимОтображения =  РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Підрозділ");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = ВідбірПідрозділ;
Иначе
ТекЭлементОтбора = Список.Отбор.Элементы;
ТекЭлементОтбора.Очистить();
КонецЕсли;
КонецПроцедуры

Vofka
l2d808, а как может сработать несколько условий, если вы говорите "или так, или так, или так"?
Если правильно понял, то вам нужно каждый отбор поместить в блок Если ... КонецЕсли, а не Если ... ИначеЕсли ... ИначеЕсли.
l2d808
Vofka @ Вчера, 21:08 необходимо зарегистрироваться для просмотра ссылки ,
Vofka @ Вчера, 21:08 необходимо зарегистрироваться для просмотра ссылки ,
Помещаю отбор в Если...КонецЕсли
Процедура Відбір()
Если ЗначениеЗаполнено(ВідбірМодель) Тогда
ТекЭлементОтбора = Список.Отбор.Элементы;
ТекЭлементОтбора.Очистить();

ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.РежимОтображения =  РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("МодельТранспортногоЗасобу");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = ВідбірМодель;
ЭлементОтбора.Использование = Истина;
КонецЕсли;
Если  ЗначениеЗаполнено(ВідбірПідрозділ) Тогда
ТекЭлементОтбора = Список.Отбор.Элементы;
ТекЭлементОтбора.Очистить();

ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.РежимОтображения =  РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Підрозділ");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = ВідбірПідрозділ;
ЭлементОтбора.Использование = Истина;
КонецЕсли;
Если ЗначениеЗаполнено(ВідбірНадходження) Тогда
ТекЭлементОтбора = Список.Отбор.Элементы;
ТекЭлементОтбора.Очистить();

ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.РежимОтображения =  РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СпосібНадходження");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = ВідбірНадходження;
ЭлементОтбора.Использование = Истина;
КонецЕсли;


Но при выборе следующего отбора первый отбор не работает
ed.kharkov
l2d808 @ Сегодня, 11:18 необходимо зарегистрироваться для просмотра ссылки ,
Добрый день.

В каждом блоке Если вы очищаете элементы отбора
ТекЭлементОтбора.Очистить();
l2d808
Очищаю в каждом Если..КонецЕсли отбора для того чтоб отбор работал не один раз.Если не очищать то при наложении еще раз отбора он не срабатывает.
ed.kharkov
l2d808 @ Сегодня, 12:12 необходимо зарегистрироваться для просмотра ссылки ,
Попробуйте вот так

ТекЭлементОтбора = Список.Отбор.Элементы;
ТекЭлементОтбора.Очистить();

Если ЗначениеЗаполнено(ВідбірМодель) Тогда
   ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
   ЭлементОтбора.РежимОтображения =  РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
   ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("МодельТранспортногоЗасобу");
   ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
   ЭлементОтбора.ПравоеЗначение = ВідбірМодель;
   ЭлементОтбора.Использование = Истина;
КонецЕсли;
Если  ЗначениеЗаполнено(ВідбірПідрозділ) Тогда
   ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
   ЭлементОтбора.РежимОтображения =  РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
   ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Підрозділ");
   ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
   ЭлементОтбора.ПравоеЗначение = ВідбірПідрозділ;
  ЭлементОтбора.Использование = Истина;
КонецЕсли;
Если ЗначениеЗаполнено(ВідбірНадходження) Тогда
   ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
   ЭлементОтбора.РежимОтображения =  РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
   ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СпосібНадходження");
   ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
   ЭлементОтбора.ПравоеЗначение = ВідбірНадходження;
   ЭлементОтбора.Использование = Истина;
КонецЕсли;
l2d808
Огромное спасибо.Все получилось как надо.
Vofka
l2d808, для спасибо кнопочка специальная есть.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.