Страница 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
У меня варианты кончились. Разве что ордер бай убрать. Надеюсь, заставить отчёт так работать не вопрос жизни и смерти
Потом как-нибудь сам проверю, если будет время.