|
![]() |
#1 |
Участник
|
Цитата:
Цитата:
Сообщение от S.Kuskov
![]() Методом научного тыка удалось установить, что данный бокс вызывается где-то в супере element.canClose(). Также удалось распознать нажатие кнопки 'Отмена': в этом случае super() метода canClose возвращает false, а соответственно для кнопок 'Да' и 'Нет' - true (что логично, т.к. при таком выборе форма должна закрыться).
реакция не нужна. А тут и ДА и НЕТ не различаются!! Можно, конечно, в task поймать Esc, откатить все что нужно и заменить его на ctrlQ-что вроде равно Esc c ответом "НЕТ". |
|
![]() |
#2 |
Участник
|
Цитата:
Сообщение от lev
![]() Я что то не очень понял задачу...
Сейчас в стандарте, если ты что то изменил на форме, не сохранил и нажимаешь Esc, вылезает сообщение "В форме были сделаны изменения. Сохранить?" и три кнопки "Да", "Нет", "Отмена". Если нажать "да", то форма закроется и изменения сохраняться, если "нет", то форма закроется и ничего не сохраниться, если "отмена", то форма проста останется открытой и изменения остануться в том же виде не сохрененные. У меня созается впечатление что вам ничего доделовать не надо, а просто нажать на кнопку да, что бы сохранить изменения. |
|
![]() |
#3 |
Участник
|
Цитата:
Помойму здесь явная ошибка в проектировании решения. Не нужно откатывать по 'Нет', а нужно коммитить по 'Да'. Чуствуете разницу? Последний раз редактировалось S.Kuskov; 03.02.2010 в 15:45. |
|
![]() |
#4 |
Участник
|
То что тут ошибка в проектировании, это да, но я на это повлиять не могу. А вот что такое коммитить по Да - не пойму пока, уж извините... Если это выполнить то, что нужно было бы потом откатить, то вопрос: а если опер не нажмет ESC ? Лучше конечно тогда "коммитить" в validateWrite - но тут опять накладываются ошибки проектирования, а скорей постановки.
|
|
![]() |
#5 |
Участник
|
Цитата:
Если у Вас что-то другое, то опишите ситуацию подробнее. Не выбранный Вами способ решения задачи, а саму задачу. Почему возникла необходимость перехватывать отмену модификаций? |
|
![]() |
#6 |
Участник
|
![]() Цитата:
Цитата:
Сообщение от Владимир Максимов
![]() А зачем это надо ловить? Если пользователь вошел в форму, просто посмотрел ничего не изменяя и вышел. Эту ситуацию тоже хотите отлавливать? Ведь этот сценарий ничем не будет отличаться от нажатия кнопки "Нет" в диалоге.
Если у Вас что-то другое, то опишите ситуацию подробнее. Не выбранный Вами способ решения задачи, а саму задачу. Почему возникла необходимость перехватывать отмену модификаций? |
|
![]() |
#7 |
Участник
|
Цитата:
Сообщение от pwp
![]() Журналы InvetJournalTable+InvetJournalTrans(Строки). Нужно, чтобы строки одного журнала имели одну дату. Для этого решили эту дату внести в Table (уже неверно). И при изменении поля клиентом в Table необходимо поменять дату и в строках. Решил: в validate этого поля на DS в Table тут же спросить клиента и при ДА заменить дату и в Table и в Trans. Все работает, но: если клиенту придет в голову нажать Esc вместо Save и там отказаться от модификации , то даты разъедутся. Вот и вся проблема(мелочи я опускаю).
Validate() не должен ничего изменять. Его цель - это всего-лишь верификация. Контроль корректности внесенных изменений. Собственно, отсюда и Ваши проблемы. Я уже указал, меняйте в событии write() на DataSource-формы или (как уже сказали) в табличных методах update(). Т.е. в тех методах, которые, собственно, и предназначены для модификации. Другая Ваша ошибка - это диалог с пользователем. Практика показывает, что пользователи диалоги не читают! У них другая задача. Им надо ввести документ. Срочно! Еще вчера! Если интерфейс позволяет это сделать, нажав кнопку "Да"/"Нет", то они и будут нажимать кнопки не обращая внимания на текст. Тем более, в Вашем случае совершенно не важно, какую кнопку они нажмут. Вы должны жестко "прошить" правила, когда измененная дата приводит к изменению даты во всех строках журнала. Возможно, создать дополнительные настройки или настроечные таблицы. Никакого диалога с пользователем быть не должно! |
|
![]() |
#8 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
![]() Ошибка не в том, что Вы создали общую дату в шапке документа (это как раз нормально), а в том, что Вы выполняете некую модификацию в Validate(), что принципиально неверно!!
Validate() не должен ничего изменять. Его цель - это всего-лишь верификация. Контроль корректности внесенных изменений. Цитата:
Сообщение от Владимир Максимов
![]() Другая Ваша ошибка - это диалог с пользователем.
Практика показывает, что пользователи диалоги не читают! У них другая задача. Им надо ввести документ. Срочно! Еще вчера! Если интерфейс позволяет это сделать, нажав кнопку "Да"/"Нет", то они и будут нажимать кнопки не обращая внимания на текст. Тем более, в Вашем случае совершенно не важно, какую кнопку они нажмут. Вы должны жестко "прошить" правила, когда измененная дата приводит к изменению даты во всех строках журнала. Возможно, создать дополнительные настройки или настроечные таблицы. Никакого диалога с пользователем быть не должно! "Прошить" правила...без диалога вряд ли получится, клиент ведь может ввести и неправильную дату(например 01.01.2010 вместо 05.01.2010), которую по таблицам не отследить, И вообще нужно было изменение даты (редкая операция) сажать на кнопку, а не вытаскивать это из Грид. Последний раз редактировалось pwp; 04.02.2010 в 12:38. |
|
![]() |
#9 |
Участник
|
Цитата:
Сообщение от pwp
![]() То, что не читают-верно и жмут подряд. Но сам факт вопроса должен быть, иначе Вам скажут, что не хотели менять дату, а она сама поменялась. Просто по умолчанию должно все отработать по норме.
"Прошить" правила...без диалога вряд ли получится, клиент ведь может ввести и неправильную дату(например 01.01.2010 вместо 05.01.2010), которую по таблицам не отследить, ![]() Если Вы считает, что факт наличия вопроса как-то поможет Вам при "разборе полетов", то не обольщайтесь. Возможно, перед руководством Вы и сможете себе обезопасить, но данные-то все-равно получатся кривыми. Задавали Вы вопрос или нет. Ведь не читают же! Да и исправлять-то кому? По любому, лишние проблемы для СЕБЯ! Здесь возможен только отказ в изменении. Но никаких диалогов! Цитата:
![]() |
|
![]() |
#10 |
Участник
|
Кстати, никто не мешает вам сделать это. Тем самым вы решите свою проблему централизации источника изменений. Но вопросу совместимости вашего кода по смене даты со стандартным кодом стоит уделить максимум внимания. Я бы сказал встаёт вопрос не где делать изменения, а как их делать.
|
|
![]() |
#11 |
Участник
|
Цитата:
Цитата:
Цитата:
Сообщение от S.Kuskov
![]() Кстати, никто не мешает вам сделать это. Тем самым вы решите свою проблему централизации источника изменений. Но вопросу совместимости вашего кода по смене даты со стандартным кодом стоит уделить максимум внимания. Я бы сказал встаёт вопрос не где делать изменения, а как их делать.
Идеология работы с InventJournalTrans. Но поскольку документации нет, нужно открывать исследования на эту тему с тестированием вариантов и построением стандартной методики работы. Стремно, конечно, исследовать такие вещи, но других вариантов не прослеживается.... В общем , по моему, эту тему можно закрывать. Спасибо всем, принявшим участие. |
|
|
|