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

И снова сортировка, не отрабатывает запрос в форме

Добавлено: 16 май 2006, 15:03
Chak
ARD-отчет, Необходимо вывести перечень сотрудников, сгруппированных по структурным единицам штатного расписания. Причем внутри подразделения они должны идти в порядке их должностей.

В общих чертах отчет выглядит так (лишнее порезано):

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

.create view t01 as
select persons.*, STAFFSTRUCT.SEQNMB from persons, STAFFSTRUCT
       where (( 'С' == persons.isemployee
                and ssilpodr == persons.department
                and persons.appointcur == appointments.nrec
                and appointments.staffstr == staffstruct.nrec
             ))
             and year(persons.disdate)=0
       order by STAFFSTRUCT.SEQNMB
;

.create view t09 as select nrec,cparent,name,code from catalogs
        where (( 0 == lpr and 465 == mainlink ))
;

.{table 't09'
.begin
   ssilpodr:=t09.catalogs.nrec;
   naimpodr:=t09.catalogs.name;
   p1:=p1+1;
   xlSetCellStringValue(naimpodr,p1,1,p1,1);
end.

.{table 't01'
.begin
   p1:=p1+1;
   xlSetCellStringValue(t01.persons.fio,p1,3,p1,3);
end.
.}

.}
То есть сначала идет цикл по подразделениям, внутри - цикл по сотрудникам подразделений. Если в t01 закомментировать строчку "order by STAFFSTRUCT.SEQNMB" все работает на ура, но без сортировки, естественно. С этой строчкой выводятся только подразделения, как будто запрос t01 нифига не выбирает. Цикл по t01 пробовал делать как по логической таблице, так и через getfirst/getnext - однофигственно. Можно перевернуть запрос, чтобы корневой была STAFFSTRUCT, тогда отрабатывает, но отпадают те, кто вне штата сидит. Это фишка Атлантиса или я чего-то не знаю?

Остается конечно еще вариант объединить эти два запроса в один, видимо так и попробую сделать, но придется почти весь отчет перелопачивать (чужой причем), а всего то попросили сортировку добавить, надеялся, что достаточно будет один запрос поправить...

Добавлено: 16 май 2006, 19:30
Chak
С объединением двух запросов в один тоже проблемка вышла... получился такой вот запрос:

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

select catalogs.nrec, catalogs.cparent, catalogs.name, catalogs.code,
       persons.*, STAFFSTRUCT.SEQNMB
       from catalogs, persons, STAFFSTRUCT
  where (( 0 == catalogs.lpr
           and 465 == catalogs.mainlink
           and 'С' == persons.isemployee
           and catalogs.nrec == persons.department
           and persons.appointcur == appointments.nrec
           and appointments.staffstr == staffstruct.nrec
        ))
        and (year(catalogs.datok)=0)
        and (catalogs.nrec<>465)
        and (catalogs.nrec<>4612151907976037897)
        and year(persons.disdate)=0
  order by catalogs.code,STAFFSTRUCT.SEQNMB
Кто мне может объяснить, почему при выборке только из таблицы catalogs (без подцепки persons и т.д.) в результат попадают все подразделения, включая те, в которых сотрудников нет, а вот при мягкой подцепке persons и т.д - только те, в которых есть сотрудники? Мне то нужны все... то ли лыжи не едут...

Добавлено: 17 май 2006, 11:36
dp

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

and year(persons.disdate)=0
вои это убери снизу и перенеси в (( )) или в цикле обрабатывай

Добавлено: 17 май 2006, 12:49
Chak
dp писал(а):

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

and year(persons.disdate)=0
вои это убери снизу и перенеси в (( )) или в цикле обрабатывай
а действительно... все понял, спасибо :)