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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.06.2004, 19:02   #1  
Al Pacino is offline
Al Pacino
Участник
 
20 / 10 (1) +
Регистрация: 09.04.2004
Фильтр join'а в другую форму
Доброго времени суток!

Необходимо передать в другую форму DataSource первой с наложенными пользователем фильтрами. Для этого передаю Query. Нюанс тот, что таблица - outer join 2-х таблиц, а во второй форме мне необходимо заполнять значения второй таблицы, в которой может не быть записей.
Не смотря на то, что использую ttsbegin, ttscommit и query.dataSourceNo(2).update(true) () выдается сообщение о том, что запись не выбрана для обновления.
Что можно сделать?
__________________
Являться частью базы знаний, дабы не изобретать велосипед
Делать больше, чем говорить
Старый 02.06.2004, 17:42   #2  
Al Pacino is offline
Al Pacino
Участник
 
20 / 10 (1) +
Регистрация: 09.04.2004
up!
__________________
Являться частью базы знаний, дабы не изобретать велосипед
Делать больше, чем говорить
Старый 03.06.2004, 09:27   #3  
Prof is offline
Prof
Участник
 
732 / 64 (4) ++++
Регистрация: 18.10.2002
Адрес: Москва
Я так думаю народ в шоке от таких "архитектурных решений" поэтому и молчит
Если есть какая-то возможность, просто сделайте попроще интерфейс.
Старый 03.06.2004, 10:18   #4  
Al Pacino is offline
Al Pacino
Участник
 
20 / 10 (1) +
Регистрация: 09.04.2004
Согласен.
Тогда расскажу о том, чего хочется достичь – возможно, есть более простое решение.

На 1-й форме – таблица, которую пользователь может фильтровать при помощи стандартных средств. Вторая форма выполняет т.н. «групповое обновление» таблицы в первой, т.е. при её вызове пользователь при помощи checkbox и textbox может определить, какие поля и какие значения первой таблицы заполнить, и по нажатию OK все записи в соотв. полях таблицы должны заполниться одинаковыми значениями.

Так выглядит 2-ая форма:
__________________
Являться частью базы знаний, дабы не изобретать велосипед
Делать больше, чем говорить
Старый 03.06.2004, 10:21   #5  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Не с ценами ли балуетесь?
так и так Вам по Query перебирать все записи.
Следите, неапротив которые установлены checkboxы и заполняйте только их!
Старый 03.06.2004, 10:25   #6  
Al Pacino is offline
Al Pacino
Участник
 
20 / 10 (1) +
Регистрация: 09.04.2004
Иллюстрацию присоединять не хочет; попробую файл...
Миниатюры
Нажмите на изображение для увеличения
Название: form2.jpg
Просмотров: 664
Размер:	24.7 Кб
ID:	392  
__________________
Являться частью базы знаний, дабы не изобретать велосипед
Делать больше, чем говорить
Старый 03.06.2004, 10:28   #7  
Al Pacino is offline
Al Pacino
Участник
 
20 / 10 (1) +
Регистрация: 09.04.2004
Цитата:
Не с ценами ли балуетесь?
так и так Вам по Query перебирать все записи.
Следите, неапротив которые установлены checkboxы и заполняйте только их!
Такой подход не обеспечит дружественность интерфейса.

Query как раз и используется для того, чтобы не перебирать все записи.
__________________
Являться частью базы знаний, дабы не изобретать велосипед
Делать больше, чем говорить
Старый 03.06.2004, 10:49   #8  
Prof is offline
Prof
Участник
 
732 / 64 (4) ++++
Регистрация: 18.10.2002
Адрес: Москва
Может я чего-то не так понял, но во второй форме вообще данные из первой не нужны, вторая форма это что-то вроде диалога (и, кстати, можно ее было и сделать в виде RunBaseDialog)
Но если уж хочется использовать нарисованную форму, я бы все сделал через класс.
Т.е. есть класс "обновления себестоимости". У него есть свой query (queryRun) который мы получаем из 1-й формы. В форме-2 на closed мы вешаем методы, передающие значения контролов классовым внутренним переменным.
А потом запускаем метод класса, который, используя query из первой формы и параметры из 2-й, проводит необходимую нам групповую операцию.
Старый 03.06.2004, 10:59   #9  
Al Pacino is offline
Al Pacino
Участник
 
20 / 10 (1) +
Регистрация: 09.04.2004
Цитата:
Может я чего-то не так понял, но во второй форме вообще данные из первой не нужны, вторая форма это что-то вроде диалога (и, кстати, можно ее было и сделать в виде RunBaseDialog)
Но если уж хочется использовать нарисованную форму, я бы все сделал через класс.
Т.е. есть класс "обновления себестоимости". У него есть свой query (queryRun) который мы получаем из 1-й формы. В форме-2 на closed мы вешаем методы, передающие значения контролов классовым внутренним переменным.
А потом запускаем метод класса, который, используя query из первой формы и параметры из 2-й, проводит необходимую нам групповую операцию.
Вопрос идет не о структурировании кода, хотя, несомненно, Ваш подход более грамотный. Прочитайте еще раз первый пост. Структуризация в данном случае проблемы не решит - также query надо будет передавать в класс (а не в форму), и также будет выдаваться сообщение о невозможности обновления. От перемены слагаемых...
__________________
Являться частью базы знаний, дабы не изобретать велосипед
Делать больше, чем говорить
Старый 03.06.2004, 11:10   #10  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
На вскидку, проверяй неравенство 0 recid строки второй таблицы перед обновлением, а в противном случае делай insert, если это требуется.
Старый 03.06.2004, 11:25   #11  
Al Pacino is offline
Al Pacino
Участник
 
20 / 10 (1) +
Регистрация: 09.04.2004
Цитата:
На вскидку, проверяй неравенство 0 recid строки второй таблицы перед обновлением, а в противном случае делай insert, если это требуется.
Проверяю. Не помогает.
__________________
Являться частью базы знаний, дабы не изобретать велосипед
Делать больше, чем говорить
Старый 03.06.2004, 11:28   #12  
Al Pacino is offline
Al Pacino
Участник
 
20 / 10 (1) +
Регистрация: 09.04.2004
Код (неработающий) выглядит так:

PHP код:
    ttsbegin;

    
exportQueryRun = new QueryRun(query);
    
query.dataSourceNo(2).update(true);

    while (
exportQueryRun.next())
    {
        
standardCostTable exportQueryRun.getNo(2);

        if (
cchkPlanStandCostDate.value())
            
standardCostTable.PlanStandCostDate str2date(cPlanStandCostDate.text(),123);

        if (
cchkPlanStandCostCur.value())
            
standardCostTable.PlanStandCostCur cPlanStandCostCur.text();

        if (
cchkPlanORCur.value())
            
standardCostTable.PlanORCur cPlanORCur.text();

        if (
cchkPlanStandCostValue.value())
        {
            if (
cPlanStandCostValue.realValue()!=0.00)
                
standardCostTable.PlanStandCostValue cPlanStandCostValue.realValue();
            else if (
cPlanStandCostPercent.realValue()!=0.00)
                
standardCostTable.PlanStandCostValue standardCostTable.PlanStandCostValue
                                                       
cPlanStandCostPercent.realValue()/100+1;
            else if (
cPlanStandCostAddValue.text()!="0.00")
                
standardCostTable.PlanStandCostValue standardCostTable.PlanStandCostValue
                                                       
cPlanStandCostPercent.realValue();

            if (
standardCostTable.recid==0)
                
standardCostTable.insert();
            else
                
standardCostTable.update();
           }
    }
    
ttscommit
standardCostTable - это вторая, "правая" таблица из JOIN
__________________
Являться частью базы знаний, дабы не изобретать велосипед
Делать больше, чем говорить
Старый 03.06.2004, 11:41   #13  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
Выскажу пару соображений. Извини, нет возможности сейчас проверить.
1) Первые две строчки после ttsbegin поменять местами. Ты создаешь queryRun по query, а затем модифицируешь query. Я сильно сомневаюсь, что эта модификация скажется на QueryRun.
2) Можно попробовать вызвать standardCostTable.selectForUpdate(true);
3) Возможно стоит перенисти ttsbegin чуть ниже, сразу перед циклом (хотя вроде это и не принципиально)
4) Попробуй закоментировать insert - будет вылезать ошибка?
Старый 17.06.2004, 12:13   #14  
Al Pacino is offline
Al Pacino
Участник
 
20 / 10 (1) +
Регистрация: 09.04.2004
Ничего не помогает. У кого-нибудь есть свежие мысли?
__________________
Являться частью базы знаний, дабы не изобретать велосипед
Делать больше, чем говорить
Старый 17.06.2004, 13:31   #15  
Ю-ю is offline
Ю-ю
Участник
 
23 / 10 (1) +
Регистрация: 23.04.2004
Адрес: Москва
Класс QueryBuildDataSource метод update( boolean _value ).
Старый 17.06.2004, 14:25   #16  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Может, попробовать
PHP код:
exportQueryRun.query().dataSourceNo(2).update(true); 
__________________
Андрей.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
оборотная ведомость по складу необходимо добавить ещё один фильтр jeky DAX: Программирование 21 06.04.2009 19:03
AX UK: Join the Virtual Partner Community Blog bot DAX Blogs 0 26.03.2008 04:17
Глюки в Query с разными типами Join (в т.ч. NonExistsJoin) к одной таблице gl00mie DAX: Программирование 10 14.02.2007 13:22
2 join-а + CasheLookup = EntireTable vallys DAX: Программирование 1 10.03.2006 13:20
2 и более OUTER JOIN к одному паренту Ronin DAX: Программирование 21 19.12.2005 13:42

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

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

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