Как ускорить выгрузку данных из интерфейса?

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

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

Ответить
Serges
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49

Как ускорить выгрузку данных из интерфейса?

Сообщение Serges »

Уважаемые коллеги, у кого есть какие мысли по поводу того, как ускорить выгрузку данных, полученных такой вьюхой (выборка сальдо с аналитикой)

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

Create view
as select 
	SALDMOUN.DATESAL,
	SALDMOUN.ATL_LASTDATE,
	SALDMOUN.SCHETO,
	SALDMOUN.DBSCHETO,
	SALDMOUN.SUBOSSCH,
	SALDMOUN.SUMS,
	if(SALDMOUN.VIOB=1,'Деб','Кред')(FieldName='VidSaldo'),
	BUHSCHET.NAME,
	if(BUHSCHET.VIDSALD=0,' А', if(BUHSCHET.VIDSALD=1,' П', if(BUHSCHET.VIDSALD=2,' А-П', '???')))(FieldName=TipSchet),
	if(BUHSCHET.BALANS=0,'Баланс', if(BUHSCHET.BALANS=1,'Забаланс', '???'))(FieldName=TipBalans),
	if(SALDMOUN.TBLOS[1]=1 and IsValidall(tnkatorg1),katorg1.nrec,
	 if(SALDMOUN.TBLOS[2]=1 and IsValidall(tnkatorg2),katorg2.nrec,
	  if(SALDMOUN.TBLOS[3]=1 and IsValidall(tnkatorg3),katorg3.nrec,
	   if(SALDMOUN.TBLOS[4]=1 and IsValidall(tnkatorg4),katorg4.nrec,
	    if(SALDMOUN.TBLOS[5]=1 and IsValidall(tnkatorg5),katorg5.nrec,
	     if(SALDMOUN.TBLOS[6]=1 and IsValidall(tnkatorg6),katorg6.nrec,
	      Comp(0)))))))(FieldName=KauOrg),
	if(SALDMOUN.TBLOS[1]=6 and IsValidall(tnbasedoc1),basedoc1.nrec,
	 if(SALDMOUN.TBLOS[2]=6 and IsValidall(tnbasedoc2),basedoc2.nrec,
	  if(SALDMOUN.TBLOS[3]=6 and IsValidall(tnbasedoc3),basedoc3.nrec,
	   if(SALDMOUN.TBLOS[4]=6 and IsValidall(tnbasedoc4),basedoc4.nrec,
	    if(SALDMOUN.TBLOS[5]=6 and IsValidall(tnbasedoc5),basedoc5.nrec,
	     if(SALDMOUN.TBLOS[6]=6 and IsValidall(tnbasedoc6),basedoc6.nrec,
	     Comp(0)))))))(FieldName=KauNomDoc),
	if(SALDMOUN.TBLOS[1]=402 and IsValidall(tnSpKau1),SpKau1.nrec,
	 if(SALDMOUN.TBLOS[2]=402 and IsValidall(tnSpKau2),SpKau2.nrec,
	  if(SALDMOUN.TBLOS[3]=402 and IsValidall(tnSpKau3),SpKau3.nrec,
	   if(SALDMOUN.TBLOS[4]=402 and IsValidall(tnSpKau4),SpKau4.nrec,
	    if(SALDMOUN.TBLOS[5]=402 and IsValidall(tnSpKau5),SpKau5.nrec,
	     if(SALDMOUN.TBLOS[6]=402 and IsValidall(tnSpKau6),SpKau6.nrec,
	     Comp(0)))))))(FieldName=PKau1),
	if(SALDMOUN.TBLOS[1]=403 and IsValidall(tnSpKau1),SpKau1.nrec,
	 if(SALDMOUN.TBLOS[2]=403 and IsValidall(tnSpKau2),SpKau2.nrec,
	  if(SALDMOUN.TBLOS[3]=403 and IsValidall(tnSpKau3),SpKau3.nrec,
	   if(SALDMOUN.TBLOS[4]=403 and IsValidall(tnSpKau4),SpKau4.nrec,
	    if(SALDMOUN.TBLOS[5]=403 and IsValidall(tnSpKau5),SpKau5.nrec,
	     if(SALDMOUN.TBLOS[6]=403 and IsValidall(tnSpKau6),SpKau6.nrec,
	     Comp(0)))))))(FieldName=PKau2),
	if(SALDMOUN.TBLOS[1]=415 and IsValidall(tnSpKau1),SpKau1.nrec,
	 if(SALDMOUN.TBLOS[2]=415 and IsValidall(tnSpKau2),SpKau2.nrec,
	  if(SALDMOUN.TBLOS[3]=415 and IsValidall(tnSpKau3),SpKau3.nrec,
	   if(SALDMOUN.TBLOS[4]=415 and IsValidall(tnSpKau4),SpKau4.nrec,
	    if(SALDMOUN.TBLOS[5]=415 and IsValidall(tnSpKau5),SpKau5.nrec,
	     if(SALDMOUN.TBLOS[6]=415 and IsValidall(tnSpKau6),SpKau6.nrec,
	     Comp(0)))))))(FieldName=PKau3),
	if(SALDMOUN.TBLOS[1]=KodKauV1 and IsValidall(tnSpKau1),SpKau1.nrec,
	 if(SALDMOUN.TBLOS[2]=KodKauV1 and IsValidall(tnSpKau2),SpKau2.nrec,
	  if(SALDMOUN.TBLOS[3]=KodKauV1 and IsValidall(tnSpKau3),SpKau3.nrec,
	   if(SALDMOUN.TBLOS[4]=KodKauV1 and IsValidall(tnSpKau4),SpKau4.nrec,
	    if(SALDMOUN.TBLOS[5]=KodKauV1 and IsValidall(tnSpKau5),SpKau5.nrec,
	     if(SALDMOUN.TBLOS[6]=KodKauV1 and IsValidall(tnSpKau6),SpKau6.nrec,
	     Comp(0)))))))(FieldName=PKau4),
	if(SALDMOUN.TBLOS[1]=KodKauV2 and IsValidall(tnSpKau1),SpKau1.nrec,
	 if(SALDMOUN.TBLOS[2]=KodKauV2 and IsValidall(tnSpKau2),SpKau2.nrec,
	  if(SALDMOUN.TBLOS[3]=KodKauV2 and IsValidall(tnSpKau3),SpKau3.nrec,
	   if(SALDMOUN.TBLOS[4]=KodKauV2 and IsValidall(tnSpKau4),SpKau4.nrec,
	    if(SALDMOUN.TBLOS[5]=KodKauV2 and IsValidall(tnSpKau5),SpKau5.nrec,
	     if(SALDMOUN.TBLOS[6]=KodKauV2 and IsValidall(tnSpKau6),SpKau6.nrec,
	     Comp(0)))))))(FieldName=PKau5)

	from SALDMOUN,
		BUHSCHET,
		katorg katorg1,
		katorg katorg2,
		katorg katorg3,
		katorg katorg4,
		katorg katorg5,
		katorg katorg6,
		basedoc basedoc1,
		basedoc basedoc2,
		basedoc basedoc3,
		basedoc basedoc4,
		basedoc basedoc5,
		basedoc basedoc6,
		SpKau SpKau1,
		SpKau SpKau2,
		SpKau SpKau3,
		SpKau SpKau4,
		SpKau SpKau5,
		SpKau SpKau6
	where ((SALDMOUN.SCHETO==BUHSCHET.SCHET
		and SALDMOUN.SUBOSSCH==BUHSCHET.SUBSCH

		and SALDMOUN.KAUOS[1]==katorg1.nrec
		and SALDMOUN.KAUOS[2]==katorg2.nrec
		and SALDMOUN.KAUOS[3]==katorg3.nrec
		and SALDMOUN.KAUOS[4]==katorg4.nrec
		and SALDMOUN.KAUOS[5]==katorg5.nrec
		and SALDMOUN.KAUOS[6]==katorg6.nrec

		and SALDMOUN.KAUOS[1]==basedoc1.nrec
		and SALDMOUN.KAUOS[2]==basedoc2.nrec
		and SALDMOUN.KAUOS[3]==basedoc3.nrec
		and SALDMOUN.KAUOS[4]==basedoc4.nrec
		and SALDMOUN.KAUOS[5]==basedoc5.nrec
		and SALDMOUN.KAUOS[6]==basedoc6.nrec

		and SALDMOUN.KAUOS[1]==SpKau1.nrec
		and SALDMOUN.KAUOS[2]==SpKau2.nrec
		and SALDMOUN.KAUOS[3]==SpKau3.nrec
		and SALDMOUN.KAUOS[4]==SpKau4.nrec
		and SALDMOUN.KAUOS[5]==SpKau5.nrec
		and SALDMOUN.KAUOS[6]==SpKau6.nrec
		))
Тормоза начинаются, когда делаешь loop по этой выборке, чтобы передать полученные значения в массив для выгрузки в Excel - сальдо за один месяц "лупится" полчаса (ограничение по датам ставится баундсом). Нетрудно представить, сколько займет времени выборка за год. Есть ли еще какой-то вариант передавать значения, кроме как перебирать таблицу? Вообще, странно, что loop по таблице в памяти и присваивание значений массиву занимает так много времени...
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

А можно узнать сколько записей лежит физически в saldmoun вообще и конкретно за месяц выборки ? Да и лучше весь код привести здесь...
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Сообщение Nikos »

Все, конечно, зависит от объемов, но я аналогично выгружаю в Excel обороты, так там 10000 строк выгружаются примерно за минуту. Во вьюхе просто select * from oborot;
а в коде xlRes := xlStWriteToMatrix(1, 6, if(GetAnyKau(0,oborot.TBLOS[1],oborot.KAUOS[1]),GivenAnName(1),'')); if not xlRes break;
aleks1232321
Постоянный гость
Сообщения: 86
Зарегистрирован: 28 апр 2005, 12:15
Откуда: Москва

Сообщение aleks1232321 »

Недавно нужно было посчитать долги по организациям на 1 число месяца. Первый вариант - LOOP по SALDMOUN. Результат получил через минут 30-40. Второй вариант. Сначала выгрузил во временную таблицу с нужными МНЕ индексами SALDMOUN в нужно разрезе - примерно 1,5 минуты, а потом посчитал долги - еще 1,5 минуты. Организаций - несколько тысяч.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

Serges
выборка конечно - убойная :)))
вы скажите что вы хотите, может вам помогут

А вообще пользуйтесь if(GetAnyKau(0,oborot.TBLOS[1],oborot.KAUOS[1]),GivenAnName(1),''))
Serges
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49

Сообщение Serges »

Алексей писал(а):Serges
выборка конечно - убойная :)))
вы скажите что вы хотите, может вам помогут

А вообще пользуйтесь if(GetAnyKau(0,oborot.TBLOS[1],oborot.KAUOS[1]),GivenAnName(1),''))
Да, выборка не для слабонервных 8-)
Использование GetAnyKau вместо приведенной громоздкой конструкции ускорили дело - до 7 минут вместо 30.
Теперь выборка выглядит так (засовываю сразу во временную таблицу):

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

insert iSaldo  
(
	DataSald,
	DataRasch,
	SchetC,
	Schet,
	SubSchet,
	Summa,
	VidSaldo,
	SchSubsN,
	TipSch,
	TipBal,
	Org,
	nrecDO,
	PAnal_01, 
	PAnal_02, 
	PAnal_03, 
	PAnal_04, 
	PAnal_05  
)
        select  
	SALDMOUN.DATESAL,
	SALDMOUN.ATL_LASTDATE,
	SALDMOUN.SCHETO,
	SALDMOUN.DBSCHETO,
	SALDMOUN.SUBOSSCH,
	SALDMOUN.SUMS,
	if(SALDMOUN.VIOB=1,'Деб','Кред'),
	BUHSCHET.NAME,
	if(BUHSCHET.VIDSALD=0,' А', if(BUHSCHET.VIDSALD=1,' П', if(BUHSCHET.VIDSALD=2,' А-П', '???'))),
	if(BUHSCHET.BALANS=0,'Баланс', if(BUHSCHET.BALANS=1,'Забаланс', '???')),

	if(SALDMOUN.TBLOS[1]=1,if(GetAnyKau(0,SALDMOUN.TBLOS[1],SALDMOUN.KAUOS[1]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[2]=1,if(GetAnyKau(0,SALDMOUN.TBLOS[2],SALDMOUN.KAUOS[2]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[3]=1,if(GetAnyKau(0,SALDMOUN.TBLOS[3],SALDMOUN.KAUOS[3]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[4]=1,if(GetAnyKau(0,SALDMOUN.TBLOS[4],SALDMOUN.KAUOS[4]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[5]=1,if(GetAnyKau(0,SALDMOUN.TBLOS[5],SALDMOUN.KAUOS[5]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[6]=1,if(GetAnyKau(0,SALDMOUN.TBLOS[6],SALDMOUN.KAUOS[6]),GivenAnName(1),'Нет аналитики'),
	'Нет аналитики' )))))),

	if(SALDMOUN.TBLOS[1]=6,if(GetAnyKau(0,SALDMOUN.TBLOS[1],SALDMOUN.KAUOS[1]),GivenAnName(2),Comp(0)),
	if(SALDMOUN.TBLOS[2]=6,if(GetAnyKau(0,SALDMOUN.TBLOS[2],SALDMOUN.KAUOS[2]),GivenAnName(2),Comp(0)),
	if(SALDMOUN.TBLOS[3]=6,if(GetAnyKau(0,SALDMOUN.TBLOS[3],SALDMOUN.KAUOS[3]),GivenAnName(2),Comp(0)),
	if(SALDMOUN.TBLOS[4]=6,if(GetAnyKau(0,SALDMOUN.TBLOS[4],SALDMOUN.KAUOS[4]),GivenAnName(2),Comp(0)),
	if(SALDMOUN.TBLOS[5]=6,if(GetAnyKau(0,SALDMOUN.TBLOS[5],SALDMOUN.KAUOS[5]),GivenAnName(2),Comp(0)),
	if(SALDMOUN.TBLOS[6]=6,if(GetAnyKau(0,SALDMOUN.TBLOS[6],SALDMOUN.KAUOS[6]),GivenAnName(2),Comp(0)),
	Comp(0) )))))),

	if(SALDMOUN.TBLOS[1]=402,if(GetAnyKau(0,SALDMOUN.TBLOS[1],SALDMOUN.KAUOS[1]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[2]=402,if(GetAnyKau(0,SALDMOUN.TBLOS[2],SALDMOUN.KAUOS[2]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[3]=402,if(GetAnyKau(0,SALDMOUN.TBLOS[3],SALDMOUN.KAUOS[3]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[4]=402,if(GetAnyKau(0,SALDMOUN.TBLOS[4],SALDMOUN.KAUOS[4]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[5]=402,if(GetAnyKau(0,SALDMOUN.TBLOS[5],SALDMOUN.KAUOS[5]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[6]=402,if(GetAnyKau(0,SALDMOUN.TBLOS[6],SALDMOUN.KAUOS[6]),GivenAnName(1),'Нет аналитики'),
	'Нет аналитики' )))))),

	if(SALDMOUN.TBLOS[1]=403,if(GetAnyKau(0,SALDMOUN.TBLOS[1],SALDMOUN.KAUOS[1]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[2]=403,if(GetAnyKau(0,SALDMOUN.TBLOS[2],SALDMOUN.KAUOS[2]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[3]=403,if(GetAnyKau(0,SALDMOUN.TBLOS[3],SALDMOUN.KAUOS[3]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[4]=403,if(GetAnyKau(0,SALDMOUN.TBLOS[4],SALDMOUN.KAUOS[4]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[5]=403,if(GetAnyKau(0,SALDMOUN.TBLOS[5],SALDMOUN.KAUOS[5]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[6]=403,if(GetAnyKau(0,SALDMOUN.TBLOS[6],SALDMOUN.KAUOS[6]),GivenAnName(1),'Нет аналитики'),
	'Нет аналитики' )))))),

	if(SALDMOUN.TBLOS[1]=415,if(GetAnyKau(0,SALDMOUN.TBLOS[1],SALDMOUN.KAUOS[1]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[2]=415,if(GetAnyKau(0,SALDMOUN.TBLOS[2],SALDMOUN.KAUOS[2]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[3]=415,if(GetAnyKau(0,SALDMOUN.TBLOS[3],SALDMOUN.KAUOS[3]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[4]=415,if(GetAnyKau(0,SALDMOUN.TBLOS[4],SALDMOUN.KAUOS[4]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[5]=415,if(GetAnyKau(0,SALDMOUN.TBLOS[5],SALDMOUN.KAUOS[5]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[6]=415,if(GetAnyKau(0,SALDMOUN.TBLOS[6],SALDMOUN.KAUOS[6]),GivenAnName(1),'Нет аналитики'),
	'Нет аналитики' )))))),

	if(SALDMOUN.TBLOS[1]=KodKauV1,if(GetAnyKau(0,SALDMOUN.TBLOS[1],SALDMOUN.KAUOS[1]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[2]=KodKauV1,if(GetAnyKau(0,SALDMOUN.TBLOS[2],SALDMOUN.KAUOS[2]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[3]=KodKauV1,if(GetAnyKau(0,SALDMOUN.TBLOS[3],SALDMOUN.KAUOS[3]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[4]=KodKauV1,if(GetAnyKau(0,SALDMOUN.TBLOS[4],SALDMOUN.KAUOS[4]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[5]=KodKauV1,if(GetAnyKau(0,SALDMOUN.TBLOS[5],SALDMOUN.KAUOS[5]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[6]=KodKauV1,if(GetAnyKau(0,SALDMOUN.TBLOS[6],SALDMOUN.KAUOS[6]),GivenAnName(1),'Нет аналитики'),
	'Нет аналитики' )))))),

	if(SALDMOUN.TBLOS[1]=KodKauV2,if(GetAnyKau(0,SALDMOUN.TBLOS[1],SALDMOUN.KAUOS[1]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[2]=KodKauV2,if(GetAnyKau(0,SALDMOUN.TBLOS[2],SALDMOUN.KAUOS[2]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[3]=KodKauV2,if(GetAnyKau(0,SALDMOUN.TBLOS[3],SALDMOUN.KAUOS[3]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[4]=KodKauV2,if(GetAnyKau(0,SALDMOUN.TBLOS[4],SALDMOUN.KAUOS[4]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[5]=KodKauV2,if(GetAnyKau(0,SALDMOUN.TBLOS[5],SALDMOUN.KAUOS[5]),GivenAnName(1),'Нет аналитики'),
	if(SALDMOUN.TBLOS[6]=KodKauV2,if(GetAnyKau(0,SALDMOUN.TBLOS[6],SALDMOUN.KAUOS[6]),GivenAnName(1),'Нет аналитики'),
	'Нет аналитики' ))))))

	from
	SALDMOUN,BUHSCHET,PickBuh

	where ((PickBuh.SCHET==SALDMOUN.SCHETO
		and SALDMOUN.SCHETO==BUHSCHET.SCHET
		and SALDMOUN.SUBOSSCH==BUHSCHET.SUBSCH
		))
		and datestart <= SALDMOUN.DATESAL and dateend >= SALDMOUN.DATESAL
	;
Если не понятно, поясню - в определенные поля временной таблицы надо запихать значения соответствующих аналитик, которые в разных счетах могуть быть разного уровня. То есть, например, в аналитике счета 01 организация первого уровня, а в счете 02 организация второго уровня, оба значения (наименование организации в данном случае) должны упасть в поле "Org". KodKauV1 и KodKauV2 - переменные, значения им присваиваются пользователем при задании параметров выгрузки.
Конструкция тоже довольно тяжеловесна, другого пока не придумал.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

так попробуйте
from
SALDMOUN,BUHSCHET,PickBuh

where ((PickBuh.SCHET==SALDMOUN.SCHETO
and datestart <<= SALDMOUN.DATESAL
and dateend >>= SALDMOUN.DATESAL
and SALDMOUN.SCHETO==BUHSCHET.SCHET
and SALDMOUN.SUBOSSCH==BUHSCHET.SUBSCH
))
и вооще - когда уже народ запомнит что за (()) писать нужно в крайнем случае. Даже если нет индекса лучше прописать (noindex) чем как вы, но в даном случае индекс есть - SALDMOUN13.
Serges
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49

Сообщение Serges »

edward_K писал(а):так попробуйте
from
SALDMOUN,BUHSCHET,PickBuh

where ((PickBuh.SCHET==SALDMOUN.SCHETO
and datestart <<= SALDMOUN.DATESAL
and dateend >>= SALDMOUN.DATESAL
and SALDMOUN.SCHETO==BUHSCHET.SCHET
and SALDMOUN.SUBOSSCH==BUHSCHET.SUBSCH
))
и вооще - когда уже народ запомнит что за (()) писать нужно в крайнем случае. Даже если нет индекса лучше прописать (noindex) чем как вы, но в даном случае индекс есть - SALDMOUN13.
Попробовал, быстрее не стало.
У меня еще за (()) ограничение по плану счетов, когда внес в скобки:

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

and _plan == SALDMOUN.cPlansSch(noindex)
стало даже медленнее.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

масло малянное. Код плана счетов у вас уже зашит в scheto
интересно что там у вас еще есть за скобками?
Serges
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49

Сообщение Serges »

edward_K писал(а):масло малянное. Код плана счетов у вас уже зашит в scheto
интересно что там у вас еще есть за скобками?
Да, действительно, если пользоваться PickBuh, код плана счетов не нужен. А за скобками более ничего нет.
Самый быстродействующий вариант в итоге у меня получился, когда я вынес подцепку

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

SALDMOUN.SCHETO==BUHSCHET.SCHET 
and SALDMOUN.SUBOSSCH==BUHSCHET.SUBSCH 
из выборки для временной таблицы в главную вьюху интрефейса, по которой потом и делаю loop.
Serges
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49

Сообщение Serges »

Это довольно странно, но если применить приведенный в посте №6 код к таблице Oborot, выборка выполняется быстрее в два раза. Это при том, что в OBOROT записей более чем на треть больше, нежели в SALDMOUN :???:

Дело в более оптимизированной работе функции GetAnyKau для таблицы оборотов?
Ged
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Сообщение Ged »

нет, просто она написана на паскале.
а паскаль изначально быстрее випа
Serges
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49

Сообщение Serges »

Ged писал(а):нет, просто она написана на паскале.
а паскаль изначально быстрее випа
Не понял. Один и тот же запрос с использованием одной функции для разных таблиц выполняется разное время, причём быстрее - для таблицы, где больше записей. При чём тут паскаль?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

Во первых GetAnyKau кэширует значения в вашу память. Во вторых СУБД кэширует. Поэтому для чмстого теста нужно выгнать всех, рестартовать СУБД и попробовать. Для другой таблы повторить. Примерно можно понять и перезаходом в галку.
Ответить