Версия для печати темы (https://pro1c.org.ua/index.php?s=147e80fd946e495476d688b99a5fe414&showtopic=47361)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Программный отбор на форме списка

Автор: l2d808 21.08.18, 15:07

1С:Підприємство 8.3 (8.3.12.1440)

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

Код

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

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

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

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


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

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

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


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

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

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

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


Автор: Vofka 21.08.18, 20:08

l2d808, а как может сработать несколько условий, если вы говорите "или так, или так, или так"?
Если правильно понял, то вам нужно каждый отбор поместить в блок Если ... КонецЕсли, а не Если ... ИначеЕсли ... ИначеЕсли.

Автор: l2d808 22.08.18, 10:18

Vofka @ Вчера, 21:08 * ,
Vofka @ Вчера, 21:08 * ,
Помещаю отбор в Если...КонецЕсли

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

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

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

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


Но при выборе следующего отбора первый отбор не работает

Автор: ed.kharkov 22.08.18, 10:29

l2d808 @ Сегодня, 11:18 * ,
Добрый день.

В каждом блоке Если вы очищаете элементы отбора

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

Автор: l2d808 22.08.18, 11:12

Очищаю в каждом Если..КонецЕсли отбора для того чтоб отбор работал не один раз.Если не очищать то при наложении еще раз отбора он не срабатывает.

Автор: ed.kharkov 22.08.18, 11:17

l2d808 @ Сегодня, 12:12 * ,
Попробуйте вот так

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

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

Автор: l2d808 22.08.18, 11:31

Огромное спасибо.Все получилось как надо.

Автор: Vofka 26.08.18, 11:19

l2d808, для спасибо кнопочка специальная есть.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua