字段长度不足引起的MRP计划运算报错解决方法原创
金蝶云社区-超级远
超级远
8人赞赏了该文章 1,581次浏览 未经作者许可,禁止转载编辑于2020年10月21日 11:14:43
summary-icon摘要由AI智能服务提供

文本描述了MRP(物料需求计划)计算中遇到的错误,主要原因是数据库物理字段长度不足,导致从数据源String类型转换为目标列nvarchar类型时失败。错误常见于MRP运算单据的扩展字段,尤其是“备注”等录入值很长的字段。解决方案包括检查MRP运算单据的扩展字段,调整过长的字段值,或在BOS IDE中检查编辑长度和数据库物理表中对应字段的类型和长度,确保一致。同时,建议上游单据(如销售订单、预测单)中避免录入过长的值。

出现不可修复的错误,MRP计算操作已终止,可查看MRP日志或系统日志确认原因! 错误信息:不可预料的MRP计算错误!source:Kingdee.BOS.OrmEngine message:来自数据源的 String 类型的给定值不能转换为指定目标列的类型 nvarchar。 stacktrace:   

在 Kingdee.BOS.Orm.Drivers.SqlServerBulkCopyTask.Execute(IDbConnection con, IDbTransaction tran)   

在 Kingdee.BOS.App.Data.Sql.KSqlServerBulkCopyTask.Execute(IDbConnection con, IDbTransaction tran)   

在 Kingdee.BOS.Orm.Drivers.OrmTransactionBase.ExecuteSqlTasks(IList`1 tasks)   

在 Kingdee.BOS.Orm.Drivers.OrmTransactionBase.CommitSqlTask()   

在 Kingdee.BOS.Orm.Drivers.OrmTransactionBase.Commit()

在 Kingdee.BOS.Orm.DataManager.DataManagerImplement.DoItInTransaction(Action`2 action, IOrmTransaction ormTransaction, OperateOption option)   

在 Kingdee.BOS.Orm.DataManager.DataManagerImplement.Save(IEnumerable dataEntities, IOrmTransaction ormTransaction, OperateOption option)    

在 Kingdee.K3.MFG.PLN.App.MrpModel.Util.MrpModelUtil.SplitSaveData(Context ctx, IEnumerable`1 saveItems, DynamicObjectType dt)   

在 Kingdee.K3.MFG.PLN.App.MrpModel.AbstractMrpMemDataPolicy.SaveDataObject()   

在 Kingdee.K3.MFG.PLN.App.MrpModel.AbstractMrpDataPolicy.Execute()   

在 System.Threading.Tasks.Task.Execute() 解决方式:1、可以通过查看MRP日志得到堆栈信息,并把信息提交给软件供应商技术支持要员进行分析!


source:INSERT /*+append*/ INTO T_MRP_DEMANDDATA(FID,FENTRYID,FMATERIALID,FPARENTFORMID,FPARENTINTERID,FPARENTENTRYID,FPARENTBILLNO,FBASEDEMANDQTY,FDEMANDDATE,FSRCFORMID,FSRCINTERID,FSRCENTRYID,FSRCBILLNO,FPRIORITY,FRELATIONFORMID,FRELATIONINTERID,FRELATIONENTRYID,FRELATIONBILLNO,FDEMANDDAYID,FBASEORDERQTY,FMERGEROWID,FBASEGROSSQTY,FPLANSTARTDATE,FPLANFINISHDATE,FCOMPUTEID,FRESERVETYPE,FBASEEXECQTY,FUNITID,FGROSSQTY,FEXECQTY,FDEMANDQTY,FORDERQTY,FORGID,FDATE,FRELATIONENTRYSEQ,FBASEQTY,FQTY,FROWID,FPARENTROWID,FSRCROWID,FBASEUNITID,FBASEPARENTDEMANDQTY,FDATASOURCE,FENTRYNOTE,FCHILDBOMNOTE,F_LS_TEXT,F_LS_CUST) SELECT FID,FENTRYID,FMATERIALID,FPARENTFORMID,FPARENTINTERID,FPARENTENTRYID,FPARENTBILLNO,FBASEDEMANDQTY,FDEMANDDATE,FSRCFORMID,FSRCINTERID,FSRCENTRYID,FSRCBILLNO,FPRIORITY,FRELATIONFORMID,FRELATIONINTERID,FRELATIONENTRYID,FRELATIONBILLNO,FDEMANDDAYID,FBASEORDERQTY,FMERGEROWID,FBASEGROSSQTY,FPLANSTARTDATE,FPLANFINISHDATE,FCOMPUTEID,FRESERVETYPE,FBASEEXECQTY,FUNITID,FGROSSQTY,FEXECQTY,FDEMANDQTY,FORDERQTY,FORGID,FDATE,FRELATIONENTRYSEQ,FBASEQTY,FQTY,FROWID,FPARENTROWID,FSRCROWID,FBASEUNITID,FBASEPARENTDEMANDQTY,FDATASOURCE,FENTRYNOTE,FCHILDBOMNOTE,F_LS_TEXT,F_LS_CUST FROM T_MRP_DEMANDDATA1;
message:将截断字符串或二进制数据。
语句已终止。
stacktrace:
Server stack trace: 
在 Kingdee.BOS.App.Data.Sql.SqlDatabase.ExecuteBatch(List`1 sqlArray, Int32 batchSize, Int32 commandTimeout)在 Kingdee.BOS.App.Data.DBUtils.ExecuteBatchWithTime(Context ctx, List`1 sqlArray, Int32 batchSize, Int32 commandTimeout)
Exception rethrown at [0]: 
在 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
在 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
在 Kingdee.BOS.Contracts.IDBService.ExecuteBatchWithTime(Context ctx, List`1 sqlArray, Int32 commandTimeout)
在 Kingdee.K3.MFG.PLN.App.MrpModel.LogicUnitImpl.Mrp.CompleteMrpLogicUnit.MrpLogInfoBak()
在 Kingdee.K3.MFG.PLN.App.MrpModel.LogicUnitIm


MRP计算出现类似以上的这些报错,都是因为数据库物理字段长度不足。

重点检查MRP运算单据扩展的字段,或调整过长的字段值,一般多见于“备注”等录入值很长的字段。


例如:销售订单通过配置MRP数据模型,携带一个文本字段的值到计划订单,如果销售订单上这个文本的长度是1000,录单的时候录了一个长度900的值,但是MRP运算单据或者计划订单上这个文本字段的长度只允许500,就会报上面的错。


销售订单、预测单、MRP运算单据、计划订单等配过MRP计划运算字段携带的单据的扩展字段,在BOS IDE中检查他们的“编辑长度”,保持一致;

数据库物理表中检查这几个单据对应的表的这个字段的类型和长度,保持一致;

或者,上游的销售订单或是预测单上录入的特别长的值,精简改短。


图标赞 8
8人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!