x ++ скрипт, который не возвращает правильное количество - PullRequest
0 голосов
/ 27 мая 2019

У меня есть сценарий x ++, который предназначен для подсчета записей из запроса на выборку, а затем будет обновлен.

Это оригинальный вопрос для справки: преобразование SQL-запроса с помощью Join в сценарии X ++ Dynamics AX

Изначально у меня есть аналог SQL-запроса, и в результате получается 50 строк / записей, когда я конвертирую его в X ++, он не считает и не извлекает одинаковое количество записей,

Вот сценарий x ++

static void Job(Args _args)
{

    Table1 table1;
    Table2 table2;
    Table3 table3;
    Table4 table4;
    Table5 table5;
    int i = 0;
    while select forUpdate table1  
       join table2 where table1.field1 == table2.field1 
       join table3 where table1.field2 == table3.field2
       join table4 where table3.field3 == table4.field3
       join table5 where table3.category == table5.recid
       && table1.location  == 'asia' && table2.modtye == 2
       && table3.discount == 'sample' 
       && table4.name ==  'hello' 
       &&(table5.name == 'one' || table5.name == 'two' || table5.name == 'three')                
    {    
            if (table1)    
            {
                 i = i + 1;    
            }    
    }    
    info(strfmt("Total : %1",i));    
}

Помощь Pls, где я ошибся, если подумать, что именно с этой частью

if (table1)

Я также попытался обрезать коды дознать, где возникает проблема,

 while select forUpdate table1  
           join table2 where table1.field1 == table2.field1 
           && table1.location  == 'asia' && table2.modtye == 2

Эта часть уже не возвращает результат ... когда я включаю

 && table1.location  == 'asia' && table2.modtye == 2

Так что я думаю, проблема есть, но что не такс кодом?


Я основал свои коды на самом деле из этой учебной ссылки

https://community.dynamics.com/ax/b/dynamicsaxtipoftheday/archive/2014/09/05/quickly-update-data-through-x-scripts

1 Ответ

1 голос
/ 27 мая 2019

Я предлагаю простое объяснение, может быть, SQL возвращает строки из нескольких компаний или разделов?
AX по умолчанию возвращает строки для текущего раздела и только для компании curext().

Если вы используетеПараметр crosscompany для выбора, который будет сканировать несколько компаний:

while select crosscompany table1 ...

Вам не нужно проверять, найдена ли таблица1, если она не найдена, она не войдет в цикл.

Также, если ваша единственная цель - подсчитать количество записей, которые расточительно считать вручную, один выбор сделает:

select firstOnly /*crosscompany*/ count(RecId) from table1  
   exists join table2 where table1.field1 == table2.field1 
   exists join table3 where table1.field2 == table3.field2
   exists join table4 where table3.field3 == table4.field3
   exists join table5 where table3.category == table5.recid
     && table1.location  == 'asia' && table2.modtye == 2
     && table3.discount == 'sample' 
     && table4.name ==  'hello' 
     &&(table5.name == 'one' || table5.name == 'two' || table5.name == 'three');
info(strfmt("Total : %1", table1.RecId));
...