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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.09.2008, 11:57   #8  
koraman is offline
koraman
Участник
 
41 / 11 (1) +
Регистрация: 12.02.2008
Адрес: Казань
Это какая-то мистика! Я, конечно, в аксапте новичок... Она всегда такая непредсказуемая?
Сегодня после поста _scorp_ у меня заработал скрипт, который я выкладывал в начале!
Цель же - немножко посложнее. Мне необходимо вывести для каждого клиента список договоров с указанием суммарного оборота по каждому.
Я создал тестовую формочку с одним единственным гридом, который цепляется к временной табличке, которая перед отображением заполняется своим методом fill().

Итак. Проблема.

Объявление переменных:
X++:
    CustTable custTable;
    ContactPerson contactPerson;
    CustGroup custGroup;
    RContractTable contractTable;
    RContractTypes contractTypes;
    CustTrans custTrans;
    ;
Шаг 1:
X++:
    while select custTable order by AccountNum
        outer join contactPerson where
            custTable.ContactPersonId == contactPerson.ContactPersonId
    {
        this.CustInfo = custTable.AccountNum + ", " + contactPerson.Name;
        this.insert();
    } // end while
Здесь всё нормально. Выбирается, джойнится, отображается.

Шаг 2:
X++:
    while select custTable order by AccountNum
        outer join contactPerson where
            custTable.ContactPersonId == contactPerson.ContactPersonId
        outer join custGroup where
            (custGroup.dataAreaId == contactPerson.dataAreaId || custGroup.dataAreaId != contactPerson.dataAreaId) &&
            custTable.CustGroup == custGroup.CustGroup
    {
        this.CustInfo = custTable.AccountNum + ", " + contactPerson.Name;
        this.CustGroupName = custGroup.Name;
        this.insert();
    } // end while
Добавили ещё один джоин, стали отображать ещё один столбец - и появилась первая проблема! Почему-то у нескольких записей перестало отображаться название группы клиентов CustGroup.Name! Всё вроде бы нормально... В CustTable группа указана, в CustGroup она существует, для многих строк она в гриде отображается, но для некоторых не отображается. Почему?

Шаг 3:
X++:
    while select custTable order by AccountNum
        outer join contactPerson where
            custTable.ContactPersonId == contactPerson.ContactPersonId
        outer join custGroup where
            (custGroup.dataAreaId == contactPerson.dataAreaId || custGroup.dataAreaId != contactPerson.dataAreaId) &&
            custTable.CustGroup == custGroup.CustGroup
        outer join contractTable where
            (contractTable.dataAreaId == custGroup.dataAreaId || contractTable.dataAreaId != custGroup.dataAreaId) &&
            contractTable.RContractPartnerCode == custTable.AccountNum &&
            contractTable.RContractPartnerType == RContractPartnerType::Cust
        outer join contractTypes where
            (contractTypes.dataAreaId == contractTable.dataAreaId || contractTypes.dataAreaId != contractTable.dataAreaId) &&
            contractTypes.ContractCode == contractTable.RContractCode
    {
        this.CustInfo = custTable.AccountNum + ", " + contactPerson.Name;
        this.CustGroupName = custGroup.Name;
        this.ContractRegNo = contractTable.RContractAccount;
        this.ContractNo = contractTable.RContractNumber;
        this.ContractGroupName = contractTypes.ContractCodeName;
        this.insert();
    } // end while
Здесь мы добавили уже два джойна, но осложнений больше нет - всё хорошо и аккуратно... за исключением групп, конечно...

Шаг 4:
X++:
    while select custTable order by AccountNum
        outer join contactPerson where
            custTable.ContactPersonId == contactPerson.ContactPersonId
        outer join custGroup where
            (custGroup.dataAreaId == contactPerson.dataAreaId || custGroup.dataAreaId != contactPerson.dataAreaId) &&
            custTable.CustGroup == custGroup.CustGroup
        outer join contractTable where
            (contractTable.dataAreaId == custGroup.dataAreaId || contractTable.dataAreaId != custGroup.dataAreaId) &&
            contractTable.RContractPartnerCode == custTable.AccountNum &&
            contractTable.RContractPartnerType == RContractPartnerType::Cust
        outer join contractTypes where
            (contractTypes.dataAreaId == contractTable.dataAreaId || contractTypes.dataAreaId != contractTable.dataAreaId) &&
            contractTypes.ContractCode == contractTable.RContractCode
        outer join AccountNum, sum(AmountMST) from custTrans group by AccountNum where
            (custTrans.dataAreaId == contractTypes.dataAreaId || custTrans.dataAreaId != contractTypes.dataAreaId) &&
            custTrans.RContractAccount == contractTable.RContractAccount &&
            custTrans.RContractCode == contractTable.RContractCode
    {
        this.CustInfo = custTable.AccountNum + ", " + contactPerson.Name;
        this.CustGroupName = custGroup.Name;
        this.ContractRegNo = contractTable.RContractAccount;
        this.ContractNo = contractTable.RContractNumber;
        this.ContractGroupName = contractTypes.ContractCodeName;
        this.Amount = custTrans.AmountMST;
        this.insert();
    } // end while
Вот здесь уже всё валится. И по-разному. Вчера это был просто пустой грид, а сегодня уже сообщение типа "Невозможно выбрать запись в CustTable. База данных SQL обнаружила ашипку.".

Хотя и реализовал задачку другим путём, мозги всё равно стремятся сломаться об эти две проблемы...
__________________
I believe!
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Двойной Outer Join в Query LTA DAX: Программирование 2 21.01.2020 09:28
Несколько outer join в запросе _scorp_ DAX: Программирование 2 11.04.2008 10:56
Данные в Grid из таблиц, связанных по Outer Join cherv DAX: Программирование 2 17.02.2007 01:36
2 и более OUTER JOIN к одному паренту Ronin DAX: Программирование 21 19.12.2005 13:42
outer join для трех таблиц r25 DAX: Программирование 4 29.04.2004 15:42

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

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

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