AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.06.2006, 11:16   #1  
unalexia is offline
unalexia
Участник
 
79 / 10 (1) +
Регистрация: 28.12.2005
Люди! Подскажите пожалуйста, есть решение применения в Navision так называемых "исключающих фильтров"? То есть, используя FILTERGROUP, я хочу ограничить видимость для пользователей плана счетов. Есть диапазоны, которые пользователь не должен видеть при определенном мной условии.

типа:
Пользователь1 видит план счетов (<>счет100..счет105)
Пользователь2 видит план счетов (<>счет101..счет106)
Старый 13.06.2006, 12:12   #2  
Fordewind is offline
Fordewind
Участник
 
1,134 / 10 (3) +
Регистрация: 01.12.2005
а в чем проблема?
записываете фильтры в таблицу, например, User Setup, а потом в коде ставите ваш FILTERGROUP и SETFILTER на G/L Account со значением из User Setup для данного пользователя.
Старый 13.06.2006, 12:45   #3  
unalexia is offline
unalexia
Участник
 
79 / 10 (1) +
Регистрация: 28.12.2005
Цитата:
Сообщение от Fordewind Посмотреть сообщение
а в чем проблема?
записываете фильтры в таблицу, например, User Setup, а потом в коде ставите ваш FILTERGROUP и SETFILTER на G/L Account со значением из User Setup для данного пользователя.
Вопрос про "исключающий фильтр"! Значение фильтра уже есть в настройках.
Мне надо, чтобы польз. видел все, кроме указанного фильтра (в этом "исключение").
Старый 13.06.2006, 12:59   #4  
Fordewind is offline
Fordewind
Участник
 
1,134 / 10 (3) +
Регистрация: 01.12.2005
Ну дык, SETFILTER понимает сложный фильтр, в том числе и исключение
Старый 13.06.2006, 22:51   #5  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
имхо фильтр
<>счет1..счет10
действительно не покатит
я пользуюсь:
<>счет1&<>счет2&<>счет3&<>счет4&<>счет5
Старый 13.06.2006, 23:49   #6  
Галина is offline
Галина
Участник
 
1,132 / 28 (3) +++
Регистрация: 01.07.2003
Или проще поменять фильтр - на (..99|106..) - получаем исключение для <>100..105
(..100|107..) - исключение для <>101..106.
Старый 14.06.2006, 13:53   #7  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
Галина!
точно! умница!
а я тупой

хехе
но это только для ОДНОГО закрываемого диапазона

а если надо закрыть 100..106 и 120..124?
Старый 14.06.2006, 14:18   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Sancho Посмотреть сообщение
а если надо закрыть 100..106 и 120..124?
Попробую угадать
..99|106..119|125..
__________________
полезное на axForum, github, vk, coub.
Старый 14.06.2006, 19:38   #9  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
уговорили.
я тупой
Старый 15.06.2006, 11:29   #10  
unalexia is offline
unalexia
Участник
 
79 / 10 (1) +
Регистрация: 28.12.2005
Задача сложнее, чем кажется. Нужно исключить фильтр типа 01020100|01020300..01050000|02010300|02020100..02020300
Старый 15.06.2006, 12:15   #11  
Sitizen is offline
Sitizen
Участник
Аватар для Sitizen
 
305 / 10 (1) +
Регистрация: 10.01.2006
Цитата:
Сообщение от unalexia Посмотреть сообщение
Задача сложнее, чем кажется. Нужно исключить фильтр типа 01020100|01020300..01050000|02010300|02020100..02020300
0..01020099|01020101..01020299|01050001..02010299|02010301..02020099|02020301..
Старый 15.06.2006, 14:42   #12  
Advisor is offline
Advisor
Участник
 
33 / 13 (1) ++
Регистрация: 07.09.2005
Интересный перебор. Правильно ли я понял, что надо создать функцию преобразующую исходный фильтр в противоположный?
Если да, то можно сваять что-то вроде:

Код:
//функция
OppositeFilter(PFilter : Text[100]) : Text[100]

CompleteFilter:='';
PFilter:=CONVERTSTR(PFilter,',','|');
WHILE STRPOS(PFilter,'|')<>0 DO BEGIN
  ORBlock:=COPYSTR(PFilter,1,STRPOS(PFilter,'|')-1);
  PFilter:=DELSTR(PFilter,1,STRPOS(PFilter,'|'));
  IF STRPOS(ORBlock,'..')<>0 THEN BEGIN
	BRange:=COPYSTR(ORBlock,1,STRPOS(ORBlock,'..')-1);
	ERange:=COPYSTR(ORBlock,STRPOS(ORBlock,'..')+2,STRLEN(ORBlock));
	IF CompleteFilter<>'' THEN CompleteFilter+='&';
	CompleteFilter+='('+'<'+BRange+'|'+'>'+ERange+')'
  END ELSE BEGIN
	IF CompleteFilter<>'' THEN CompleteFilter+='&';
	CompleteFilter+='('+'<>'+ORBlock+')';
  END;
END;
IF PFilter<>'' THEN BEGIN
  IF STRPOS(PFilter,'..')<>0 THEN BEGIN
	BRange:=COPYSTR(PFilter,1,STRPOS(PFilter,'..')-1);
	ERange:=COPYSTR(PFilter,STRPOS(PFilter,'..')+2,STRLEN(PFilter));
	IF CompleteFilter<>'' THEN CompleteFilter+='&';
	CompleteFilter+='('+'<'+BRange+'|'+'>'+ERange+')'
  END ELSE BEGIN
	IF CompleteFilter<>'' THEN CompleteFilter+='&';
	CompleteFilter+='('+'<>'+PFilter+')';
  END;
END;
EXIT(CompleteFilter);
Старый 16.06.2006, 09:37   #13  
unalexia is offline
unalexia
Участник
 
79 / 10 (1) +
Регистрация: 28.12.2005
Advisor ты супер !!!!
даже в коде много менять не пришлось!
спасибо всем, кто принял участие в решение проблемы.
на самом деле. в нвжн мало вшитых функций. и все приходится дописывать самому. "придумывать велосипед".

Может кто знает ссылочки на пользовательские функции. инфо, я думаю, будет интересна всем. КОЛИТЕСЬ, не жадничайте.
Старый 19.06.2006, 16:28   #14  
Галина is offline
Галина
Участник
 
1,132 / 28 (3) +++
Регистрация: 01.07.2003
unalexia-а этот код работает для фильтра на буквенные значения? Или только на числовые значения?
Ну а по поводу встроенных функций-не соглашусь. Хватает и вполне.
Если не идти на поводу у пользователя сильно. Ну а если идти то тогда функций нигде не хватает.
Старый 19.06.2006, 17:31   #15  
unalexia is offline
unalexia
Участник
 
79 / 10 (1) +
Регистрация: 28.12.2005
Цитата:
Сообщение от Галина Посмотреть сообщение
unalexia-а этот код работает для фильтра на буквенные значения? Или только на числовые значения?
Ну а по поводу встроенных функций-не соглашусь. Хватает и вполне.
Если не идти на поводу у пользователя сильно. Ну а если идти то тогда функций нигде не хватает.
Мне нужен был Code. Я код немного переделал. Ничего сложного. Думаю для чисел тоже подойдет. Число можно перевести в Code.
Старый 19.06.2006, 23:05   #16  
Галина is offline
Галина
Участник
 
1,132 / 28 (3) +++
Регистрация: 01.07.2003
Цитата:
Сообщение от unalexia Посмотреть сообщение
Цитата:
Сообщение от Галина Посмотреть сообщение
unalexia-а этот код работает для фильтра на буквенные значения? Или только на числовые значения?
Ну а по поводу встроенных функций-не соглашусь. Хватает и вполне.
Если не идти на поводу у пользователя сильно. Ну а если идти то тогда функций нигде не хватает.
Мне нужен был Code. Я код немного переделал. Ничего сложного. Думаю для чисел тоже подойдет. Число можно перевести в Code.
Хм... я вообще то не спрашивала про числовые значения. Я спрашивала про буквенные значения-например 01-м,02-м и т.д.
По коду-я так поняла, что для числовых значений и так работает. Правда код смотрела бегло.
Старый 20.06.2006, 11:27   #17  
Likefire is offline
Likefire
Заноза в заднице
Аватар для Likefire
MCBMSS
Лучший по профессии 2009
 
547 / 50 (3) ++++
Регистрация: 22.10.2007
Адрес: Москва
Записей в блоге: 1
Алгоритм неплохой, в принципе, но есть ограничения по длине строки фильтра в 250 символов (да и поле, в котором будет храниться значение). Ведь если к примеру, в плане счетов (что вполне вероятно) детализация будет достаточно глубокой, номер счета может выглядеть таким образом: '2006.0010.0800.0001', а может и ещё длиннее, то во-первых: ограничения на количество фильров будут иметь значение, а во-вторых: длина результирующего исключающего фильтра всегда будет больше длины исходного фильтра и это тоже необходимо учитывать. Ну и потом: количество ограничений, накладываемых на одного пользователя может, даже при обычных размерах длины строки номера счета, быть достаточно обширными (всегда могут попросить дать сильно ограниченный доступ какому-нибудь небольшому сотруднику, чтобы этот сотрудник мог видеть какие-то выборочные счета там-сям). Так что если глубоко поразмыслить - персонифицировать отбор к примеру счетов надо бы каким-нибудь другим способом, не так прямолинейно.
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков!
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 08:50.