Задача: в любом стандартном отчете(Crystal Reports) получить возможность добавлять расшифровку подписи директора и главного бухгалтера.
Начнем с хранения расшифровок. Заведем для этого несвязанную UDDB таблицу (компание-независимая, годо-независимая) Params:
Заполняем таблицу (считаем что ID для директора DIR, а для главного бухгалтера GLBUH):
Добавляем новый VBA проект. Он будет срабатывать при запуске печати, просматривать отчет и, если в отчете есть параметры DIR или GLBUH, то заполняет их соответствующими значениями из UDDB таблицы. В новом проекте делаем двойной щелчок на ThisProcess, в открывшемся окне редактора вставляем код:
' Declare the report engine to access its events
Dim WithEvents m_rptEngine As ScaPrintEngine.ScaReportEngine
Dim dctDict As New Scripting.Dictionary
Private Sub m_rptEngine_ReportBeforePreview(ByVal Report As ScaPrintEngine.IScaReport, PreviewReport As Boolean)
Dim crParamDef As CRAXDRT.ParameterFieldDefinition
Dim crParamDefs As CRAXDRT.ParameterFieldDefinitions
Set crParamDefs = Report.NativeReport.ParameterFields
For Each crParamDef In crParamDefs
With crParamDef
If dctDict.Exists(.ParameterFieldName) Then _
.SetCurrentValue dctDict(.ParameterFieldName)
End With
Next crParamDef
End Sub
Private Sub ScaProcessPI_ActionStart(ByVal ActCode As String, _
ByVal MenuParam As String, ByVal ActType As Long, ByVal ActParam As Variant)
' Initialise the report engine member on action start
Set m_rptEngine = ThisProcess.Reporter
End Sub
Private Sub m_rptEngine_NewReport(ByVal Report As ScaPrintEngine.IScaReport)
' Save action code in the report name
Report.Name = ThisProcess.ActionCode
Dim objConnection As New ADODB.Connection
Dim objCommand As New ADODB.Command
Dim objRs As New ADODB.Recordset
objConnection.ConnectionString = ThisProcess.UserContext.GetConnectionString(scaADO)
objConnection.Open
objCommand.CommandText = "select ID, Value from Params0000 where CompanyCode = '" _
& ThisProcess.UserContext.CompanyCode & "'"
Set objCommand.ActiveConnection = objConnection
objCommand.CommandType = adCmdText
Set objRs = objCommand.Execute
dctDict.RemoveAll
Do While Not objRs.EOF
dctDict.Add RTrim(objRs.Fields("ID").Value), RTrim(objRs.Fields("Value").Value)
objRs.MoveNext
Loop
objRs.Close
objConnection.Close
Set objRs = Nothing
Set objCommand = Nothing
Set objConnection = Nothing
End Sub
Добавляем недостающие ссылки:
Переводим проект в глобальный.
Все. Добавляем в любой стандартный отчет параметры DIR и GLBUH, кидаем их на форму. Значения, если все сделано правильно, заполнятся автоматически при печати.
Список параметров можно расширять только добавляя записи в Params, в коде исправления не потребуются. Пример набросал прямо сейчас, так что ошибки могут быть, но как отправная точка подойдет.
Комментариев нет:
Отправить комментарий