Постраничные итоги
Привет.
Может кому поможет - мне лично техподдержка и поиск в интернет не помог. Пришлось делать самому.
Проблема вывода постраничных итогов актуальна при печати бланков бухотчетности (накладные, ТТН и т.д.)
В FastReport возникают 2 проблемы: "отлипание" страничных итогов при выводе в подвал страницы и необходимость наличия хотя бы одной записи на последней странице.
Проблему решил так: в бэнд данных добавил дочерний бэнд (Child1), на нем разместил поле SumKolVoPage (суммарное количество на странице)
в свойствах отчета отмечаем двойной проход. Не уверен что это оптимальное решение, но оно точно работает.
Собственно код скрипта:
Может кому поможет - мне лично техподдержка и поиск в интернет не помог. Пришлось делать самому.
Проблема вывода постраничных итогов актуальна при печати бланков бухотчетности (накладные, ТТН и т.д.)
В FastReport возникают 2 проблемы: "отлипание" страничных итогов при выводе в подвал страницы и необходимость наличия хотя бы одной записи на последней странице.
Проблему решил так: в бэнд данных добавил дочерний бэнд (Child1), на нем разместил поле SumKolVoPage (суммарное количество на странице)
в свойствах отчета отмечаем двойной проход. Не уверен что это оптимальное решение, но оно точно работает.
Собственно код скрипта:
Namespace FastReport
Public Class ReportScript
dim d1 as Integer ' Строки первого прохода
dim d2 as Integer ' Строки второго прохода
dim SumKol as Double = 0
dim DataH(10000) As Double ' Массив с высотой строк
Private Sub Data1_AfterPrint(ByVal sender As object, ByVal e As EventArgs)
IF Engine.FinalPass
IF Engine.FreeSpace > DataH(d2+1) + SumKolVoPage.Height then
child1.Visible = false
else
SumKolVoPage.Text = sumkol
child1.Visible = true
sumkol = 0
End if
'На последней странице должна быть хотя бы одна строка
'Поэтому перед печатью проверям поместится ли на текущей странице подвал отчета
if d2 = d1-1 and Engine.FreeSpace < SumKolVoPage.Height + ReportSummary1.Height then
SumKolVoPage.Text = sumkol
child1.Visible = true
sumkol = 0
end if
if d1 = d2 then
SumKolVoPage.Text = sumkol
child1.Visible = True
end if
End if
End Sub
Private Sub Data1_BeforePrint(ByVal sender As object, ByVal e As EventArgs)
IF Engine.FinalPass
sumkol = sumkol + CType(Report.GetColumnValue("tmp_ttn.КолВо"), Double) ' Здесь собственно суммируем требуемое поле отчета
end if
End Sub
Private Sub Data1_AfterLayout(ByVal sender As object, ByVal e As EventArgs)
IF Engine.FirstPass
d1 = d1+1
DataH(d1) = Text2.Height ' На первом проходе заполняем массив с высотой строк
end if
IF Engine.FinalPass
d2 = d2 + 1
end if
End Sub
Private Sub Child1_AfterPrint(ByVal sender As object, ByVal e As EventArgs)
if d2 = d1-1 and Engine.FreeSpace < ReportSummary1.Height then
engine.StartNewPage
end if
End Sub
End Class
End Namespace