【问题标题】:Epicor 10 (ERP) SSRS Reporting Error: Maximum of 1024 columns returnedEpicor 10 (ERP) SSRS 报告错误:最多返回 1024 列
【发布时间】:2016-07-26 21:18:58
【问题描述】:

大家好,这可能是一个未知数,但我正在寻求帮助,以解决报告数据定义或 Sequel Server Reporting Services (SSRS) 报告表单中存在的错误。当我们有多行时,错误是阻止打印特定表格(定制装箱单)。 需要注意的是,报告表单是使用 Microsoft Report Builder 设计的,并从 Epicor 获取数据,该数据具有关联的“报告数据定义”。 无法再联系到定制装箱单的顾问,如果没有他的注释,我试图弄清楚 [在此处输入图像描述][1] 可能导致此错误的原始数据定义或报告表格发生了什么变化.

好的,现在进入问题:

在尝试打印多行项目装箱单时,我们收到此错误:

Program Ice.Services.Lib.RunTask 引发了一个意外异常,并显示以下消息:

RunTask:CREATE VIEW 失败,因为视图 ​​'RptLabels_8B03042B0E8248588E5DECCC9D76BB89' 中的列 'OTSCity' 超过了 1024 列的最大值。

我在狩猎和啄食过程中收集到的一些信息:

OTSCITY 是 OrderHED 表(Order Header)中的一个字段。 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]

【问题讨论】:

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

标签: sql-server reporting-services ssrs-2012 ssrs-tablix epicorerp


【解决方案1】:

您的自定义报告中的列标签似乎过多。每列都有一个可选标签(提示/标题),Epicor 会创建一个包含所有这些标签的视图,以便在报告中使用。 E10.0 中的标准装箱单有 904 列,远远超过报告中实际使用的数量。他们是否在报告中添加了更多字段?诚然,如果没有添加额外的表,额外的 120 列是很多的。

您可以检查 EpicorSSRS 数据库中 SQL 的列数,方法是使用对象资源管理器详细信息并按创建日期/时间对视图进行排序,以找到您刚刚创建的临时视图(运行报告后)。在 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 中的一些未使用的标签,直到到达它可以运行的点。

我不知道为什么您的装箱单上有多行会增加字段的数量。您对报告工作原理的总体理解是正确的。

【讨论】:

  • 您好,感谢您提供详细信息!我最终通过创建自己的 RDD 来修复错误……虽然我不知道是什么原因造成的。当我联系 Epicor 支持时,他们说“尝试排除至少 40 列”,但我不确定哪些列对于报告是不必要的。我希望我昨天检查了 StackOverflow!我已将每个表的“排除”字段列表导出到 excel 中,用于原始和自定义,并发现自定义列中包含的列少于原始列。此外,在包含/排除字段时,原始和自定义之间存在很多差异:(。
【解决方案2】:

这里是 SQL Server 的Sparce Columns 的概要。我敢打赌您遇到的问题是因为该表没有定义COLUMN_SET FOR ALL_SPARSE_COLUMNS。有关详细信息,请参阅 Pinal Dave 的 this 文章。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 2021-06-20
    • 1970-01-01
    相关资源
    最近更新 更多