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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.02.2012, 03:45   #1  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Ах2009 Запрос - ОСВ по складу
В одной из компаний не видятся проводки в таблице InventSettlenment c типом корректировка при формировании отчета Управление зарасами\проводка\Оборотная ведомость по складу.

Что интересно:
В классе InventSumDateFinancialCalc_RU в методе calcTransFinancialSettlements считаются корректировки.
Видит он это из
[s] \Classes\InventSumDateFinancialCalc_RU\calcItem 13
[s] \Classes\InventSumDateFinancialCalc_RU\calcItems 16
[s] \Classes\InventSumDateFinancialCalc_RU\run 10
[s] \Classes\InventTurnoverReport_RU\calcTrans 3
[s] \Classes\InventTurnoverReport_RU\run 11
[s] \Classes\InventTurnoverReport_RU\main 8
[s] \Classes\MenuFunction\runServer
[c] \Classes\FormFunctionButtonControl\Clicked

Беру оборотку. Теретически в нее должен попасть персчет склада с типом Разноска в сальдо на начало периода (проблема анлогичная и с оборотами).. Не попадает.

При этом если убрать условие
settlement.SettleModel != InventSettleModel::PhysicalValue
Начинает попадать. Только вопрос в том, что проводка итак Корректировка.

Оставляю условие SettleModel
и комментирую условие на начальную дату, проводка попадает.
При этом попробовала добавить в группировку SettleModel. Проводка действительно Корректировка и все должно быть хорошо.


Может есть какие-то дополнительные настройки?

Последний раз редактировалось Arahnid; 16.02.2012 в 03:52.
Старый 16.02.2012, 08:33   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Arahnid Посмотреть сообщение
если убрать условие
settlement.SettleModel != InventSettleModel::PhysicalValue
Начинает попадать. Только вопрос в том, что проводка итак Корректировка.

Оставляю условие SettleModel
и комментирую условие на начальную дату, проводка попадает.
При этом попробовала добавить в группировку SettleModel. Проводка действительно Корректировка и все должно быть хорошо.
Возможно где-то анализируются уже агрегированные данные. (допустим если значение ноль, то в отчёт не выводить). Как только вы меняете условие отбора записей для суммирования - часть слогаемых отсекается, сумма становится не нулевой и попадает в отчёт.

Когда вы добавляли группировку по SettleModel случайно не появлялись отрицательные значения, которые могли бы объяснить возможное обнуления суммы? Хотя проверка на ноль - это только гипотеза, в реальности там может быть что-то ещё.
Старый 16.02.2012, 09:03   #3  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Проверка на сумму там есть, но я вообще в этом цикле отключала все условия.
Оставляла 3: номенклатура, тип движения и начальная дата. Эффект тот же.

Отключила условие на
settlement.InventTransCurrency_RU == InventTransCurrency_RU::PrimaryCur все в том же классе InventSumDateFinancialCalc_RU в методе calcTransFinancialSettlements . Оставила остальные условия и заработало.
InventTransCurrency_RU - эту колонку вижу в таблице inventsettlement. Делаю открыть таблицу черз аксапту - нет.
Открываю СКУЛЬ. Смотрю колонки - нет такой. Глобальная компиляция не помогла.
Что это за реквизит?
Почему только в одной компании такая проблема не ясно.

Двух валютный склад отключен.

Последний раз редактировалось Arahnid; 16.02.2012 в 09:59.
Старый 16.02.2012, 10:09   #4  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от Arahnid Посмотреть сообщение
Двух валютный склад отключен.
Именно поэтому - это поле как раз сидит на конфигурационном ключе двухвалютного склада.
Старый 16.02.2012, 10:12   #5  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Так куда посмотреть. Проводки в inventsettlement в двух компаниях абсолютно идентичны по заполняемости реквизитов. Но в одной работает, а в другой нет..
Старый 16.02.2012, 11:27   #6  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Ну, собственно, в подобных случаях везде в коде делают проверку на тот факт, что необходимый ключ включен. Вероятно, именно в данном месте это сделать забыли. Надо просто добавить эту проверку примерно так

X++:
Boolean isEnabledKey = global::isConfigurationkeyEnabled(configurationkeynum(InventClosingSecCur_RU));

while select ...
...
&& (! isEnabledKey || settlement.InventTransCurrency_RU == InventTransCurrency_RU::PrimaryCur)
...

Хотя обычно подобная проверка выполняется при конструировании Query и это является признаком того, надо ли создавать дополнительный Range или нет. Для прямого select не вполне понятно как это сработает.

PS: Если поле таблицы есть в AOT, но физически его не существует, то это явное указание на то, что отключен соответствующий ключ.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 16.02.2012, 15:13   #7  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Не помогло условие на ключ.
Мне тогда проще строку комментировать, т.к. двухвалютного склада у нас нет и не будет
Старый 16.02.2012, 18:13   #8  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
На всякий случай, а что, собственно, возвращает

X++:
    print global::isConfigurationkeyEnabled(configurationkeynum(InventClosingSecCur_RU));
    pause;

В смысле, ключ действительно отключен? Имею в виду, что по этому поводу "думает" Axapta именно в этой компании.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 27.04.2012, 22:34   #9  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
А я в методе calcTransPhysicalSettlements класса InventSumDateFinancialCalc_RU наткнулся на то, что некорректно работала вот эта часть запроса (27-я строка в методе) :
X++:
&& positive * settlement.CostAmountAdjustment  > 0
Записи в InventSettlement есть, но не возвращаются запросом (заметил это на записях с отрицательным CostAmountAdjustment). Вставил вместо такого сложного условия более простое и понятное (заодно от лишней переменной избавился) :
X++:
&& ( ( _positive && settlement.CostAmountAdjustment  > 0)
  || ( !_positive && settlement.CostAmountAdjustment  < 0 ))
и запрос заработал корректно.
На всякий случай такое же изменение вставил и в метод calcTransFinancialSettlements.
__________________
Дмитрий
Старый 27.04.2012, 22:38   #10  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Damn, Аксапта не всегда правильно определяет порядок выполнения операторов. Возможно, в стандартном коде достаточно было просто расставить скобки.
Старый 27.04.2012, 22:42   #11  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Цитата:
Сообщение от Zabr Посмотреть сообщение
Damn, Аксапта не всегда правильно определяет порядок выполнения операторов. Возможно, в стандартном коде достаточно было просто расставить скобки.
Зная такое непредсказуемое поведение аксапты я перестраховался и на всякий случай решил в этом месте даже от умножения избавиться. От греха, так сказать.
Ну то есть не "даже избавиться", а просто не напрягать аксапту таким сложным арифметическим действием в условиях запроса. И заменить его на понятные ей "скобки + логические операторы".
__________________
Дмитрий

Последний раз редактировалось Damn; 27.04.2012 в 22:48.
Старый 28.04.2012, 08:50   #12  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Заглянул в Hotfix Rollup 8. Там это место не поправлено.
__________________
Дмитрий
Теги
ax2009, select

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
ГФО, использование "Запрос - функция" в ГФО AnGor DAX: Функционал 4 13.05.2011 23:43
Ошибка в ОСВ по клиентам/поставщикам CDR DAX: Функционал 6 04.05.2010 17:22
Оборотно-Сальдовая ведомость по складу vazerdim DAX: Функционал 8 12.02.2010 15:39
Если в запросе у первой таблицы CacheLookup = None, то запрос идет без NOLOCK raz DAX: Программирование 1 04.02.2010 16:12
передача параметров в запрос while select tolstjak DAX: Программирование 13 15.02.2009 19:39

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

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

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