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

Loop

Добавлено: 14 окт 2005, 14:37
s2176
Добрый день!
Может, кто знает, можно ли в интерфейсе организовать
проход по таблице, отсортированной по какому-либо полю?
Что-то типа:
_loop sumvidop order by tabn

Добавлено: 14 окт 2005, 17:46
coolibin
_loop sumvidop orderED by tabn

Добавлено: 15 окт 2005, 10:01
BorisT
s2176
_loop sumvidop(назвние индекса)
{}

Добавлено: 18 окт 2005, 09:50
s2176
Спасибо большое, все получилось!!!

Добавлено: 18 окт 2005, 10:56
s2176
А теперь возникла другая проблема!
Стоило мне добавить ordered by tabn, как условия, наложенные на таблицу Sumvidop в create view, перестали действовать.
А мне нужна не вся таблица, а только начисления за один месяц и с определенной входимостью (те, по которым формируются проводки)
Как это победить??? :o

Добавлено: 18 окт 2005, 11:32
coolibin
s2176 писал(а):А теперь возникла другая проблема!
Стоило мне добавить ordered by tabn, как условия, наложенные на таблицу Sumvidop в create view, перестали действовать.
А мне нужна не вся таблица, а только начисления за один месяц и с определенной входимостью (те, по которым формируются проводки)
Как это победить??? :o
тогда либо
_loop Sumvidop where ((..)) ordered by tabn

этот фильтр перекрывает условия из вьюхи на время работы команды (см. доку)

либо не париться и отсортировать и отфильтровать Sumvidop прямо во вьюхе с делать простой _loop
тогда действуют сортировки и ограничения из вьюхи

отсортировать во вьюхе = указать конкретный индекс в секции from

from
sumvidop (Имя_индекса)

если же ты хочешь отсортировать таблицу не по индексу, то советую тогда начать с доков а не с этого форума

Добавлено: 18 окт 2005, 11:52
s2176
Вьюха такая:
create view
var dd,mm,yy: word;
as select tperson, cschetd, csubschd, spkau.name, summa
from sumvidop svo
where((svo.vidopl==klvidopl.vidopl and svo.ckaud[1]==spkau.nrec
and yy==yearn and mm==mesn
)) and '+'=klvidopl.vhv
пробовала условия наложить на sumvidop в цикл...
пишет, что ей нужен индекс по yearn, mesn, tabn
а такого нет...

Добавлено: 18 окт 2005, 22:45
Diman
Попробуй использовать condition и соответственно операторы PushCondition, PopCondition перед циклом, condition описываются в селекте.

Добавлено: 19 окт 2005, 07:59
san
без индекса сортировки на внешней выгрузке ordered by или сами сортируем во временной таблице

Добавлено: 19 окт 2005, 10:45
Den
S2176, опишите ,плиз, задачу которую Вы решаете. Так быстрее соориентироваться.

Добавлено: 19 окт 2005, 11:24
s2176
Задача такая: я должна сгруппировать(просуммировать) начисления(а потом еще и ЕСН), по которым формируются проводки, по кодам подразделений из штатного расписания.
В самой таблице начислений SUMVIDOP нет привязки к этим подразделениям. Поэтому для каждого сотрудника приходится лезть в таблицу назначений и вытаскивать оттуда подразделение, в котором сотрудник работал в этом месяце. Т.к. записей в Sumvidop по каждому сотруднику ~ 10 штук, то можно было бы лезть в назначения только один раз при изменении tperson или tabn. А так приходится практически на каждую из 25000 записей лезть еще в одну таблицу и вытаскивать из нее подходящее назначение. А в таблице Perevodtek записей будет уже не 25000, а 25000*6... Хочется ускорить процесс.

Добавлено: 19 окт 2005, 12:31
3opkae Boka
Select
catalogs.name
,sumvidop.summa
where
((
mm == sumvidop.mesn
and yyyy == sumvidop.yearn
and 11 == ExtCatLinks.ObjType
and 1 == ExtCatLinks.ModType
and sumvidop.cex == ExtCatLinks.ExtCat
and ExtCatLinks.StaffCat == Catalogs.nrec
))
order by catalogs.name
;
Но это при условии , что у вас синхронизированы каталоги ШР и подразделений

Добавлено: 19 окт 2005, 12:49
s2176
они синхронизированы, но подразделения в зарплате гораздо крупнее, чем в штатном раписании.
Одному подразделению в ЗП соответствует несколько более мелких из ШР с разными кодами(а именно коды из ШР мне и нужны). Поэтому такой запрос не подходит.

Добавлено: 19 окт 2005, 13:13
Den
Так вот быстро на вскидку..в виде ард-шника :

.form qwerty
.ard
.var
oldpodr :comp
first,vyvod :integer
sumopl :double
oldname :string
.endvar
.create view t1
as select * from persons(PERSBYDEP),sumvidop
where ((
persons.nrec==lschet.tperson
and lschet.nrec==sumvidop.clsch
and persons.department==catalogs.nrec))
and sumvidop.yearn=2005;
.begin
first:=1;
vyvod:=0;
end.
.{table t1
.begin
if oldpodr<>persons.department
{
oldpodr:=persons.department;
vyvod:=1;
}
end.
.{?internal; vyvod=1 and first<>1
.fields
oldname
sumopl
.endfields
^ &&&&&&&&&&&&&&.&&
.begin
sumopl:=0;
vyvod:=0;
end.
.}
.begin
first:=0;
oldname:=t1.catalogs.name;
sumopl:=sumopl+t1.sumvidop.summa;
end.
.}
.fields
oldname
sumopl
.endfields
^ &&&&&&&&&&&&&&&.&&
.endform

Добавлено: 19 окт 2005, 13:14
Den
Так вот быстро на вскидку..в виде ард-шника :

.form qwerty
.ard
.var
oldpodr :comp
first,vyvod :integer
sumopl :double
oldname :string
.endvar
.create view t1
as select * from persons(PERSBYDEP),sumvidop
where ((
persons.nrec==lschet.tperson
and lschet.nrec==sumvidop.clsch
and persons.department==catalogs.nrec))
and sumvidop.yearn=2005;
.begin
first:=1;
vyvod:=0;
end.
.{table t1
.begin
if oldpodr<>persons.department
{
oldpodr:=persons.department;
vyvod:=1;
}
end.
.{?internal; vyvod=1 and first<>1
.fields
oldname
sumopl
.endfields
^ &&&&&&&&&&&&&&.&&
.begin
sumopl:=0;
vyvod:=0;
end.
.}
.begin
first:=0;
oldname:=t1.catalogs.name;
sumopl:=sumopl+t1.sumvidop.summa;
end.
.}
.fields
oldname
sumopl
.endfields
^ &&&&&&&&&&&&&&&.&&
.endform