Все опытные пользователи Террасофт уже привыкли, что при нажатии Esc или "Отмена", при работе с карточкой редактированиия, окно закрывается без предупреждения. Однако это не совсем корректная ситуация, если пользователь изменял данные и случайно нажал Esc. Для проверки изменения данных после открытия картчоки редактирования и выдачи пользователю соответствующего предупреждения, необходимо переписать функцию ProcessBaseDBEditOnCloseQuery (версия 3.2.1) в скрипте scr_BaseDBEditUtils следущим образом
function ProcessBaseDBEditOnCloseQuery(Window, BaseDBEdit, CanClose) {
/* MODULE WORKFLOW */
CanClose.Value = !BaseDBEdit.DisableCancel;
/* ENDMODULE WORKFLOW */
if (CanClose.Value){
if (CheckIsDataFieldChanged(BaseDBEdit.Dataset)){
CanClose.Value = ShowConfirmationDialog("Данные были изменены. Вы хотите закрыть карточку, отменив все изменения?")
== wmrYes;
}
}
}
Функция проверки изменения данных в датасете CheckIsDataFieldChanged имеет следующий вид
function CheckIsDataFieldChanged(Dataset) {
var IsChanged = false;
var DataFields = Dataset.DataFields;
for (var i = 0; i DataFields.Count; i++) {
if (!IsSystemField( DataFields.Items(i).Name)&&
DataFields.Items(i).ValueIsChanged ){
IsChanged = true;
}
}
return IsChanged;
}