отбор на тонком клиенте

1. Manticor 66 18.02.13 16:30 Сейчас в теме
В УТ11 в документе заказ товаров поставщику реализованы отборы.
Перетягиваю процедуры отбора на самописку под 8.2.

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


В отладчике "Список.Отбор.Элементы" - нет никаких данных, тогда как в УТ есть. Мое приложение вылетает с ошибкой Поле объекта недоступно для записи (Отбор). Что где какую галку поставить?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
15. visard2 19.02.13 18:25 Сейчас в теме
Отборы = Список.Отбор.Элементы;
Для Каждого Отбор Из Отборы Цикл
Если Отбор.ЛевоеЗначение = "Какое то Значение" Тогда
Отбор.Использование = Ложь;
КонецЕсли;
КонецЦикла;

Как-то так
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Diose 18.02.13 16:44 Сейчас в теме
Смотри в УТ что такое Список.
3. Manticor 66 18.02.13 16:52 Сейчас в теме
(2) Diose, что в УТ, что у меня - список это табличная часть формы списка
4. frolov.dns 9 18.02.13 19:32 Сейчас в теме
Можно попробовать установить отбор вручную вручную:

ОтборОбъект = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

ОтборОбъект.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборОбъект.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект"); // Тут указываем имя поля для отбора
ОтборОбъект.ПравоеЗначение = Параметры.ВладелецФайла; // тут указываем ссылку для отбора
ОтборОбъект.Использование = Истина;
5. Manticor 66 19.02.13 12:00 Сейчас в теме
(4) frolov.dns, сделал так:
&НаКлиенте
Процедура ТипВызоваПриИзменении(Элемент)
	
ОтборОбъект = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); 
ОтборОбъект.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный;

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



&НаСервере
Функция ПолучитьПеречисление()
	Если ЭтаФорма.ТипВызова = Перечисления.ТипыВызова.Входящий Тогда		
		Фильтр = Справочники.ПоляDirEx.НайтиПоНаименованию("12"); 
		
	ИначеЕсли ЭтаФорма.ТипВызова = Перечисления.ТипыВызова.Исходящий тогда
		Фильтр = Справочники.ПоляDirEx.НайтиПоНаименованию("13");
	Иначе Фильтр = 	 Неопределено;
	КонецЕсли;
Возврат Фильтр
КонецФункции // ПолучитьПеречисление()
Показать

В итоге когда октрывается форма списка на тонком клинете - если не менять значения типа вызова- отображается весь полный список. Если указываю входящий-12(или исходящий-13) - то фильтрует по типу, но если я после еще раз ставлю фильтр или просто очищаю его - ничего в списке не отображается.
Какой параметр дописать?
6. Diose 19.02.13 12:57 Сейчас в теме
7. Diose 19.02.13 13:01 Сейчас в теме
СправочникСписок.Отбор.Сбросить();
10. Manticor 66 19.02.13 14:35 Сейчас в теме
(7) Diose, сбросить()- такого метода нет. По ссылке - там описано как устанавливать первоначально этот отбор, а вот как ПЕРЕустанавливать - нет(.
(8) visard2, Если ТипЗнч(ЭтаФорма.ВладелецФормы) = Тип("ПолеФормы") а для чего это условие? в отладчике ТипЗнч(ЭтаФорма.ВладелецФормы) = неопределено. Темболее это все делается раз при открытии. А у меня цель - чтобы группировалось при выюоре на форме типа вызова.
Функция ПолучитьСписокДоступныхСостояний Вы используете эту функцию для множественных параметров?
8. visard2 19.02.13 13:20 Сейчас в теме
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если ТипЗнч(ЭтаФорма.ВладелецФормы) = Тип("ПолеФормы") Тогда
СписокВыбора = ЭтаФорма.ВладелецФормы.СписокВыбора;

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

КонецЕсли;
КонецПроцедуры

&НаСервере
Функция ИТ_ппПолучитьСписокДоступныхСостояний(ТекСостояние, ИспользоватьПравилаПерехода = Неопределено,ПоУмолчанию = Неопределено, ПроверятьРоли = Истина) Экспорт

СписокДоступныхЗначений = Новый СписокЗначений;
//СписокДоступныхЗначений нужно заполнить тем, чем нужно!!!
КонецФункции;
9. visard2 19.02.13 13:21 Сейчас в теме
ПолучитьСписокДоступныхСостоянийНаСервере вместо ПолучитьСписокДоступныхСостояний
11. visard2 19.02.13 15:01 Сейчас в теме
В ПолучитьСписокДоступныхСостоянийНаСервере передается любое значение, которое нельзя получить на клиенте, полученное на сервере
ТипЗнч(ЭтаФорма.ВладелецФормы) = Тип("ПолеФормы") - это условие вам не нужно, у меня там проверка была. Я просто скопировал код, как у меня это реализовано.
12. visard2 19.02.13 15:03 Сейчас в теме
Если ВидСравненияКомпоновкиДанных.ВСписке, то возвращать нужно спикок значений, ЕслиВидСравненияКомпоновкиДанных.Равно, то любое значение, по типу совпадающее с левым значением.
13. Diose 19.02.13 15:07 Сейчас в теме
Попробуй
Список.Отбор.Элементы.Очистить()
14. Manticor 66 19.02.13 17:49 Сейчас в теме
(13) Diose, да так очищает, но полностью от всего фильтра.
(12) visard2, в общем сделал так:
Список.Отбор.Элементы.Очистить();
	ОтборОбъект = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); 
	ОтборОбъект.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный;
	
	ОтборОбъект.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборОбъект.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("DirEX"); // Тут указываем имя поля для отбора 
	ОтборОбъект.ПравоеЗначение = ПолучитьПеречисление();
	ОтборОбъект.Использование = Истина;
	Элементы.Список.Обновить(); 
Показать

А как быть, если на пример на форме стоит более 3-х отборов? как тогда учитывать отбор по предыдущим? И соответственно очищать какой-то один отбор.
Поэтому я и взял сразу типовой мехенизм, но сразу загвоздка вышла с Список.Отбор.Элементы. Вероятно они как то программно ранее попадают в отбор, но откуда?
15. visard2 19.02.13 18:25 Сейчас в теме
Отборы = Список.Отбор.Элементы;
Для Каждого Отбор Из Отборы Цикл
Если Отбор.ЛевоеЗначение = "Какое то Значение" Тогда
Отбор.Использование = Ложь;
КонецЕсли;
КонецЦикла;

Как-то так
16. Manticor 66 20.02.13 16:44 Сейчас в теме
(15) visard2, Впринцыпе да, подходит. Только придется условий много понаставить. В типовой как я понял - все элемгнато через массив реализовано. А как проверит, что наш отбор - это ГруппаЭлементовОтбораКомпоновкиДанных.
Проверяю так:

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

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

Список.Отбор.Элементы[0]=Тип("ГруппаЭлементовОтбораКомпоновкиДанных") - так тоже не принимает - пишет ложь
так ругается на обращение. В отладчике есть такие поля для доступа:
Прикрепленные файлы:
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот