Страница 1 из 1

Установка ограничений на логическую таблицу

Добавлено: 20 май 2008, 17:04
Nikos
Добрый день!
Помогите разобраться в установке и снятии ограничений. Написал такой интерфейс (часть):

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

interface SortEx 'Сортировка', cyan, EscClose;
show at (,,110,30);

table struct ChoosePodr (NREC : comp) 
with index (ind01=NREC);

create view 
as select *
from PERSONS, DOPINFO, APPOINTMENTS, SYNONYM CATALOGS CATALOGSPOST, SYNONYM CATALOGS CATALOGSDEP, COMMUNICATIONS, ChoosePodr
where 
((	'С' 			== PERSONS.ISEMPLOYEE	
and 	PERSONS.NREC		== DOPINFO.CPERSON
and	PERSONS.APPOINTCUR	== APPOINTMENTS.NREC
and	APPOINTMENTS.POST	== CATALOGSPOST.NREC
and	APPOINTMENTS.DEPARTMENT	== CATALOGSDEP.NREC
and	10000000002D9h		== COMMUNICATIONS.COMTYPE
and 	PERSONS.NREC		== COMMUNICATIONS.PERSON
))
bounds byPodr =
	'С' 			== PERSONS.ISEMPLOYEE 	//Сотрудники 	
and	PERSONS.APPOINTCUR	/==APPOINTMENTS.NREC
and	APPOINTMENTS.POST 	/==ChoosePodr.NREC

order byFio by PERSONS.ISEMPLOYEE, PERSONS.FIO
order byTabN by PERSONS.ISEMPLOYEE, PERSONS.TABNMB;

browse brSpisok (,,sci1Esc);
table PERSONS;
fields
  PERSONS.TABNMB 	'Табельный номер'	:[10],protect;
  PERSONS.FIO  		'ФИО'			:[35],protect;
  CATALOGSDEP.NAME      'Отдел'			:[30],protect;
  CATALOGSPOST.NAME     'Должность'		:[25],protect;
  COMMUNICATIONS.ADDR	'Телефон'		:[10],protect;
end;

procedure ApplyFilter;
{
  var mMarkDoc	: longint;
  var IndexNo   : longint;
  var i		: word;
  var z 	: comp;

  mMarkDoc := InitMarker('CATALOGSMARKER',8,1,1);	
  z := 0
  delete all ChoosePodr;
  for(i:=0; i < GetMarkerCount(mMarkDoc); i:=i+1)
  {
    count := count + 1;
    IndexNo := i;
    GetMarker(mMarkDoc,IndexNo,z);
    insert into ChoosePodr set ChoosePodr.NREC := z;
  }
  donemarker(mMarkDoc,'CATALOGSMARKER');

  PushBounds(tbbyPodr);
  RescanPanel(#PERSONS);
}
...
Не работает...
Я хочу, чтоб была возможность установить фильтр на отдел (множественный выбор). Планировал заполнить временную таблицу ChoosePodr выбранными записями и затем ограничением byPodr выводить нужное.
Подскажите, где ошибся, или, может быть, такие задачи как-то по другому решать надо.

Добавлено: 21 май 2008, 15:13
edward_K
ну нельзя в одном bounds несколько подчиненных таблиц.
оставте там просто APPOINTMENTS.POST /==ChoosePodr.NREC
а в самом запросе
APPOINTMENTS.POST ==ChoosePodr.NREC (чтоб поменьше в памяти места занимал)
это позволит через Pushbounds(#ChoosePodr) востанавливать просмотр без фильтра. Да и if getfirst persons=0 {} не помешает перед Rescanpanel.

Добавлено: 21 май 2008, 15:44
Nikos
Тогда понятно, почему у меня ничего не получалось.
Так, как Вы предлагаете тоже не получится, т.к. в этом случае в основной вьюхе нужно будет написать жесткую подцепку

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

and   PERSONS.APPOINTCUR  /== APPOINTMENTS.NREC
а у нас больше половины PERSONS.APPOINTCUR = 0.
Сделал через временную таблицу - работает нормально, правда приходится ждать несколько секунд при инициализации интерфейса.[/quote]

Добавлено: 23 май 2008, 21:43
edward_K
вы могете несколько боундсов подымать - тока последовательнотсь четкую делайте. Сначала на главную таблу, потом на дочку.