Страница 1 из 2
Как Динамически менять св-во поля в браузере?
Добавлено: 21 янв 2008, 15:06
Alexander
пытаюсь так:
cfsSetCurrentContainer(Мой браузер');
cfsSetProp('Поле','Skip', false);
не получаеццо. Как победь, уважаемые?
Добавлено: 21 янв 2008, 16:42
Alexander
Попутно возникла еще одна проблема:
во вьюхе описываю поле
if(spdocs.prmc = 1, pick_mc.pickkol, pick_usl.pickkol) (FieldName KolMCUSL)
Потом это поле вставляю в браузер. Дело в том, что при изменении данные не заносятся в таблицу. Просто поле вообще не изменяется. как бороть?
Добавлено: 21 янв 2008, 17:38
edward_K
ну этож выч.поле получилось. С чего вы взяли что оно вообще какое то событие подымет, кроме cmCheckField? Вот там и прописывайте. Вообще для этого обычно переменную заводят и вычисляют ее в cmPositionChanged(а сохраняют все равно в cmCheckField), а у таких полей ставят атрибут protect.
Добавлено: 23 янв 2008, 11:13
Alexander
поставил мессаджи, все равно нули, вот интерфейс
Код: Выделить всё
#declare SetMyFont (pPicked)
{Font =
{
Color = if(#pPicked <> '', ColorSysBlue, 0 );
Bold = if(#pPicked <> '', true , false );
Italic = if(#pPicked <> '', true , false )
}
}
#end
const
#include fldcolor.inc
#include galnet.ccm
#include galnet.csc
end;
//----------------------begin Interface IfcSelDogSpec---------------------
Interface IfcSelDogSpec 'Выбор спецификаций' Cyan, doaccept;
Show At (1,1,60,20)
Create View Vmain
var
CurOwner : comp ;
Marker : longint;
Ind : longint;
tmpCount : double ;
As
Select
*,
if(spdocs.prmc = 1, katmc.name, katusl.name) (FieldName NameMCUSL),
if(spdocs.prmc = 1, pick_mc.pickkol, pick_usl.pickkol) (FieldName KolMCUSL),
if(SearchMarker(Marker,dogovor.nrec, Ind), 'V','')(FieldName=picked)
From
Dogovor,
dogovor spec_dovor,
spdocs,
pick pick_usl,
pick pick_mc
Where
((
CurOwner == dogovor.cdogovor
and dogovor.nrec == spdocs.cdoc
and dogovor.tidk == spdocs.tidk
and spdocs.cmcusl == katmc.nrec
and spdocs.cmcusl == katusl.nrec
and spdocs.cotped == katotped.nrec
and katmc.nrec == pick_mc.crec
and 8 == pick_mc.wlist
and katusl.nrec == pick_usl.crec
and 5 == pick_usl.wlist
)) order by dogovor.ddoc;
/*******************************************************************************
SetUnsetPick - 01/21/2008 1:54
********************************************************************************/
Procedure SetUnsetPick;
var c1: word; c2: comp
{
cfsSetProp('KolMCUSL','Skip', if(picked='', false, true));
_loop spdocs{
if(picked='')
if(spdocs.prmc = 1)
delete pick_mc where(( c2 == pick_mc.crec and 8 == pick_mc.wlist));
else
delete pick_usl where(( c2 == pick_usl.crec and 8 == pick_usl.wlist));
c2 := if(spdocs.prmc = 1, katmc.nrec, katusl.nrec);
if(c2 = comp(0)) exit;
if(spdocs.prmc = 1)
insert into pick_mc set pick_mc.crec = c2, pick_mc.wlist = 8;
else
insert into pick_usl set pick_usl.crec = c2, pick_usl.wlist = 5;
}
} //SetUnsetPick
//------------------------------ Begin MarkAll ------------------------------
procedure MarkAll(IsInsert: boolean);
{
StartNewVisual( vtRotateVisual, vfTimer, 'Пометить все',1);
PushPos(#Dogovor);
if ((Modifier GetFirst Dogovor) = tsOk){
do{
if(not IsInsert)
InvertMarker(Marker , Dogovor.nrec);
else InsertMarker(Marker, Dogovor.nrec);
SetUnsetPick();
NextVisual;
}while (Modifier GetNext Dogovor = tsOk)
}
PopPos(#Dogovor);
StopVisual('', 0);
RescanPanel(#Dogovor);
}
//------------------------------ End MarkAll ------------------------------
panel ptree
tree TreeMain(,,sci178InsPM)
show at(,,,15);
table Dogovor;
fields
picked 'V' : [3], NOAutoSize, #setMyFont(picked), skip;
Dogovor.ddoc 'Дата' : [8], protect, #setMyFont(picked);
Dogovor.descr 'Дескр' : [3], protect, #setMyFont(picked);
Dogovor.nodoc '№ Док' : [6], protect, #setMyFont(picked);
Dogovor.summa 'Сума' : protect;
end;
handleevent
cmTreeTop : {
curOwner := 0;
}
cmTreeDown : {
curOwner := vMain.Dogovor.nrec;
}
cmTreeUp:{
curOwner := vMain.dogovor.cdogovor;
}
cmTreeNeedOwner:
{
TreeGetFirstEx(TreeMain);
}
cmTreeNodeType:
{
if TreeIsTerminal(TreeMain) then TreeSetNodeType(TreeMain, ntfText);
}
cmMarkUnMark:{
InvertMarker(Marker, Dogovor.nrec);
SetUnsetPick();
if(GetNext Dogovor <> tsok){}
RescanPanel(#dogovor);
}
cmSelectAll: MarkAll(true);
cmInvertAll: MarkAll(false);
cmUnselectAll: {
ClearMarker(Marker);
delete all pick;
RescanPanel(#dogovor);
}
end;
end;
browse brwSpec
show at(,16,,);
table spdocs;
fields
NameMCUSL 'Название' : [10], protect ;
katotped.name 'Ед. Изм' : [3] , protect ;
spdocs.kol 'Кол-во' : [5] , protect ;
spdocs.price 'Цена' : [8] , protect ;
spdocs.summa 'Стоимость' : [8] , protect ;
KolMCUSL 'Количество' : [3] , NoProtect;
// pick_mc.pickkol 'Количество' : [3] , noprotect;
// pick_usl.pickkol 'Количество' : [3] , noprotect;
end;
//------------------------------ Begin Initinterface ------------------------------
Procedure Initinterface;
{
delete all pick;
Marker := InitMarker('IfcSelDogovorMarker',8,1,1);
cfsSetCurrentContainer('brwSpec');
}
//------------------------------ End Initinterface --------------------------------
Handleevent
Cminit:{
Initinterface();
}
cmDone:{
DoneMarker(Marker, 'IfcSelDogovorMarker');
}
cmPositionChanged:{
if(CurTable = #spdocs){
SetUnsetPick();
}
message(KolMCUSL + ':' + CurTable);
// if(CurTable = #spdocs){
// tmpCount := KolMCUSL;
// }
}
cmCheckField:{
if(CurTable = #spdocs){
message(KolMCUSL + ':' + CurTable);
if(picked='') exit;
if(spdocs.prmc=1)
Update current pick_mc set pick_mc.pickkol = tmpCount;
else
Update current pick_usl set pick_usl.pickkol = tmpCount;
}
}
End;
End.
//------------------------------ End Interface IfcSelDogSpec------------------------------
В чем проблема? Как в пик прописать?
Добавлено: 23 янв 2008, 12:03
edward_K
1.browse brwSpec тоже обрамить в панель.
2. cmCheckField перенести в handleevent этой панели. иногда делают отдельную панель на таблу(tableEvent ..)
3.из cmCheckField убрать проверку на таблу( можете на поле сделать).
событие табличное а не фейса.
Добавлено: 23 янв 2008, 12:45
Alexander
не помогает... вообще события не приходят...
Добавлено: 23 янв 2008, 12:51
Alexander
Код: Выделить всё
#declare SetMyFont (pPicked)
{Font =
{
Color = if(#pPicked <> '', ColorSysBlue, 0 );
Bold = if(#pPicked <> '', true , false );
Italic = if(#pPicked <> '', true , false )
}
}
#end
const
#include fldcolor.inc
#include galnet.ccm
#include galnet.csc
end;
//----------------------begin Interface IfcSelDogSpec---------------------
Interface IfcSelDogSpec 'Выбор спецификаций' Cyan, doaccept;
Show At (1,1,60,20)
Create View Vmain
var
CurOwner : comp ;
Marker : longint;
Ind : longint;
tmpCount : double ;
As
Select
*,
if(spdocs.prmc = 1, katmc.name, katusl.name) (FieldName NameMCUSL),
if(spdocs.prmc = 1, pick_mc.pickkol, pick_usl.pickkol) (FieldName KolMCUSL),
if(SearchMarker(Marker,dogovor.nrec, Ind), 'V','')(FieldName=picked)
From
Dogovor,
dogovor spec_dovor,
spdocs,
pick pick_usl,
pick pick_mc
Where
((
CurOwner == dogovor.cdogovor
and dogovor.nrec == spdocs.cdoc
and dogovor.tidk == spdocs.tidk
and spdocs.cmcusl == katmc.nrec
and spdocs.cmcusl == katusl.nrec
and spdocs.cotped == katotped.nrec
and katmc.nrec == pick_mc.crec
and 8 == pick_mc.wlist
and katusl.nrec == pick_usl.crec
and 5 == pick_usl.wlist
)) order by dogovor.ddoc;
/*******************************************************************************
SetUnsetPick - 01/21/2008 1:54
********************************************************************************/
Procedure SetUnsetPick;
var c1: word; c2: comp
{
cfsSetProp('KolMCUSL','Skip', if(picked='', false, true));
_loop spdocs{
if(picked='')
if(spdocs.prmc = 1)
delete pick_mc where(( c2 == pick_mc.crec and 8 == pick_mc.wlist));
else
delete pick_usl where(( c2 == pick_usl.crec and 8 == pick_usl.wlist));
c2 := if(spdocs.prmc = 1, katmc.nrec, katusl.nrec);
if(c2 = comp(0)) exit;
if(spdocs.prmc = 1)
if(not isvalidall(#pick_mc))
insert into pick_mc set pick_mc.crec = c2, pick_mc.wlist = 8;
else
if(not isvalidall(#pick_usl))
insert into pick_usl set pick_usl.crec = c2, pick_usl.wlist = 5;
}
} //SetUnsetPick
//------------------------------ Begin MarkAll ------------------------------
procedure MarkAll(IsInsert: boolean);
{
StartNewVisual( vtRotateVisual, vfTimer, 'Пометить все',1);
PushPos(#Dogovor);
if ((Modifier GetFirst Dogovor) = tsOk){
do{
if(not IsInsert)
InvertMarker(Marker , Dogovor.nrec);
else InsertMarker(Marker, Dogovor.nrec);
SetUnsetPick();
NextVisual;
}while (Modifier GetNext Dogovor = tsOk)
}
PopPos(#Dogovor);
StopVisual('', 0);
RescanPanel(#Dogovor);
}
//------------------------------ End MarkAll ------------------------------
panel ptree
tree TreeMain(,,sci178InsPM)
show at(,,,15);
table Dogovor;
fields
picked 'V' : [3], NOAutoSize, #setMyFont(picked), skip;
Dogovor.ddoc 'Дата' : [8], protect, #setMyFont(picked);
Dogovor.descr 'Дескр' : [3], protect, #setMyFont(picked);
Dogovor.nodoc '№ Док' : [6], protect, #setMyFont(picked);
Dogovor.summa 'Сума' : protect;
end;
handleevent
cmTreeTop : {
curOwner := 0;
}
cmTreeDown : {
curOwner := vMain.Dogovor.nrec;
}
cmTreeUp:{
curOwner := vMain.dogovor.cdogovor;
}
cmTreeNeedOwner:
{
TreeGetFirstEx(TreeMain);
}
cmTreeNodeType:
{
if TreeIsTerminal(TreeMain) then TreeSetNodeType(TreeMain, ntfText);
}
cmMarkUnMark:{
InvertMarker(Marker, Dogovor.nrec);
SetUnsetPick();
if(GetNext Dogovor <> tsok){}
RescanPanel(#dogovor);
}
cmSelectAll: MarkAll(true);
cmInvertAll: MarkAll(false);
cmUnselectAll: {
ClearMarker(Marker);
delete all pick;
RescanPanel(#dogovor);
}
end;
end;
panel pSpec
browse brwSpec
show at(,16,,);
table spdocs;
fields
NameMCUSL 'Название' : [10], protect ;
katotped.name 'Ед. Изм' : [3] , protect ;
spdocs.kol 'Кол-во' : [5] , protect ;
spdocs.price 'Цена' : [8] , protect ;
spdocs.summa 'Стоимость' : [8] , protect ;
KolMCUSL 'Количество' : [3] , NoProtect;
// pick_mc.pickkol 'Количество' : [3] , noprotect;
// pick_usl.pickkol 'Количество' : [3] , noprotect;
end;
handleevent
cmCheckField:{
message(KolMCUSL);
if(picked='') exit;
if(spdocs.prmc=1)
Update current pick_mc;
else
Update current pick_usl;
}
cmPositionChanged:{
message(KolMCUSL);
}
end;
end;
//------------------------------ Begin Initinterface ------------------------------
Procedure Initinterface;
{
delete all pick;
Marker := InitMarker('IfcSelDogovorMarker',8,1,1);
cfsSetCurrentContainer('brwSpec');
}
//------------------------------ End Initinterface --------------------------------
Handleevent
Cminit:{
Initinterface();
}
cmDone:{
DoneMarker(Marker, 'IfcSelDogovorMarker');
}
cmPositionChanged:{
if(CurTable = #dogovor){
SetUnsetPick();
}
}
End;
End.
//------------------------------ End Interface IfcSelDogSpec------------------------------
Добавлено: 23 янв 2008, 13:17
edward_K
уберите KolMCUSL из списка полей и добавте ее в var. откройте поле spdocs.kol - попробуйте его поменять.
еще в проект добавте первой строкой
#statusline "statgal"
Да. из сапорта могет и не работать.
Добавлено: 23 янв 2008, 13:31
Alexander
сделал, события все равно не приходят
галка 7-я, запускаю интерефейс через галактику, запуском внешнего...
пошел уже 2-й день, как мучаесь с такой ерундой... давненько я столько времени не терял...
Добавлено: 23 янв 2008, 14:18
edward_K
мелочь какая то
. а если тоже событие для panel ptree прописать? там тоже не пашет?. а cmAlways то пашет?
попробуйте еще это добавить
panel pnspdocs ;
table spdocs
HandleEvent
cmCheckField:
{ message('1')
}
end;
end;
вообще хоть одно событие пашет? а возможно дело в том, что вы константу cmCheckField объявили и сделали это неправильно или тянется она не из того реса.
Добавлено: 23 янв 2008, 15:28
Alexander
в дерево событие приходит.... ничего не понимаю.... константу не объявлял
Добавлено: 23 янв 2008, 15:37
edward_K
отличие в (,,sci178InsPM) я другого не вижу. Ну возможно что show at не там. А #statusline "statgal" в проекте объявили? без нее возможна разная обработка событий.
Добавлено: 23 янв 2008, 16:08
Alexander
статус лайн прописал, все то же... событие cmPositionChanged в панели, где браузер приходит только когда хожу по дереву. может дело в том, что таблица подцеплена к дереву? У меня уже идеи кончаются....
Добавлено: 23 янв 2008, 16:10
Alexander
Код: Выделить всё
#statusline "statgal"
#declare SetMyFont (pPicked)
{Font =
{
Color = if(#pPicked <> '', ColorSysBlue, 0 );
Bold = if(#pPicked <> '', true , false );
Italic = if(#pPicked <> '', true , false )
}
}
#end
const
#include fldcolor.inc
#include galnet.ccm
#include galnet.csc
end;
//----------------------begin Interface IfcSelDogSpec---------------------
Interface IfcSelDogSpec 'Выбор спецификаций' Cyan, doaccept;
Show At (1,1,60,20)
Create View Vmain
var
CurOwner : comp ;
Marker : longint;
Ind : longint;
tmpCount : double ;
As
Select
*,
if(spdocs.prmc = 1, katmc.name, katusl.name) (FieldName NameMCUSL),
if(spdocs.prmc = 1, pick_mc.pickkol, pick_usl.pickkol) (FieldName KolMCUSL),
if(SearchMarker(Marker,dogovor.nrec, Ind), 'V','')(FieldName=picked)
From
Dogovor,
dogovor spec_dovor,
spdocs,
pick pick_usl,
pick pick_mc
Where
((
CurOwner == dogovor.cdogovor
and dogovor.nrec == spdocs.cdoc
and dogovor.tidk == spdocs.tidk
and spdocs.cmcusl == katmc.nrec
and spdocs.cmcusl == katusl.nrec
and spdocs.cotped == katotped.nrec
and katmc.nrec == pick_mc.crec
and 8 == pick_mc.wlist
and katusl.nrec == pick_usl.crec
and 5 == pick_usl.wlist
)) order by dogovor.ddoc;
/*******************************************************************************
SetUnsetPick - 01/21/2008 1:54
********************************************************************************/
Procedure SetUnsetPick;
var c1: word; c2: comp
{
cfsSetProp('KolMCUSL','Skip', if(picked='', false, true));
_loop spdocs{
if(picked='')
if(spdocs.prmc = 1)
delete pick_mc where(( c2 == pick_mc.crec and 8 == pick_mc.wlist));
else
delete pick_usl where(( c2 == pick_usl.crec and 8 == pick_usl.wlist));
c2 := if(spdocs.prmc = 1, katmc.nrec, katusl.nrec);
if(c2 = comp(0)) exit;
if(spdocs.prmc = 1)
if(not isvalidall(#pick_mc))
insert into pick_mc set pick_mc.crec = c2, pick_mc.wlist = 8;
else
if(not isvalidall(#pick_usl))
insert into pick_usl set pick_usl.crec = c2, pick_usl.wlist = 5;
}
} //SetUnsetPick
//------------------------------ Begin MarkAll ------------------------------
procedure MarkAll(IsInsert: boolean);
{
StartNewVisual( vtRotateVisual, vfTimer, 'Пометить все',1);
PushPos(#Dogovor);
if ((Modifier GetFirst Dogovor) = tsOk){
do{
if(not IsInsert)
InvertMarker(Marker , Dogovor.nrec);
else InsertMarker(Marker, Dogovor.nrec);
SetUnsetPick();
NextVisual;
}while (Modifier GetNext Dogovor = tsOk)
}
PopPos(#Dogovor);
StopVisual('', 0);
RescanPanel(#Dogovor);
}
//------------------------------ End MarkAll ------------------------------
panel ptree
tree TreeMain(,,sci178InsPM)
show at(,,,15);
table Dogovor;
fields
picked 'V' : [3], NOAutoSize, #setMyFont(picked), skip;
Dogovor.ddoc 'Дата' : [8], protect, #setMyFont(picked);
Dogovor.descr 'Дескр' : [3], protect, #setMyFont(picked);
Dogovor.nodoc '№ Док' : [6], protect, #setMyFont(picked);
Dogovor.summa 'Сума' : noprotect;
end;
handleevent
cmTreeTop : {
curOwner := 0;
}
cmTreeDown : {
curOwner := vMain.Dogovor.nrec;
}
cmTreeUp:{
curOwner := vMain.dogovor.cdogovor;
}
cmTreeNeedOwner:
{
TreeGetFirstEx(TreeMain);
}
cmTreeNodeType:
{
if TreeIsTerminal(TreeMain) then TreeSetNodeType(TreeMain, ntfText);
}
cmMarkUnMark:{
InvertMarker(Marker, Dogovor.nrec);
SetUnsetPick();
if(GetNext Dogovor <> tsok){}
RescanPanel(#dogovor);
}
cmSelectAll: MarkAll(true);
cmInvertAll: MarkAll(false);
cmUnselectAll: {
ClearMarker(Marker);
delete all pick;
RescanPanel(#dogovor);
}
end;
end;
panel pSpec
browse brwSpec(,,sci178InsPM)
show at(,16,,);
table spdocs;
fields
NameMCUSL 'Название' : [10], protect ;
katotped.name 'Ед. Изм' : [3] , protect ;
spdocs.kol 'Кол-во' : [5] , protect ;
spdocs.price 'Цена' : [8] , protect ;
spdocs.summa 'Стоимость' : [8] , protect ;
spdocs.kol 'Количество' : [8] , noprotect ;
// KolMCUSL 'Количество' : [3] , NoProtect;
// pick_mc.pickkol 'Количество' : [3] , noprotect;
// pick_usl.pickkol 'Количество' : [3] , noprotect;
end;
handleevent
cmCheckField:{
message(1);
if(picked='') exit;
if(spdocs.prmc=1)
Update current pick_mc;
else
Update current pick_usl;
}
cmPositionChanged:{
message(1);
}
end;
end;
//------------------------------ Begin Initinterface ------------------------------
Procedure Initinterface;
{
delete all pick;
Marker := InitMarker('IfcSelDogovorMarker',8,1,1);
cfsSetCurrentContainer('brwSpec');
}
//------------------------------ End Initinterface --------------------------------
Handleevent
Cminit:{
Initinterface();
}
cmDone:{
DoneMarker(Marker, 'IfcSelDogovorMarker');
}
cmPositionChanged:{
if(CurTable = #dogovor){
SetUnsetPick();
}
}
End;
End.
//------------------------------ End Interface IfcSelDogSpec------------------------------
Добавлено: 23 янв 2008, 16:24
Alexander
в обработчик фейса события приходят, но взять значение вычисляемого поля нельзя... ужас какой-то... мож еще какие события есть?