Имя: Пароль:
1C
1С v8
Фильтр один, отбор по трем полям
,
0 Rumpil
 
01.02.12
18:07
Есть список клиентов, в карточке клиента есть 3 идентичных поля - Телефон1, Телефон2, Телефон3. У формы списка есть фильтр (один), который называется Телефон. Нужно чтобы при вводе значение в это поле фильтра происходил отбор списка клиентов - если хотя бы одно из трех полей Телефон 1 2 3 содержит введенное в фильтр значение, то клиент отбирается. В какую сторону копать плиз ?

Что то типа этого, но как то используя ИЛИ что ли ?

   ЭлементыФормы.СписокКонтрагенты.Значение.Отбор.Телефон1.Использование=Истина;
   ЭлементыФормы.СписокКонтрагенты.Значение.Отбор.Телефон1.ВидСравнения=ВидСравнения.Содержит;
   ЭлементыФормы.СписокКонтрагенты.Значение.Отбор.Телефон1.Значение=СокрЛП(ФильтрПоТелефон);
1 Rumpil
 
01.02.12
18:15
Единственный вариант на ум приходит - написать запрос, который отберет по справочнику клиенты элементы отвечающие фильтру, а потом на список клиенто поставить фильтр код с типом сравнения "содержит" и пихнуть коды элементов из результата запроса
2 Пират
 
01.02.12
18:15
ЭлементОтбора.ВидСравнения = ВидСравнения.ВСписке;
3 Живой Ископаемый
 
01.02.12
18:16
никак
4 Rumpil
 
01.02.12
18:16
(2) не работает такое
5 Живой Ископаемый
 
01.02.12
18:16
2(1) вот-вот...
6 Rumpil
 
01.02.12
18:16
(3) вариант с запросом только ?
7 Живой Ископаемый
 
01.02.12
18:19
Еще прикольно почему нет отбора на Ссылка ВСписке, да впрочем и на "=" тоже
2(6) да, только не " список клиенто поставить фильтр код с типом сравнения "содержит" и пихнуть коды элементов из результата запроса"

а фильтр на поле "Код в СПИСКЕ " и скормить список кодов полученных контрагентов.. в общем ужасно
8 fisher
 
01.02.12
18:25
(1) Рабочий вариант для 8.1, делал подобное. Только не на код, а на ссылку фильтр. И группы при таком подходе не фильтруются (пустые выводятся тоже).
А для 8.2 можно ж вроде написать свой запрос для источника данных формы списка. Разве не взлетит?
9 Reset
 
01.02.12
18:26
(7) Как нету отбора на ссылку в списке?
10 Reset
 
01.02.12
18:27
Форма.СправочникСписок.Отбор.Ссылка.ВидСравнения=ВидСравнения.ВСписке;
Форма.СправочникСписок.Отбор.Ссылка.Значение=СписокЗначений;
Форма.СправочникСписок.Отбор.Ссылка.Использование=Истина;
Работает такое
11 Живой Ископаемый
 
01.02.12
18:29
2(10) может гоню, просто смотрел в интерактивном отборе - нету ССылка
12 Reset
 
01.02.12
18:29
(11) Да, только программно
13 Живой Ископаемый
 
01.02.12
18:29
2(8) мы про обычные формы?
14 Живой Ископаемый
 
01.02.12
18:30
2(12) а, тогда супер...
15 Rumpil
 
01.02.12
18:31
Все заработало, сделал запрос, получил список значений кодов клиентов и потом как в (10) отбор поставит
16 Reset
 
01.02.12
18:31
Я тоже думал что обычные. В УФ у меня ноль опыта, но таки там вроде существенно ширше(ширее) возможности. В частности, вроде возмождны по ИЛИ отборы (как вроде автору и надо) [могу соврать]
17 fisher
 
01.02.12
18:31
(13) Я бы переделал на управляемую ради такого дела, если взлетит. Условие на ссылку не гуд. Притормаживает на больших списках вестимо.
18 Чарльз Треч
 
01.02.12
18:33
(0) Сделай секретное поле "Телефон4", содержащее Телефон+" "+Телефон2+" "+Телефон3, и фильтруй по нему.
19 Rumpil
 
01.02.12
18:35
Вот код если кому понадобится:

Запрос = Новый Запрос;
           Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
                          |    Контрагенты.Код
                          |ИЗ
                          |    Справочник.Контрагенты КАК Контрагенты
                          |ГДЕ
                          |    Контрагенты.Телефон1 ПОДОБНО &Телефон
                          |    ИЛИ Контрагенты.Телефон2 ПОДОБНО &Телефон
                          |    ИЛИ Контрагенты.Телефон3 ПОДОБНО &Телефон";
           Запрос.УстановитьПараметр("Телефон",ФильтрПоТелефон);
           Выборка = Запрос.Выполнить().Выбрать();
           СписокКодов = Новый СписокЗначений;

       пока Выборка.Следующий() Цикл
           СписокКодов.Добавить(Выборка.Код);
       КонецЦикла;    
                 
   ЭлементыФормы.СписокКонтрагенты.Значение.Отбор.Код.Использование=Истина;
   ЭлементыФормы.СписокКонтрагенты.Значение.Отбор.Код.ВидСравнения=ВидСравнения.ВСписке;
   ЭлементыФормы.СписокКонтрагенты.Значение.Отбор.Код.Значение=СписокКодов;
20 Reset
 
01.02.12
18:35
(18) только там какой-нибудть НПП или еще пожутче символ, для уменьшения риска совпадения :)
21 Rumpil
 
01.02.12
18:36
тьфу, только убрать ПЕРВЫЕ 1
22 Reset
 
01.02.12
18:37
(19) ЭлементыФормы.СписокКонтрагенты.Значение == СписокКонтрагенты (как правило)
Отбор устанавливается на источник данных.
23 Живой Ископаемый
 
01.02.12
18:38
2(22) это что?
24 Reset
 
01.02.12
18:38
пока Выборка.Следующий() Цикл
           СписокКодов.Добавить(Выборка.Код);
       КонецЦикла

RTFM -- > СписокКодов.ЗагрузитьЗначения
25 Reset
 
01.02.12
18:39
(23) докопался до написания. "СписокКонтрагенты" короче, при водит к тому же результату, и, имхо, читабельней.
26 Живой Ископаемый
 
01.02.12
18:39
а..
27 Пират
 
01.02.12
19:07
(4) работает и еще как.
28 Живой Ископаемый
 
01.02.12
19:09
2(27) работает как в (10)и (19)
А если
ЭлементОтбора.ВидСравнения = ВидСравнения.ВСписке;
ЭлементОбора.Список = СписокСодержащийНомер1Номер2ИНомер3, то конечно не сработает... вернее сработает, но выдаст муйню
29 Пират
 
01.02.12
19:12
(28) Я обычно, пишу запрос по условиям, выгружаю нужные данные
в ЭлементОтбора.Значение = СписокЗначений
ЭлементОтбора.Использование = Истина.
30 Пират
 
01.02.12
19:13
+(29) и все без проблем работает
31 Живой Ископаемый
 
01.02.12
19:15
2(29) в (2) про это НИ СЛОВА.
И тогда уж конечно вступает в свои права фантазия читающего. Можно  нафантазировать (28), а можно (29) но фокус в том, что человек и спрашивал про способ описанный в (29)
32 Пират
 
01.02.12
19:16
(31) не догадались... значит :)
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс