Loop

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

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

s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Loop

Сообщение s2176 »

Добрый день!
Может, кто знает, можно ли в интерфейсе организовать
проход по таблице, отсортированной по какому-либо полю?
Что-то типа:
_loop sumvidop order by tabn
coolibin
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 29 мар 2005, 17:49

Сообщение coolibin »

_loop sumvidop orderED by tabn
BorisT
Сообщения: 11
Зарегистрирован: 31 май 2005, 14:27
Откуда: DOKKO

Сообщение BorisT »

s2176
_loop sumvidop(назвние индекса)
{}
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Сообщение s2176 »

Спасибо большое, все получилось!!!
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Сообщение s2176 »

А теперь возникла другая проблема!
Стоило мне добавить ordered by tabn, как условия, наложенные на таблицу Sumvidop в create view, перестали действовать.
А мне нужна не вся таблица, а только начисления за один месяц и с определенной входимостью (те, по которым формируются проводки)
Как это победить??? :o
Кто сказал, что бесполезно биться головой об стену?!
coolibin
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 29 мар 2005, 17:49

Сообщение coolibin »

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

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

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

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

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

если же ты хочешь отсортировать таблицу не по индексу, то советую тогда начать с доков а не с этого форума
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Сообщение 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
а такого нет...
Кто сказал, что бесполезно биться головой об стену?!
Diman
Постоянный гость
Сообщения: 56
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Волгоград Филиал ОАО "Связьтранснефть" НВ ПТУС отдел ОИТ

Сообщение Diman »

Попробуй использовать condition и соответственно операторы PushCondition, PopCondition перед циклом, condition описываются в селекте.
san
Местный житель
Сообщения: 412
Зарегистрирован: 28 апр 2005, 11:34
Откуда: Галактика Млечный Путь

Сообщение san »

без индекса сортировки на внешней выгрузке ordered by или сами сортируем во временной таблице
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

S2176, опишите ,плиз, задачу которую Вы решаете. Так быстрее соориентироваться.
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Сообщение s2176 »

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

Сообщение 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
;
Но это при условии , что у вас синхронизированы каталоги ШР и подразделений
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Сообщение s2176 »

они синхронизированы, но подразделения в зарплате гораздо крупнее, чем в штатном раписании.
Одному подразделению в ЗП соответствует несколько более мелких из ШР с разными кодами(а именно коды из ШР мне и нужны). Поэтому такой запрос не подходит.
Кто сказал, что бесполезно биться головой об стену?!
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение 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
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение 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
Ответить