Модификации в интерфейсах
Добавлено: 12 июл 2010, 17:40
Есть такой интерфейс:
Возникло несколько проблем:
- как сделать чтобы при создании записи в браузе bPPlan в скрине sCorPPlan данные были пусты;
- при выборе в поле pplancor.namemc матценность не отображается в браузе bCorPPlan, хотя величины измерений из интерфейса MeashureUnits в поле UnitMeashure отображаются;
- как сделать, чтобы происходило изменение последний трёх полей бразуза bCorPPlan( pplanancor.Fdecp, pplanancor.Sdecp, pplanancor.Tdecp)(а то при переходе в другое поле сбрасываются значения), а также суммирование этих полей в поле pplancor.vsego(сейчас оно не работает).
- почему поле c типом date не обновляется также по Pick как поля других типов;
- и как сделать, чтобы при вставке или обновлении позиция курсора в браузе не смещалась, а оставалась на своём месте;
Вот исходники PickMC:
и MeashureUnits:
Заранее благодарен за ответ на любой из вопросов.
Код: Выделить всё
interface Plan 'Производственные планы';
show at (,,76,25);
var
res : word;
data:date;
nPPlan :string;
status:string;
katpodrname:string;
nmc:string;
UnMea:string;
t_plan:string;
table struct pplan
(
nRec : comp,
datum : date,
nPPlan: word, // наименование
status:string,
podrname:string,
t_plan : word
)
with index
(
pplan0 = nRec(Unique,Surrogate)
);
table struct pplancor
(
nRec:comp,
cpplan:comp,
line: string,
group_i:string,
namemc : string,
percIs:double,
TechLoss:double,
UnitMeasure:string,
Vsego:double,
Fdecp:double,
Sdecp:double,
Tdecp:double
)
with index
(
pplancor01 = nRec(Unique,Surrogate),
pplancor02=cpplan
);
create view
as select *
from PPGRFORMAT,PPKATSTANMC,PPKATSTAN,PPSTATUS,PPLINE,PPTITLE,PPSPECIF,pplan,pplancor
where((pplan.nrec==pplancor.cpplan));
browse bPPlan(,,sci178EnEsc)
table pplan
fields
pplan.datum 'Дата' : [15] , protect, noAutoSize;
pplan.nPPlan 'Номер плана' : [25], protect, noAutoSize;
pplan.status 'Статус' : [7], protect,noAutoSize;
pplan.podrname 'Подразделение' : [25] , protect, noAutoSize;
pplan.t_plan 'Тип плана' : [4], protect, noAutoSize;
end;
handleevent
cmPick://F3
{
PushPos (bPPlan);
RunWindow('PlanCorrect');
PoPpos (bPPlan);
}
cmDelete://F8
{
delete current pplan;
ReReadRecord(#pplan);
}
cmInsert://F7
{
insert current pplan;
RunWindow('PlanCorrect');
}
cmDefault://Enter
{
}
cmClose://Esc
{
}
end;
window PlanCorrect 'Редактирование планов';
show at (,,83,25);
/*create view corr
as select * from pplancor
where ((pplan.nrec==pplancor.cpplan));*/
panel p_sCorPPlan;
show at (,,,8);
screen sCorPPlan;
bevel be1 {4,0,79,7,bsRaised, bsFrame};
fields
data :pickButton;
nPPlan:noprotect;
katpodrname :pickButton;
status :pickButton;
t_plan :pickButton;
line: pickbutton;
group_i:noprotect;
<<
Дата Номер плана Структурное подразделение
.@@@@@@@@@ .@@@@@@@@@@@@ .@@@@@@@@@@@@@@@@@@@@@@@@@@
Статус .@@@@@@@@@@@ Тип плана.@@@@@@@@@@@@
Линия .@@@@@@@@@@@@@@@@@@@@@ Группа .@@@@@@@@@@@@@
>>
end;
end;
panel p_bCorPPlan;
show at (,9,,)
browse bCorPPlan(,,sci178EnEsc)
table pplancor
fields
pplancor.namemc 'Наименование' : [20], pickButton;
pplancor.percIs'Процент','1 сорта,%': [6],noprotect;
pplancor.TechLoss 'Техпотери, %':[8],noprotect;
pplancor.UnitMeasure 'Единица','измерения':[7],pickButton;
pplancor.Vsego 'Всего':[12],Skip;
pplancor.Fdecp 'Первая','декада':[10],noprotect;
pplancor.Sdecp 'Вторая','декада':[10],noprotect;
pplancor.Tdecp 'Третья','декада':[10],noprotect;
end;
end;
handleEvent
cmInit:
{
clearbuffer(sCorPPlan);
data:=pplan.datum;
nPPlan:=pplan.nPPlan;
status:=pplan.status;
katpodrname:=pplan.podrname;
t_plan:=pplan.t_plan;
update current pplan;
ReReadRecord(#pplan);
RescanPanel(sCorPPlan);
}
cmPick:
{
case CurField of
#namemc:
{
pushpos (bCorPPlan);
res:= RunInterface('PickMC',nmc);
pplancor.namemc:=nmc;
pplancor.cpplan:=pplan.nrec;
If (IsFieldModified(#pplancor.namemc))
{
update current pplan;
}
else
{
insert current pplancor;
}
ReReadRecord(#pplancor);
PopPos(bCorPPlan);
}
#UnitMeasure:
{
pushpos (bCorPPlan);
res:= RunInterface('MeashureUnits',UnMea);
pplancor.UnitMeasure:=UnMea;
pplancor.cpplan:=pplan.nrec;
If (IsFieldModified(#pplancor.UnitMeasure))
{
update current pplancor;
}
else
{
insert current pplancor;
}
ReReadRecord(#pplancor);
PopPos(bCorPPlan);
}
#katpodrname:
{
res:=RunInterface('PickPodr',katpodrname);
pplan.podrname:=katpodrname;
update current pplan;
ReReadRecord(#pplan);
RescanPanel(sCorPPlan);
}
#data:
{
pplan.datum:=data;
update current pplan;
ReReadRecord(#pplan);
RescanPanel(sCorPPlan);
}
end;
RescanPanel(sCorPPlan);
}
cmCancel:
{
CloseInterface(cmDefault);
stop;
}
cmCheckRecord:
{
if IsModified
{
update current pplancor;
update current pplan;
ReReadRecord(#pplancor);
ReReadRecord(#pplan);
RescanPanel(sCorPPlan);
}
}
cmExprFieldChanged:
{
pplancor.vsego:=pplancor.Fdecp+pplancor.Sdecp+pplancor.Tdecp;
update current pplancor;
update current pplan;
ReReadRecord(#pplan);
ReReadRecord(#pplancor);
RescanPanel(sCorPPlan);
}
cmPositionchanged:
{
update current pplancor;
ReReadRecord(#pplancor);
}
cmClose:
{
RescanPanel(sCorPPlan);
ReReadRecord(#pplan);
}
cmDone:
{
ReReadRecord(#pplan);
ReReadRecord(#pplancor);
}
cmUpdateRecord:
{
PushPos (bCorPPlan);
update current pplancor;
ReReadRecord(#pplancor);
PoPpos (bCorPPlan);
}
cmInsert:
{ PushPos (bCorPPlan);
insert current pplancor;
ReReadRecord(#pplancor);
PoPpos (bCorPPlan);
}
cmDelete:
{ PushPos (bCorPPlan);
delete current pplancor;
ReReadRecord(#pplancor);
PoPpos (bCorPPlan);
}
end;
end;
end.
- как сделать чтобы при создании записи в браузе bPPlan в скрине sCorPPlan данные были пусты;
- при выборе в поле pplancor.namemc матценность не отображается в браузе bCorPPlan, хотя величины измерений из интерфейса MeashureUnits в поле UnitMeashure отображаются;
- как сделать, чтобы происходило изменение последний трёх полей бразуза bCorPPlan( pplanancor.Fdecp, pplanancor.Sdecp, pplanancor.Tdecp)(а то при переходе в другое поле сбрасываются значения), а также суммирование этих полей в поле pplancor.vsego(сейчас оно не работает).
- почему поле c типом date не обновляется также по Pick как поля других типов;
- и как сделать, чтобы при вставке или обновлении позиция курсора в браузе не смещалась, а оставалась на своём месте;
Вот исходники PickMC:
Код: Выделить всё
#include %src%\make\vipInterface.vip
vipInterface PickMC ;//(SecurityPolicy);
public :
function fCollection ( nrecMC : comp ) : string;
function fTypeMC ( nrecMC : comp ) : string;
end;
Interface PickMC 'Каталог матценностей';
show at (,,100,30);
var katmcname:string;
i:integer;
create view
//var kmcBARKOD : string;
// kmcName : string;
( ei, kgr, gr, collection, typeMC )
as select
ced->name,
cgroupmc->kod,
cgroupmc->name,
fCollection ( katmc.nrec ),
fTypeMC ( katmc.nrec ),
*
from katmc, exclassval, exclassseg
WHERE (( 5 == katmc.isArch ))
order by katmc.BARKOD
;
parameters katmcname;
/*
*******************************************************************************
Название: fCollection ( nrecMC : comp ) : string;
Описание: Функция поиска вида коллекции у МЦ
Входные пар-ры: nrecMC : comp; - nrec МЦ
Выходные пар-ры: Название коллекции к которой принадлежит МЦ
*******************************************************************************
*/
function fCollection ( nrecMC : comp ) : string;
{
if ( GetFirst exclassval where (( nrecMC == exclassval.crec and 1411 == exclassval.wtable and 3 == exclassval.classcode )) = tsOk )
{ if ( GetFirst exclassseg where (( exclassval.cclassseg == exclassseg.nrec )) = tsOk )
fCollection := exclassseg.name;
} else fCollection := ' ';
}
/*
*******************************************************************************
Название: fTypeMC ( nrecMC : comp ) : string;
Описание: Функция поиска доп. характеристик прикрепленных к МЦ
(цв., р.р. и т.д.)
Входные пар-ры: nrecMC : comp; - nrec МЦ
Выходные пар-ры: Строку с перечислением описания доп. данных по МЦ
*******************************************************************************
*/
function fTypeMC ( nrecMC : comp ) : string;
{
var tempCATMC : string;
tempCATMC := '';
if ( GetFirst exclassval where (( nrecMC == exclassval.crec and 1411 == exclassval.wtable)) = tsOk )
{
do
{
if ( exclassval.classcode = 3 ){tempCATMC := tempCATMC + '';}
else
{
if ( GetFirst exclassseg where (( exclassval.cclassseg == exclassseg.nrec )) = tsOk )
tempCATMC := exclassseg.name + ' ' + tempCATMC;
}
} while ( GetNext exclassval where (( nrecMC == exclassval.crec and 1411 == exclassval.wtable )) = tsOk )
}
fTypeMC := tempCATMC;
}
browse brClasdisc;
fields
katmc.BARKOD 'Код' : [5], protect;
katmc.name 'Наименование товара' : [30], protect;
ei 'ед.и' : [3], protect, centered;
kgr 'код' : [6], skip;
gr 'группа' : [10], skip;
collection 'Коллекция' : [20], Protect;
typeMC 'вид' : [10], Protect;
katmc.volume '%сортн' : [5.1], Protect;
katmc.massa 'вес изд' : [5.1], Protect;
end;
handleEvent
cmInit :
{ i:=0;
// Ограничение отображения и возможностей работы с документом при ограничение прав
if( SecurityPolicy::fSecurityPolicy(sGetTune('user.descr'), 'ChangeMC') = FALSE )
cfsSetProp('brClasdisc','StatusCtx', sciAQACancel1);
else cfsSetProp('brClasdisc','StatusCtx',sciAqaPlanChoice);
}
// Формирование отчета Списка МЦ
// Редактирование данных по МЦ, вызов интерфейса L_MCU::KATMC
cmDefault : //cmArmEdit :
{
if (Message('Выбрать МЦ?',YesNo)=cmYes)
{ i:=1;
katmcname:=katmc.name;
CloseInterface('PickMC');
}
else
{ cfsSetProp('brClasdisc','StatusCtx', sciAQAEnEsc178);
if(SecurityPolicy::fSecurityPolicy(UserName, 'ChangeMC') = FALSE){}
else
{
RunInterface('L_MCU::KATMC',katmc.nrec,0);
katmcname:=katmc.name;
ReDrawPanel(tnkatmc);
stop;
}
}
//Inherited::handleEvent(cmDefault);
}
cmPick : //cmArmEdit :
{
if (Message('Выбрать МЦ?',YesNo)=cmYes)
{ i:=1;
katmcname:=katmc.name;
CloseInterface('PickMC');
}
else
{
cfsSetProp('brClasdisc','StatusCtx', sciAQAEnEsc178);
if(SecurityPolicy::fSecurityPolicy(UserName, 'ChangeMC') = FALSE){}
else
{
RunInterface('L_MCU::KATMC',katmc.nrec,0);
katmcname:=katmc.name;
ReDrawPanel(tnkatmc);
stop;
}
}
}
cmInsert :
{
insert katmc set katmc.isarch = 5;
ReReadRecord(#katmc);
RunInterface('L_MCU::KATMC',katmc.nrec,0);
ReDrawPanel(tnkatmc);
stop;
}
// Удаление МЦ
cmDelete :
{
RunInterface('L_MCU::KATMC', katmc.nrec,0);
ReDrawPanel(tnkatmc);
stop;
}
end;
end.
Код: Выделить всё
interface MeashureUnits;
show at (,,7,);
var kateabbr:string;
create view
as select *
from kated;
parameters kateabbr;
browse bKated;
table kated;
fields
abbr 'Един.',' измер.':[7],centered;
end;
handleevent
cmPick:
{
kateabbr:=kated.abbr;
CloseInterface('MeashureUnits');
}
cmDefault:
{
kateabbr:=kated.abbr;
CloseInterface('MeashureUnits');
}
end;
end.