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

Re: Как использовать Bounds?

Добавлено: 01 фев 2012, 13:16
spark
denisag писал(а):Что такое "boundsactive"? в документации по поиску не находит, Viper ругается что нет такой функции поля или метода.
boundactive без "s"

Re: Как использовать Bounds?

Добавлено: 01 фев 2012, 13:25
denisag
так я понял:
нужно объявить переменные
_gruz:=tmpGruzto.CGRUZTO
_adr:=tmpGruzto.ADRES

но куда их притулить не совсем понимаю:
в cmDefault?

Код не весь мой - поэтому некоторые вещи доходят туговато

Написал вот так:

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

cmDefault:
{
 _kol:=tmpVozvratMC.KOLFACT
 _price:=tmpVozvratMC.CENA
 _csporder:=tmpVozvratMC.SPORDERNREC
 ///////
 _gruz:=tmpGruzto.CGRUZTO
 _adr:=tmpGruzto.ADRES
}
cmpick:
{
_gruz:=0;
message (_gruz)
RUNINTERFACE (L_SOPRDOC::Example2, _corg, _gruz, _adr);
if boundactive(tbfilGruz) subbounds(tbfilGruz)
if _gruz <>0
{ addbounds(tbfilGruz);
}
//if getfirst ????? =0 {} // без позиционирования иногда не срабатывает обновление
//rescanpanel(tn?????) // вместо tn можно юзать # - но это не везде.
/*if _gruz !=0
{
 subbounds(tbfilGruz);
 addbounds(tbfilGruz);
 message (_gruz)
}
else
subbounds(tbfilGruz)
PutCommand(cmRefreshBDdata) */
message (_gruz)
}
end;
end.
// Вызов второго интерфейса для использования его в качестве фильтров для первого интерфейса
Interface Example2 'Грузополучатели' , escClose, cyan, doAccept;
//Передаем ему параметры
parameters _CORG, _gruz, _adr
//Создаем представление для временной таблицы tmpGruzto
create view as select * from tmpGruzto;
// Выводим то что будет отображаться в нашем интерфейсе
browse GruztoBrowse;
Fields
tmpGruzto.CGRUZTO 'Наименование грузополучателя':[25], protect;
tmpGruzto.ADRES 'Адрес грузополучателя':[25], protect;
end;
handleevent
cmInit :
{
//Обрабатываем прямой SQL для второго интерфейса
sql select distinct KATORG.NAME
                   ,KATORG.ADDR
                   ,KATORG3.NAME
                   ,KATORG.NREC
from KATORG
    ,KATSOPR
    ,KATORG KATORG3
where KATSOPR.CGRUZTO = KATORG.NREC and
      KATSOPR.CORGBASE =  KATORG3.NREC and
      (katsopr.corgbase = :_corg )
into tmpGruzto
}
end;
end.
при компиляции ругается на эти строки
//if getfirst ????? =0 {} // без позиционирования иногда не срабатывает обновление
//rescanpanel(tn?????) // вместо tn можно юзать # - но это не везде.
закоментил их так как в первую очередь хочу разобраться в самом наложении фильтров, а причесать можно позже
На выходе опять получаю 0 в начале и конце!

Re: Как использовать Bounds?

Добавлено: 01 фев 2012, 13:33
edward_K
да. правильней в cmDefault - чтобы только по enter менялись.

Re: Как использовать Bounds?

Добавлено: 01 фев 2012, 13:40
denisag
и вылезло еще вот что:
если добавить переменные в parameters

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

parameters _CORG, _gruz, _adr
То происходит "затроение" строк во втором интерфейсе
А так писать я понимаю нельзя:

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

create view as select * from tmpGruzto group by tmpGruzto.CGRUZTO;  
Все разобрался - теперь накладывается.

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

cmpick:
{
_gruz:='';
RUNINTERFACE (L_SOPRDOC::Example2, _corg, _gruz, _adr);
if boundactive(tbfilGruz) subbounds(tbfilGruz)
if _gruz <>''
{ addbounds(tbfilGruz);
}
if getfirst tmpVozvratMC =0 {} // без позиционирования иногда не срабатывает обновление
rescanpanel(tntmpVozvratMC) // вместо tn можно юзать # - но это не везде.
}
end;
end.
// Вызов второго интерфейса для использования его в качестве фильтров для первого интерфейса
Interface Example2 'Грузополучатели' , escClose, cyan, doAccept;
//Передаем ему параметры
parameters _CORG, _gruz, _adr
//Создаем представление для временной таблицы tmpGruzto
create view as select * from tmpGruzto;
// Выводим то что будет отображаться в нашем интерфейсе
browse GruztoBrowse;
Fields
tmpGruzto.CGRUZTO 'Наименование грузополучателя':[25], protect;
tmpGruzto.ADRES 'Адрес грузополучателя':[25], protect;
end;
handleevent
cmInit :
{
//Обрабатываем прямой SQL для второго интерфейса
sql select distinct KATORG.NAME
                   ,KATORG.ADDR
                   ,KATORG3.NAME
                   ,KATORG.NREC
from KATORG
    ,KATSOPR
    ,KATORG KATORG3
where KATSOPR.CGRUZTO = KATORG.NREC and
      KATSOPR.CORGBASE =  KATORG3.NREC and
      (katsopr.corgbase = :_corg )
into tmpGruzto
}
cmDefault:
{
_gruz:=tmpGruzto.CGRUZTO
_adr:=tmpGruzto.ADRES
}
end;
end.
Задвоений - тоже нет!!!

Спасибо всем за помощ - мой уровень кодинга на vipere получил следующий уровень :smile:

Re: Как использовать Bounds?

Добавлено: 01 фев 2012, 16:20
edward_K
да. не обратил внимание. А у вас что параметры к фейсу где то вне фейсов объявлены? Обычно их объявляют после interface (если используются в запросе , то лучше после create view. И следите за типом - это процентов 70 ошибок - comp надежней чем string.

Re: Как использовать Bounds?

Добавлено: 01 фев 2012, 17:55
denisag
Переменные вы имеете ввиду? Да они объявляются в самом начале

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

//Обозначаем переменные
var _corg, _cmc, _csporder, _cpodr:comp;
var _kol, _price:double;
var _dsopr :date;
var _gruz, _adr :string;                
если возникает необходимость то можно одну и туже переменную с легкостью использовать в нескольких интерфейсах, а с типами это верно подмечено :)

Re: Как использовать Bounds?

Добавлено: 01 фев 2012, 20:17
edward_K
объявлять глобально плохой стиль. можно нарваться на чего нибудь. Опять же память будут отъедать у всех.
А так можно было фейс вообще без параметров сделать - смысл их передавать.

Re: Как использовать Bounds?

Добавлено: 13 фев 2013, 08:27
Алексей
в интерфейсе есть две логические таблицы. поименованы. из маркера выбранные значения помещаю в Pick
к первой есть баундс с жесткой подцепкой к этому Pick (синоним)
как только делаю баундс ко второй (аналогичный к pick -синоним) - начинает происходить непонятное... он почему то активен без addbounds ... и отрабатывает вообще странно...

Может на нескольких ЛТ баундсы нельзя использовать?