Apico Soft / АПИКО Софт



Спонсором блога ScalaHelp.RU является компания АПИКО Софт.

Мы предоставляем:
- Качественный ERP консалтинг.
- Внедрение и сопровождение системы.
- Российские формы первичных документов, бухгалтерская и налоговая отчетность.

- Разработка корпоративной отчетности.

Наш телефон 8 (495) 961 98 48
Сайт http://www.apicosoft.ru/

Позвоните нам, мы сделаем все, чтобы помочь Вам.

среда, октября 10, 2007

Заполняем параметр отчета из VBA

Задача: в любом стандартном отчете(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, в коде исправления не потребуются. Пример набросал прямо сейчас, так что ошибки могут быть, но как отправная точка подойдет.

Комментариев нет:

Отправка комментария