Здравствуйте.
Эдуард, спасибо большое за ответ! Пришлось поковыряться. То запрос на пересчет цены стал выдаваться только после правки кол-ва, а на новые поля не выдавался. То перестал выдаваться и на кол-во. Потом не всегда удавалось закрыть инт-с редактирования накладной… В результате вроде добилась того, что проблему не наблюдаю ни при корректировке спецификации, ни при закрытии окна редактирования.
Ниже исходник. Правда пришлось убрать и Abort, и Exit. Возможно я не туда ставила, куда предполагали Вы.
На кол-ве срабатывал и cmCheckField, и cmCheckRecord, а на новых полях только 1-ый. Запрос на пересчет выдавался в cmCheckRecord.
Надеюсь, что я правильно написала оба указанных обработчика.
Код: Выделить всё
#include ExtAttrClassInfo.vih
#Component "L_SOPRDOC"
//Приходные накладные.
Alter interface SOPRDOCB;
Var cAttrNomAn, cAttrVlag : Comp;
var1 : iExtAttrClassInfo;
dExpr : Double;
flagCh, flagE, flagNewField : Boolean;
Create view
as select
If( ( var1.ExtAttr_ValueExistsID( coSpSopr, SpSopr.Nrec, cAttrNomAn ) = False ), ''
, var1.doGetAttrID( coSpSopr, SpSopr.Nrec, cAttrNomAn ) )
( Fieldname=CheckNomAn )
, If( ( var1.ExtAttr_ValueExistsID( coSpSopr, SpSopr.Nrec, cAttrVlag ) = False ), ''
, var1.doGetAttrID( coSpSopr, SpSopr.Nrec, cAttrVlag ) )
( Fieldname=CheckVlag )
;
// Изменение последовательности столбцов в спецификации приходной накладной.
Procedure ChangeObjIndex1;
Var sObj_ : String;
{
cfsSetProp( 'c_BRBYNAME_GRNAL.NAME_Группа_налогов', 'Index', Integer(25) );
cfsSetProp( 'c_BRBYNAME_KDKOLOLD_Количество,_до_изменения', 'Index', Integer(26) );
cfsSetProp( 'c_BRBYNAME_KDKOLNEW_Количество,_после_изменения', 'Index', Integer(27) );
cfsSetProp( 'c_BRBYNAME_KDKOLDIFF_Количество,_разница', 'Index', Integer(28) );
cfsSetProp( 'c_BRBYNAME_KDPRICEOLD_Цена_до_изменения', 'Index', Integer(29) );
cfsSetProp( 'c_BRBYNAME_KDPRICENEW_Цена_после_изменения', 'Index', Integer(30) );
cfsSetProp( 'c_BRBYNAME_KDPRICEDIFF_Цена_разница', 'Index', Integer(31) );
cfsSetProp( 'c_BRBYNAME_KDSUMMAOLD_Стоимость_до_изменения', 'Index', Integer(32) );
cfsSetProp( 'c_BRBYNAME_KDSUMMANEW_Стоимость_после_изменения', 'Index', Integer(33) );
cfsSetProp( 'c_BRBYNAME_KDSUMMADIFF_Стоимость_разница', 'Index', Integer(34) );
cfsSetProp( 'c_BRBYNAME_KDNALOGOLD_Налоги_до_изменения', 'Index', Integer(35) );
cfsSetProp( 'c_BRBYNAME_KDNALOGNEW_Налоги_после_изменения', 'Index', Integer(36) );
cfsSetProp( 'c_BRBYNAME_KDNALOGDIFF_Налоги_разница', 'Index', Integer(37) );
cfsSetProp( 'c_BRBYNAME_FSUMPRICEWONDS_Стоимость_без_налогов', 'Index', Integer(38) );
cfsSetProp( 'c_BRBYNAME_FSUMPRICEWNDS_Стоимость_с_налогами', 'Index', Integer(39) );
cfsSetProp( 'c_BRBYNAME_FRPRICE_Цена_в_НДЕ', 'Index', Integer(40) );
cfsSetProp( 'c_BRBYNAME_FSUMPRICENDE_Стоимость_в_НДЕ', 'Index', Integer(41) );
cfsSetProp( 'c_BRBYNAME_FSUMPRICEWONDSNDE_Стоимость_без_налогов_в_НДЕ', 'Index', Integer(42) );
cfsSetProp( 'c_BRBYNAME_FSUMNDS_Налоги_в_НДЕ', 'Index', Integer(43) );
cfsSetProp( 'c_BRBYNAME_FSUMPRICEWNDSNDE_Стоимость_с_налогами_в_НДЕ', 'Index', Integer(44) );
cfsSetProp( 'c_BRBYNAME_FRVPRICE_Цена_в_валюте', 'Index', Integer(45) );
cfsSetProp( 'c_BRBYNAME_FSUMVPRICE_Стоимость_в_валюте', 'Index', Integer(46) );
cfsSetProp( 'c_BRBYNAME_FSUMVPRICEWONDS_Стоимость_без_налогов_в_валюте', 'Index', Integer(47) );
cfsSetProp( 'c_BRBYNAME_FSUMVNDS_Налоги_в_валюте', 'Index', Integer(48) );
cfsSetProp( 'c_BRBYNAME_FSUMVPRICEWNDS_Стоимость_с_налогами_в_валюте', 'Index', Integer(49) );
cfsSetProp( 'c_BRBYNAME_FSIMVOLV_Вал', 'Index', Integer(50) );
cfsSetProp( 'c_BRBYNAME_FSERIALNUM_Серийный_номер', 'Index', Integer(51) );
cfsSetProp( 'c_BRBYNAME_BOXNAME_Ячейка_хранения', 'Index', Integer(52) );
cfsSetProp( 'c_BRBYNAME_SPSOPR.NVAGON_Номер_вагона', 'Index', Integer(53) );
cfsSetProp( 'c_BRBYNAME_FNETTO_Вес_нетто', 'Index', Integer(54) );
cfsSetProp( 'c_BRBYNAME_FTARA_Вес_тары', 'Index', Integer(55) );
cfsSetProp( 'c_BRBYNAME_FBRUTTO_Вес_брутто', 'Index', Integer(56) );
cfsSetProp( 'c_BRBYNAME_KATPARTY.KOD_Партия_код', 'Index', Integer(57) );
cfsSetProp( 'c_BRBYNAME_KATPARTY.NAME_Партия_наименование', 'Index', Integer(58) );
cfsSetProp( 'c_BRBYNAME_SPSOPR.NKVIT_Номер_ж/д_квитанции', 'Index', Integer(59) );
cfsSetProp( 'c_BRBYNAME_TMPDOCOFGDSVAL1.VALUE_Документ1', 'Index', Integer(60) );
cfsSetProp( 'c_BRBYNAME_TMPDOCOFGDSVAL2.VALUE_Документ2', 'Index', Integer(61) );
cfsSetProp( 'c_BRBYNAME_TMPDOCOFGDSVAL3.VALUE_Документ3', 'Index', Integer(62) );
cfsSetProp( 'c_BRBYNAME_NUMDOOSNV_ДО', 'Index', Integer(63) );
cfsSetProp( 'c_BRBYNAME_FIMPORTSUBST_STATE_Страна_происхождения', 'Index', Integer(64) );
cfsSetProp( 'c_BRBYNAME_FIMPORTSUBST_REPSECTION_Раздел_отчетности_по_импортозамещению', 'Index', Integer(65) );
cfsSetProp( 'c_BRBYNAME_SALDTUNE.NAME_Объект_ЦУ', 'Index', Integer(66) );
cfsSetProp( 'c_BRBYNAME_VSKAU1_КАУ_1', 'Index', Integer(67) );
cfsSetProp( 'c_BRBYNAME_VSKAU2_КАУ_2', 'Index', Integer(68) );
cfsSetProp( 'c_BRBYNAME_VSKAU3_КАУ_3', 'Index', Integer(69) );
cfsSetProp( 'c_BRBYNAME_VSKAU4_КАУ_4', 'Index', Integer(70) );
cfsSetProp( 'c_BRBYNAME_VSKAU5_КАУ_5', 'Index', Integer(71) );
cfsSetProp( 'c_BRBYNAME_VSKAU6_КАУ_6', 'Index', Integer(72) );
cfsSetProp( 'c_BRBYNAME_VSKAU7_КАУ_7', 'Index', Integer(73) );
cfsSetProp( 'c_BRBYNAME_VSKAU8_КАУ_8', 'Index', Integer(74) );
cfsSetProp( 'c_BRBYNAME_VSKAU9_КАУ_9', 'Index', Integer(75) );
cfsSetProp( 'c_BRBYNAME_VSKAU10_КАУ_10', 'Index', Integer(76) );
cfsSetProp( 'c_BRBYNAME_SMETAMY_Смета', 'Index', Integer(77) );
cfsSetProp( 'c_BRBYNAME_SMETASPMY_Спецификация_сметы', 'Index', Integer(78) );
cfsSetProp( 'c_BRBYNAME_PLJOBNAME_План_работ', 'Index', Integer(79) );
cfsSetProp( 'c_BRBYNAME_FDGODN_Дата_окончания_срока_годности', 'Index', Integer(80) );
sObj_:= 'c_BRBYNAME_CHECKNOMAN_Номер_анализа';
cfsSetProp( sObj_, 'StatusCtx', scExtAttrDbl );
cfsSetProp( sObj_, 'DefaultWidth', Integer(10) );
cfsSetProp( sObj_, 'Index', Integer(23) );
cfsSetProp( sObj_, 'PickButton', False );
cfsSetProp( sObj_, 'DefaultPickButton', False );
cfsSetProp( sObj_, 'Points', Integer(0) );
cfsSetProp( sObj_, 'MaxLen', Integer(22) );
sObj_:= 'c_BRBYNAME_CHECKVLAG_Влажность';
cfsSetProp( sObj_, 'StatusCtx', scExtAttrDbl );
cfsSetProp( sObj_, 'DefaultWidth', Integer(12) );
cfsSetProp( sObj_, 'Index', Integer(24) );
cfsSetProp( sObj_, 'PickButton', False );
cfsSetProp( sObj_, 'DefaultPickButton', False );
cfsSetProp( sObj_, 'Points', Integer(2) );
cfsSetProp( sObj_, 'MaxLen', Integer(22) );
} // proc ChangeObjIndex1
//ExtendFormats BRSELECT;
//Browse BRSELECT;
//Table KATSOPR;
TableEvent
Table KATSOPR;
cmPositionChanged:
{
Inherited::HandleEvent( cmPositionChanged );
RescanPanel( #KATSOPR );
} // cmPositionChanged
end; // TableEvent
Window EDITSOPR EscClose;
ExtendFormats BRBYNAME;
Browse BRBYNAME;
Table SpSopr;
Fields
CheckNomAn 'Номер'#13'анализа' :[ 10 ], noProtect;
CheckVlag 'Влажность' :[ 12 ], noProtect;
end;
TableEvent
Table SpSopr;
cmPositionChanged:
{
Inherited::HandleEvent( cmPositionChanged );
} // cmPositionChanged
cmExprFieldChanged:
{
Inherited::HandleEvent( cmExprFieldChanged );
Case CurField of
#CheckNomAn:
{
dExpr:= Double( ExprFieldValue );
If dExpr >= 0
{
var1.doSetAttrID( coSpSopr, SpSopr.Nrec, cAttrNomAn, dExpr );
Set CheckNomAn;
RescanPanel( #SpSopr );
}
}
#CheckVlag:
{
dExpr:= Double( ExprFieldValue );
If dExpr >= 0
{
var1.doSetAttrID( coSpSopr, SpSopr.Nrec, cAttrVlag, dExpr );
Set CheckVlag;
RescanPanel( #SpSopr );
}
}
end; // case
} // cmExprFieldChanged
cmCheckField:
{
//Message( 'cmCheckField' );
Case CurField of
#CheckNomAn, #CheckVlag : { flagNewField:= True; }
else
{
flagNewField:= False;
}
end; // case
If not flagNewField
Inherited::HandleEvent( cmCheckField );
} // cmCheckField
cmCheckRecord:
{
//Запрос на пересчет цены в валюте выдается здесь.
//Message( 'cmCheckRecord' + ', flagNewField=' + If( flagNewField, 'True', 'False' ) );
Inherited::HandleEvent( cmCheckRecord );
} // cmCheckRecord
end; // TableEvent SpSopr
//-----------
HandleEvent // EDITSOPR
cmInit:
{
Case Inherited::HandleEvent( cmInit ) of
heAbort : Abort;
heStop : Exit;
end;
PutCommand(cmValue47);
} // cmInit
cmValue47:
{
If flagE = False
{
ChangeObjIndex1;
flagE:= True;
}
} // cmValue47
cmClose:
{
//Message( 'cmClose' );
Inherited::HandleEvent( cmClose );
} // cmClose
end; // HandleEvent for EDITSOPR
end; // Window EDITSOPR
//-----------
HandleEvent // for interface
cmInit :
{
Case Inherited::HandleEvent( cmInit ) of
heAbort : Abort;
heStop : Exit;
end;
flagE:= False;
cAttrNomAn:= var1.ExtAttr_ID( coSpSopr, 'Номер анализа' ); // Nrec ВА к SpSopr
cAttrVlag:= var1.ExtAttr_ID( coSpSopr, 'Влажность фактическая' ); // Nrec ВА к SpSopr
} // cmInit
end; // HandleEvent for interface
end. // interface