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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.02.2006, 19:35   #101  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Быстрый (и простой) способ получить суммы и количества по InventTrans на дату - индексированный (или материализованный, в зависимости от СУБД) view. Из аксапты подхватывается
Единственный косяк - возможные проблемы с блокировками и более тяжелая операция обновления таблицы
__________________
-ТСЯ или -ТЬСЯ ?
Старый 02.02.2006, 19:44   #102  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
В общем господа я перед Вами каюсь, мой запрос неправильный оставляю его только для примера "как НЕ надо делать". Корректный у Владимира Максимова.
Старый 03.02.2006, 09:29   #103  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
Цитата:
Сообщение от Wamr
пора перемещаться на SQL.RU
Alexius дело говорит, слушайте его
Боюсь там за такие запросы руки оторвут и обратно, на axforum вышлют, чтоб устрашились.
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/
Старый 03.02.2006, 16:14   #104  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,698 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Поскольку это все-таки форму по AXAPTA, а не филиал sql.ru, то я перевел это добро в синтаксис AXAPTA

PHP код:
static void Sum_Date_new(Args _args)
{
    
#AviFiles
    
SysOperationProgress    sysOperationProgress;

    
Qty             ostatok;
    
Int               intLine,
                      
progressTotal;
    
int               startTime;
    
FromDate    fromDate    06\\05\\2005;

    
InventSum   inventSum;
    
InventTrans inventTrans;
    
InventDim   inventDim;
    ;

    
progressTotal = (select count(RecIdfrom inventSum).recId;

    
sysOperationProgress = new SysOperationProgress();
    
sysOperationProgress.setAnimation(#AviTransfer);
    
sysOperationProgress.setCaption('Расчет остатка на дату');
    
sysOperationProgress.setTotal(progressTotal);
    
sysOperationProgress.setText("Подготовка расчета...");
    
sysOperationProgress.update(true);

// Если надо, включаем режим грязного чтения
//    inventSum.selectLocked(false);  

    
startTime timenow();
    while 
select itemIdinventDimIdmaxof(PhysicalInvent)
        
from inventSum
        group by itemId
inventDimId
            outer join sum
(Qty)
            
from inventTrans
            where inventTrans
.ItemId == inventSum.ItemId
                
&& inventTrans.inventDimId == inventSum.InventDimId
                
&& ((inventTrans.DateInvent fromDate
                    || (! 
inventTrans.DateInvent && inventTrans.DatePhysical fromDate))
                && (
inventTrans.StatusIssue == StatusIssue::Sold
                    
|| inventTrans.StatusIssue == StatusIssue::Deducted
                    
|| inventTrans.StatusIssue == StatusIssue::Picked
                    
|| inventTrans.StatusReceipt == StatusReceipt::Purchased
                    
|| inventTrans.StatusReceipt == StatusReceipt::Received
                    
|| inventTrans.StatusReceipt == StatusReceipt::Registered)
                
exists join recId
                from inventDim
                where inventDim
.inventDimId == inventSum.InventDimId
                    
&& (inventDim.InventLocationId == 'Склад')
    {
        
intLine++;
        
ostatok += inventSum.PhysicalInvent inventTrans.Qty;
        
sysOperationProgress.setText(strFmt('Осталось %1 из %2',progressTotal-intLine,progressTotal));
        
sysOperationProgress.setCount(intLine);

    }

    
sysOperationProgress.kill();
    
info(strfmt('Количество строк %1'intLine));
    
info(strfmt('На %1 остаток %2 шт'fromDateostatok));
    
info(strfmt('%1''Процесс успешно завершен'));
    
info(strfmt('Время длительности процесса: %1'time2str(timenow() - startTime,1,1)));


exists join по InventDim сделан, чтобы не возится с группировками еще и по полям из InventDim. Если делать напрямую в Query Analyzer, то можно заменить на INNER JOIN.

Так вот, большая и жирная ложка дегдя в этой бочке меда заключается в том, что такой запрос выполняется МЕДЛЕННЕЕ, чем цикл по InventSumDatePhysicalDim:: onHandQty()

На том же тестовом примере ЭТОТ запрос выполнялся примерно 1 час 20 минут. Через класс - около 50 минут. Результат одинаковый

Хотя, справедливости ради, следует отметить, что этот же самый запрос написанный напрямую в Query Analyzer выполнился примерно за минуту.
Старый 07.02.2006, 14:38   #105  
Ronin is offline
Ronin
aka awas
NavAx Club
 
16 / 30 (2) +++
Регистрация: 21.06.2004
Адрес: г. Москва
Владимиру:
Вы удивитесь, посмотрев в профайлере как Аксапта выполняет этот запрос :-)
Старый 09.02.2006, 15:39   #106  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
Вот...
В результате всех этих жутких обсуждений - написал крутую хрень из серии уголок проктолога

Оборотная ведомость по товарам. Работает быстро. Только для MS SQL.
выложил тут
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/
Старый 09.02.2006, 15:54   #107  
_AnK_ is offline
_AnK_
Участник
Аватар для _AnK_
Ex AND Project
 
160 / 31 (2) +++
Регистрация: 03.11.2005
Адрес: СПб
Recoilme


1.
Error Сообщение (15:57:10) Невозможно выбрать запись в '' ('')
База данных SQL обнаружила ошибку.

Info Сообщение (15:57:10) Описание ошибки SQL: [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'dbo.INVENTTRANS'.

Info Сообщение (15:57:10) Оператор SQL: BEGIN TRANSACTION SELECT ITEMID, SUM(QTY) AS QTY, SUM(COSTAMOUNTPOSTED + COSTAMOUNTADJUSTMENT) AS COST FROM dbo.INVENTTRANS WHERE ( (CASE WHEN DateInvent='19000101' THEN DatePhysical ELSE DateInvent END) < '20060103') AND ( (CASE WHEN DateInvent='19000101' THEN DatePhysical ELSE DateInvent END) > '19000101') AND (dbo.INVENTTRANS.DATAAREAID = 'wrk') AND ( STATUSRECEIPT = 1 OR STATUSRECEIPT = 2 OR STATUSRECEIPT = 3 OR STATUSISSUE = 1 OR STATUSISSUE = 2 OR STATUSISSUE = 3 ) GROUP BY ITEMID COMMIT TRANSACTION

У меня bmssa.InventTrans =)

2. Обязательно хочет excel файл, иначе выдает ошибку. Новый само не делает.
Старый 09.02.2006, 16:03   #108  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
Цитата:
Сообщение от _AnK_
Recoilme


1.
Error Сообщение (15:57:10) Невозможно выбрать запись в '' ('')
База данных SQL обнаружила ошибку.
Исправил...
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/
Старый 09.02.2006, 16:50   #109  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,242 / 980 (37) +++++++
Регистрация: 03.04.2002
2Recoilme на рабочей базе пробовал? Дело в том, что таблица очень горячая, и могут возникнуть блокировки. Причем происходят случайным образом, может 1-2 месяца проработать, а потом вдруг все зависнет. Намеренно воспроизвести практически невозможно, а при возникновении, приводит к неприятным последствиям
P.S. такие эффекты возникают при обращении к базе прямыми sql- запросами
__________________
Isn't it nice when things just work?

Последний раз редактировалось macklakov; 09.02.2006 в 16:52.
Старый 09.02.2006, 16:56   #110  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
Цитата:
Сообщение от macklakov
2Recoilme на рабочей базе пробовал? Дело в том, что таблица очень горячая, и могут возникнуть блокировки. Причем происходят случайным образом, может 1-2 месяца проработать, а потом вдруг все зависнет. Намеренно воспроизвести практически невозможно, а при возникновении, приводит к неприятным последствиям
На боевой прогонял раз 10 пока отлаживал... Правда сами пользуемся отчетами на хранилище, чего и другим желаю
С другой стороны, имхо, насчет блокировок - инвентсам "горячей" на порядок, однако аксапта совсем не стесняется его "пользовать во всех позах"
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/
Старый 09.02.2006, 16:59   #111  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,242 / 980 (37) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от Recoilme
На боевой прогонял раз 10 пока отлаживал... Правда сами пользуемся отчетами на хранилище, чего и другим желаю
С другой стороны, имхо, насчет блокировок - инвентсам "горячей" на порядок, однако аксапта совсем не стесняется его "пользовать во всех позах"
Да, но она это делает через свои интерфейсы, а не через прямой запрос
__________________
Isn't it nice when things just work?
Старый 09.02.2006, 17:08   #112  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
Цитата:
Сообщение от macklakov
Да, но она это делает через свои интерфейсы, а не через прямой запрос
Ок, если когото эти запросы "задедлочат" - черкните плз, снесу проект чтоб не вредить людям

ЗЫ: через её интерфейсы у меня ни фига не получилось, потому что:
PHP код:
//Доступ к базе осуществляется напрямую всвязи с чрезвычайно низким быстродействием Axaptы на сложных запросах
//потому что аксапта добавляет хинты например OPTION(FAST(), которые приводят
//построению оптимизатором неверных планов, и как следствие полному зависанию,
//а как заставить аксапту не умничать в рамках отдельного запроса - мне неизвестно : 
ЗЫЗЫ: Очень грамотно и подробно на эту тему уже давно расписали хорошие люди AndyD и Владимир Максимов:
http://axforum.info/forums/showthrea...ghlight=OPTION
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/

Последний раз редактировалось Recoilme; 09.02.2006 в 17:20.
Старый 09.02.2006, 17:20   #113  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от Recoilme
//а как заставить аксапту не умничать в рамках отдельного запроса - мне неизвестно :
А чем это не устраивает?
Управление опциями SQL запроса
__________________
Axapta v.3.0 sp5 kr2
Старый 09.02.2006, 17:23   #114  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
Цитата:
Сообщение от AndyD
А чем это не устраивает?
Управление опциями SQL запроса
спасибо, читал. Настораживает :
Цитата:
можно выключить и включить для всего соединения
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/
Старый 09.02.2006, 19:36   #115  
LCh is offline
LCh
Участник
 
104 / 10 (1) +
Регистрация: 13.11.2002
Адрес: Санкт-Петербург
Вот вы странный такой (я к создателю темы обращаюсь). У вас когда двести карандашей, вам обязательно их все из коробки доставать и держать в руках, чтобы в любой момент нужным чертить? Или всё-таки достаёте по мере надобности?

Как с формой в наличии. Любят некоторые. Вставлять её куда попало. Да ещё в разрезе партий смотреть на 40 тысяч номенклатур. Прокрутив десяток "окон" - "М-м-м-м. Надо же, на складе Х у меня партия 23423 номенклатуры 40393". Очень интересно. Не более.

Никогда пользователь не сможет работать с количеством данных больше строк 5-10ти. Это простой закон it-эргономики. Вы это можете понять, я надеюсь. А пользователь - вряд ли, он не айтишник. Если он говорит что ему требуется смотреть на "вчера" и "сегодня" и "неделю назад" это значит что просто несвоевременно идут складские операции и\или в биз.-процессах бардак. Или у него в голове бардак. Но кому приятно такое автоматизировать?

Ахапка - система онлайн. Остатки сейчас. Движения сейчас. Данные - сейчас.

Для статистического анализа используются кубики. Для них - запросов писать не переписать. С какими угодно условиями. Легко и быстро. Не занимайтесь фигнёй. Или отучите от этого ваших постановщиков.
Старый 10.02.2006, 08:38   #116  
Bars is offline
Bars
Участник
Аватар для Bars
 
312 / 14 (1) ++
Регистрация: 04.03.2005
Адрес: Москва
Цитата:
Сообщение от LCh
Вот вы странный такой (я к создателю темы обращаюсь).
Ахапка - система онлайн. Остатки сейчас. Движения сейчас. Данные - сейчас.

....
Для статистического анализа используются кубики. Для них - запросов писать не переписать. С какими угодно условиями. Легко и быстро. Не занимайтесь фигнёй. Или отучите от этого ваших постановщиков.
это я вопрос задавал.
Странный, ну наверно). Когда стану постановщиком задач неприменно воспользуюсь вашими советами по поводу идеологии работы в Аксапте, с коей я впрочем полностью согласен.
Но:
1. Задача поставлена и решать ее надо.
2. Оборотка нужна была только в разрезе склада и только по одному выбранному товару.
3. Задача мною решена, причем оказалось что с использованием стандартных классов работает быстрее, чем с использованием запросов. Спасибо mazzy с классами разобрался подробнее.

и наконец, я бы рад перестроить бизнес процессы некоторые и объяснить что у Аксапты своя идеология, но реалии таковы, что на данном этапе своего развития я разработчик, а не консалтер или аналитик, и не постановщик задач.
Старый 10.02.2006, 09:17   #117  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Bars
Спасибо mazzy с классами разобрался подробнее.
На самом деле, спасибо стоит адресовать kvan'у и slava09.
__________________
полезное на axForum, github, vk, coub.
Старый 10.02.2006, 09:31   #118  
Bars is offline
Bars
Участник
Аватар для Bars
 
312 / 14 (1) ++
Регистрация: 04.03.2005
Адрес: Москва
Цитата:
Сообщение от mazzy
На самом деле, спасибо стоит адресовать kvan'у и slava09.
Спасибо kvan'у и slava09
Старый 14.02.2006, 09:44   #119  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Цитата:
Сообщение от Recoilme
Вот...
В результате всех этих жутких обсуждений - написал крутую хрень из серии уголок проктолога

Оборотная ведомость по товарам. Работает быстро. Только для MS SQL.
слегка модернизировал проект от Recoilme для построения оборотки одним SQL запросом и пр.
Вложения
Тип файла: xpo Iq_soft_TuneOver_v2.xpo (17.6 Кб, 151 просмотров)
Старый 15.02.2006, 20:35   #120  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Вкрался баг подмеченный Recoilme, некорректно работало определение наличия поля DataAreaId (компания) в таблицах, исправленный проектик прилагается.
Вложения
Тип файла: xpo Iq_soft_TuneOver_v2.xpo (18.5 Кб, 179 просмотров)
За это сообщение автора поблагодарили: Recoilme (3).
Теги
остатки, ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Остатки на дату InventSumDatePhysical Raven Melancholic DAX: Программирование 6 10.05.2007 15:29
Остатки товара на определенную дату Lucky13 DAX: Программирование 7 27.03.2007 14:27
Скачут остатки Def DAX: Программирование 3 03.05.2006 14:27
Цена на дату создания заказа/закупки George Nordic DAX: Функционал 2 29.06.2005 15:56
Остатки dog37 DAX: Программирование 6 02.06.2005 11:25

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

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

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