AddBounds ==> Runtime

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

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

RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

AddBounds ==> Runtime

Сообщение RAJAH »

Привет всем!
При вызове AddBounds в ARD-отчёте происходит RunTime 216 с последующим вылетом Галактики. Что бы это значило?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

Значит боундс неправильный подымаете. Текст в студию :)
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Сообщение 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 - временные таблицы.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

масло маслянное.
fpoborot.cstbud /== fpstbud.nrec надо тыды сначала есть.
сделайте PushBounds(tbpostat) тыды. Да и точка с запятой не нужна наверное.
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Сообщение RAJAH »

Из этих трёх строк понял только, что надо вместо AddBounds писать PushBounds. Однако, не помогает - "Установка несуществующего ограничения".
P.S. Пардон, очепятка с точкой с запятой... :)
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

а что несколько вьюх? В Addbounds то что писали?
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Сообщение RAJAH »

Вьюха-то одна, но она называется opl (привычка такая - всё обзывать... :) ). Поэтому пишу PushBounds(opl.tbpostat), или AddBounds(opl.tbpostat).
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

тыды opl.PushBounds(opl.tbpostat) попробуйте. Обычно то компилятор не пропускает если не так задано ограницение.
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Сообщение RAJAH »

Так, вроде, получается... Спасибо!
А если я не хочу применять это ограничение? Почему-то opl.PopBounds(opl.tbpostat) не помогает.
Я из диалога запрашиваю: ставить или нет фильтр на статью бюджета. Если да - вызываю стандартный фейс и помеченные статьи закидываю в mrk. Если нет - вызываю opl.PopBounds(opl.tbpostat). В результате ничего не выдаётся.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

я не вижу где у вас mrk еще завязано. Вы какую таблу то хотите ограничить? Возможно вы хотите наоборот ? ограничить вьюху по наличию в mrk? Тогда надо местами таблы поменять в боундсе, но тормозить будет ужас. Без всего текста точно не сказать.
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Сообщение 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);
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

Я ж сказал - "без всего текста". Отчет то вы по какой табле строите?
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Сообщение RAJAH »

Эээээ... Моя твоя не понимать... :)
Вы, батенька, что имеете в виду?..
Вот по вышеприведённому запросу(вьюхе) выдёргиваю р/с, номер и дату платёжного документа, статью, ЦО, сумму платежа... Делаю цикл по этой вьюхе .{table 'opl' ... Хочу спрашивать юзера, будет ли он ставить фильтр по статье бюджета, или ему все нужны... Хочу в зависимости от его ответа применять ограничение... Можно конкретнее вопрос?.. Весь slk-файл привести, что ли?.. Вроде, его основные части привёл, остальное - оформление...
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

.{ table ?????? ?.
так короче попробуйте

fpstbud.nrec /== mrk.fnr

но вообще если нужно быстродействие нужно mrk задействовать в ограничении на fpoborot (наверное :) ) - типа mrk.fnr == fpoborot.cstbud ну и все остальные таблы переподчинить к fpoborot в этом разе.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

да
opl.PopBounds(opl.tbpostat);
совершенно лишнее в вашем случае, вы ж еще Push не сделали. В вашем коде лучше тогда писать opl.PushBounds(opl.tnfpstbud) или вообще ничего не писать - но я смысла не вижу зачем все это 8).
Ответить