Страница 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. Вызываю ее:
Сама функция описана вот так:
Код: Выделить всё
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;