AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 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
Старый 28.03.2012, 11:40   #2  
tricky is offline
tricky
Участник
 
140 / 64 (3) ++++
Регистрация: 03.05.2005
Адрес: Гуково
Вас спасет display-метод для верхней части, в котором суммировать количество брака. Сразу отпадет необходимость во всех приведенных вами методах.
Старый 28.03.2012, 12:11   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Samuel Посмотреть сообщение
Иногда возникают ситуации когда к строкам верхней таблицы прилепляются данные которые пользователь никогда не заводил в подчиненной таблице. Точнее они иногда дублируются из других строк, и общее количество и виды брака. Бывает очень редко, но причина этого мне не понятна. Вообще такая конструкция допустима для такой задачи? или надо как-то по другому ее было реализовать? или что-то в коде у меня коряво написано (или не написано)?
Необходимо поместить super() внутрь транзакции. Иначе появляется вероятность, того что в Table2 данные обновятся, а в Table1 нет или наоборот.
За это сообщение автора поблагодарили: Samuel (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axforum blogs: Квест: Подружим Dynamics Ax 2009 Sp1 RU7 c SharePoint Foundation 2010 Blog bot DAX Blogs 4 16.10.2017 17:50
Ax 3. Определить в какой колонке на форме стою Arahnid DAX: Программирование 14 03.07.2014 11:47
Проблема: Массовое развертывание клиентов Dynamics Ax 2009 Poleax DAX: Администрирование 8 23.08.2012 17:28
dynamics-ax: Interview with Apparel and Fashion Veteran, Joe Fink Blog bot DAX Blogs 1 07.01.2011 13:43
Dynamics AX: Managing Your Supply Chain Using Microsoft Dynamics AX 2009 - Book Review Blog bot DAX Blogs 0 31.03.2009 23:06

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:59.