首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >该销售行已存在。标识字段和值:单据类型=‘’,单据号=‘’,行号=‘’

该销售行已存在。标识字段和值:单据类型=‘’,单据号=‘’,行号=‘’
EN

Stack Overflow用户
提问于 2020-08-01 05:29:09
回答 2查看 723关注 0票数 3

使用dynamics NAV SOAP webservices创建新销售订单时,尝试创建多个行项目时出现以下错误。成功添加单行项目的订单信息。

错误-销售行已存在。标识字段和值:单据类型=‘订单’,单据号=‘1111’,行号=‘10000’

下面是我尝试过的代码:

代码语言:javascript
复制
$client  = new SoapClient($soapWsdl, $options);
    
    // Create order header
    $create = new stdClass();
    $sq = new stdClass();  

    $sq->OrderType = "Order";
    $sq->OrderId = "1111";
     $create->SalesOrderWS = $sq;
    $result = $client->create($create);
    
    
    $key = $result->SalesOrderWS->Key;
    
    $update = new stdClass();
    $sq->Key = $key;
    $sq->CustomerID = "9999";
    
    
    $salesLineList = new stdClass();

     $salesLine = new stdClass();
    $salesLine->Order_Type = 'Order';
    $salesLine->OrderID = '1111';
    $salesLine->LineType = 'Item';
    $salesLine->OrderLineNo = '10000';
    $salesLineList->Sales_Order_Lines_WS[0] = $salesLine;
    $sq->SalesOrderLinesWS = $salesLineList;
    
    $salesLine = new stdClass();
    $salesLine->Order_Type = 'Order';
    $salesLine->OrderID = '1111';
    $salesLine->LineType = 'Item';
    $salesLine->OrderLineNo = '20000';
    $salesLineList->Sales_Order_Lines_WS[1] = $salesLine;
    $sq->SalesOrderLinesWS = $salesLineList;
    
    
    $update->SalesOrderWS = $sq;
    $result = $client->Update($update);

当然,这里遗漏了一些东西,但无法识别问题。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2020-08-01 06:18:57

在NAV中,Sales Line表有一个由3个字段组成的主键:

  • 单据类型
  • 单据编号
  • 行号

系统不接受重复,以上组合必须是唯一的。行号:是使行号唯一的任意整数,可以包含任何数字。然而,按照惯例,行号通常以10000为增量给出,即第一行是10000,第二行是20000,依此类推。

我不是PHP专家(事实上我几乎一无所知),但我在上面的代码中看不到您在编写销售行时设置行号。因此,第一行插入将起作用,但是接下来的行将导致重复。我建议在写销售线的时候,包括唯一的行号。对于你写的每一行,它都能正常工作。edd

票数 2
EN

Stack Overflow用户

发布于 2021-05-26 21:59:11

我不是PHP专家,但我相信这行代码实际上调用了创建这些行的web服务:

代码语言:javascript
复制
$sq->SalesOrderLinesWS = $salesLineList;

第一次$salesLineList包含一个带有OrderLineNo = 10000的元素。第二次$salesLineList包含两个元素-一个包含OrderLineNo = 10000,另一个包含OrderLineNo = 20000

这意味着第二个调用将尝试插入10000行,这是不可能的,因为它已经在那里了。

因此,我建议您删除第一个调用,保留第二个调用:

代码语言:javascript
复制
$salesLine = new stdClass();
$salesLine->Order_Type = 'Order';
$salesLine->OrderID = '1111';
$salesLine->LineType = 'Item';
$salesLine->OrderLineNo = '10000';
$salesLineList->Sales_Order_Lines_WS[0] = $salesLine;

$salesLine = new stdClass();
$salesLine->Order_Type = 'Order';
$salesLine->OrderID = '1111';
$salesLine->LineType = 'Item';
$salesLine->OrderLineNo = '20000';
$salesLineList->Sales_Order_Lines_WS[1] = $salesLine;

$sq->SalesOrderLinesWS = $salesLineList;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63199305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档