Доступ к договорам по ответственному лицу

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
solkalin
Постоянный гость
Сообщения: 60
Зарегистрирован: 23 ноя 2011, 11:59

Доступ к договорам по ответственному лицу

Сообщение solkalin »

Нужно настроить доступ к договорам так, чтобы в списке каждый видел только те, за которые он ответственен.
Через alter interface сделала:

Код: Выделить всё

#component 'L_Dogovor'
alter interface Dogovor;
overload
end;
create view as
select * from dogovor1,attrdog
where dogovor1.nrec=attrdog.cdogovor
and attrdog.otv_my_fio='Кулакова Оксана Николаевна' ;
end.
пока так, для отработки и тестирования, потом докручу X$USERS

Список договоров формируется при открытии очень долго.

Можно как-то оптимизировать код? Или подкиньте пожалуйста идеи, как еще можно реализовать такой доступ?
Dmitry_Sol
Постоянный гость
Сообщения: 76
Зарегистрирован: 07 июн 2007, 12:32
Откуда: Витебск
Контактная информация:

Re: Доступ к договорам по ответственному лицу

Сообщение Dmitry_Sol »

Очень медленно, потому что вы почему то стандартную подцепку attrdog, заменили на условие без индекса.
Я бы на вашем месте использовал не where а condition

Код: Выделить всё

Alter Interface Dogovor;
create view
 condition cond = AttrDog.Otv_My_Fio=sGetTune('USER.FIO')
;
HandleEvent
    cmInit:
                 {
   	                 if(Inherited::HandleEvent(cmInit) = heOk)
 			        {
				   PushCondition(tcCond);
				}

		   }
 end;
end.
этот код должен работать гораздо быстрее.
К тому же вы можете создать настройку "Фильтровать договора при входе" и включать ее для тех сотрудников, кому нужна фильтрация
solkalin
Постоянный гость
Сообщения: 60
Зарегистрирован: 23 ноя 2011, 11:59

Re: Доступ к договорам по ответственному лицу

Сообщение solkalin »

Такой код тоже работает не намного быстрее.
А что за создание настройки "Фильтровать договора при входе"?
Dmitry_Sol
Постоянный гость
Сообщения: 76
Зарегистрирован: 07 июн 2007, 12:32
Откуда: Витебск
Контактная информация:

Re: Доступ к договорам по ответственному лицу

Сообщение Dmitry_Sol »

Поскольку condition работает не по индексам, скорость не может быть большой.
Здесь еще плохо, что нам надо цепляться не к основной таблице - dogovor, а к attrdog.
А в attrdog нет индекса по фамилиям.
По поводу новой настройки -
В поставке системы есть такой файлик TuneApi.rar
Там описан механизм создания своих - пользовательских настроек.
Я на вашем месте фильтровал бы договора не всем, а только особо ограниченным :-)
и для этого я бы создал настройку : "Фильтровать договора по ответственному лицу" да/нет назвал бы ее например "PARTNER.DOGVISIBLE"

Если не разберетесь - пишите в личку - найду вам примерчик.

а в альтере в cmInit писал бы следущее

Код: Выделить всё

cmInit: {
                cmInit:
                 {
                       if(Inherited::HandleEvent(cmInit) = heOk)
                 {
                  if(boGetTune('PARTNER.DOGVISIBLE')) 
                      PushCondition(tcCond);
            }
solkalin
Постоянный гость
Сообщения: 60
Зарегистрирован: 23 ноя 2011, 11:59

Re: Доступ к договорам по ответственному лицу

Сообщение solkalin »

Спасибо за доп.информацию! Поразбираюсь.
mwoland

Re: Доступ к договорам по ответственному лицу

Сообщение mwoland »

Вот так попробуйте, должно быть побыстрее

Код: Выделить всё

#component 'L_Dogovor'
alter interface Dogovor;
overload
end;
create view as
select * from dogovor1,attrdog myattrdog
where ((
dogovor1.nrec /== myattrdog.cdogovor and 
(myattrdog.otv_my_fio = 'Кулакова Оксана Николаевна' )
));
end.
solkalin
Постоянный гость
Сообщения: 60
Зарегистрирован: 23 ноя 2011, 11:59

Re: Доступ к договорам по ответственному лицу

Сообщение solkalin »

mwoland, неа, так тоже не быстрее : (
LaaLaa

Re: Доступ к договорам по ответственному лицу

Сообщение LaaLaa »

solkalin писал(а): Можно как-то оптимизировать код?
Прежде чем это оптимизировать, нужно понять на что именно (на какие операции) там расходуется время.
Попробуйте получить SIL-протоколы и проанализировать их с помощью программ SmartTime и SmartInspect.

Инструкции и протокольные модули можно взять здесь ftp://ftp.galaktika.ru/pub/support/temp ... Protocols/
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Re: Доступ к договорам по ответственному лицу

Сообщение Masygreen »

ээ.. как вариант написать своею обертку на прямом sql.. и привинтить к ней стандартные обработки ?
Время ведет!
Ответить