不 return 正确计数的 x++ 脚本
x++ script that do not return correct count
我有一个 x++ 脚本,旨在计算来自 select 查询的记录,并在稍后更新。
这是原题供参考:
最初,我有一个 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));
}
请帮忙,我哪里错了它认为是这部分
if (table1)
我也试过整理代码以了解问题出在哪里,
while select forUpdate table1
join table2 where table1.field1 == table2.field1
&& table1.location == 'asia' && table2.modtye == 2
这部分没有 return 结果......当我包括
&& table1.location == 'asia' && table2.modtye == 2
所以我认为,问题是存在的,但是代码有什么问题?
我的代码实际上来自本教程 link
我建议一个简单的解释,也许 SQL returns 行来自几个公司或分区?
AX 默认为当前分区和公司 returns 行 curext()
。
如果您使用 select 的 crosscompany
选项,它将扫描跨公司:
while select crosscompany table1 ...
是否找到table1不需要测试,没有找到不进入循环
此外,如果您的唯一目的是计算记录的数量,那么手动计算很浪费,单个 select 就可以了:
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));
我有一个 x++ 脚本,旨在计算来自 select 查询的记录,并在稍后更新。
这是原题供参考:
最初,我有一个 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));
}
请帮忙,我哪里错了它认为是这部分
if (table1)
我也试过整理代码以了解问题出在哪里,
while select forUpdate table1
join table2 where table1.field1 == table2.field1
&& table1.location == 'asia' && table2.modtye == 2
这部分没有 return 结果......当我包括
&& table1.location == 'asia' && table2.modtye == 2
所以我认为,问题是存在的,但是代码有什么问题?
我的代码实际上来自本教程 link
我建议一个简单的解释,也许 SQL returns 行来自几个公司或分区?
AX 默认为当前分区和公司 returns 行 curext()
。
如果您使用 select 的 crosscompany
选项,它将扫描跨公司:
while select crosscompany table1 ...
是否找到table1不需要测试,没有找到不进入循环
此外,如果您的唯一目的是计算记录的数量,那么手动计算很浪费,单个 select 就可以了:
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));