Почему тормозит???
Добавлено: 07 дек 2006, 13:24
Код в студию:
Проблема заключается в bounds
Первый bounds подключается в Init, т.к. необходимо выбрать контрагентов по ДО, второй - заменяет при выборе контрагентов, т.к. хочется выбрать только тех контрагентов, которые фигурируют в ДО при заданном фильтре. Возникает проблема - тормоза!!!
что я делаю не правильно? как побороть???
Код: Выделить всё
#declare SetMyFont (pPicked)
{Font =
{
Color = if(#pPicked <> '', ColorMark, 0 );
Bold = if(#pPicked <> '', true , false );
Italic = if(#pPicked <> '', true , false )
}
}
#end
const
#include Gloconst.inc;
#include galnet.ccm
#include galnet.csc
#include fldcolor.inc
cSelected = 'Заданы';
cNotSelected = 'Не заданы';
end;
Interface Test 'Test'(,,sci178InsPM) DoAccept; // Cyan, Dialog;
show at (,,101,21)
create view Test
var
DocDateFrom : Date ;
DocDateTo : Date ;
x : integer;
c_org_name : string ;
//Маркер к Организации
OMarker : longint;
OInd : longint;
as
select
basedoc.nrec ,
basedoc.cOrg , //контрагент к взаиморасчетам
katorg.nrec ,
if(SearchMarker(OMarker, katorg.nrec, OInd), 'V','')(FieldName=picked2),
katorg.name , //
katorg.tiporg , //Тип орг. ООО, ЗАО и т.п.
(katorg.tiporg + '"' + katorg.Name + '" (' + katorg.UNN + ')') (FieldName=Organization),
katorg.code , //Внутренний номер организации
katorg.addr , //Адрес организации
katorg.OKPO , //ОКПО
katorg.OKDP , //ОКДП
katorg.OKONH , //ОКОНХ
katorg.Tel , //телефон
katorg.UNN , //ИНН контрагента
katorg.INDEXK , //Индекс контрагента
katorg.KODPLATNDS,//код плательщика НДС
SchFact.dpost , //дата получения
schfact.summa , //сумма
katsopr.summa , //сумма (А:Н:AH)
KatSopr.cSchFact ,
(
if(katsopr.vidsopr = 201, 'Н','А') +
' ' + katsopr.nsopr + ' от ' +
if(longint(katsopr.dsopr)<>0, DateToStr(KatSopr.dsopr,'DD/MM/YYYY'), '')
) (FieldName = KatSoprName)
from basedoc (readonly),
katorg (readonly),
SchFact (readonly),
katsopr (readonly),
SpSchF (readonly),
katnotes (readonly),
katorg (readonly)
where((
BaseDoc.Nrec == StepDoc.cBaseDoc
and 110 == basedoc.viddoc
and DocDateFrom <<= basedoc.ddoc
and DocDateTo >>= basedoc.ddoc
and BaseDoc.Direct == Schfact.Direct
and StepDoc.Nrec == Schfact.cStepDoc
and basedoc.cnote == katnotes.nrec
and SchFact.Nrec == KatSopr.cSchFact
and KatSopr.NRec == SpSopr.cSopr and (SpSopr.npp = 1)
and SchFact.nrec == SpSchF.cSchFact
)) order by basedoc.ddoc
bounds bOrg1
basedoc.corg == katorg.nrec
bounds bOrg
katorg.nrec /== basedoc.corg;
//------------------------------ Begin ClearFilters ------------------------------
procedure ClearFilters;
{
PopAllConditions;
set Test.DOCDateFrom := date(day(cur_date), month(cur_date)-1, year(cur_date));
set Test.DOCDateTo := Cur_date;
Test.c_org_name := cNotSelected;
ClearMarker(OMarker);
}
//------------------------------ End ClearFilters ------------------------------
SCREEN FilterScreen 'Фильтр';
//show at(2,2,100,20)
fields
Test.DocDateFrom : Protect, PickButton;
Test.DocDateTo : Protect, PickButton;
Test.c_org_name : Protect, PickButton;
buttons
cmbtClearOMarkers;
cmbtClearFilter;
<<
За период с:.@@@@@@@@@@ по: .@@@@@@@@@@
Организация:.@@@@@@@@@@@@@@@@@@@@@ <.Очистить.>
<.Очистить Фильтр.>
>>
end;
procedure MarkAllOrg(IsInsert: boolean);
{
StartNewVisual( vtRotateVisual, vfTimer, 'Помечаю все',1);
PushPos(#KatOrg);
if ((Modifier GetFirst KatOrg) = tsOk){
do{
if(not IsInsert)
InvertMarker (OMarker, KatOrg.nrec);
else InsertMarker (OMarker, KatOrg.nrec);
NextVisual;
}while (Modifier GetNext KatOrg = tsOk)
}
PopPos(#KatOrg);
StopVisual('', 0);
RescanPanel(#KatOrg);
}
//------------------------------ Begin Org Window ------------------------------------
Window WinOrg(,,sci178InsPM) doaccept;
show at(,,80,40);
//---------- Begin DocsTable ----------
browse OrgsTable;
show at(,,,30);
table KatOrg;
fields
picked2 'V' : [1] , NoAutoSize, skip , #SetMyFont(picked2);
katorg.code 'Номер' : [5] , NoAutoSize, Protect, #SetMyFont(picked2);//Внутренний номер организации
Test.Organization 'Название' : [10] , Protect, #SetMyFont(picked2);
end;
//---------- End DocsTable ----------
//---------- Begin AdvancedInfo----------
SCREEN AdvancedOrgInfo;
show at(,31,,)
table KatOrg;
fields
katorg.tiporg :Protect, Skip;//Тип орг. ООО, ЗАО и т.п.
katorg.name :Protect, Skip;
katorg.UNN :Protect, Skip;//ИНН контрагента
katorg.OKPO :Protect, Skip;//ОКПО
katorg.OKDP :Protect, Skip;//ОКДП
katorg.OKONH :Protect, Skip;//ОКОНХ
katorg.INDEXK :Protect, Skip;//Индекс контрагента
katorg.addr :Protect, Skip;//Адрес организации
katorg.Tel :Protect, Skip;//телефон
<<
Котрагент: .@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ИНН : .@@@@@@@@@@ ОКПО : .@@@@@@@@@@
ОКДП : .@@@@@@@@@@ ОКОНХ: .@@@@@@@@@@
Адрес: .@@@@@@@ .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
>>
end;
//---------- End AdvancedInfo----------
handleevent
cmMarkUnMark:{
InvertMarker(Test.OMarker, Test.katorg.nrec);
x := GetNext Test.katorg;
RescanPanel(#katorg);
}
cmSelectAll: MarkAllOrg(true);
cmInvertAll: MarkAllOrg(false);
cmUnselectAll: {
ClearMarker(OMarker);
RescanPanel(#katorg);
}
end;
end;
//------------------------------ End Org Window ------------------------------------
procedure RereadView;
{
RereadRecord(tnBaseDoc);
RescanPanel(tnBaseDoc);
ReDrawPanel(tnBaseDoc);
}
handleEvent
cmInit:{
Test.AddBounds(Test.tbbOrg1);
OMarker := InitMarker('MarkerOrg',8,1,1);
ClearFilters;
RereadView;
}
cmPick:{
case (CurField) of
#DocDateFrom, #DocDateTo:{
set Test.DocDateFrom := DocDateFrom;
set Test.DocDateTo := DocDateTo;
RereadView;
}
#c_org_name:{
Test.PopBounds(tbbOrg1);
Test.AddBounds(tbbOrg);
RereadRecord(#KatOrg);
SetWindowTitle(WinOrg, 'Выбор Организаций');
RunWindowModal(WinOrg);
Test.PopBounds(tbbOrg);
Test.AddBounds(tbbOrg1);
if(word(GetMarkerCount(Test.OMarker)) <> 0)
set Test.c_org_name := cSelected;
else set Test.c_org_name := cNotSelected;
RereadRecord(#BaseDoc);
}
end;
}
cmbtClearFilter:{
ClearFilters;
}
cmbtClearOMarkers:{
ClearMarker(Test.OMarker);
set Test.c_org_name := cNotSelected;
}
end;
end.
Код: Выделить всё
bounds bOrg1
basedoc.corg == katorg.nrec
bounds bOrg
katorg.nrec /== basedoc.corg;
что я делаю не правильно? как побороть???