Публикация

Подтверждение при закрытии окна редактирования

Все опытные пользователи Террасофт уже привыкли, что при нажатии 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;
}

Нравится

Поделиться

4 комментария

Еще может имеет смысл данную необходимость каждый раз подтверждать свое решение вынести в системные настройки типа "Подтверждать закрытие окна редактирования с подтвеждением" - "да/нет". А лучше и не в системные, а пользовательские, чтобы каждый настраивал как ем удобно.

ООО "Лайнсервис"
www.ls-crm.ru

Еще бы было не плохо после

IsChanged = true;

из цикла выйти.

Хорошая мысль. Хочу дополнить идею: при нажатии на кнопку "Отмена" (или Esc) показывать диалог с тремя кнопками. "Данные были изменены. Сохранить карточку?" -- Да, Нет, Отмена. В таком случае, если пользователь нажмет два раза Esc, то первый раз появится данное сообщение, а на второй -- произойдет "Отмена", т.е. пользователь вернется обратно в карточку.

Может оформить это как идею и реализовать в базовой версии?

Показать все комментарии