VB.net子报表参数不正确

2020-09-01 20:14发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)嗨, 我创建了一个包含一个子报...

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

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


嗨,

我创建了一个包含一个子报告的报告。 当我在Crystal Reports中预览报表时,一切运行正常。

当我从VB代码中触发报表以在CRViewer中预览报表时,我收到一条消息"参数不正确"。 我的子报表链接到主报表,并且如果我在Crystal中预览一切都很好,请包括数据。 子报表仅链接到主报表的一个字段上。

 glbReport = App_Path()&" Reports \ Pick.rpt"
 glbFmlaText =" {picklist.cpnyid} ='"&glbCpnyId&"'和{picklist.pastelref} ='"&sKey&"'"
 report.Load(glbReport,CrystalDecisions.Shared.OpenReportMethod.OpenReportByDefault)
 frmReport.ViewReport(glbReport,glbFmlaText,"")
 frmReport.ShowDialog()
好友函数ViewReport(ByVal sReportName作为字符串,可选的ByVal sSelectionFormula作为String ="",可选的ByVal param作为String ="")作为布尔值
         Dim intCounter为整数
         Dim intCounter1为整数

         将objReport变暗为新的CrystalDecisions.CrystalReports.Engine.ReportDocument
        
        
         将Dim paraValue作为新的CrystalDecisions.Shared.ParameterDiscreteValue

        
         Dim currValue作为CrystalDecisions.Shared.ParameterValues

        
         将mySubReportObject调暗为CrystalDecisions.CrystalReports.Engine.SubreportObject

        
         将mySubRepDoc设为新的CrystalDecisions.CrystalReports.Engine.ReportDocument



         昏暗的strParValPair()作为字符串
         Dim strVal()作为字符串
         昏暗索引为整数

         CrConn =新的CrystalDecisions.Shared.ConnectionInfo
         CrConn.ServerName = sServer
         CrConn.DatabaseName = sDatabase
         CrConn.IntegratedSecurity = True

         ConInfo =新的CrystalDecisions.Shared.TableLogOnInfo
         ConInfo.ConnectionInfo = CrConn

         尝试

             '加载报告
             objReport.Load(sReportName,CrystalDecisions.Shared.OpenReportMethod.OpenReportByDefault)
             'objReport.DataSourceConnections
             intCounter = objReport.DataDefinition.ParameterFields.Count

             如果intCounter> 0,则
                 '以查看ID日期选择
                 将Dipar parFields设置为新的CrystalDecisions.Shared.ParameterFields
                 将Dim parField设置为新的CrystalDecisions.Shared.ParameterField
                 Dim parRange作为新的CrystalDecisions.Shared.ParameterDiscreteValue

                 parField.ParameterFieldName =" ReportDates"'Crystal报表中的参数名称
                 parRange.Value = glbFormula'参数字段的值
                 parField.CurrentValues.Add(parRange)
                 parFields.Add(parField)'在parameterlist中添加参数
                 crViewer.ParameterFieldInfo = parFields
             万一

            

             如果intCounter = 1然后
                 如果InStr(objReport.DataDefinition.ParameterFields(0).ParameterFieldName,"。",CompareMethod.Text)> 0然后
                     intCounter = 0
                 万一
             万一

             '参数

             如果intCounter> 0和Trim(param)<>""然后
                 strParValPair = param.Split("&")

                 对于索引= 0到UBound(strParValPair)
                     如果InStr(strParValPair(index)," =")> 0
                         strVal = strParValPair(index).Split(" =")
                         paraValue.Value = strVal(1)
                         currValue = objReport.DataDefinition.ParameterFields(strVal(0))。CurrentValues
                         currValue.Add(paraValue)
                         objReport.DataDefinition.ParameterFields(strVal(0))。ApplyCurrentValues(currValue)
                     万一
                 下一个
             万一

            

             对于intCounter = 0到objReport.Database.Tables.Count-1
                 objReport.Database.Tables(intCounter).ApplyLogOnInfo(ConInfo)
             下一个

            

             对于index = 0到objReport.ReportDefinition.Sections.Count-1
                 对于intCounter = 0到objReport.ReportDefinition.Sections(index).ReportObjects.Count-1
                     使用objReport.ReportDefinition.Sections(index)
                         如果.ReportObjects(intCounter).Kind = CrystalDecisions.Shared.ReportObjectKind.SubreportObject然后
                             mySubReportObject = CType(.ReportObjects(intCounter),CrystalDecisions.CrystalReports.Engine.SubreportObject)
                             mySubRepDoc = mySubReportObject.OpenSubreport(mySubReportObject.SubreportName)
                             对于intCounter1 = 0到mySubRepDoc.Database.Tables.Count-1
                                 mySubRepDoc.Database.Tables(intCounter1).ApplyLogOnInfo(ConInfo)
                             下一个
                           
                         万一
                     结束于
                 下一个
             下一个

            
             如果sSelectionFormula.Length> 0,则
                 objReport.RecordSelectionFormula = sSelectionFormula
             万一

             crViewer.ReportSource =什么都没有

             '将当前报告对象设置为要报告。
             crViewer.ReportSource = objReport
             crViewer.Refresh()

             '显示报告
             crViewer.Show()
             返回真
         捕获为System.Exception
             MsgBox(例如消息)
         结束尝试
     结束功能

 

现在战斗了几天。

(29.3 kB)