Отбор на форме списка документов УФ

1. TODD22 18 10.11.15 11:25 Сейчас в теме
Здравствуйте.

Как правильно сделать отбор на форму списка документов?
Мне нужно в форме списка сделать 2 поля. Первое это ДатаВхДокумента, второе это Номенклатура.

Хочу сделать возможность устанавливать отбор по дате входящего документа и по номенклатуре.

Нашёл вот такой пример:
На форму добавил реквизит формы с типом спр.Номенклатура.
	 	ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
		ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
		ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номенклатура");
		ЭлементОтбора.ПравоеЗначение = Элементы.Номенклатура;
		ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
		ЭлементОтбора.Использование = Истина;
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. m-serg74 46 10.11.15 11:28 Сейчас в теме
3. TODD22 18 10.11.15 11:29 Сейчас в теме
8. m-serg74 46 10.11.15 11:54 Сейчас в теме
10. EMelihoff 10.11.15 11:56 Сейчас в теме
(8) m-serg74, Номенклатура в табличной части документа же?
13. TODD22 18 10.11.15 12:06 Сейчас в теме
(10) EMelihoff, Нет это реквизит.
16. m-serg74 46 10.11.15 12:12 Сейчас в теме
(10) EMelihoff, в какой ТЧ, он же написал,
На форму добавил реквизит формы с типом спр.Номенклатура
5. Boneman 298 10.11.15 11:46 Сейчас в теме
(1) TODD22, не реквизит формы надо добавлять, а реквизит объекта.
По реквизиту формы отбор не сделаешь, т.к. ввиду отсутствия самой формы,в списке документов его нет.
6. EMelihoff 10.11.15 11:50 Сейчас в теме
(1) TODD22, список документов, динамический список?
7. EMelihoff 10.11.15 11:51 Сейчас в теме
(1) TODD22, если список динамический, есть рекомендации делать через критерии отбора:
ВЫБРАТЬ
	КО.Ссылка,
	КО.ВерсияДанных,
	КО.ПометкаУдаления,
	КО.Номер,
	КО.Дата,
	КО.Проведен,
	КО.Контрагент,
	КО.Проект,
	КО.Сумма,
	КО.МоментВремени
ИЗ
	Документ.РасходнаяНакладная КАК КО
		ЛЕВОЕ СОЕДИНЕНИЕ КритерийОтбора.ПоНоменклатуре(&Номенклатура) КАК Док
		ПО Док.Ссылка = КО.Ссылка
ГДЕ
	(Док.Ссылка = КО.Ссылка
			ИЛИ &Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))
Показать
4. dj_serega 390 10.11.15 11:43 Сейчас в теме
 ЭлементОтбора.ПравоеЗначение = Элементы.Номенклатура;

заменить на
ЭлементОтбора.ПравоеЗначение = Номенклатура;
11. TODD22 18 10.11.15 12:02 Сейчас в теме
(4) dj_serega, Вроде получилось. Только такой момент.
Я сделал функцию в обработчике реквизита номенклатура при изменении на клиенте.
Когда открываю форму у меня в списке все документы. Затем выбираю номенклатуру и у меня срабатывает отбор.
Но если я очищаю реквизит номенклатуры то у меня список документов вообще пустой.
14. antz 10.11.15 12:09 Сейчас в теме
(11) TODD22, при изменении надо проверять номенклатуру на заполнение и если не заполнено - очищать отбор.
15. TODD22 18 10.11.15 12:11 Сейчас в теме
(14) antz, Тогда надо вызывать сервер? Или есть метод проверки на клиенте?
Попробовал проверить через ф-ю ЗначениеЗаполнено() ругается на мутабельное значение.
17. m-serg74 46 10.11.15 12:13 Сейчас в теме
(15) TODD22,
через ф-ю ЗначениеЗаполнено()

опять Элемент.Номенклатура проверяешь?
18. TODD22 18 10.11.15 12:18 Сейчас в теме
(17) m-serg74, Да точно :)

Но всё равно срабатывает только 1 раз. Второй отбор уже не срабатывает.
19. dj_serega 390 10.11.15 12:20 Сейчас в теме
(18) TODD22, Код установки/очистки отбора дайте
20. TODD22 18 10.11.15 12:23 Сейчас в теме
(19) dj_serega,
&НаКлиенте
Процедура НоменклатураПриИзмененииНаСервере()
	
	 Если ЗначениеЗаполнено(Номенклатура) Тогда 
		ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
		ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
		ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номенклатура");
		ЭлементОтбора.ПравоеЗначение = Номенклатура;
		ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
		ЭлементОтбора.Использование = Истина;
	КонецЕсли;

КонецПроцедуры
Показать

Вот код установки отбора. По первой номенклатуре срабатывает. Если выбираю вторую номенклатуру то не срабатывает. Просто пустой список.
Как его правильно очистить?
21. antz 10.11.15 12:29 Сейчас в теме
(20) TODD22,

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


+ ты при КАЖДОМ изменении номенклатуры ДОБАВЛЯЕШЬ этот элемент отбора. Зачем?
22. dj_serega 390 10.11.15 12:30 Сейчас в теме
(20) TODD22, если других отборов нет то:
&НаКлиенте
Процедура НоменклатураПриИзмененииНаСервере()
    Список.Отбор.Элементы.Очистить();
     Если ЗначениеЗаполнено(Номенклатура) Тогда 
        ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
        ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номенклатура");
        ЭлементОтбора.ПравоеЗначение = Номенклатура;
        ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
        ЭлементОтбора.Использование = Истина;
    КонецЕсли;

КонецПроцедуры
Показать
9. EMelihoff 10.11.15 11:55 Сейчас в теме
&НаКлиенте
Процедура ТоварПриИзменении(Элемент)
	Список.Параметры.УстановитьЗначениеПараметра("Номенклатура", Товар); 
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Список.Параметры.УстановитьЗначениеПараметра("Номенклатура", Товар); 
КонецПроцедуры
Показать
12. TODD22 18 10.11.15 12:05 Сейчас в теме
Что то не получается. Отбор один раз только накладывается.
А дальше отбор не работает. Выбираю последующие виды номенклатуры список пустой.
23. TODD22 18 10.11.15 12:30 Сейчас в теме
Получилось

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

	КонецЕсли;
Показать
24. dj_serega 390 10.11.15 12:32 Сейчас в теме
(23) TODD22, Если конфа на БСП, я бы посоветовал использовать общие процедуры:
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора();
25. TODD22 18 10.11.15 12:35 Сейчас в теме
(24) dj_serega, Нет конфа рукоблудная :(
26. floodprog 23 26.06.17 13:28 Сейчас в теме
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)