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文章。