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...?) |
|