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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.08.2005, 14:28   #1  
vesna is offline
vesna
Участник
 
39 / 10 (1) +
Регистрация: 04.11.2004
Адрес: Москва
? Почему суммируется только последнее значение?
Господа знатоки, объясните мне пожалуйста, почему в представленном ниже запросе в поле попадает только последнее суммарное значение contractSpecification.QuotaDelivered +purchLine.OR_InvoiceQty,
а не сумма всех строк запроса purchLine.OR_InvoiceQty + contractSpecification.QuotaDelivered?

Пример:
contractSpecification.QuotaDelivered = 15
запрос возвращает 20; 30; 40
Итог работы процедуры : 55
НО ДОЛЖНО БЫТЬ, по моей логике, 105!

while select forupdate contractSpecification
join purchLine
where contractSpecification.ItemId == purchLine.ItemId &&
contractSpecification.Licence == purchLine.OR_Licence &&
contractSpecification.CIP == purchLine.PurchPrice &&
purchLine.PurchId == purchTable.PurchId
{
contractSpecification.QuotaDelivered += purchLine.OR_InvoiceQty;
contractSpecification.update();
}
Старый 03.08.2005, 14:42   #2  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
PHP код:
select contractSpecification
    join sum
(InvoiceQty)
    
from purchLine
    where contractSpecification
.ItemId == purchLine.ItemId &&
                
contractSpecification.Licence == purchLine.OR_Licence &&
                
contractSpecification.CIP == purchLine.PurchPrice &&
                
purchLine.PurchId == purchTable.PurchId// ---? откуда-то PurchTable взялось?
contractSpecification.QuotaDelivered purchLine.OR_InvoiceQty;
contractSpecification.update(); 
С Уважением,
Георгий
Старый 03.08.2005, 14:47   #3  
vesna is offline
vesna
Участник
 
39 / 10 (1) +
Регистрация: 04.11.2004
Адрес: Москва
это глобально определенная таблица в классе. Она определена и значение PurchId !=0
Старый 03.08.2005, 14:49   #4  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Ну. Так работает?
Старый 03.08.2005, 14:52   #5  
vesna is offline
vesna
Участник
 
39 / 10 (1) +
Регистрация: 04.11.2004
Адрес: Москва
нет, не работает.
Я просто пояснила про значение глобально определенной таблицы

Секунду, там изменили запрос! Вообще не так! Куда ушил фигурные скобки и суммирование полей?? В этом же смысл!
Старый 03.08.2005, 15:11   #6  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Блин, гражданка vesna! Я ж там уже сумму выбираю!!

С Уважением,
Георгий
Старый 03.08.2005, 15:23   #7  
vesna is offline
vesna
Участник
 
39 / 10 (1) +
Регистрация: 04.11.2004
Адрес: Москва
Гражданин знаток, посмотрите внимательней логику того, что было и что Вы предлагаете. Это разные вещи!
Обе таблицы имеют несколько записей. Их связывают по ключевым полям. И далее меняют у одной из таблиц поле, суммируя значения в соответствии с ключами
Здесь никак не выйдет просто одна сумма. Или надо делать цикл в цикле.......
Старый 03.08.2005, 15:24   #8  
vesna is offline
vesna
Участник
 
39 / 10 (1) +
Регистрация: 04.11.2004
Адрес: Москва
12-го поговорим тет-а-тет по логике этой дамы Аксапты
Старый 03.08.2005, 15:29   #9  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Хм.

Напишите так, как я сказал, и все заработает. Ну, добавьте цикл по всем записям.
PHP код:
while select forupdate contractSpecification
    join sum
(InvoiceQty)
    from purchLine
    where contractSpecification
.ItemId == purchLine.ItemId &&
          
contractSpecification.Licence == purchLine.OR_Licence &&
          contractSpecification.CIP == purchLine.PurchPrice &&
          purchLine.PurchId == purchTable.PurchId;
{
    
contractSpecification.QuotaDelivered purchLine.OR_InvoiceQty;
    
contractSpecification.update();

Старый 03.08.2005, 15:43   #10  
vesna is offline
vesna
Участник
 
39 / 10 (1) +
Регистрация: 04.11.2004
Адрес: Москва
я еще засомнивалась сначала как-то........

Всё так и есть. Не хватает Group by!
Но если я для PurchLine его определяю, то не отрабатывают, что естественно для Аксапты, связи с таблицей contractSpecification. Ее RecId возвращает нулевое значение и ошибка о том, что непонятно, у какой строчки я хочу сделать update значения.
Старый 03.08.2005, 15:52   #11  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
А что добавить группировку у contractSpecification?
Правда, возможно, что в план запроса придется включить PurchTable и группировать по нему.

Короче, не мучайте меня. Напишите [дисплей] - метод и юзайте его:
PHP код:
while select forupdate contractSpecification
{
    
contractSpecification.QuotaDelivered contractSpecification.getLinkedSalesLinesInventQty();
    
contractSpecification.update();



Увидимся!
Старый 03.08.2005, 16:23   #12  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Цитата:
почему в представленном ниже запросе в поле попадает только последнее суммарное значение
Потому что Аксапта сначала получает все данные по запросу от SQL сервера, а потом уже начинает по ним делать цикл с обновлениями. То есть для всех 3 циклов будет использоваться одна и та же запись contractSpecification с значением QuotaDelivered = 15. И у вас пройдет 3 запроса на обновление этой записи 35, 45 и 55 соответственно.
Старый 03.08.2005, 16:28   #13  
vesna is offline
vesna
Участник
 
39 / 10 (1) +
Регистрация: 04.11.2004
Адрес: Москва
Поняла. Спасибо всем
Старый 03.08.2005, 16:33   #14  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
И еще
Лучше сделать внешним циклом запрос по purchLine
PHP код:
    while select sum(OR_InvoiceQtyfrom purchLine
        group by ItemId
OR_LicensePurchPrice
        where purchLine
.purchId == purchTable.purchId
    
{
        
update_recordset contractSpecification
        setting QuotaDelivered 
purchLine.OR_InvoiceQty
        where contractSpecification
.ItemId  == purchLine.ItemId
           
&& contractSpecification.Licence == purchLine.OR_License
           
&& contractSpecification.CIP     == purchLine.PurchPrice;
    } 
Старый 03.08.2005, 17:47   #15  
vesna is offline
vesna
Участник
 
39 / 10 (1) +
Регистрация: 04.11.2004
Адрес: Москва
спасибо. отличный вариант. Воспользовалась им
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Почему CustInvoiceTable лишили Voucher -а ? Logger DAX: Программирование 21 29.10.2008 11:57
Как вставить значение из Аксапты в Excel Андре DAX: Программирование 17 09.02.2005 18:13
Как получить значение поля Datasource на динамически созданной форме? storer DAX: Программирование 2 14.11.2003 16:41
Значение по умолчанию в таблице bocman DAX: Программирование 4 15.08.2003 16:20
Хочу видеть только итоги AKIS DAX: Функционал 1 19.08.2002 11:49

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:58.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.