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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.07.2002, 12:12   #1  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Реализация запроса в Аксапте
Добрый день.

Необходимо чтобы проверялось, есть ли позиции запасов по складам, для которых остаток по складу меньше чем число, проставленное в поле "минимум" (Номенклатурные единицы -> Покрытие).

На SQL Server данный запрос выглядит следующим образом:

PHP код:
select count(* )
from InventSumInventItemLocation
where InventSum
.ItemId InventItemLocation.ItemId
    
and
    
InventItemLocation.MinInventOnHand >= InventSum.availPhysical
    
and
    
InventItemLocation.MinInventOnHand<>
Пробую повторить то же в Аксапте. Например так:

PHP код:
    InventItemLocation inventitemlocation;
    
int cnt;
    ;

    
super();

    
cnt =  str2int(
            (
select count(ItemIdfrom InventSum where
                
(  (InventSum.ItemId == InventItemLocation.ItemId) &&
                   (
InventItemLocation.MinInventOnHand >= InventSum.availPhysical) &&
                   (
InventItemlocation.MinInventOnHand != 0)
                 )
             ).
ItemId);

       print 
int2str(cnt); 
Или так:

PHP код:
    InventSum InventSum;
    
int cnt;
    ;

    
super();

    
cnt =  str2int(
            (
select count(ItemIdfrom InventItemLocation  where
                
(  (InventSum.ItemId == InventItemLocation.ItemId) &&
                   (
InventItemLocation.MinInventOnHand >= InventSum.availPhysical) &&
                   (
InventItemlocation.MinInventOnHand != 0)
                 )
             ).
ItemId);

       print 
int2str(cnt); 
И в первом и во втором случае Аксапта возвращает ноль, хотя записи, удовлетворяющие данным условиям точно есть.

Следующий код вообще не компилируется:

PHP код:
    InventSum InventSum;
    
int cnt;
    ;

    
super();

    
cnt =  str2int(
            (
select count(ItemIdfrom InventItemLocation  join InventSum where
                
(  (InventSum.ItemId == InventItemLocation.ItemId) &&
                   (
InventItemLocation.MinInventOnHand >= InventSum.availPhysical) &&
                   (
InventItemlocation.MinInventOnHand != 0)
                 )
             ).
ItemId);

       print 
int2str(cnt); 
Как реализовать этот запрос в Аксапте ?
Старый 11.07.2002, 18:55   #2  
undercover is offline
undercover
Участник
 
8 / 10 (1) +
Регистрация: 22.12.2001
Talking
Можно попробовать вместо && написать || :
InventItemLocation.MinInventOnHand >= InventSum.availPhysical ||
InventItemlocation.MinInventOnHand != 0;
__________________
---------
underCover
Старый 11.07.2002, 20:44   #3  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Здравствуйте!
Во-первых, для подсчета количества записей нужно агрегатную функцию применять к числовому полю (например, к RecID).
Во-вторых, две таблицы в аксаптовском запросе нужно связывать join`ом.
Итого, запрос должен иметь примерно такой вид (если я ничего не перепутал ) :

PHP код:
InventItemLocation inventItemLocation ;
InventSum inventSum;
;
select count(RecIdfrom inventSum
    join inventItemLocation  where InventSum
.ItemId == inventItemLocation.ItemId &&
    
InventItemLocation.MinInventOnHand >= InventSum.availPhysical &&
    
InventItemlocation.MinInventOnHand;
print 
inventSum.RecId
__________________
Андрей.
Старый 12.07.2002, 11:03   #4  
SSA is offline
SSA
Участник
 
20 / 12 (1) ++
Регистрация: 21.06.2002
Адрес: Балашиха
Для подсчета значений можно использовать агрегатную функцию примененную к текстовому полю. Только если это поле не участвует в группировке.

Попробуй так запрос

PHP код:
while select from InventItemLocation
           where inventItemLocation
.MinInventOnHand != 0.0
           join 
from InventSum
           where InventSum
.ItemId == inventItemLocation.ItemId &&
                       
InventItemLocation.MinInventOnHand >= InventSum.availPhysical
{
      
// ......

Этот запрос по-моему не совсем верен т.к. в таблице InventSum уникальный индекс создан по полям ItemId, ConfigId и InventDimId.

Следующий запрос выводит список номенклатуры, которая удовлетворяет нужным требованиям.
PHP код:
While Select sum(availPhysicalfrom inventSum
      group by ItemId
      join 
from InventItemLocation
      where inventItemLocation
.ItemId == inventSum.ItemId &&
            
inventItemLocation.MinInventOnHand != 0.0   &&
            
inventItemLocation.MinInventOnHand >= inventSum.availPhysical
{
    
warning(inventSum.ItemId);

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Изменить план выполнения запроса Sequel DAX: Администрирование 2 29.05.2008 15:46
Система оповещений в Аксапте (события в Аксапте) raunio DAX: Прочие вопросы 1 29.09.2005 15:44
Размышления на тему “Системы контроля версий в Аксапте”. Андре DAX: База знаний и проекты 31 07.02.2005 12:29
Реализация лизинговой деятельности компании в Аксапте ... 2b4fITin DAX: Функционал 4 19.09.2003 19:00
Реализация замен и аналогов компонентов в Аксапте tav DAX: Функционал 16 01.07.2003 11:10

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

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

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