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

Внутренняя ошибка - нет родителя

Добавлено: 22 апр 2011, 14:24
RAJAH
Здравствуйте.
Заметил, что такая ошибка возникает при открытии ещё одного цикла .{table внутри первого, когда второй цикл открывается после закрытия подцикла .{by ... .} из первого.

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

.{table 'aaa' by <aaa.f1>...
...
.{by <aaa.f2>...
...
.}
.{table 'bbb' by <bbb.f3>...
...
.}
.}
Нет каких-нибудь лаконичных способов победить это?

Re: Внутренняя ошибка - нет родителя

Добавлено: 26 апр 2011, 12:32
RAJAH
Что, никто не встречался с подобным?

Re: Внутренняя ошибка - нет родителя

Добавлено: 13 май 2011, 11:54
Semi-bit
Опишите, пожалуйста, каким образом связаны таблицы, что сейчас выводится, и что вы хотите получить в результате.

Re: Внутренняя ошибка - нет родителя

Добавлено: 13 май 2011, 12:13
RAJAH
Ничего не выводится - падает по рантайму.
Во внутреннем цикле считаю сумму, потому и закрываю до открытия следующего .{table.
Хочу получить работоспособный отчёт.
View могу привести, если не боитесь простыни.

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

.create view otp as	
select material.*, katmc.*, katpodr.*, sklad.*, spsopr.*, katotped.koef, otped.koef, spobjacc.*, spmnpl.nrec, kated.abbr, katsopr.*, spob.kolcpos, valspmnp.*, attrval.vstring	
from katsopr, spsopr, objacct, spobjacc, spmnpl, katmc, katmc material, katpodr, katpodr sklad, pick, pick pick2, kated, katotped, katotped otped, spobjacc spob, valspmnp, attrval	
where	
((	
begper             <<= katsopr.dopr and	
endper             >>= katsopr.dopr and	
501                 == katsopr.vidsopr and	
katsopr.nrec       /== spsopr.csopr and	
katsopr.nrec       /== objacct.cowner and	
45                  == spobjacc.typeobj and	
objacct.nrec       /== spobjacc.cobjacct and	
spsopr.nrec        /== spobjacc.cobject and	
spobjacc.cspobjacc /== spob.nrec and	
spobjacc.cpos      /== spmnpl.nrec and	
spmnpl.cspmnplan    == attrval.crec and	
10000000000D0h      == attrval.cattrnam and	
11038               == attrval.wtable and	
spmnpl.nrec        /== valspmnp.cspmnpl and	
spmnpl.cizd        /== katmc.nrec and	
spsopr.cmcusl      /== material.nrec and	
material.ced       /== kated.nrec and	
spsopr.cotped       == katotped.nrec and	
spobjacc.cotped     == otped.nrec and	
katsopr.cpodrfrom  /== sklad.nrec and	
katsopr.cpodrto    /== katpodr.nrec and	
784                 == pick.wlist and	
katpodr.nrec       /== pick.crec and	
sklad.nrec         /== pick2.crec and	
11                  == pick2.wlist	
)) 	
order by katmc.name+spmnpl.nrec+katmc.nrec+sklad.name+material.name+material.nrec, katsopr.nrec, spmnpl.nrec;	
А вот обращения к нему:

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

.{table 'otp' by otp.spmnpl.nrec
.{by otp.katmc.nrec
...
.{by otp.sklad.name
...
.{by otp.material.nrec
.{by otp.katsopr.nrec
... // здесь идёт суммирование
.}
.{table 'findzamK' by findzamK.katmc.nrec
...
.{by findzamK.histzam.nrec
.}
^ // здесь вывод
.}

Re: Внутренняя ошибка - нет родителя

Добавлено: 13 май 2011, 15:27
Semi-bit
Ну, на первый взгляд, здесь проблема именно в том, что я изначально и подозревал - отсутствуют некоторые индексы.

Могу посоветовать пока переписать вьюху с их использованием, и создать временные таблицы для *.name+*.nrec, ибо в Галактике >95% таблиц не связывают нреки с именами. Можно для начала убрать первое условие ордер бай - уж больно оно сложное. Возможно, в 8 такое условие не проблема, но уж слишком симптомы похожи на поведение 7 в таких случаях.

Re: Внутренняя ошибка - нет родителя

Добавлено: 13 май 2011, 16:28
RAJAH
order by spmnpl.nrec, katmc.nrec, sklad.name, material.name, material.nrec, katsopr.nrec, spmnpl.nrec;
тоже не спасает...
8.1 у нас.

Re: Внутренняя ошибка - нет родителя

Добавлено: 16 май 2011, 09:54
Semi-bit
А если оставить только сортировку по нрекам? Имхо, для галактики нет разницы, будет ли написано

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

order by spmnpl.nrec, katmc.nrec, sklad.name, material.name
или же

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

order by spmnpl.nrec+katmc.nrec+sklad.name+material.name
Я предлагал использовать индексы, то есть

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

select ... from SpMnPl (SpMnPl01), Sklad (SkladNN)
где NN - номер индекса, 1-й индекс практически всегда делается по нреку.
По имени индексы обычно делаются в связке с каким-либо типом документа. Вип при компиляции форм индекс не всегда проверяет, а при формировании документа поиск несуществующего индекса вызывает рантайм-ошибку. Отсюда и растут корни падения основного приложения.

Да, и ещё жёсткие подцепки лучше убрать. Вместо них надо ставить пропуски итераций по условию IsValidAll(tnSpSomeTable).

Re: Внутренняя ошибка - нет родителя

Добавлено: 08 июн 2011, 13:41
RAJAH

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

...
from katsopr, spsopr, objacct, spobjacc, spmnpl(spmnpl01), katmc(katmc01), katmc material(katmc01), katpodr, katpodr sklad(katpodr01), pick, pick pick2, kated, katotped, katotped otped, spobjacc spob, valspmnp, attrval
...
order bord by spmnpl.nrec, katmc.nrec, sklad.nrec, material.nrec, katsopr.nrec;
Итог тот же.
Про жёсткие подцепки не понял: они, вообще-то, мне нужны для отсекания лишних записей.

Re: Внутренняя ошибка - нет родителя

Добавлено: 08 июн 2011, 16:16
Semi-bit
:? У меня варианты кончились. Разве что ордер бай убрать. Надеюсь, заставить отчёт так работать не вопрос жизни и смерти :)
Потом как-нибудь сам проверю, если будет время.