Страница 1 из 3
AddBounds ==> Runtime
Добавлено: 16 июн 2008, 12:26
RAJAH
Привет всем!
При вызове AddBounds в ARD-отчёте происходит RunTime 216 с последующим вылетом Галактики. Что бы это значило?
Добавлено: 16 июн 2008, 12:42
edward_K
Значит боундс неправильный подымаете. Текст в студию

Добавлено: 16 июн 2008, 12:52
RAJAH
Как раз хотел разобраться, как правильно bounds применять...
Код: Выделить всё
select cashbank.name, plpor.*, fpstbud.name, soprhoz.*, katorg.name, fpco.name
from plpor, fpstbud, aktofp, aktperf, cashbank, katorg, fpco, soprhoz, clearing, fpoborot, mrk, met
where
((
begper <<= soprhoz.datob and
endper >>= soprhoz.datob and
soprhoz.csoprdoc /== plpor.nrec and
soprhoz.nrec /== aktperf.csoprhoz and
aktperf.caktofp /== aktofp.nrec and
aktofp.cpodr /== fpco.nrec and
aktofp.nrec /== clearing.caktofp and
823 == fpoborot.tidk and
clearing.nrec /== fpoborot.csoprdoc and
150 == fpoborot.kodreg (noindex) and
fpoborot.cstbud /== fpstbud.nrec and
met.fnr /== fpco.nrec and
plpor.cpol /== katorg.nrec and
2 == cashbank.razdel and
plpor.cbankplat == cashbank.cpodr
))
bounds postat = mrk.fnr /== fpstbud.nrec;
order by soprhoz.datob, plpor.nrec;
met и mrk - временные таблицы.
Добавлено: 16 июн 2008, 14:25
edward_K
масло маслянное.
fpoborot.cstbud /== fpstbud.nrec надо тыды сначала есть.
сделайте PushBounds(tbpostat) тыды. Да и точка с запятой не нужна наверное.
Добавлено: 16 июн 2008, 14:40
RAJAH
Из этих трёх строк понял только, что надо вместо AddBounds писать PushBounds. Однако, не помогает - "Установка несуществующего ограничения".
P.S. Пардон, очепятка с точкой с запятой...

Добавлено: 16 июн 2008, 14:43
edward_K
а что несколько вьюх? В Addbounds то что писали?
Добавлено: 16 июн 2008, 14:59
RAJAH
Вьюха-то одна, но она называется opl (привычка такая - всё обзывать...

). Поэтому пишу PushBounds(opl.tbpostat), или AddBounds(opl.tbpostat).
Добавлено: 16 июн 2008, 15:03
edward_K
тыды opl.PushBounds(opl.tbpostat) попробуйте. Обычно то компилятор не пропускает если не так задано ограницение.
Добавлено: 16 июн 2008, 15:29
RAJAH
Так, вроде, получается... Спасибо!
А если я не хочу применять это ограничение? Почему-то opl.PopBounds(opl.tbpostat) не помогает.
Я из диалога запрашиваю: ставить или нет фильтр на статью бюджета. Если да - вызываю стандартный фейс и помеченные статьи закидываю в mrk. Если нет - вызываю opl.PopBounds(opl.tbpostat). В результате ничего не выдаётся.
Добавлено: 16 июн 2008, 15:52
edward_K
я не вижу где у вас mrk еще завязано. Вы какую таблу то хотите ограничить? Возможно вы хотите наоборот ? ограничить вьюху по наличию в mrk? Тогда надо местами таблы поменять в боундсе, но тормозить будет ужас. Без всего текста точно не сказать.
Добавлено: 16 июн 2008, 16:04
RAJAH
Хочется в одном отчёте сделать 2 варианта запроса: с фильтром по статьям бюджета и без него. Можно, конечно, сделать 2 отчёта, но слишком просто.

Код такой:
Код: Выделить всё
RunDialog('InpVar', prizn);
if prizn=0 then
begin
RunInterface('F_FPCATALOG::GETSTBUD', 3);
MarkSt:=InitMarker('GetSomeFPStBud', 8, 1, 1);
for(MarkIn:=0; MarkIn<=GetMarkerCount(MarkSt)-1; MarkIn:=MarkIn+1)
begin
if GetMarker(MarkSt, MarkIn, nr) then
stb.insert mrk set
mrk.fnr:=nr;
end;
DoneMarker(MarkSt, 'GetSomeFPStBud');
opl.PushBounds(opl.tbpostat);
end
else
opl.PopBounds(opl.tbpostat);
Добавлено: 16 июн 2008, 16:32
edward_K
Я ж сказал - "без всего текста". Отчет то вы по какой табле строите?
Добавлено: 16 июн 2008, 16:49
RAJAH
Эээээ... Моя твоя не понимать...

Вы, батенька, что имеете в виду?..
Вот по вышеприведённому запросу(вьюхе) выдёргиваю р/с, номер и дату платёжного документа, статью, ЦО, сумму платежа... Делаю цикл по этой вьюхе .{table 'opl' ... Хочу спрашивать юзера, будет ли он ставить фильтр по статье бюджета, или ему все нужны... Хочу в зависимости от его ответа применять ограничение... Можно конкретнее вопрос?.. Весь slk-файл привести, что ли?.. Вроде, его основные части привёл, остальное - оформление...
Добавлено: 16 июн 2008, 17:04
edward_K
.{ table ?????? ?.
так короче попробуйте
fpstbud.nrec /== mrk.fnr
но вообще если нужно быстродействие нужно mrk задействовать в ограничении на fpoborot (наверное

) - типа mrk.fnr == fpoborot.cstbud ну и все остальные таблы переподчинить к fpoborot в этом разе.
Добавлено: 16 июн 2008, 17:08
edward_K
да
opl.PopBounds(opl.tbpostat);
совершенно лишнее в вашем случае, вы ж еще Push не сделали. В вашем коде лучше тогда писать opl.PushBounds(opl.tnfpstbud) или вообще ничего не писать - но я смысла не вижу зачем все это

.