Показать сообщение отдельно
Старый 03.04.2008, 12:09   #4  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
2 raz: Извини, но пример "ни о чём" в контексте имеющегося вопроса.
В приведённом примере связь похоже 1 к 1-му. А нужно 1 ко многим. И группировка должна быть на "таблице-шапке".

Вот пример raz, не работающий на правильных данных и мой вариант решения исходной задачи:
X++:
static void ZVVJobTest(Args _args)
{
    InventTrans         InventTrans;
    InventJournalTrans  InventJournalTrans, InventJournalTransIn;
    ;

    // Журнал "УЗЖ001779"
    // В нём одна строка с кол-вом 10 (цена 20, сумма 200)
    // По ней 2 проводки с кол-вом 5 в каждой

    select sum(Qty), count(RecId) from InventTrans group by TransRefId
    join sum(Qty), sum(CostAmount), count(RecId) from InventJournalTrans
    where InventJournalTrans.InventTransId == InventTrans.InventTransId
       && InventJournalTrans.JournalId     == "УЗЖ001779";

    info(strfmt("Неверно! Проводка: %1   %2   Строка: %3    %4   %5",InventTrans.Qty, InventTrans.RecId, InventJournalTrans.Qty, InventJournalTrans.RecId, InventJournalTrans.CostAmount));

    while Select sum(Qty), sum(CostAmount), count(RecId) from InventJournalTrans
        group by ItemId
        where InventJournalTrans.JournalId     == "УЗЖ001779"
    {

        // Второй Джоин строк журнала для демонстрации общего случая, когда нет группируемого поля во второй таблице
        //  (возможно в некотрых случаях по смыслу он и не нужен!)
        select sum(Qty), count(RecId) from InventTrans
           join count(recid) from InventJournalTransIn
            where InventJournalTransIn.InventTransId    == InventTrans.InventTransId
               && InventJournalTransIn.JournalId     == "УЗЖ001779"
               && InventJournalTransIn.ItemId           == InventJournalTrans.ItemId;

        info(strfmt("Верно! Проводка: %1   %2   Строка: %3    %4   %5",InventTrans.Qty, InventTrans.RecId, InventJournalTrans.Qty, InventJournalTrans.RecId, InventJournalTrans.CostAmount));
    }
}
Результат:
Неверно! Проводка: 10,00 2 Строка: 20,00 2 400,00
Верно! Проводка: 10,00 2 Строка: 10,00 1 200,00
__________________
Zhirenkov Vitaly

Последний раз редактировалось ZVV; 03.04.2008 в 12:13. Причина: Сорри, ошибка закралась в коде :)