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

Обновление данных в browse

Добавлено: 25 дек 2014, 13:42
Marisha_P
Подскажите, как синхронизировать обновление данных. Есть главный интерфейс, есть вспомогательный, который отображается как вкладки.
Во вспомогательном данные берутся отсюда:

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

create view
var
   #DefPackVars

 select
    *
 from
    spmatpropusk,
    matpropusk,
    katsopr,
    katpodr katpodr1,
    ttndoc,
    marpunkt,
    marpunkt marpunkt1,
    kndriver
 where((
           c_matpropusk               ==  matpropusk.nrec
       and spmatpropusk.cmatpropusk  /==  matpropusk.nrec
       and spmatpropusk.ckatsopr      ==  katsopr.nrec
       and katsopr.cpodrfrom          ==  katpodr.nrec
       and katsopr.cpodrto            ==  katpodr1.nrec
       and katsopr.cdovfio            ==  dovfio.nrec
       and katsopr.nrec               ==  ttndoc.cdoc (noindex)
       and TTNDOC.CPUNKTP             ==  marpunkt.nrec
       and TTNDOC.CPUNKTR             ==  marpunkt1.nrec
       and TTNDOC.CTRANSP             ==  TRANSP.nrec
       and TTNDOC.cdoc2               ==  kndriver.nrec
   )); 
Соответственно из основного хочу вызывать функцию, передающую значение переменной с_matpropusk. Вызываю ее:

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

 objdocv.setparams(matpropusk.nrec);  
Сама функция описана вот так:

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

objInterface iObjDoc;
   procedure SetParams(cp:comp);
 end; 

#declare DefSetParamsDoc
procedure SetParams(cp:comp);
{
   set c_matpropusk := cp;   
   RereadRecord(#spmatpropusk);
   RescanPanel(#spmatpropusk);
}
#end

#declare DefPackVars
   c_matpropusk:comp;
#end
Но при переходе по позициям главной таблицы значения на вкладке не изменяются:(((

Re: Обновление данных в browse

Добавлено: 25 дек 2014, 15:13
Zver
Если я правильно понял, то основной таблицей является matpropusk, по которой затем происходит поиск, тогда можно попробовать так:

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

where((
           c_matpropusk               ==  matpropusk.nrec
       [b]and c_matpropusk  /==  spmatpropusk.cmatpropusk[/b] //здесь задаём ограничение на таблицу spmatpropusk
       and spmatpropusk.ckatsopr      ==  katsopr.nrec
       and katsopr.cpodrfrom          ==  katpodr.nrec
       and katsopr.cpodrto            ==  katpodr1.nrec
       and katsopr.cdovfio            ==  dovfio.nrec
       and katsopr.nrec               ==  ttndoc.cdoc (noindex)
       and TTNDOC.CPUNKTP             ==  marpunkt.nrec
       and TTNDOC.CPUNKTR             ==  marpunkt1.nrec
       and TTNDOC.CTRANSP             ==  TRANSP.nrec
       and TTNDOC.cdoc2               ==  kndriver.nrec
   )); 

Re: Обновление данных в browse

Добавлено: 25 дек 2014, 15:14
Den
1. Добавьте в procedure SetParams мессаг и поймете вызывается ли она
2. Если не вызывается. Остается понять где как Вам дернуть метод SetParams в интерфейсе контейнере (т.е.в главном)

Re: Обновление данных в browse

Добавлено: 25 дек 2014, 15:37
Marisha_P
Процедура вызывается. В нее передается нужный nrec... Запрос в суппорте тоже верные данные передает.. Только browse данные не обновляет:( по cmPositionChanged

Re: Обновление данных в browse

Добавлено: 25 дек 2014, 16:30
Den
быстрее всего, значит ЛОТ интерфейса чем то все же отличается от аналогичного select в саппорте что Вы делаете.
Упрощайте и ищите в чем трабл

Re: Обновление данных в browse

Добавлено: 25 дек 2014, 17:02
Zver
Попробуйте пройти отладчиком и убедитесь, что после выполнения процедуры значение переменной c_matpropusk изменяется.

Re: Обновление данных в browse

Добавлено: 25 дек 2014, 19:32
Ольга
Вроде позиционирования на записи не хватает, после изменения условий:

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

procedure SetParams(cp:comp);
{
   c_matpropusk := cp;   
   If Getfirst spmatpropusk = tsOk {}
   RescanPanel(#spmatpropusk);
}

Re: Обновление данных в browse

Добавлено: 25 дек 2014, 23:43
Den
Ольга писал(а):Вроде позиционирования на записи не хватает
у топикстартера там RereadRecord
и оставить c_matpropusk := cp; без set ..это верно

Re: Обновление данных в browse

Добавлено: 26 дек 2014, 09:09
Marisha_P
вывела номер накладной из функции..Получается, что там всегда передается старое значение накладной, т.е. при смене позиции в основном browse не происходит перевыбор данных.Как это исправить не знаю:(

Re: Обновление данных в browse

Добавлено: 26 дек 2014, 10:28
Zver
Выложите код для основного browse, посмотрим, что с ним.

Re: Обновление данных в browse

Добавлено: 26 дек 2014, 11:17
Marisha_P

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

create view
var
   objdocv      : iObjDoc;
   objinfov     : iObjInfo;
   katnotesnrec : comp;
   cex          : string;
   c_matpropusk : comp;
   nomer        :string;
 select
    *
 from
    matpropusk,
    marpunkt,
    marpunkt marpunkt1,
    kndriver,
    dovfio
 where
     ((    matpropusk.ctranspr==transp.nrec
       and matpropusk.cmarpunktpr==marpunkt.nrec
       and matpropusk.cmarpunktpr1==marpunkt1.nrec
       and matpropusk.cexpeditorvodpr==kndriver.nrec
       and matpropusk.cexpeditordovpr==dovfio.nrec
    ));           

Re: Обновление данных в browse

Добавлено: 26 дек 2014, 11:29
Den
Ну что же Вы только вью привели.
Давайте еще код :
обработчик события, где вызывается objdocv.setparams(matpropusk.nrec);
и сам browse

Re: Обновление данных в browse

Добавлено: 29 дек 2014, 08:35
Marisha_P
Это browse и вкладки:)

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

  Browse brMatpr
   show at (,,,30)
   Table matpropusk;
   Fields
     matpropusk.npr          'Номер'         : [5],  noprotect;
     matpropusk.dpr          'Дата'          : [5],  pickbutton,noprotect;
     matpropusk.statuspr     'Статус'        : [5],  pickbutton, noProtect;
     matpropusk.cnaztidkpr   'Тип'           : [5],  pickbutton,noprotect;
     transp.nomer            'Номер машины'  : [7],  pickbutton,noprotect;
     transp.marka            'Марка машины'  : [7],  noprotect;
     marpunkt.name           'Груз отпущен'  : [13], pickbutton,noprotect;
     marpunkt1.name          'Груз следует'  : [13], pickbutton,noprotect;
     [provoz] if (matpropusk.ctidkpr=201 or matpropusk.ctidkpr=521 or matpropusk.ctidkpr=600 or matpropusk.ctidkpr=602,dovfio.name,kndriver.name) 'Кто  провозит'  : [13], pickbutton,noprotect;
     matpropusk.workpr       'Место работы'  : [10], noprotect;
     matpropusk.descrpr      'Дескриптор'    : [5],  noprotect;

End;                

tabbedsheet bottom tb;
show at(,36,,);
   embedded ScSoprDoc 'Сопроводительные документы' interface SoprDocument;
   end;
   embedded ScDopInfo 'Дополнительная информация' interface DopInfo;
   end;
end;  
вызываю здесь

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

 cmPositionChanged:{
      if(CurTable = #matpropusk){
         ResetTableSpec();
         }
 }    
процедура описана

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

procedure ResetTableSpec;
{
   StartNewVisual( vtRotateVisual, vfTimer, '',1);
   SetVisualTitle('Подождите пожалуйста...');
   objdocv.setparams(matpropusk.nrec);
   StopVisual('',0);
}    

Re: Обновление данных в browse

Добавлено: 29 дек 2014, 11:03
Den
Во встраиваемом интер-се во вью попробуйте вместо :

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

and spmatpropusk.cmatpropusk  /==  matpropusk.nrec
так :

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

and matpropusk.nrec == spmatpropusk.cmatpropusk

и не видно еще у Вас бравсе встраиваемого интер-са, по которому не происходит нужное отображение, но там, конечно, таблица формата д.б. table spmatpropusk

Re: Обновление данных в browse

Добавлено: 29 дек 2014, 14:56
Marisha_P
да. тут такой код.

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

Browse brSoprdocum
 show at (,,,)
 table Spmatpropusk;
 Fields
    spmatpropusk.npp        '№ п/п'           : [2],  protect;
    katsopr.nsopr           'Номер'           : [5],  protect;
    katsopr.dsopr           'Выписан'         : [4],  protect;
    katpodr.name            'Грузоотправитель': [15], protect;
    katpodr1.name           'Грузополучатель' : [15], protect;
    transp.nomer            'Номер машины'    : [5],  protect;
    transp.marka            'Марка машины'    : [5],  protect;
    marpunkt.name           'Груз отпущен'    : [10], protect;
    marpunkt1.name          'Груз следует'    : [10], protect;
    if (katsopr.vidsopr=201 or katsopr.vidsopr=521 or katsopr.vidsopr=600 or katsopr.vidsopr=602,dovfio.name,kndriver.name)  'Кто провозит'    : [10], protect;
End;