|
v7: Множественный фильтр не фильтрует Ø (Mikeware 28.09.2012 11:32) | ☑ | ||
---|---|---|---|---|
0
maxxxl-ms
28.09.12
✎
11:21
|
Здравствуйте никак не могу сделать множественный фильтр на отбор по автору и проекту в документу реализации. Может кто увидит что не так.
Функция ПроверкаУсловияПоТаблицеМФ(ИмяПерем, ТаблицаМФ="", ИмяПоляМФ="", ПолеЕФ, ВидСправочникаСвойства="") Перем Результат; Перем Условие; Перем ПолеМФ, ТипМФ; Перем ПолеМФСвойств, ИмяПоляМФСвойств, ТипМФСвойств; Перем ТЗ; Результат = 1; // априори полагаем, что условие выполняется Если ПустоеЗначение(ПолеЕФ) = 0 Тогда // есть простой фильтр по позициям справочника Если ПолеЕФ.ЭтоГруппа() = 1 Тогда Результат = ИмяПерем.ПринадлежитГруппе(ПолеЕФ); // если выбрана группа в фильтре Иначе Если ИмяПерем = ПолеЕФ тогда Результат = 1; Иначе Результат = 0; КонецЕсли; КонецЕсли; Иначе ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТаблицаМФ.ВыбратьСтроки(); Пока ТаблицаМФ.ПолучитьСтроку()=1 Цикл Если (ТаблицаМФ.СписокЭлементов.РазмерСписка()>0) и (ТаблицаМФ.ИмяПеременной=ИмяПоляМФ) и (ТаблицаМФ.ФлВкл=2) Тогда Если (ТаблицаМФ.Вид<>"ЗначенияСвойств") Тогда ТипМФ = ТаблицаМФ.ТипМФ; Условие = ТаблицаМФ.СписокЭлементов; Если ТипМФ=1 Тогда // принадлежит списку Результат = Условие.Принадлежит(ИмяПерем); Иначе Результат = (Условие.Принадлежит(ИмяПерем)-1)*(-1); // не принадлежит списку КонецЕсли; Иначе // по свойствам ЕстьМФ = 0; ПолеМФ = ТаблицаМФ.СписокЭлементов; ТипМФ = ТаблицаМФ.ТипМФ; Если ТипЗначенияСтр(ПолеМФ)="СписокЗначений" Тогда Если (ПолеМФ.РазмерСписка()>0) Тогда ЕстьМФ = 1; КонецЕсли; КонецЕсли; Если ЕстьМФ = 0 Тогда Результат = 1; Иначе // теперь отбираем позиции по списку свойств ТекстЗапросаСвойств = " |Обрабатывать НеПомеченныеНаУдаление; |КатегорияПозиции = Справочник."+ВидСправочникаСвойства+".ТекущийЭлемент; |Позиция = Справочник."+ВидСправочникаСвойства+".Владелец; |СвойствоПоз = Справочник."+ВидСправочникаСвойства+".ЗначениеСвойства; |Группировка Позиция Без Групп;"; Если ТипМФ=3 Тогда ТекстЗапросаСвойств =ТекстЗапросаСвойств + "Группировка СвойствоПоз Без Групп;"; КонецЕсли; ТекстЗапросаСвойств = ТекстЗапросаСвойств + "Условие (СвойствоПоз в ПолеМФ);"; ТекстЗапросаСвойств = ТекстЗапросаСвойств + "Условие (Позиция = ИмяПерем);"; // выполняем запрос Запрос = СоздатьОбъект("Запрос"); Если Запрос.Выполнить(ТекстЗапросаСвойств)=0 Тогда Результат = 0; Иначе Запрос.Выгрузить(ТЗ,0); Если (ТЗ.КоличествоСтрок() = 0) и ((ТипМФ=1)или(ТипМФ=3)) Тогда // если запрос ничего не принес и тип фильтра = "входит в список" Результат = 0; Иначе НомерСтроки = 0; Если (ТипМФ=1) или (ТипМФ=3) Тогда // принадлежит списку или одновременно все Результат = ТЗ.НайтиЗначение(ИмяПерем, НомерСтроки, "Позиция"); Иначе Результат = (ТЗ.НайтиЗначение(ИмяПерем, НомерСтроки, "Позиция")-1)*(-1); // не принадлежит списку КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; Возврат Результат; КонецФункции // ПроверкаУсловияПоТаблицеМФ |
|||
1
Ёпрст
28.09.12
✎
11:23
|
(0) да всё не так.
|
|||
2
maxxxl-ms
28.09.12
✎
11:24
|
(2) не смешно
|
|||
3
maxxxl-ms
28.09.12
✎
11:25
|
(1) не смешно(((
|
|||
4
Ёпрст
28.09.12
✎
11:25
|
(2) мне тоже.
|
|||
5
ЧеловекДуши
28.09.12
✎
11:27
|
Пятницо!!!
Все там работает, у Автора, руки из ЖПЫ растут :) |
|||
6
Nirvana
28.09.12
✎
11:27
|
Для начала:
Если (СокрЛП(ТаблицаМФ.Вид)<>"ЗначенияСвойств") Тогда ... |
|||
7
Ёпрст
28.09.12
✎
11:27
|
весь свой код в топку, открыть любой типовой отчет, типа ПнализПродаж и скопирять оттуда:
глДобавитьВТаблицуМФ( + глФильтрПоПеременнойЗапроса(....) всё. |
|||
8
Ёпрст
28.09.12
✎
11:28
|
т.е сделать полный аналог, подсунув свой текст запроса, нужные группировки и условия в МФ.
усё. А не изобретать велик и портить МФ |
|||
9
maxxxl-ms
28.09.12
✎
11:30
|
ЧеловекДуши у тебя в мозгу одно гвно ток серишь везде своими "мыслями"...
|
|||
10
Sh1ko
28.09.12
✎
11:32
|
Агрессивные дятлы, это страшно.
|
|||
11
Mikeware
28.09.12
✎
11:32
|
(9) Научись вести себя прилично.
а потом уже приходи с вопросами... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |