Почему тормозит???

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

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

Ответить
Alexander
Местный житель
Сообщения: 248
Зарегистрирован: 28 ноя 2006, 13:29

Почему тормозит???

Сообщение Alexander »

Код в студию:

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

#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

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

   bounds bOrg1
         basedoc.corg  ==  katorg.nrec

   bounds bOrg
         katorg.nrec  /== basedoc.corg;
Первый bounds подключается в Init, т.к. необходимо выбрать контрагентов по ДО, второй - заменяет при выборе контрагентов, т.к. хочется выбрать только тех контрагентов, которые фигурируют в ДО при заданном фильтре. Возникает проблема - тормоза!!!
что я делаю не правильно? как побороть???
Goblin
Местный житель
Сообщения: 474
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь-матушка
Контактная информация:

Сообщение Goblin »

Напишите лучше, что хотите сделать ...
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Alexander
Местный житель
Сообщения: 248
Зарегистрирован: 28 ноя 2006, 13:29

Сообщение Alexander »

выбрать только тех контрагентов, которые указаны в ДО(при фильтре наложенном на ДО).
т.е. Допустим указываю дату с 1 по 20 ноября, мне нужен список контрагентов, которые фигурируют в ДО за этот период... Различных ограничений на ДО может быть очень много....
Хотел сделать это одним bounds=katorg.nrec /== basedoc.corg;
работает, но тормозит....
причем тормозит из-за жесткой подцепки. Если указать
katorg.nrec == basedoc.corg;
тогда выдает всех контрагентов. Тормозит, видимо, из-за ограничений... как побороть?
aleks1232321
Постоянный гость
Сообщения: 86
Зарегистрирован: 28 апр 2005, 12:15
Откуда: Москва

Сообщение aleks1232321 »

//║ Галактика (с) 1995, 97 TOP SOFT Ltd., Новый АТЛАНТ
//║ Версия : 5.20
//║ Назначение: Баундсы документов-оснований

Bounds MainBound = tipDO == BaseDoc.VidDoc
ordered by BaseDoc.dDoc,BaseDoc.NoDoc
Bounds VscBound = tipDO == BaseDoc.VidDoc and
curdescr == BaseDoc.Descr
ordered by BaseDoc.dDoc,BaseDoc.NoDoc
Bounds VscGrBound = tipDO == BaseDoc.VidDoc and
curdesGr == BaseDoc.DesGr
ordered by BaseDoc.dDoc,BaseDoc.NoDoc
Bounds dMainBound = tipDO == BaseDoc.VidDoc and
d1 <<= BaseDoc.dDoc and
d2 >>= BaseDoc.dDoc

Bounds dMyOrgFiltr = tipDO == BaseDoc.VidDoc and
cMyOrgFiltr == BAseDoc.cOrg

Bounds MyOrgDescr = tipDO == BaseDoc.VidDoc and
curdescr == BaseDoc.Descr and
cMyOrgFiltr == BAseDoc.cOrg

Bounds MyOrgDesgr = tipDO == BaseDoc.VidDoc and
curdesGr == BaseDoc.DesGr and
cMyOrgFiltr == BAseDoc.cOrg


Bounds dMyDescrFiltr = tipDO == BaseDoc.VidDoc and
myBaseDoc_Descr == BaseDoc.Descr (noindex)
ordered by BaseDoc.dDoc,BaseDoc.NoDoc

Bounds dMyDesgrFiltr = tipDO == BaseDoc.VidDoc and
myBaseDoc_Desgr == BaseDoc.Desgr
ordered by BaseDoc.dDoc,BaseDoc.NoDoc

Bounds dVscBound = tipDO == BaseDoc.VidDoc and
curdescr == BaseDoc.Descr and
d1 <<= BaseDoc.dDoc and
d2 >>= BaseDoc.dDoc
Bounds dVscGrBound = tipDO == BaseDoc.VidDoc and
curdesGr == BaseDoc.DesGr and
d1 <<= BaseDoc.dDoc and
d2 >>= BaseDoc.dDoc
Bounds CopySpecif = CopyStep == SpStepC.cStepDoc


Bounds TekSal03 =
SpStep.cMCUSL == TekSaldo.cMC and
BaseDoc.cParty == TekSaldo.cPodr and
BaseDoc.CCBD1 == TekSaldo.cMol
ordered by TekSaldo.dGodn

Bounds TekSal04 =
SpStep.cMCUSL == TekSaldo.cMC and
BaseDoc.cParty == TekSaldo.cPodr and
BaseDoc.CCBD1 == TekSaldo.cMol
ordered by TekSaldo.dGodn (Desc)

Bounds TekSal01 =
SpStep.cMCUSL == TekSaldo.cMC and
BaseDoc.cParty == TekSaldo.cPodr
ordered by TekSaldo.dGodn, TekSaldo.Kod


Bounds TekSal02 =
SpStep.cMCUSL == TekSaldo.cMC and
BaseDoc.cParty == TekSaldo.cPodr
ordered by TekSaldo.dGodn (Desc), TekSaldo.Kod

order byKatNotes_sName by KatNotes.sName
Alexander
Местный житель
Сообщения: 248
Зарегистрирован: 28 ноя 2006, 13:29

Сообщение Alexander »

aleks1232321
а толку? того, что мне нужно нет :-)
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Сообщение Max_Fin »

Похоже конфликт между
сортировкой

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

order by basedoc.ddoc 
и подцекой

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

katorg.nrec  /== basedoc.corg
попробуйте убрать

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

order by basedoc.ddoc 
далее написать

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

bounds bOrg1 
         basedoc.corg  ==  katorg.nrec
         Ordered by basedoc.ddoc

   bounds bOrg 
      katorg.nrec  /== basedoc.corg;
Жду выхода Вселенная 2.12!
Alexander
Местный житель
Сообщения: 248
Зарегистрирован: 28 ноя 2006, 13:29

Сообщение Alexander »

не помогло :-(
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

я бы на выбор контрагентов сделал бы отдельную вьюху или обЪявил бы синонимы(так медленнее, но тоже будет работать) - если не отдельный фейс уж и не парился бы с addbounds ( лучше уж Pushbounds использовать, перед ним обязательно resetbounds(#katorg)). Да, конструкции типа update test.katorg ... в 8 не катят, правильно писать test.update katorg ... (что и логичней).
Alexander
Местный житель
Сообщения: 248
Зарегистрирован: 28 ноя 2006, 13:29

Сообщение Alexander »

да я уже и сам на счет отдельного фейса думал...
а чем пуш лучше адд??? у них же назначение разное...
Ответить