11.01.2008, 11:01 | #1 |
Участник
|
Отчет "Запасы в наличии"
Приветствую всех. Решил тут немного модифицировать вышеупомянутый отчет и столкнулся с необъяснымыми явлениями.
По порядку: AX 3.0, Управление запасами \ Отчеты \ В наличии \ Запасы в наличии Из Query репорта убираю таблицу InventTableModule(хотя и с ней пробовал - все равно не работало). Запускаю отчет с параметрами - получается такой вот запрос: Код: SELECT A.ITEMNAME,SUM(B.POSTEDQTY),SUM(B.POSTEDVALUE),SUM(B.PHYSICALVALUE),SUM(B.DEDUCTED),SUM(B.REGISTERED),SUM(B.RECEIVED),SUM(B.PICKED),SUM(B.RESERVPHYSICAL),SUM(B.RESERVORDERED),SUM(B.ONORDER),SUM(B.ORDERED),SUM(B.ARRIVED),SUM(B.QUOTATIONRECEIPT),SUM(B.QUOTATIONISSUE),SUM(B.PHYSICALINVENT),SUM(B.POSTEDVALUESECCUR_RU),SUM(B.PHYSICALVALUESECCUR_RU),SUM(B.AVAILPHYSICAL),SUM(B.AVAILORDERED),B.ITEMID,C.INVENTCOLORID FROM INVENTTABLE A WITH( NOLOCK), INVENTSUM B WITH( NOLOCK), INVENTDIM C WITH( NOLOCK) WHERE ((A.DATAAREAID='vir') AND ((A.ITEMID LIKE '000-02%' ESCAPE '\' ) AND (A.INVENTGROUPID1='Отделка_1'))) AND ((B.DATAAREAID='vir') AND (A.ITEMID=B.ITEMID)) AND ((C.DATAAREAID='vir') AND ((C.INVENTLOCATIONID LIKE 'arh%' ESCAPE '\' ) AND (B.INVENTDIMID=C.INVENTDIMID))) GROUP BY A.ITEMNAME,B.ITEMID,C.INVENTCOLORID ORDER BY A.ITEMNAME,B.ITEMID,C.INVENTCOLORID OPTION(FAST 6) Код: SELECT A.ITEMNAME,SUM(B.POSTEDQTY),SUM(B.POSTEDVALUE),SUM(B.PHYSICALVALUE),SUM(B.DEDUCTED),SUM(B.REGISTERED),SUM(B.RECEIVED),SUM(B.PICKED),SUM(B.RESERVPHYSICAL),SUM(B.RESERVORDERED),SUM(B.ONORDER),SUM(B.ORDERED),SUM(B.ARRIVED),SUM(B.QUOTATIONRECEIPT),SUM(B.QUOTATIONISSUE),SUM(B.PHYSICALINVENT),SUM(B.POSTEDVALUESECCUR_RU),SUM(B.PHYSICALVALUESECCUR_RU),SUM(B.AVAILPHYSICAL),SUM(B.AVAILORDERED),B.ITEMID,C.INVENTCOLORID FROM INVENTTABLE A WITH( NOLOCK), INVENTSUM B WITH( NOLOCK), INVENTDIM C WITH( NOLOCK), INVENTLOCATION D WITH( NOLOCK) WHERE ((A.DATAAREAID='vir') AND ((A.ITEMID LIKE '000-02%' ESCAPE '\' ) AND (A.INVENTGROUPID1='Отделка_1'))) AND ((B.DATAAREAID='vir') AND (A.ITEMID=B.ITEMID)) AND ((C.DATAAREAID='vir') AND ((C.INVENTLOCATIONID LIKE 'arh%' ESCAPE '\' ) AND (B.INVENTDIMID=C.INVENTDIMID))) AND ((D.DATAAREAID='vir') AND (C.INVENTLOCATIONID=D.INVENTLOCATIONID)) GROUP BY A.ITEMNAME,B.ITEMID,C.INVENTCOLORID ORDER BY A.ITEMNAME,B.ITEMID,C.INVENTCOLORID OPTION(FAST 5) |
|
11.01.2008, 11:17 | #2 |
Moderator
|
Ну, первое, что приходит в голову для случая, если в запрос добавили таблицу, а строк стало возвращаться меньше - это то, что не все значения, имеющиеся в "старых" таблицах встречаются в последней добавленной таблице.
Возможно, у вас не все C.INVENTLOCATIONID встречаются в D.INVENTLOCATIONID (см. условие C.INVENTLOCATIONID=D.INVENTLOCATIONID ). |
|
11.01.2008, 11:46 | #3 |
Участник
|
да в том-то и дело, что с этим все в порядке.....
|
|
11.01.2008, 12:03 | #4 |
Участник
|
Разное число строк получается в Аксапте или при выполнении запросов напрямую на SQL сервере ?
|
|
11.01.2008, 14:16 | #5 |
Участник
|
только в Аксапте, на SQL все ок
|
|
11.01.2008, 15:19 | #6 |
Участник
|
Согласен с Gustav
Да, конечно. Раньше у вас было больше складов в inventLocation. Старые склады попали в inventDim. Потом какая то "барабашка" удалила записи в InventLocation. Это значит, что не все InventTrans и InventDim попадают в ваш новый отчет. Сделайте запрос X++: while select inventdim notexists join inventlocation where inventdim.inventlocationid == inventlocation.inventlocationid { info(inventdim.inventlocationid); } |
|
11.01.2008, 15:20 | #7 |
Участник
|
Что значит термин "все в порядке" применительно к таблицам с данными?
|
|
11.01.2008, 15:31 | #8 |
Участник
|
2mazzy: такой запрос я делал, в отчете, грубо говоря, всего 2 склада выводится и они оба есть в таблице inventlocation, это я и имел ввиду, говоря, что все в порядке
тем более, как я выше написал, на SQL запросы отрабатываются корректно и возвращают одинаковое количество строк. Грустно вопщем |
|
11.01.2008, 15:57 | #9 |
Участник
|
Цитата:
Еще одно направление для поиска "барабашки". Проверьте, не содержат ли коды складов специальные символы. См. пункт "Рекомендация 1" здесь http://axapta.mazzy.ru/lib/search/ |
|
11.01.2008, 16:16 | #10 |
Участник
|
Встречалась несколько раз такая "недокументированная особенность", лечилась шаманскими плясками или полным переписыванием кода. Для первого танца можно почистить табличку SysLastValue или попробовать запустить под другим пользователем. Далее поиграться с порядком добавления таблиц в query.
|
|
11.01.2008, 17:29 | #11 |
Участник
|
|
|
16.01.2008, 14:25 | #12 |
Участник
|
Цитата:
Сообщение от mazzy
А вам говорили про InventDim и про то, что он содержит больше складов, чем есть в вашем InventLocation.
Еще одно направление для поиска "барабашки". Проверьте, не содержат ли коды складов специальные символы. См. пункт "Рекомендация 1" здесь http://axapta.mazzy.ru/lib/search/ По поводу спец символов тоже проверил, склады имеют название в виде "буквы_буквы" |
|
16.01.2008, 14:27 | #13 |
Участник
|
|
|
16.01.2008, 14:43 | #14 |
Участник
|
Может дело в том, что InventLocation добавлен, но группировок по его полям нет (кстати, зачем его тогда добавлять)?
|
|
16.01.2008, 15:08 | #15 |
Участник
|
Цитата:
Насчет зачем добавлять: на самом деле запрос мне надо будет строить еще более сложный, просто начал с простого(с добавления одной таблицы без всяких условий) - и не работает, тут уж не до сложного |
|
16.01.2008, 15:27 | #16 |
Участник
|
А FetchMode на добавляемой в Query таблице какой выставлен?
|
|
16.01.2008, 15:34 | #17 |
Участник
|
Не пробовали посмотреть какие строчки не попадают в новый вариант?
|
|
16.01.2008, 15:50 | #18 |
Moderator
|
|
|
16.01.2008, 16:40 | #19 |
Участник
|
Попробуйте отключить CacheLookup на таблице InventLocation. А заодно и на всех других, входящих в запрос.
|
|
17.01.2008, 07:37 | #20 |
Участник
|
Цитата:
Смотрел. Самое интересное, что если указать конкретный код номенклатуры, который не попадает, то отчет формируется по этой номенклатуре корректно. Выставлен 1:n, менял на 1:1 - ничего не изменилось Состав строк постоянен, даже при изменении сотрировки |
|