|  23.08.2005, 11:35 | #1 | 
| Участник |  ошибка при обновлении smmQuotationLine 
			
			В форме "предложения" при изменении некоторых полей (датасорс smmQuotationTable) из метода modified вызывается обновление соответствующего поля в smmQuotationLine (методы типа SetLinePrognosisId и др.). В этих методах выполняется код вида: ttsbegin; while select forupdate smmQuotationLine where smmQuotationLine.quotationId == this.quotationId { smmQuotationLine.<поле> = this.<поле>; smmQuotationLine.doUpdate(); } ttscommit; Ошибка возникает в случае, когда пользователь нажимает ESC и НЕ СОХРАНЯЕТ изменения в форме. При следующем открытии предложения выясняется, что значения полей записи в smmQuotationLine изменились (ясное дело, после .doUpdate()), а значения в smmQuotationTable остались старыми (произошёл "откат"). Вопрос: подскажите, как наиболее корректно обойти эту багу? Мысль: фактическое обновление данных в smmQuotationLine осуществлять только при вызове метода update() таблицы smmQuotationTable. В этом случае возникают попутные вопросы: а) как непосредственно из метода smmQuotationTable.update() узнать, какие поля были изменены и б) как в этом случае из метода modifiedField(_fieldId) обновить данные в нижней части формы, где smmQuotationLine, без физического изменения значений в smmQuotationLine (т.е. как-то изменить form.datasource...?) | 
|  | 
|  23.08.2005, 11:54 | #2 | 
| Участник | 
			
			Возникла вторая мысль - очевидно, не совсем корректная, но действенная - это точно  - при изменении значения в форме запретить "откат" принудив пользователя ответить утвердительно на вопрос о сохранении изменений (отключить кнопку "Нет" или обойти вопрос?) либо вообще запретить в этой форме выход по ESC (механизм,  описанный в одной из соседних веток). | 
|  | 
|  23.08.2005, 13:03 | #3 | 
| Участник | 
			
			А еще можно воспользоваться стандартнум функционалом подтверждений. Сервис\ Параметры\ (Вкладка - Подтверждение) В группу - при одновлении. Установите галочки в поля Главная Книга и Группы. Для начала. При попытке закрыть форму в которой были сделаны какие-либо изменения будет выдаваться диалоговое окно на предмет подтверждения сделанных модификаций | 
|  | 
|  23.08.2005, 13:38 | #4 | 
| Участник | 
			
			To: Zan Так ведь такое окно как раз выводится, проблема в том, что если пользователь отвечает "Нет", изменения в таблице smmQuotationTable не происходит, остаются старые значения, а в связанной таблице smmQuotationLine оказываются новые значения, т.к. doUpdate() происходит задолго до того, как пользователь жмёт ESC (см.первый пост). | 
|  | 
|  23.08.2005, 13:41 | #5 | 
| Участник |   
			
			Ммда. Ну, тогда только доработка напильником | 
|  | 
|  24.08.2005, 11:13 | #6 | 
| Участник | 
			
			Можно в течение этой операции делать update и на головной таблице. Тогда целостность изменений будет сохранена.
		 | 
|  |