B1 9.3 DI API库存转移错误:-10 ::在" Whse"字段中输入有效值[??????? 0-0]

2020-08-14 06:29发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


您好,专家,我在调用以下方法的Add方法时收到此错误" -10 ::在" Whse"字段[??????? 0-0]中输入有效值" 库存转移对象。 我已经验证并重新验证了库存转移对象和库存转移线对象都为"到/从"仓库设置了仓库代码。 仓库和这些代码是正确的并且确实存在。 此错误消息的一些类似帖子已声明有关物料成本或单价的信息,但与错误消息不相关。 但是,当我在SAP本身中执行此操作时,没有问题。

对于此物料,评估方法设置为"标准",而未设置"物料成本"。 同样,选中"允许在不增加项目成本的情况下释放库存"。

非常感谢您能提供的所有帮助。

 $ bPass = true;
 $ trfnObj = $ this-> Useful-> apiConfig-> GetBusinessObject($ this-> Useful-> aSAPB1Objects ['Inventory Transfer']);
//让我们添加到obj
 $ trfnObj-> CardCode = $ request-> CardCode;
 $ trfnObj-> CardName = $ request-> CardName;
 $ trfnObj-> ContactPerson =(int)$ request-> CntctCode;
 $ trfnObj->地址= $请求->地址;
 $ trfnObj-> PriceList = $ request-> GroupNum;
 $ trfnObj->注释="服务呼叫"。$ request-> U_JC1_PrintJob;
 $ trfnObj-> FromWarehouse = $ request-> FromWhsCode;
 $ trfnObj-> ToWarehouse = $ request-> ToWhsCode;
 $ trfnObj-> DocDate = date('m/d/Y');
 $ trfnObj-> JournalMemo ='库存转移-'。$ request-> CardCode;
 $ trfnObj-> UserFields-> Fields-> Item('U_NB_PortalCreateUser')-> Value = $ this-> getRequest()-> getSession()-> read('Auth.User.full_name');
 $ trfnObj-> UserFields-> Fields-> Item('U_NB_PortalUpdateUser')-> Value = $ this-> getRequest()-> getSession()-> read('Auth.User.full_name');
 
 $ linesObj = $ trfnObj->线;
 
 $ binAllocatObj = $ linesObj-> BinAllocations;
 $ binAllocatObj-> BinAbsEntry = $ getData ['bin'];
 $ binAllocatObj-> Quantity = $ trnLine ['Quantity'];
 $ binAllocatObj-> BinActionType = 1;
 $ binAllocatObj-> AllowNegativeQuantity = 1;
 
 $ linesObj-> BaseEntry = $ request-> DocEntry;
 $ linesObj-> BaseType = 5;
 $ linesObj-> ItemCode = $ trnLine ['ItemCode'];
 $ linesObj-> ItemDescription = $ trnLine ['Dscription'];
 $ linesObj-> Quantity = $ trnLine ['Quantity'];
 $ linesObj-> WarehouseCode = $ request-> ToWhsCode;
 $ linesObj-> FromWarehouseCode = $ request-> FromWhsCode;

 如果($ linesObj-> Add()!= 0)
 {
     $ this-> Flash-> error(__(__ LINE __。':::由于SAP标准,无法传输项目:'。$ this-> Useful-> apiConfig-> GetLastErrorCode()。" ::"。$ this  ->有用-> apiConfig-> GetLastErrorDescription()));
     $ bPass = false;
 }

 如果($ bPass)
 {
     if($ trfnObj-> Add()== 0)//这是发生故障的地方
     {
        //继续
         $ this-> Flash-> error(__('库存转移成功创建。'));
     }
     其他
     {
         $ this-> Flash-> error(__(__ LINE __。':::由于SAP标准,无法保存传输:'。$ this-> Useful-> apiConfig-> GetLastErrorCode()。" ::"。$ this  ->有用-> apiConfig-> GetLastErrorDescription()));
     }
 } 

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


您好,专家,我在调用以下方法的Add方法时收到此错误" -10 ::在" Whse"字段[??????? 0-0]中输入有效值" 库存转移对象。 我已经验证并重新验证了库存转移对象和库存转移线对象都为"到/从"仓库设置了仓库代码。 仓库和这些代码是正确的并且确实存在。 此错误消息的一些类似帖子已声明有关物料成本或单价的信息,但与错误消息不相关。 但是,当我在SAP本身中执行此操作时,没有问题。

对于此物料,评估方法设置为"标准",而未设置"物料成本"。 同样,选中"允许在不增加项目成本的情况下释放库存"。

非常感谢您能提供的所有帮助。

 $ bPass = true;
 $ trfnObj = $ this-> Useful-> apiConfig-> GetBusinessObject($ this-> Useful-> aSAPB1Objects ['Inventory Transfer']);
//让我们添加到obj
 $ trfnObj-> CardCode = $ request-> CardCode;
 $ trfnObj-> CardName = $ request-> CardName;
 $ trfnObj-> ContactPerson =(int)$ request-> CntctCode;
 $ trfnObj->地址= $请求->地址;
 $ trfnObj-> PriceList = $ request-> GroupNum;
 $ trfnObj->注释="服务呼叫"。$ request-> U_JC1_PrintJob;
 $ trfnObj-> FromWarehouse = $ request-> FromWhsCode;
 $ trfnObj-> ToWarehouse = $ request-> ToWhsCode;
 $ trfnObj-> DocDate = date('m/d/Y');
 $ trfnObj-> JournalMemo ='库存转移-'。$ request-> CardCode;
 $ trfnObj-> UserFields-> Fields-> Item('U_NB_PortalCreateUser')-> Value = $ this-> getRequest()-> getSession()-> read('Auth.User.full_name');
 $ trfnObj-> UserFields-> Fields-> Item('U_NB_PortalUpdateUser')-> Value = $ this-> getRequest()-> getSession()-> read('Auth.User.full_name');
 
 $ linesObj = $ trfnObj->线;
 
 $ binAllocatObj = $ linesObj-> BinAllocations;
 $ binAllocatObj-> BinAbsEntry = $ getData ['bin'];
 $ binAllocatObj-> Quantity = $ trnLine ['Quantity'];
 $ binAllocatObj-> BinActionType = 1;
 $ binAllocatObj-> AllowNegativeQuantity = 1;
 
 $ linesObj-> BaseEntry = $ request-> DocEntry;
 $ linesObj-> BaseType = 5;
 $ linesObj-> ItemCode = $ trnLine ['ItemCode'];
 $ linesObj-> ItemDescription = $ trnLine ['Dscription'];
 $ linesObj-> Quantity = $ trnLine ['Quantity'];
 $ linesObj-> WarehouseCode = $ request-> ToWhsCode;
 $ linesObj-> FromWarehouseCode = $ request-> FromWhsCode;

 如果($ linesObj-> Add()!= 0)
 {
     $ this-> Flash-> error(__(__ LINE __。':::由于SAP标准,无法传输项目:'。$ this-> Useful-> apiConfig-> GetLastErrorCode()。" ::"。$ this  ->有用-> apiConfig-> GetLastErrorDescription()));
     $ bPass = false;
 }

 如果($ bPass)
 {
     if($ trfnObj-> Add()== 0)//这是发生故障的地方
     {
        //继续
         $ this-> Flash-> error(__('库存转移成功创建。'));
     }
     其他
     {
         $ this-> Flash-> error(__(__ LINE __。':::由于SAP标准,无法保存传输:'。$ this-> Useful-> apiConfig-> GetLastErrorCode()。" ::"。$ this  ->有用-> apiConfig-> GetLastErrorDescription()));
     }
 } 
付费偷看设置
发送
3条回答
土豆飞人
1楼 · 2020-08-14 06:38.采纳回答

嗨,约翰,
我确实按照您的建议设置了默认仓库,这解决了非序列化库存转移的问题。 同样,您对"额外"-> Add()的看法是正确的。
这是新手的错误!但是,我还需要解决在转移的一侧有装仓仓库的转移序列化物料的问题。 然后,最终,将该转移附加到服务呼叫中。

我看到了很多示例,其中有批次而不是序列号,并且两个仓库都在这里进行装箱(因此需要"来往"和"发件人"箱都进行分配)。 大多数我无法工作。


花了我不少时间。 我在不同时间收到以下错误:"-10-1470000341-完全分配项目","在未完全选择批次/序列号的情况下无法添加行"," 1470000307-重复的bin位置已被删除"," 1470000838-无效的SerialAndBatchNumbersBaseLine "。

我将它们包括在这里,供其他人查找以及我的解决方案。 它是PHP,但我认为它将把想法传播给其他人。

非常感谢您的帮助。

 $ trfnObj = $ this->有用-> apiConfig-> GetBusinessObject($ this->有用-> aSAPB1Objects ['库存转移']);
//让我们将值添加到对象
 $ this-> Useful-> buildAPISet($ trfnObj,$ postData,$ this-> Transfers-> apiProps);

 $ linesObj = $ trfnObj->线;  $ bPass = true;
//遍历订单项。 将序列化与非序列化分开。 处理两个垃圾箱
 foreach($ postData ['TransferLines'] as $ trnLine)
 {
    //将值添加到Lines对象
     $ this-> Useful-> buildAPISet($ linesObj,$ trnLine,$ this-> Transfers-> TransferLines-> apiProps);
     if(!empty($ trnLine ['serials']))//处理序列
     {
         $ serObj = $ linesObj-> SerialNumbers;
         为($ x = 0; $ x <$ trnLine ['Quantity']; $ x ++)
         {
             $ aSer = $ this-> Useful-> getSerialRecord(strtoupper($ trnLine ['serials'] [$ x]),$ trnLine ['ItemCode']); //尚不存在于垃圾箱中
             如果(!empty($ aSer))
             {
                 $ serData = ['IntrSerial'=> strtoupper($ trnLine ['serials'] [$ x]),'SysSerial'=> $ aSer ['SysNumber'],'U_NB_PortalUpdateUser'=> $ this-> getRequest()-  > getSession()-> read('Auth.User.full_name')];
                 $ serApiProps = ['InternalSerialNumber'=>'IntrSerial','SystemSerialNumber'=>'SysSerial','U_NB_PortalUpdateUser'=>'U_NB_PortalUpdateUser'];
                //将值添加到Serials对象
                 $ this-> Useful-> buildAPISet($ serObj,$ serData,$ serApiProps);
                
                 $ binAllocatObj = $ linesObj-> BinAllocations; //记住,Add()已经被调用一次。
                //将值添加到Bin分配对象
                //对于每个已处理的序列号,SerialAndBatchNumbersBaseLine需要增加1
                 $ this-> Useful-> buildAPISet($ binAllocatObj,['BinAbs'=> $ trnLine ['bin'],'Quantity'=> 1,'BaseLine'=> $ x,'BinAct'=> 1],[  ''BinAbsEntry'=>'BinAbs','Quantity'=>'Quantity','SerialAndBatchNumbersBaseLine'=>'BaseLine','BinActionType'=>'BinAct']));
                
                //我是否需要再次调用$ serObj-> Add()和$ binObj-> Add()
                 如果($ x <$ trnLine ['Quantity'])
                 {
                     $ serObj-> Add();
                     $ binAllocatObj-> Add();
                 }
             }
             else//序列号记录必须已经存在于系统中
             {
                 $ bPass = false;
                 $ this-> Flash-> error(__(__ LINE __。':::序列化项目'。$ trnLine ['serials'] [$ x]。'上的传输无法保存。序列号在 系统或未分配给该仓库。'));
                 打破; //退出for循环并停止处理
             }
         }
     }
     其他
     {
         $ binAllocatObj = $ linesObj-> BinAllocations; //记住,Add()已经被调用一次,
         $ this-> Useful-> buildAPISet($ binAllocatObj,['BinAbs'=> $ trnLine ['bin'],'Quantity'=> $ trnLine ['Quantity'],'BinAct'=> 1,'AllowNeg'=  > 1],
                                                    ['BinAbsEntry'=>'BinAbs','Quantity'=>'Quantity','BinActionType'=>'BinAct','AllowNegativeQuantity'=>'AllowNeg'])); //到线
     }
    //我们需要添加另一行吗
     if(count($ postData ['TransferLines'])> 1)//记住,Add()已被调用一次,
     {
         如果($ linesObj-> Add()!= 0)
         {
             $ bPass = false;
             $ this-> Flash-> error(__(__ LINE __。':::由于SAP标准,无法传输项目:'。$ this-> Useful-> apiConfig-> GetLastErrorCode()。" ::"。$ this  ->有用-> apiConfig-> GetLastErrorDescription()));
             打破; //停止所有操作,退出foreach循环
         }
     }
 }
 if($ bPass)//确定,所有沿行方向都应该很好。 让我们创建实际的转移,然后将其附加到服务呼叫中
 {
     如果($ trfnObj-> Add()== 0)
     {
         $ trfnKey = $ this-> Useful-> apiConfig-> GetNewObjectKey();
         如果(!empty($ trfnKey))
         {
             $ newTrfnObj = $ this-> Useful-> apiConfig-> GetBusinessObject($ this-> Useful-> aSAPB1Objects ['Inventory Transfer']);
             $ newTransfer = $ newTrfnObj-> GetByKey($ trfnKey);
            
             如果($ newTransfer)
             {
                 $ service = $ this-> Transfers-> ServiceDocs-> Services-> get($ request-> U_NB_ServiceCallNum);
                 $ svcCallObj = $ this-> Useful-> apiConfig-> GetBusinessObject($ this-> Useful-> aSAPB1Objects ['Service Calls']);
                 $ svcCall = $ svcCallObj-> getByKey($ service-> callID);
                 如果($ svcCall)
                 {
                     $ data ['DocAbs'] = $ newTrfnObj-> DocEntry;
                     $ data ['DocNumber'] = $ newTrfnObj-> DocNum;
                     $ scl4 = $ svcCallObj->费用;
                     if($ scl4-> DocEntry!= 0)//是否需要添加一个新文档?
                     {
                         $ scl4-> Add();
                     }
                    //将值添加到服务docs对象
                     $ this-> Useful-> buildAPISet($ scl4,['Object'=> 67,'DocAbs'=> $ newTrfnObj-> DocEntry,'DocNumber'=> $ newTrfnObj-> DocNum,'StckTrnDir'=> 0],  $ this-> Transfers-> ServiceDocs-> apiProps);
                    //将值添加到服务调用对象
                    //设置"处理者" b/c SAP已将"处理者和队列"互斥。 永远不知道SAP用户何时"取消"此字段
                     $ this-> Useful-> buildAPISet($ svcCallObj,['isQueue'=> 0,'assignee'=> $ this-> sap_usercode,'U_NB_PortalCallUpdateUser'=> $ this-> getRequest()-> getSession()->  read('Auth.User.full_name')],$ this-> Transfers-> ServiceDocs-> Services-> apiProps);
                     如果($ svcCallObj-> Update()== 0)
                     {
                         $ this-> Useful-> disconnectSAP();
                         $ this-> Flash-> success(__('传输已保存。'));
                         $ this-> redirect(array('controller'=>'Services','action'=>'view',$ request-> U_JC1_PrintJob));;
                     }
                     其他
                     {
                         $ this-> Flash-> error(__(__ LINE __。" :::由于SAP标准,传输无法与服务调用关联:"。$ this-> Useful-> apiConfig-> GetLastErrorCode()。" ::  "。$ this-> Useful-> apiConfig-> GetLastErrorDescription()。" 
svcCallStatus:"。$ svcCallObj-> Status。"和DocNum:"。$ svcCallObj-> DocNum。"和CallID:"。$ svcCallObj-> ServiceCallID)); } } 其他 { $ this-> Flash-> error(__(__ LINE__。'::由于无法在SAP中找到父记录,因此无法关联传输。请重试。')); } } } } }
歪着头看世界
2楼-- · 2020-08-14 07:04

嗨,托德,

当您查看某项的主数据卡的库存数据标签时,其中一行(即仓库)应加粗 。 如果没有任何行以粗体显示,请选择一个,然后单击" 设置默认字符串"按钮。

我的意思是,在第二种情况下,此操作没有完成

无论如何,只是仔细看了一下您的代码,我注意到了一个常见的"新手"错误。 DI API以与客户端相同的方式处理文档。 这意味着将提供文档的第一个空行。 您填充此行,然后在必要时添加一个新的空行,然后填充,依此类推。line.Add()方法添加此新空行。 完成后,您只需要添加文档即可。

我还注意到您正在使用BinAllocations,这也可能是原因。 我没有使用这种机制的经验,但是考虑到错误消息为" Whse"(不是标头或行中的字段),我的猜测是。 请检查BinAllocations对象是否需要仓库代码。

此致

Johan

木偶小白
3楼-- · 2020-08-14 06:51

嗨,托德,

我有 有两次类似的问题,最后发现,在第一种情况下,根本就没有为其中一个项目确定给定的仓库,而在第二种情况下,就没有为其中一个项目确定了默认仓库。

物有所值。

致谢

Johan

一周热门 更多>