Вообщем есть такая форма:
Для верхней части формы Data Source таблица Table1 (реально она ProdJournalRoute), для нижней Table2.
Table2 подчиненная таблица Table1, в Relations связь прописана.
Задача в следующем, пользователь в нижней части формы набирает вид брака и количество, а в верхней части таблицы в поле «Ошибка в количестве» автоматически проставляется сумма брака из нижних строк. Ввод вручную в верхнюю часть в поле «Ошибка в количестве» закрыт.
Задача была реализована следующим образом.
На таблице Table2 были перекрыты методы:
PHP код:
public void delete()
{
Table1 table1;
;
ttsbegin;
select forupdate table1
where table1.JournalId == this.JournalId
&& table1.LineNum == this.LineNum;
if (table1)
{
table1.QtyError = table1.QtyError - this.orig().QtyError;
table1.update();
}
ttscommit;
super();
}
PHP код:
public void insert()
{
Table1 table1;
;
super();
ttsbegin;
select forupdate table1
where table1.JournalId == this.JournalId
&& table1.LineNum == this.LineNum;
table1.QtyError = table1.QtyError + this.QtyError;
table1.update();
ttscommit;
}
PHP код:
public void update()
{
Table1 table1;
;
ttsbegin;
select forupdate table1
where table1.JournalId == this.JournalId
&& table1.LineNum == this.LineNum;
table1.QtyError = table1.QtyError
- this.orig().QtyError
+ this.QtyError;
table1.update();
ttscommit;
super();
}
на датасорсе формы в Table2 перекрыты методы
PHP код:
public void initValue()
{
;
Table2.JournalId = Table1.JournalId;
Table2.LineNum = Table1.LineNum;
super();
}
PHP код:
public void write()
{
super();
table1_ds.reread();
table1_ds.refresh();
element.redraw();
}
PHP код:
public void delete()
{
super();
table1_ds.reread();
table1_ds.refresh();
element.redraw();
}
Еще момент, в DeleteActions Table1 стоит Table2 (Cascade)
В целом все работает нормально, все суммируется и вычитается, и результат сразу виден на экране. Но! Иногда возникают ситуации когда к строкам верхней таблицы прилепляются данные которые пользователь никогда не заводил в подчиненной таблице. Точнее они иногда дублируются из других строк, и общее количество и виды брака. Бывает очень редко, но причина этого мне не понятна. Вообще такая конструкция допустима для такой задачи? или надо как-то по другому ее было реализовать? или что-то в коде у меня коряво написано (или не написано)?