каз вызвать другое событие из первого события
Модераторы: m0p3e, edward_K, Модераторы
каз вызвать другое событие из первого события
Мне нужно отменить выполнение события cmMAKEORDER, если вызвано событие cmCancel (скорее всего сmСancel, так как в дорабатываемом интерфейсе вылезает сообщение с кнопками ОК и Отмена). Как это можно сделать? Может можно как-то вызвать событие из события?
Да, я хочу поймать момент, когда нажата кнопка отмена.
Вот исходник
#component "L_SKLAD"
const
cmButDistributionValue = 55676;
end;
alter interface ACTCOMPL;
var butMy_var: longint;
fMy_var, fMy_var2 : longint ;
cenaKOMPL , summak, summaTemp : double;
pos_nrec :comp;
b,a:integer;
fullname: string;
create view
(osum,osum2)
as select
spsopr.rprice * spsopr.kol,
prv * spsopr.kol,
katparty.* ,soprorda.* , katmc.* , spsopr.*
from katparty , spsopr, soprorda, katmc;
//'L_SKLAD::ACTCOMPL.SPECIFINFO.SCRSPECIFINFOKOMPL.b_SCRSPECIFINFOKOMPL_Расчет_цен_для_комплекта
window SPECIFINFO;
handleEvent
cmInit :
{
inherited::handleEvent(cmInit);
var i : integer;
for (i := 0; i < 2; i++)
{
cfsSetCurrentContainer('ACTCOMPL.SPECIFINFO.SCRSPECIFINFOKOMPL');
cfsCreateObject('button', 'SCRSPECIFINFOKOMPL', 'ButDistributionValue', FALSE, butMy_var);
cfsSetProp('ButDistributionValue','Visible',TRUE);
if (i = 0)
{
cfsSetProp('ButDistributionValue','Visible',FALSE);
}
else
{
cfsSetProp('ButDistributionValue','Visible',TRUE);
}
cfsSetProp('ButDistributionValue','Size_X',176);
cfsSetProp('ButDistributionValue','Size_Y',25);
cfsSetProp('ButDistributionValue','Origin_X', 400);
cfsSetProp('ButDistributionValue','Origin_Y', 105);
cfsSetProp('ButDistributionValue','Command', cmButDistributionValue);
cfsSetProp('ButDistributionValue','Title','Простановка цен');
cfsSetCurrentContainer('ACTCOMPL.SPECIFINFO.BRRASPREDMC');
cfsSetProp('c_BRRASPREDMC_SOPRORDA.PRICE_Цена_МЦ','Skip',false);
cfsSetProp('c_BRRASPREDMC_SOPRORDA.KOL_Количество_в_1','Protect',true);
cfsSetProp('c_BRRASPREDMC_SOPRORDA.KOL_Количество_в_1','Skip',false);
}
}
cmButDistributionValue :
//'L_SKLAD::ACTCOMPL.SPECIFINFO.BRRASPREDMCRAZ.KATPARTY2.NAME'
{ pos_nrec:=spsopr.nrec;
cenaKOMPL:= 0 ;
summak:= 0 ;
startnewvisual(vtRotateVisual, vfTimer + vfBreak + vfConfirm , 'Проставляются цены' , 1 );
pushpos ( BRRASPREDMCRAZ ) ;
If ( Modifier Getfirst soprorda where (( spsopr.nrec == soprorda. cspsopr))=Tsok )
{
do
{
If (Modifier Getfirst katparty where ((soprorda.cparty == katparty.nrec)) = Tsok)
{
do
{
soprorda.price := katparty.CENAZAV;
cenaKOMPL := cenaKOMPL + soprorda.price ;
spsopr.rprice:= cenaKOMPL;
Update current spsopr;
Update current soprorda;
rescanpanel(#spsopr);
rescanpanel(SCRSPECIFINFOKOMPL);
rescanpanel(BRRASPREDMCRAZ)
}
While (Modifier Getnext katparty where ((soprorda.cparty == katparty.nrec)) = Tsok);
}
else
{
cenaKOMPL := cenaKOMPL + soprorda.price ;
spsopr.rprice:= cenaKOMPL;
Update current spsopr;
Update current soprorda;
rescanpanel(#spsopr);
rescanpanel(SCRSPECIFINFOKOMPL);
rescanpanel(BRRASPREDMCRAZ)
}
}
While ( Modifier getnext soprorda where (( spsopr.nrec == soprorda. cspsopr))=Tsok )
}
If (Modifier Getfirst spsopr where ((katsopr.nrec == spsopr.csopr)) = Tsok)
{
do
{
summaTemp:=spsopr.rprice*spsopr.kol;
summak := summak + summaTemp;
katsopr.summa:=summak;
update current katsopr;
rereadrecord (#katsopr) ;
rescanpanel (BRBYNAMERAZ);
rescanpanel (BRBYNAME);
}
while (Modifier getnext spsopr where ((katsopr.nrec == spsopr.csopr)) = Tsok);
}
getfirst spsopr where ((pos_nrec==spsopr.nrec))=tsok;
rescanpanel(BRRASPREDMCRAZ);
PopPos(BRRASPREDMCRAZ);
StopVisual( '', 0);
}
cmDone:
{
pos_nrec:=spsopr.nrec;
If (Modifier Getfirst spsopr where ((katsopr.nrec == spsopr.csopr)) = Tsok)
{
summak:=0;
do
{
summaTemp:=spsopr.rprice*spsopr.kol;
summak := summak + summaTemp;
katsopr.summa:=summak;
update current katsopr;
rereadrecord (#katsopr) ;
rescanpanel (BRBYNAMERAZ);
}
while (Modifier getnext spsopr where ((katsopr.nrec == spsopr.csopr)) = Tsok);
}
getfirst spsopr where ((pos_nrec==spsopr.nrec))=tsok;
rescanpanel(BRBYNAMERAZ);
}
end;
end;
window editsopr
handleevent
cmInit:
{
if (inherited :: handleEvent(cmInit)=heOk)
{
var i: integer;
for (i:=0; i<2; i++)
{
cfsSetCurrentContainer('ACTCOMPL.editsopr.brbynameraz');
cfsDestroyObject('c_BRBYNAMERAZ_SUMPRICE_Стоимость');
cfsCreateObject('Column','brbynameraz','osum',FALSE, fMy_var) ;
cfsSetProp('osum','Visible',TRUE);
if (i =0)
{
cfsSetProp('osum','Visible', FALSE );
}
else
{
cfsSetProp('osum' , 'Visible', TRUE ) ;
}
cfsSetProp('osum' , 'Title' , 'Стоимость' ) ;
cfsSetProp('osum' , 'PrecisionVarName' , 'digitToch');
cfsSetProp('osum' , 'PassiveFormat' , '[|-]366`666`666`666`666.88');
SetPrecisionGroup('digitToch',2);
cfsSetProp('osum' , 'MaxLen' , 18 );
cfsSetProp('osum','Protect',true);
cfsSetProp('c_BRBYNAMERAZ_PRV_Цена','Protect',true);
cfsSetProp('c_BRBYNAMERAZ_PRV_Цена','Skip',false);
cfsSetProp('c_BRBYNAMERAZ_SUMPRICE_Стоимость','FieldName','osum');
cfsSetCurrentContainer( 'ACTCOMPL.editsopr.BRBYNAME');
cfsDestroyObject('c_BRBYNAME_SUMPRICE_Стоимость');
cfsCreateObject('Column','BRBYNAME','osum2',FALSE, fMy_var2) ;
cfsSetProp('osum2','Visible',TRUE);
if (i =0)
{
cfsSetProp('osum2','Visible', FALSE );
}
else
{
cfsSetProp( 'osum2' , 'Visible', TRUE ) ;
}
cfsSetProp( 'osum2' , 'Title' , 'Стоимость' ) ;
cfsSetProp( 'osum2' , 'PrecisionVarName' , 'digitToch2');
cfsSetProp( 'osum2' , 'PassiveFormat' , '[|-]366`666`666`666`666.88');
SetPrecisionGroup('digitToch2',2);
cfsSetProp( 'osum2' , 'MaxLen' , 18 );
cfsSetProp('osum2','Protect',true);
cfsSetProp('c_BRBYNAME_PRV_Цена','Protect',true);
cfsSetProp('c_BRBYNAME_PRV_Цена','Skip',false);
cfsSetProp('c_BRBYNAME_SUMPRICE_Стоимость','FieldName','osum2');
}
}
}
cmMAKEORDER:
{
cfsSetCurrentContainer('ACTCOMPL');
cfsGetProp('ACTCOMPL','Title',fullname);
If (fullname='Акты на разукомплектование (распакетирование)')
{
b:=1;message('1 '+b);
}
If (fullname='Акты на комплектование (пакетирование)')
{
b:=0;message('0 '+b);
}
if (inherited :: handleEvent(cmMAKEORDER)=heOk)
{
If (Modifier Getfirst sklorder where ((katsopr.nrec == sklorder.csopr /*and 1==sklorder.vidorder*/)) =tsok)
{
do
{
If ( Modifier Getfirst soprorda where (( spsopr.nrec == soprorda.cspsopr))=Tsok )
{
do
{
If (Modifier Getfirst sporder where ((sklorder.nrec == sporder.csklorder))=tsok)
{
do
{
//'L_SKLAD::ACTCOMPL.EDITSOPR.SCRHEADERFROM.b_SCRHEADERFROM_Формирование_ордеров'
if (b=1 and 0=sklorder.vidorder)
{
sporder.rsrprice:=soprorda.price;
update current sporder;
rescanpanel(#sporder);
message('РО1 '+sporder.rsrprice);
}
if (b=1 and 1=sklorder.vidorder)
{
sporder.rsrprice:=spsopr.rprice;
update current sporder;
rescanpanel(#sporder);
message('РО2 '+sporder.rsrprice);
}
if (b=0 and 1=sklorder.vidorder)
{
sporder.rsrprice:=soprorda.price;
update current sporder;
rescanpanel(#sporder);
message('ПО1 '+sporder.rsrprice);
}
if (b=0 and 0=sklorder.vidorder)
{
sporder.rsrprice:=spsopr.rprice;
update current sporder;
rescanpanel(#sporder);
message('ПО2 '+sporder.rsrprice);
}
//'L_SKLAD::ACTCOMPL.EDITSOPR.SCRHEADERTO.b_SCRHEADERTO_Формирование_ордеров'
}
while (Modifier Getnext sporder where ((sklorder.nrec == sporder.csklorder))=tsok);
}
}
While ( Modifier getnext soprorda where ((spsopr.nrec==soprorda.cspsopr))=Tsok );
}
}
while (Modifier Getnext sklorder where ((katsopr.nrec == sklorder.csopr /*and 1==sklorder.vidorder*/))=tsok);
}
pos_nrec:=spsopr.nrec;
If (Modifier Getfirst spsopr where ((katsopr.nrec == spsopr.csopr)) = Tsok)
{
summak:=0;
do
{
summaTemp:=spsopr.rprice*spsopr.kol;
summak := summak + summaTemp;
katsopr.summa:=summak;
update current katsopr;
rereadrecord (#katsopr) ;
rescanpanel (BRBYNAMERAZ);
}
while (Modifier getnext spsopr where ((katsopr.nrec == spsopr.csopr)) = Tsok);
}
getfirst spsopr where ((pos_nrec==spsopr.nrec))=tsok;
rescanpanel(BRBYNAMERAZ);
}
}
end
end;
end.
Вот исходник
#component "L_SKLAD"
const
cmButDistributionValue = 55676;
end;
alter interface ACTCOMPL;
var butMy_var: longint;
fMy_var, fMy_var2 : longint ;
cenaKOMPL , summak, summaTemp : double;
pos_nrec :comp;
b,a:integer;
fullname: string;
create view
(osum,osum2)
as select
spsopr.rprice * spsopr.kol,
prv * spsopr.kol,
katparty.* ,soprorda.* , katmc.* , spsopr.*
from katparty , spsopr, soprorda, katmc;
//'L_SKLAD::ACTCOMPL.SPECIFINFO.SCRSPECIFINFOKOMPL.b_SCRSPECIFINFOKOMPL_Расчет_цен_для_комплекта
window SPECIFINFO;
handleEvent
cmInit :
{
inherited::handleEvent(cmInit);
var i : integer;
for (i := 0; i < 2; i++)
{
cfsSetCurrentContainer('ACTCOMPL.SPECIFINFO.SCRSPECIFINFOKOMPL');
cfsCreateObject('button', 'SCRSPECIFINFOKOMPL', 'ButDistributionValue', FALSE, butMy_var);
cfsSetProp('ButDistributionValue','Visible',TRUE);
if (i = 0)
{
cfsSetProp('ButDistributionValue','Visible',FALSE);
}
else
{
cfsSetProp('ButDistributionValue','Visible',TRUE);
}
cfsSetProp('ButDistributionValue','Size_X',176);
cfsSetProp('ButDistributionValue','Size_Y',25);
cfsSetProp('ButDistributionValue','Origin_X', 400);
cfsSetProp('ButDistributionValue','Origin_Y', 105);
cfsSetProp('ButDistributionValue','Command', cmButDistributionValue);
cfsSetProp('ButDistributionValue','Title','Простановка цен');
cfsSetCurrentContainer('ACTCOMPL.SPECIFINFO.BRRASPREDMC');
cfsSetProp('c_BRRASPREDMC_SOPRORDA.PRICE_Цена_МЦ','Skip',false);
cfsSetProp('c_BRRASPREDMC_SOPRORDA.KOL_Количество_в_1','Protect',true);
cfsSetProp('c_BRRASPREDMC_SOPRORDA.KOL_Количество_в_1','Skip',false);
}
}
cmButDistributionValue :
//'L_SKLAD::ACTCOMPL.SPECIFINFO.BRRASPREDMCRAZ.KATPARTY2.NAME'
{ pos_nrec:=spsopr.nrec;
cenaKOMPL:= 0 ;
summak:= 0 ;
startnewvisual(vtRotateVisual, vfTimer + vfBreak + vfConfirm , 'Проставляются цены' , 1 );
pushpos ( BRRASPREDMCRAZ ) ;
If ( Modifier Getfirst soprorda where (( spsopr.nrec == soprorda. cspsopr))=Tsok )
{
do
{
If (Modifier Getfirst katparty where ((soprorda.cparty == katparty.nrec)) = Tsok)
{
do
{
soprorda.price := katparty.CENAZAV;
cenaKOMPL := cenaKOMPL + soprorda.price ;
spsopr.rprice:= cenaKOMPL;
Update current spsopr;
Update current soprorda;
rescanpanel(#spsopr);
rescanpanel(SCRSPECIFINFOKOMPL);
rescanpanel(BRRASPREDMCRAZ)
}
While (Modifier Getnext katparty where ((soprorda.cparty == katparty.nrec)) = Tsok);
}
else
{
cenaKOMPL := cenaKOMPL + soprorda.price ;
spsopr.rprice:= cenaKOMPL;
Update current spsopr;
Update current soprorda;
rescanpanel(#spsopr);
rescanpanel(SCRSPECIFINFOKOMPL);
rescanpanel(BRRASPREDMCRAZ)
}
}
While ( Modifier getnext soprorda where (( spsopr.nrec == soprorda. cspsopr))=Tsok )
}
If (Modifier Getfirst spsopr where ((katsopr.nrec == spsopr.csopr)) = Tsok)
{
do
{
summaTemp:=spsopr.rprice*spsopr.kol;
summak := summak + summaTemp;
katsopr.summa:=summak;
update current katsopr;
rereadrecord (#katsopr) ;
rescanpanel (BRBYNAMERAZ);
rescanpanel (BRBYNAME);
}
while (Modifier getnext spsopr where ((katsopr.nrec == spsopr.csopr)) = Tsok);
}
getfirst spsopr where ((pos_nrec==spsopr.nrec))=tsok;
rescanpanel(BRRASPREDMCRAZ);
PopPos(BRRASPREDMCRAZ);
StopVisual( '', 0);
}
cmDone:
{
pos_nrec:=spsopr.nrec;
If (Modifier Getfirst spsopr where ((katsopr.nrec == spsopr.csopr)) = Tsok)
{
summak:=0;
do
{
summaTemp:=spsopr.rprice*spsopr.kol;
summak := summak + summaTemp;
katsopr.summa:=summak;
update current katsopr;
rereadrecord (#katsopr) ;
rescanpanel (BRBYNAMERAZ);
}
while (Modifier getnext spsopr where ((katsopr.nrec == spsopr.csopr)) = Tsok);
}
getfirst spsopr where ((pos_nrec==spsopr.nrec))=tsok;
rescanpanel(BRBYNAMERAZ);
}
end;
end;
window editsopr
handleevent
cmInit:
{
if (inherited :: handleEvent(cmInit)=heOk)
{
var i: integer;
for (i:=0; i<2; i++)
{
cfsSetCurrentContainer('ACTCOMPL.editsopr.brbynameraz');
cfsDestroyObject('c_BRBYNAMERAZ_SUMPRICE_Стоимость');
cfsCreateObject('Column','brbynameraz','osum',FALSE, fMy_var) ;
cfsSetProp('osum','Visible',TRUE);
if (i =0)
{
cfsSetProp('osum','Visible', FALSE );
}
else
{
cfsSetProp('osum' , 'Visible', TRUE ) ;
}
cfsSetProp('osum' , 'Title' , 'Стоимость' ) ;
cfsSetProp('osum' , 'PrecisionVarName' , 'digitToch');
cfsSetProp('osum' , 'PassiveFormat' , '[|-]366`666`666`666`666.88');
SetPrecisionGroup('digitToch',2);
cfsSetProp('osum' , 'MaxLen' , 18 );
cfsSetProp('osum','Protect',true);
cfsSetProp('c_BRBYNAMERAZ_PRV_Цена','Protect',true);
cfsSetProp('c_BRBYNAMERAZ_PRV_Цена','Skip',false);
cfsSetProp('c_BRBYNAMERAZ_SUMPRICE_Стоимость','FieldName','osum');
cfsSetCurrentContainer( 'ACTCOMPL.editsopr.BRBYNAME');
cfsDestroyObject('c_BRBYNAME_SUMPRICE_Стоимость');
cfsCreateObject('Column','BRBYNAME','osum2',FALSE, fMy_var2) ;
cfsSetProp('osum2','Visible',TRUE);
if (i =0)
{
cfsSetProp('osum2','Visible', FALSE );
}
else
{
cfsSetProp( 'osum2' , 'Visible', TRUE ) ;
}
cfsSetProp( 'osum2' , 'Title' , 'Стоимость' ) ;
cfsSetProp( 'osum2' , 'PrecisionVarName' , 'digitToch2');
cfsSetProp( 'osum2' , 'PassiveFormat' , '[|-]366`666`666`666`666.88');
SetPrecisionGroup('digitToch2',2);
cfsSetProp( 'osum2' , 'MaxLen' , 18 );
cfsSetProp('osum2','Protect',true);
cfsSetProp('c_BRBYNAME_PRV_Цена','Protect',true);
cfsSetProp('c_BRBYNAME_PRV_Цена','Skip',false);
cfsSetProp('c_BRBYNAME_SUMPRICE_Стоимость','FieldName','osum2');
}
}
}
cmMAKEORDER:
{
cfsSetCurrentContainer('ACTCOMPL');
cfsGetProp('ACTCOMPL','Title',fullname);
If (fullname='Акты на разукомплектование (распакетирование)')
{
b:=1;message('1 '+b);
}
If (fullname='Акты на комплектование (пакетирование)')
{
b:=0;message('0 '+b);
}
if (inherited :: handleEvent(cmMAKEORDER)=heOk)
{
If (Modifier Getfirst sklorder where ((katsopr.nrec == sklorder.csopr /*and 1==sklorder.vidorder*/)) =tsok)
{
do
{
If ( Modifier Getfirst soprorda where (( spsopr.nrec == soprorda.cspsopr))=Tsok )
{
do
{
If (Modifier Getfirst sporder where ((sklorder.nrec == sporder.csklorder))=tsok)
{
do
{
//'L_SKLAD::ACTCOMPL.EDITSOPR.SCRHEADERFROM.b_SCRHEADERFROM_Формирование_ордеров'
if (b=1 and 0=sklorder.vidorder)
{
sporder.rsrprice:=soprorda.price;
update current sporder;
rescanpanel(#sporder);
message('РО1 '+sporder.rsrprice);
}
if (b=1 and 1=sklorder.vidorder)
{
sporder.rsrprice:=spsopr.rprice;
update current sporder;
rescanpanel(#sporder);
message('РО2 '+sporder.rsrprice);
}
if (b=0 and 1=sklorder.vidorder)
{
sporder.rsrprice:=soprorda.price;
update current sporder;
rescanpanel(#sporder);
message('ПО1 '+sporder.rsrprice);
}
if (b=0 and 0=sklorder.vidorder)
{
sporder.rsrprice:=spsopr.rprice;
update current sporder;
rescanpanel(#sporder);
message('ПО2 '+sporder.rsrprice);
}
//'L_SKLAD::ACTCOMPL.EDITSOPR.SCRHEADERTO.b_SCRHEADERTO_Формирование_ордеров'
}
while (Modifier Getnext sporder where ((sklorder.nrec == sporder.csklorder))=tsok);
}
}
While ( Modifier getnext soprorda where ((spsopr.nrec==soprorda.cspsopr))=Tsok );
}
}
while (Modifier Getnext sklorder where ((katsopr.nrec == sklorder.csopr /*and 1==sklorder.vidorder*/))=tsok);
}
pos_nrec:=spsopr.nrec;
If (Modifier Getfirst spsopr where ((katsopr.nrec == spsopr.csopr)) = Tsok)
{
summak:=0;
do
{
summaTemp:=spsopr.rprice*spsopr.kol;
summak := summak + summaTemp;
katsopr.summa:=summak;
update current katsopr;
rereadrecord (#katsopr) ;
rescanpanel (BRBYNAMERAZ);
}
while (Modifier getnext spsopr where ((katsopr.nrec == spsopr.csopr)) = Tsok);
}
getfirst spsopr where ((pos_nrec==spsopr.nrec))=tsok;
rescanpanel(BRBYNAMERAZ);
}
}
end
end;
end.
-
- Местный житель
- Сообщения: 370
- Зарегистрирован: 28 сен 2006, 15:43
- Откуда: Санкт-Петербург
- Контактная информация:
В код не всматривался (глаза разбегаются), но может завести какую-нибудь глобальную переменную? В событии cmMakeOrder в начале каждой итерации проверять ее значение, если переменная, допустим = false, цикл прерывать. Устанавливать значение переменной по нажатию кнопок Ok или Отмена. Или как-нибудь использовать стандартные возможности визуализации с флагом vfBreak.
Ну да, срабатывает cmMAKEORDER, в котором прописано это сообщение "Документы содержать ордера. Удалить их ?"(сообщение было раньше в интерфейсе - в том то и проблема!). При нажатии на кнопку отмена происходит откат, событие попросту не выполняется не происходит удаление ордеров. А у меня при нажатии Отмена выполняется мой код в cmMAKEORDER. То есть получается никак нельзя выловить это сообщение и оменить мой код в if (inherited :: handleEvent(cmMAKEORDER)=heOk) {...} ?
попробуй перехватить cmValue20 и там выставь свой флаг, потом уже анализируй его
Код: Выделить всё
cmValue20:
{
inherited::handleEvent(cmValue20);
_wasAborted := true;
}
cmMakeOrder:
{
inherited::handleEvent(cmMakeOrder);
if (_wasAborted)
{
Abort();
exit;
}
else ...
}