1

大家好,这可能是在黑暗中拍摄的,但我正在寻找帮助来整理驻留在报告数据定义或Sequel服务器报告服务(SSRS)报告表。当我们有多条线时,错误会阻止打印特定的表单(自定义装箱单)。 只需注意,报告表格是使用Microsoft Report Builder设计的,并从Epicor获取具有关联“报告数据定义”的数据。 定制装箱单的顾问不再可及,并且没有他的笔记,我试图找出ou [输入图像说明] [1] t从原始数据定义或报告表格中更改了哪些可能导致此问题的原因错误。Epicor 10(ERP)SSRS报告错误:最多返回1024列

好了,现在的问题:

在试图打印多行项目装箱单,我们得到这个错误:

计划Ice.Services.Lib.RunTask提出了一个意外的异常带以下消息:

RunTask:因为列 'OTSCity' 鉴于 'RptLabels_8B03042B0E8248588E5DECCC9D76BB89' 超过最大1024列的CREATE VIEW失败。

的一些信息,我我的狩猎和啄期间收集:

OTSCITY是在OrderHED表(订单表头)的字段。 OrderHed表是数据定义中的(25)个报表中的一个,但它看起来不像任何其他表,并且“OTSCITY”字段在原始表和列中都被排除(标签和列)自定义报告

不确定'RptLabels'引用了什么,但后面的长数字是表GUID。每次打印报告时,都会为该特定实例分配一个唯一的GUID。我在猜测打印报告时从数据定义中提取数据,并使用GUID分配数据快照。所以本质上它是指当我点击打印按钮时创建的包装单实例中的报告标签(RptLabels)。这只是我的猜测。

我非常确定报表可以限制多少列可以显示,它被设置为1024,所以当我们尝试使用多个填充滑动窗体时,可能某些数据表返回太多列订单项。

如果您是可以读取这些内容的Epicor/SSRS/SQL向导,我将在本文底部留下堆栈跟踪的其余部分。报告数据定义的图片也在那里。

Stack Trace: 
    at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action 1 wrapCloseInAction) 
    at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) 
    at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) 
    at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite) 
    at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) 
    at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() 
    at Ice.Core.RptBase.RptLabelsSqlTableBuilder.BuildView(SqlObjectsCreated sqlObjectsCreated) in c:\_Releases\ICE\3.1.400.0\source\Server\Internal\Lib\TaskLib\RptBase\RptLabelsSqlTableBuilder.cs:line 100 
    at Ice.Core.RptBase.ReportDatabaseBuilder 1.BuildSchemaAndWriteData(Func 2 executeCommand, SqlObjectsCreated sqlObjectsCreated) in c:\_Releases\ICE\3.1.400.0\source\Server\Internal\Lib\TaskLib\RptBase\ReportDatabaseBuilder.cs:line 165 
    at Ice.Core.RptBase.ReportDatabaseBuilder`1.GenerateSqlObjectsAndProcessReport(SqlConnection connection) in c:\_Releases\ICE\3.1.400.0\source\Server\Internal\Lib\TaskLib\RptBase\ReportDatabaseBuilder.cs:line 191 
    at Ice.Core.RptBase.ReportDatabaseBuilder`1.XMLClose() in c:\_Releases\ICE\3.1.400.0\source\Server\Internal\Lib\TaskLib\RptBase\ReportDatabaseBuilder.cs:line 132 
    at Ice.Core.RptTaskBase`1.XMLClose() in c:\_Releases\ICE\3.1.400.0\source\Server\Internal\Lib\TaskLib\RptBase\RptTaskBase.cs:line 134 
    at Erp.Internal.SR.PackingSlipPrint.RunProcess(Int64 Instance_TaskNum, String OutputFile) in c:\_Releases\ERP\RL10.1.400.0\Source\Server\Internal\SR\PackingSlipPrint\PackingSlipPrint.cs:line 919 
    at Ice.Hosting.TaskCaller.InnerExecuteTask(IceDataContext newContext) in c:\_Releases\ICE\3.1.400.7\source\Framework\Epicor.Ice\Hosting\TaskCaller\TaskCaller.cs:line 78 
    at Ice.Hosting.TaskCaller.ExecuteTask(Boolean suppressTransaction) in c:\_Releases\ICE\3.1.400.7\source\Framework\Epicor.Ice\Hosting\TaskCaller\TaskCaller.cs:line 31 
    at Ice.Lib.RunTask.BpmFriendlyTaskLauncher.Run(String sessionIdPrefix, IceContext db, Action taskRunner) in c:\_Releases\ICE\3.1.400.7\source\Server\Services\Lib\RunTask\BpmFriendlyTaskLauncher.cs:line 63 
    at Ice.Services.Lib.RunTaskSvc.InnerRunTask(Int64 ipTaskNum, Boolean suppressTransaction) in c:\_Releases\ICE\3.1.400.7\source\Server\Services\Lib\RunTask\RunTask.cs:line 477 
    at Ice.Services.Lib.RunTaskSvc.InnerRunTask(Int64 ipTaskNum, Boolean suppressTransaction) in c:\_Releases\ICE\3.1.400.7\source\Server\Services\Lib\RunTask\RunTask.cs:line 477 
    at Ice.Services.Lib.RunTaskSvcFacade.RunTask(Int64 ipTaskNum) in c:\_Releases\ICE\3.1.400.7\source\Server\Services\Lib\RunTask\RunTaskSvcFacade.cs:line 97 
    at SyncInvokeRunTask(Object , Object[] , Object[]) 
    at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs) 
    at Epicor.Hosting.OperationBoundInvoker.InnerInvoke(Object instance, Func`2 func) in c:\_Releases\ICE\3.1.400.7\source\Framework\Epicor.System\Hosting\OperationBoundInvoker.cs:line 59 
    at Epicor.Hosting.OperationBoundInvoker.Invoke(Object instance, Func`2 func) in c:\_Releases\ICE\3.1.400.7\source\Framework\Epicor.System\Hosting\OperationBoundInvoker.cs:line 28 
    at Epicor.Hosting.Wcf.EpiOperationInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs) in c:\_Releases\ICE\3.1.400.7\source\Framework\Epicor.System\Hosting\Wcf\EpiOperationInvoker.cs:line 23 
    at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc) 
    at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet) 
    at System.ServiceModel.Dispatcher.ChannelHandler.DispatchAndReleasePump(RequestContext request, Boolean cleanThread, OperationContext currentOperationContext) 
    at System.ServiceModel.Dispatcher.ChannelHandler.HandleRequest(RequestContext request, OperationContext currentOperationContext) 
    at System.ServiceModel.Dispatcher.ChannelHandler.AsyncMessagePump(IAsyncResult result) 
    at System.ServiceModel.Dispatcher.ChannelHandler.OnAsyncReceiveComplete(IAsyncResult result) 
    at System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result) 
    at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously) 
    at System.ServiceModel.Channels.SecurityChannelListener`1.ReceiveItemAndVerifySecurityAsyncResult`2.InnerTryReceiveCompletedCallback(IAsyncResult result) 
    at System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result) 
    at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously) 
    at System.ServiceModel.Channels.TransportDuplexSessionChannel.TryReceiveAsyncResult.OnReceive(IAsyncResult result) 
    at System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result) 
    at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously) 
    at System.ServiceModel.Channels.SynchronizedMessageSource.ReceiveAsyncResult.OnReceiveComplete(Object state) 
    at System.ServiceModel.Channels.SessionConnectionReader.OnAsyncReadComplete(Object state) 
    at System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result) 
    at System.Net.LazyAsyncResult.Complete(IntPtr userToken) 
    at System.Net.LazyAsyncResult.ProtectedInvokeCallback(Object result, IntPtr userToken) 
    at System.Net.Security.NegotiateStream.ProcessFrameBody(Int32 readBytes, Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.NegotiateStream.ReadCallback(AsyncProtocolRequest asyncRequest) 
    at System.Net.AsyncProtocolRequest.CompleteRequest(Int32 result) 
    at System.Net.FixedSizeReader.CheckCompletionBeforeNextRead(Int32 bytes) 
    at System.Net.FixedSizeReader.ReadCallback(IAsyncResult transportResult) 
    at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously) 
    at System.ServiceModel.Channels.ConnectionStream.IOAsyncResult.OnAsyncIOComplete(Object state) 
    at System.Net.Sockets.SocketAsyncEventArgs.OnCompleted(SocketAsyncEventArgs e) 
    at System.Net.Sockets.SocketAsyncEventArgs.FinishOperationSuccess(SocketError socketError, Int32 bytesTransferred, SocketFlags flags) 
    at System.Net.Sockets.SocketAsyncEventArgs.CompletionPortCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped) 
    at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP) 

[RDD OrderHed表排除] [1]

+0

听起来像这个报告是使用“稀疏列”。 –

回答

1

看起来您的自定义报告中可能有太多列标签。每列都会有一个可选标签(提示/标题),Epicor会创建一个视图,其中包含所有这些标签以用于报告。 E10.0中的标准包装清单中有904列,远远超过报告中实际使用的数量。他们是否为报告添加了更多字段?如果没有添加额外的表格,那么无可否认,额外的120列是很多的。

您可以通过使用对象资源管理器详细信息并按创建日期/时间对视图进行排序,以查找刚刚创建的临时视图(运行报告之后),从而检查SQL中EpicorSSRS数据库的列数。运行在EpicorSSRS数据库这个查询数列数:

select count(*),c.table_name 
from information_schema.COLUMNS c 
JOIN information_schema.tables t ON c.TABLE_NAME = t.TABLE_NAME 
AND c.TABLE_Schema = t.TABLE_Schema 
WHERE TABLE_TYPE = 'view' 
and t.Table_name = 'RptLabels_710812BD643A4097900608B397D0779A' 
GROUP BY c.table_name 

显然,如果它失败,那么该视图将不会被创建,但请尝试取消一些未使用的标签在RDD直到你到它将运行的点。

我不知道为什么你的包装单上有多行会增加字段的数量。您对报告工作方式的正确理解。

+0

嘿,那里,谢谢你的详细信息!我最终通过创建自己的RDD修复了这个bug ......虽然我不知道是什么导致了它。当我接触到Epicor的支持时,他们说'尝试排除至少40列',但我不确定哪些列是不必要的报告。我希望我昨天检查了StackOverflow!我已经导出为每个表的“排除”字段列表,对于原始和自定义,并且发现在自定义列表中的列数少于原始列表。另外,当涉及包括/排除字段:()时,原始和自定义之间有很多差异。 –

1

这是对SQL Server的Sparce Columns破败。我敢打赌,你遇到的问题是因为表格没有定义COLUMN_SET FOR ALL_SPARSE_COLUMNS。有关更多详细信息,请参阅Pinal Dave的this文章。