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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.04.2010, 09:29   #1  
kalex_a is offline
kalex_a
Участник
Аватар для kalex_a
Самостоятельные клиенты AX
MCBMSS
 
160 / 19 (1) ++
Регистрация: 26.11.2007
Адрес: Казахстан
Проблема.База данных SQL обнаружила ошибку.
Здравствуйте, пересмотрел много тем но так ничего подходящего не нашел.Подскажите в чем может быть проблема.Запрос не выполняется:
X++:
select firstonly inventDim 
    where inventDim.InventLocationId == 'Склад 1' 
 join InventSum 
    where InventSum.InventDimId == inventDim.inventDimId &&
     InventSum.itemId == 'Item 1' &&
     (InventSum.PostedQty + 
     InventSum.Received - 
     InventSum.Deducted + 
     InventSum.Registered - 
     InventSum.Picked) >= 20;
выдает ошибку: "Невозможно выбрать запись в Складские аналитики (InventDim). Номер аналитики.: .База данных SQL обнаружила ошибку"
Хотя на 2 других приложениях срабатывает нормально.
__________________
Лучше сделать и жалеть, чем жалеть что не сделал
Старый 20.04.2010, 09:51   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Было нечто подобное.
Как выяснилось кусок кода
X++:
&& InventTrans.costamountPosted > 0 - InventTrans.costamountadjustment
выдавал такую ошибку.

На оракл он уходил так :
X++:
AND (COSTAMOUNTPOSTED>(:IN5-COSTAMOUNTADJUSTMENT))))
Причем когда включил литералы, то обнаружил что уходит вот такой запрос !!!
X++:
AND (COSTAMOUNTPOSTED>(7.<00373231303336E50-COSTAMOUNTADJUSTMENT)))
или
X++:
AND (COSTAMOUNTPOSTED>(7.;00323438363336E50-COSTAMOUNTADJUSTMENT)))
т.е. константа 0 парсером преобразовывалась в не совсем 0

Самое неприятное, что такое происходило не всегда, а например на 3-м или 5-м вызове запроса. (и это было уже совсем подстава)
т.е. нередко уходил вполне нормальный запрос с нулем, а не странной константой "7.<00373231303336E50"
Точного рецепта как это побороть не дам - начисто в голове забылось
По-моему я шаманил с типом константы в коде, т.е. вместо 0 писал 0.0 а также могло влиять то с какого месте от знака неравенства стоит операнд.
Старый 20.04.2010, 09:52   #3  
nix0root is offline
nix0root
Участник
 
67 / 16 (1) ++
Регистрация: 17.03.2009
Адрес: МО
У меня работает
BD ORACLE, AX 4
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.JPG
Просмотров: 307
Размер:	43.0 Кб
ID:	5714  
__________________
В подводной охоте главное вдох ...
Старый 20.04.2010, 09:54   #4  
nix0root is offline
nix0root
Участник
 
67 / 16 (1) ++
Регистрация: 17.03.2009
Адрес: МО
А какая база у Вас?
__________________
В подводной охоте главное вдох ...
Старый 20.04.2010, 10:09   #5  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Ax 3.0 KR3 appl SP5
Oracle 10g


Повторюсь - глюк возникает не гарантировано, а на каком-то, как правило, не первом вызове.

При вызове без литералов это приводило к ошибке
ORA-01722: invalid number
а с литералами к
ORA-00911: invalid character
или
ORA-00907: missing right parenthesis
(видимо зависело от константы которую парсер подставлял)

Последний раз редактировалось Logger; 20.04.2010 в 10:15.
Старый 20.04.2010, 10:24   #6  
kalex_a is offline
kalex_a
Участник
Аватар для kalex_a
Самостоятельные клиенты AX
MCBMSS
 
160 / 19 (1) ++
Регистрация: 26.11.2007
Адрес: Казахстан
У нас все 3 приложения AX 4.0 на MS SQL 2005, на 2 работает нормально а на одном никак ((
__________________
Лучше сделать и жалеть, чем жалеть что не сделал
Старый 20.04.2010, 10:25   #7  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Ну для начала в коде литералы поставьте и посмотрите что уходит в запросе. Плюс я бы убедился что приложение одно и то же, что кеши не сказываются и все такое.
Старый 20.04.2010, 10:37   #8  
hated8 is offline
hated8
Участник
Аватар для hated8
Злыдни
 
133 / 18 (1) ++
Регистрация: 27.06.2008
Как вариант, возможно в этой базе, какие-то кривые значения, в таблице....
У меня недавно был косяк, тоже sql валил ошибку из за того что в таблице слишком большие значения поля PostedValue.

Откройте таблицу в ручную и посмотрите что она должна вам вернуть по такому запросу....
__________________
Что сломалось не знаем, но уже немного подчинили...

Последний раз редактировалось hated8; 20.04.2010 в 10:53.
Старый 20.04.2010, 10:40   #9  
nix0root is offline
nix0root
Участник
 
67 / 16 (1) ++
Регистрация: 17.03.2009
Адрес: МО
N повторов дали один и тот же положительный результат.
Возможно настройки разделителя целой и дробной частей.
Или действительно кеш.
__________________
В подводной охоте главное вдох ...
Старый 20.04.2010, 10:45   #10  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Я стараюсь избегать вычисляемых выражений в запросах на X++.

Лучше переписать так:
X++:
while select inventDim 
    where inventDim.InventLocationId == 'Склад 1' 
 join InventSum 
    where InventSum.InventDimId == inventDim.inventDimId &&
     InventSum.itemId == 'Item 1'
{
    if ((InventSum.PostedQty + 
     InventSum.Received - 
     InventSum.Deducted + 
     InventSum.Registered - 
     InventSum.Picked) >= 20) break;
}
Старый 20.04.2010, 10:48   #11  
kalex_a is offline
kalex_a
Участник
Аватар для kalex_a
Самостоятельные клиенты AX
MCBMSS
 
160 / 19 (1) ++
Регистрация: 26.11.2007
Адрес: Казахстан
Цитата:
Сообщение от Ace of Database Посмотреть сообщение
Я стараюсь избегать вычисляемых выражений в запросах на X++.

Лучше переписать так:
X++:
while select inventDim 
    where inventDim.InventLocationId == 'Склад 1' 
 join InventSum 
    where InventSum.InventDimId == inventDim.inventDimId &&
     InventSum.itemId == 'Item 1'
{
    if ((InventSum.PostedQty + 
     InventSum.Received - 
     InventSum.Deducted + 
     InventSum.Registered - 
     InventSum.Picked) >= 20) break;
}
Да но по времени это разве не больше будет?
__________________
Лучше сделать и жалеть, чем жалеть что не сделал

Последний раз редактировалось kalex_a; 20.04.2010 в 10:52.
Старый 20.04.2010, 10:55   #12  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Цитата:
Да но по времени и по кол-ву запросов это разве не больше будет?
для данного случая быстродействие останется хорошим. Я бы еще InventSum вынес наверх джойна, т.к. инвентсумов с заданной номенклатурой меньше, чем инвентдимов с данным складом. Но это не критично
Старый 20.04.2010, 11:17   #13  
Bober is offline
Bober
Участник
 
311 / 104 (4) +++++
Регистрация: 29.05.2007
А замена join на exists join не поможет? Зачем вам именно join, если ищете firstonly.
Старый 20.04.2010, 18:22   #14  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Вообще-то, в стандартном функционале

(postedQty + received - deducted + registered - picked) == physicalInvent

Так что, в данном конкретном случае можно писать без вычислений. Просто

InventSum.physicalInvent > 20
Старый 20.04.2010, 19:11   #15  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
А не лучше ли в подобных случаях какой-нибудь класс использовать, типа InventOnHand или подобный?

С Уважением,
Георгий
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Проблема с SQL запросом kalex_a DAX: Программирование 15 31.03.2010 11:28
Проблема некорректного вывода данных в EXCEL Dark Light DAX: Программирование 4 30.06.2009 14:43
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00
Проблема - не получается редактировать форму shestakov DAX: Программирование 1 18.12.2001 13:32
Проблема - неправильное отображение данных shestakov DAX: Программирование 2 18.12.2001 07:36

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

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

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