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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.09.2008, 10:45   #1  
CRASH_505 is offline
CRASH_505
Участник
Аватар для CRASH_505
 
74 / 10 (1) +
Регистрация: 09.09.2008
Суммирование строк в таблице
Доброе день.Вот программа.Подскажите как прописать условие суммирования,
т.к есть одинаковые номенклатуры, забитые в один и тотже день, а суммы разные
как суммировать.
X++:
{
    ProdJournalTable ProdJournalTable;
    ProdJournalRoute ProdJournalRoute;
    ProdJournalRoute ProdJournalRoute_1;
    ProdJournalRoute ProdJOurnalRoute_2;
    TmpProdJournalRouteOutTime tmpTable;
    ProdTable  ProdTable;
    int nDay;
    SysOperationProgress    sop;
    int                     cntItems;
    date fromDate = 01\09\2008;
    date toDate = 31\09\2008;
    ;
    delete_from tmpTable;



        select count (Recid)from Prodjournaltable
    exists join ProdJournalRoute
    where ProdJournalRoute.JournalId==ProdJournalTable.JournalId&&
          ProdJournalTable.Createddate >= fromDate &&
          ProdJournalTable.createdDate <= toDate &&
         (ProdJournalRoute.WrkCtrId == '113' ||
          ProdJournalRoute.WrkCtrId == '135');

        cntItems = ProdJournalTable.RecId;

    sop = SysOperationProgress::newGeneral('','',cntItems); // преоброзование шкалы


    while select  createddate,journalid,posted,posteddate
    From ProdJournalTable
    exists join ProdJournalRoute
    where ProdJournalRoute.JournalId==ProdJournalTable.JournalId&&
          ProdJournalTable.Createddate >= fromDate &&
          ProdJournalTable.createdDate <= toDate &&
         (ProdJournalRoute.WrkCtrId == '113' ||
          ProdJournalRoute.WrkCtrId == '135')
    {
        select ProdJournalRoute_1
        order by oprnum desc
        where
            ProdJournalRoute_1.JournalId == ProdJournalTable.JournalId;

        select ProdTable
        where
            ProdTable.ProdId == ProdJournalRoute_1.ProdId;

        select  ProdJournalRoute_2
        where
                ProdJournalRoute_2.OprId like '045*' &&
                ProdJournalRoute_2.JournalId == ProdJournalTable.JournalId;




       sop.incCount();

     /*           info
        (
            strfmt("%1,%2,%3",
            ProdJournalTable.createdDate,
            ProdJournalTable.JournalId,
            toDay() - ProdJournalTable.createdDate)
        );*/



        tmpTable.clear();

        tmpTable.ITEMID =ProdTable.ItemId;
        tmpTable.WRKCTRID=ProdjournalRoute_1.WrkCtrId;
        tmpTable.Qty=ProdJournalRoute_1.QtyGood+ProdJournalRoute_1.QtyError;

        if(ProdJournalTable.Posted==noyes::No)
        {
            tmpTable.Days= (toDay() - ProdJournalTable.createdDate)+1; //toDay() - ProdjournalRoute_1.transDate;
        }
        else
        {
            tmpTable.Days=(ProdJournalTable.PostedDate - ProdJournalTable.createdDate)+1 ;
        }

        tmpTable.Normal=noYes::No;


       if ( tmpTable.WRKCTRID == '135')
        {
            nDay = 1;
        }
        if ( tmpTable.WRKCTRID == '113')
        {
            if (ProdJournalRoute_2 != NULL)
            {
                 nDay=5;
            }
            else
            {
                nDay = 3;
            }
        }

        if (tmpTable.Days > nDay)
            tmpTable.Normal=NoYes::No;
        else
            tmpTable.Normal=NoYes::Yes ;

        tmpTable.insert();
    }
Старый 15.09.2008, 11:28   #2  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
select sum(Amount) from MyTable group by ItemId; Не то?
Старый 15.09.2008, 11:36   #3  
CRASH_505 is offline
CRASH_505
Участник
Аватар для CRASH_505
 
74 / 10 (1) +
Регистрация: 09.09.2008
Цитата:
Сообщение от Sada Посмотреть сообщение
select sum(Amount) from MyTable group by ItemId; Не то?
В поле Itemid есть повторяющиеся номенклатуры, в поле Normal есть галочка что они равны 1,а в поле Qty разные суммы. Как мне сложить их в одну . Приношу извинение за не правельное изложение вопросов
Старый 15.09.2008, 11:41   #4  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
не понимаю....
Старый 15.09.2008, 11:45   #5  
CRASH_505 is offline
CRASH_505
Участник
Аватар для CRASH_505
 
74 / 10 (1) +
Регистрация: 09.09.2008
Цитата:
Сообщение от Sada Посмотреть сообщение
не понимаю....
Две одинаковые номенклатуры имеют две разные суммы, как написать мне условие сложение, чтоб выводилась одна номенклатура с одной сложенной суммой. Мне очень стыдно за свои каракули
Старый 15.09.2008, 11:52   #6  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
select sum(Qty) from MyTable group by ItemId where всякие условия;
info(strfmt("%1", MyTable.qty));
Я настаиваю на этом
За это сообщение автора поблагодарили: jeky (1).
Старый 15.09.2008, 12:18   #7  
CRASH_505 is offline
CRASH_505
Участник
Аватар для CRASH_505
 
74 / 10 (1) +
Регистрация: 09.09.2008
Цитата:
Сообщение от Sada Посмотреть сообщение
select sum(Qty) from MyTable group by ItemId where всякие условия;
info(strfmt("%1", MyTable.qty));
Я настаиваю на этом
Спасибо ща попробую
Старый 16.09.2008, 09:41   #8  
CRASH_505 is offline
CRASH_505
Участник
Аватар для CRASH_505
 
74 / 10 (1) +
Регистрация: 09.09.2008
Доброе утро.Подскажите, как мне присоединить while select с остальными селектами которые внизу.
X++:
  while select sum(Qty)
     from  tmpTable
     group by ItemId
   
     
     {
        select  sum(Qty)from tmpTable_1
        group by ItemId
        where tmpTable.Normal==noyes::Yes;

        select sum (Qty) from tmpTable_2
        group by itemid
        where tmpTable.Normal==noYes::No;
Старый 16.09.2008, 09:46   #9  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
X++:
while select sum(Qty)
     from  tmpTable
     group by ItemId, Normal
   
     
     {
info(strFmt("%1, %2, %3", tmpTable.itemid, tmpTable.normal, tmpTable.qty));
}
Старый 16.09.2008, 09:49   #10  
CRASH_505 is offline
CRASH_505
Участник
Аватар для CRASH_505
 
74 / 10 (1) +
Регистрация: 09.09.2008
Цитата:
Сообщение от Sada Посмотреть сообщение
X++:
while select sum(Qty)
     from  tmpTable
     group by ItemId, Normal
   
     
     {
info(strFmt("%1, %2, %3", tmpTable.itemid, tmpTable.normal, tmpTable.qty));
}

Спасибо ща попробую
Старый 16.09.2008, 10:30   #11  
CRASH_505 is offline
CRASH_505
Участник
Аватар для CRASH_505
 
74 / 10 (1) +
Регистрация: 09.09.2008
Вот что я прописал.Но ни чего не получилось,номенклатуры повторяются а суммы не складываются , может надо указать поле складов (WRKCTRID '113','115' ) .

X++:
{
     tmpProdJournalRouteOutTime tmpTable;
     tmpProdJournalRouteOutTime tmpTable_1;
     tmpProdJournalRouteOutTime tmpTable_2;

     while select sum(Qty)
     from  tmpTable
     group by ItemId,Normal
        
     {
        select  sum(Qty)from tmpTable_1
        group by ItemId
        where  tmpTable.Normal==noyes::Yes;

        select sum (Qty) from tmpTable_2
        group by itemid
        where tmpTable.Normal==noYes::No;

        info(strfmt("%1,2%,3%,4%",
        tmpTable.ITEMID,
        tmpTable.WRKCTRID,
        tmpTable.Qty,
        tmpTable.Normal));
     }
}
Старый 16.09.2008, 10:37   #12  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Зачем селекты внутри while??? Куда вы смотрите? Какой склад? Я ничо не понимаю. Вам нужно сложить количества в разрезе ITEMID/NORMAL или как? Qty - это не СУММА это Количество.

Последний раз редактировалось Sada; 16.09.2008 в 10:40.
Старый 16.09.2008, 10:52   #13  
CRASH_505 is offline
CRASH_505
Участник
Аватар для CRASH_505
 
74 / 10 (1) +
Регистрация: 09.09.2008
Цитата:
Сообщение от Sada Посмотреть сообщение
Зачем селекты внутри while??? Куда вы смотрите? Какой склад? Я ничо не понимаю. Вам нужно сложить количества в разрезе ITEMID/NORMAL или как?
Попробую обьяснить, хотя не уверен что это у меня хорошо получиться.
Есть таблица, содержащая поля Itemid,Wrkctrid(склады 113,135),Qty(сумма),Normal(поле содержит условие либо да, либо нет ).
Тавк вот допустим есть повторяющиеся наменклатуры со складом 113, с разной суммой, и Normal( да )
005.40.0443 113 1 416.000000000000 1
005.40.0443 113 1 127.000000000000 1
так же и со складом 135
МБ.01.004.2 135 1 100.000000000000 1
МБ.01.004.2 135 1 100.000000000000 1
как мне сделать чтоб получилось вот так
005.40.0443 113 1 543.000000000000 1
МБ.01.004.2 135 1 200.000000000000 1

X++:
 while select sum(Qty)
     from  tmpTable
     group by ItemId,Normal
   
     
     {
        select  sum(Qty)from tmpTable_1
        group by ItemId
        where  tmpTable.Normal==noyes::Yes;

        select sum (Qty) from tmpTable_2
        group by itemid
        where tmpTable.Normal==noYes::No;
Вот в этом условии, может я что то неправельно написал.
Старый 16.09.2008, 11:03   #14  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
X++:
while select sum(Qty)
     from  tmpTable
     group by ItemId,Normal,Wrkctrid
{
info(strfmt("%1,2%,3%,4%",
        tmpTable.ITEMID,
        tmpTable.WRKCTRID,
        tmpTable.Qty,
        tmpTable.Normal));

}
и все!!!
Старый 16.09.2008, 11:32   #15  
CRASH_505 is offline
CRASH_505
Участник
Аватар для CRASH_505
 
74 / 10 (1) +
Регистрация: 09.09.2008
Нет нет вы были правы, мне нужно сложить количества в разрезе ITEMID/WRKCTRID
вот что мне надо.Как мне дописать условие.Еще раз Извините

X++:
while select
       tmpTable
       group by ItemId,Wrkctrid     
     {
        select  sum(Qty)from tmpTable_1
        group by ItemId
        where tmpTable.Normal==noyes::Yes;

        select sum (Qty) from tmpTable_2
        group by itemid
        where tmpTable.Normal==noYes::No;
Старый 16.09.2008, 11:42   #16  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
забутьте про Ваши селекты в цикле. Мой пост выше сложит количества как надо.
Старый 16.09.2008, 12:33   #17  
CRASH_505 is offline
CRASH_505
Участник
Аватар для CRASH_505
 
74 / 10 (1) +
Регистрация: 09.09.2008
Цитата:
Сообщение от Sada Посмотреть сообщение
забутьте про Ваши селекты в цикле. Мой пост выше сложит количества как надо.
Извините, но все равно повторения остались.
Вот вся программа посмотрите, что не так.
X++:
    ProdJournalTable ProdJournalTable;
    ProdJournalRoute ProdJournalRoute;
    ProdJournalRoute ProdJournalRoute_1;
    ProdJournalRoute ProdJOurnalRoute_2;
    TmpProdJournalRouteOutTime tmpTable;
    tmpprodjournalrouteouttime tmpTable_1;
    tmpprodjournalrouteouttime tmpTable_2;
    ProdTable  ProdTable;
    int nDay;
    SysOperationProgress    sop;
    int                     cntItems;
    date fromDate = 01\09\2008;
    date toDate = 31\09\2008;
    ;
    delete_from tmpTable;




        select count (Recid)from Prodjournaltable
    exists join ProdJournalRoute
    where ProdJournalRoute.JournalId==ProdJournalTable.JournalId&&
          ProdJournalTable.Createddate >= fromDate &&
          ProdJournalTable.createdDate <= toDate &&
         (ProdJournalRoute.WrkCtrId == '113' ||
          ProdJournalRoute.WrkCtrId == '135');

        cntItems = ProdJournalTable.RecId;

    sop = SysOperationProgress::newGeneral('','',cntItems); // преоброзование шкалы


    while select  createddate,journalid,posted,posteddate
    From ProdJournalTable
    exists join ProdJournalRoute
    where ProdJournalRoute.JournalId==ProdJournalTable.JournalId&&
          ProdJournalTable.Createddate >= fromDate &&
          ProdJournalTable.createdDate <= toDate &&
         (ProdJournalRoute.WrkCtrId == '113' ||
          ProdJournalRoute.WrkCtrId == '135')
    {
        select ProdJournalRoute_1
        order by oprnum desc
        where
            ProdJournalRoute_1.JournalId == ProdJournalTable.JournalId;

        select ProdTable
        where
            ProdTable.ProdId == ProdJournalRoute_1.ProdId;

        select  ProdJournalRoute_2
        where
                ProdJournalRoute_2.OprId like '045*' &&
                ProdJournalRoute_2.JournalId == ProdJournalTable.JournalId;




       sop.incCount();

     /*           info
        (
            strfmt("%1,%2,%3",
            ProdJournalTable.createdDate,
            ProdJournalTable.JournalId,
            toDay() - ProdJournalTable.createdDate)
        );*/



        tmpTable.clear();

        tmpTable.ITEMID =ProdTable.ItemId;
        tmpTable.WRKCTRID=ProdjournalRoute_1.WrkCtrId;
        tmpTable.Qty=ProdJournalRoute_1.QtyGood+ProdJournalRoute_1.QtyError;

        if(ProdJournalTable.Posted==noyes::No)
        {
            tmpTable.Days= (toDay() - ProdJournalTable.createdDate)+1; //toDay() - ProdjournalRoute_1.transDate;
        }
        else
        {
            tmpTable.Days=(ProdJournalTable.PostedDate - ProdJournalTable.createdDate)+1 ;
        }

        tmpTable.Normal=noYes::No;


       if ( tmpTable.WRKCTRID == '135')
        {
            nDay = 1;
        }
        if ( tmpTable.WRKCTRID == '113')
        {
            if (ProdJournalRoute_2 != NULL)
            {
                 nDay=5;
            }
            else
            {
                nDay = 3;
            }
        }

        if (tmpTable.Days > nDay)
            tmpTable.Normal=NoYes::No;
        else
            tmpTable.Normal=NoYes::Yes ;

        tmpTable.insert();

     }
А вот что надо дописать
X++:
 while select sum(Qty)
     from  tmpTable
     group by ItemId,Normal
   
     
     {
        select  sum(Qty)from tmpTable_1
        group by ItemId
        where  tmpTable.Normal==noyes::Yes;

        select sum (Qty) from tmpTable_2
        group by itemid
        where tmpTable.Normal==noYes::No;
Старый 16.09.2008, 12:40   #18  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
я пас....
Старый 16.09.2008, 13:07   #19  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
может:
X++:
while select tmpTable
     group by ItemId
     {
        select  sum(Qty)from tmpTable_1
        where  tmpTable_1.Normal==noyes::Yes &&
                  tmpTable_1.ItemId  == tmpTable.ItemId;

        select sum (Qty) from tmpTable_2
        where tmpTable_2.Normal==noYes::No &&
                 tmpTable_2.ItemId  == tmpTable.ItemId;
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 16.09.2008, 13:28   #20  
CRASH_505 is offline
CRASH_505
Участник
Аватар для CRASH_505
 
74 / 10 (1) +
Регистрация: 09.09.2008
Нет, все равно не складывается количество,вот так получается
10.4.2003 135 1 1000.000000000000 1
10.4.2003 135 1 1000.000000000000 1
Я что думаю может есть проблема с Wrkctrid и Itemid. Может их как совместить, или что нибудь типа этого. Не знаю голова кругом
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Где посмотреть сколько строк в таблице? miklenew DAX: Программирование 4 15.01.2008 14:42
Тормозит копирование строк в буфер обмена ivas DAX: Программирование 20 21.08.2007 15:05
Создание строк в таблице Protey DAX: Программирование 6 01.11.2006 15:13
Очень маленькая высота строк в таблице формы (1-2 мм) Gustav DAX: Программирование 11 17.06.2006 11:57

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

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

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