Страница 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) или вообще ничего не писать - но я смысла не вижу зачем все это 8).