Показать сообщение отдельно
Старый 28.03.2012, 10:48   #1  
Samuel is offline
Samuel
Участник
 
12 / 10 (1) +
Регистрация: 20.04.2010
Задача по форме, на которой располагается основная и подчиненная таблица (Ax 3.0)
Вообщем есть такая форма:



Для верхней части формы 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)
В целом все работает нормально, все суммируется и вычитается, и результат сразу виден на экране. Но! Иногда возникают ситуации когда к строкам верхней таблицы прилепляются данные которые пользователь никогда не заводил в подчиненной таблице. Точнее они иногда дублируются из других строк, и общее количество и виды брака. Бывает очень редко, но причина этого мне не понятна. Вообще такая конструкция допустима для такой задачи? или надо как-то по другому ее было реализовать? или что-то в коде у меня коряво написано (или не написано)?
__________________
Axapta 3.0, Build #1951.17, SP1