Все опытные пользователи Террасофт уже привыкли, что при нажатии 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;
}
Еще может имеет смысл данную необходимость каждый раз подтверждать свое решение вынести в системные настройки типа "Подтверждать закрытие окна редактирования с подтвеждением" - "да/нет". А лучше и не в системные, а пользовательские, чтобы каждый настраивал как ем удобно.
ООО "Лайнсервис"
www.ls-crm.ru
Еще бы было не плохо после
IsChanged = true;
из цикла выйти.
Хорошая мысль. Хочу дополнить идею: при нажатии на кнопку "Отмена" (или Esc) показывать диалог с тремя кнопками. "Данные были изменены. Сохранить карточку?" -- Да, Нет, Отмена. В таком случае, если пользователь нажмет два раза Esc, то первый раз появится данное сообщение, а на второй -- произойдет "Отмена", т.е. пользователь вернется обратно в карточку.