11. Используя этот пример, Вы можете добавить поля даже в файлы, которые не изменяются в конструкторе.
Dim rstRpt As Recordset 'Запрос отчета
Dim x0 As Single 'Крайняя правая точка
'===============================================================
' Открываем запрос отчета и определяем параметры секции
Private Sub Report_Open(Cancel As Integer)
Dim dbs As Database, c As Control
Set dbs = CurrentDb 'Выбираем базу данных
Set rstRpt = dbs.OpenRecordset(Me.RecordSource) 'Открываем запрос
'Находим последнее поле в отчете
x0 = 0 'Инициализация
For Each c In Me.Section(acDetail).Controls 'Просматриваем всю секцию
If x0 c.Left + c.Width Then _
x0 = c.Left + c.Width 'Крайняя правая точка в отчете
Next c
End Sub
'===============================================================
' Находим запись отчета и печатаем текст
'
Private Sub ОбластьДанных_Print(Cancel As Integer, PrintCount As Integer)
Dim rpt As Report
On Error GoTo 999
'Находим в запросе нужную запись
rstRpt.FindFirst "[Номенклатура]=" Me.Controls("Номенклатура")
'Форматируем поле и добавляем в отчет после всех полей
funDrawControl Me, 567 * 2, Format(rstRpt!Цена, "# ##0.00") 'Добавляем в ячейку текст
999:
Err.Clear
End Sub
'===============================================================
' Рисуем элемент управления для отчета
' myWidth - ширина поля
' strDate - данные поля
' Внимание! TextWidth может вернуть неправильный результат,
' требуется пакет обновления SR-1
Private Function funDrawControl(rpt As Report, myWidth As Single, strDate) As Long
Dim c As Control
'Пример текста в поле, который строится по образцу
'Set c = Me.Section(acDetail).Controls("Номенклатура") 'Образец шрифта
'Me.FontName = c.FontName 'Назначаем шрифт ячейки
'Me.FontSize = c.FontSize 'Назначаем высоту текста
'Me.ScaleMode = 1 'Назначаем масштаб в твипах
'Расчитываем позицию текста и печаем его
rpt.CurrentY = (rpt.Height - rpt.TextHeight("0")) / 2 'y-координата текста
rpt.CurrentX = x0 + myWidth - rpt.TextWidth(strDate) 'x-координата текста
rpt.ForeColor = RGB(255, 0, 0) 'Цвет текста
rpt.Print strDate 'Печатаем текст
'Рисуем прямоугольник вокруг поля
rpt.ForeColor = RGB(255, 0, 0) 'Назначаем цвет
rpt.Line (x0, 0)-(x0 + myWidth, rpt.Height), , B 'Прямоугольник
End Function
'===============================================================
' Закрываем запрос отчета
Private Sub Report_Close()
rstRpt.Close
End Sub