Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Отчет: не отрывать Примечание от Данных / 4 сообщений из 4, страница 1 из 1
15.07.2003, 13:39
    #32208296
Alexus12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отчет: не отрывать Примечание от Данных
Народ!
Вопрос таков:
есть отчет с кучей страниц данных
и есть footer к нему, с Итого и подписями.
И Бывают приятные случаи, когда этот фу-у-у-утер
печатается на новом листе, а подписи от данных отрывать низя. ;)
Вопрос: как заставить А2000 перенести строчки две данных на новую страницу и уже за ними допечатать футер?..
...
Рейтинг: 0 / 0
15.07.2003, 14:11
    #32208360
Bor-L
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отчет: не отрывать Примечание от Данных
Если достаточно, как минимум, одной строки, то вот:
http://am.rusimport.ru/MsAccess/topic.aspx?ID=240
Ф-я StringLast
...
Рейтинг: 0 / 0
15.07.2003, 15:59
    #32208592
Alexus12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отчет: не отрывать Примечание от Данных
Ох-х-х...
mdw-шка на мне висит, базу открыть не дает, а сменить ее нет прав...
КТо может текстом эту функцию выкинуть?..
Или еще идеи етьс у кого?..
...
Рейтинг: 0 / 0
15.07.2003, 17:01
    #32208737
Bor-L
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отчет: не отрывать Примечание от Данных
'-------------------------------------------------------------------------------------------
'-------------------------------------------------------------------------------------------
'
' Отчет с переносом последней строки (StringLast)

' Описание: Если в отчете на последней странице, время от времени, печатаются только итоги, а
' вся детальная информация остается на предыдущих листах, что, как правило, вызывает
' замечания у руководства (бухгалтерии и т.п.), то эта программа для Вас.
' АВТОМАТИЧЕСКИ выполняется проверка наступления данного события, и, только в этом случае,
' последняя строка (или группа строк, если установлен режим - не разрывать полную группу)
' переносится на последнюю страницу с предыдущей.
'
' Версия 3. Упрощен внешний интерфейс ф-и (сокращено число параметров)
' Для жалоб и предложений e-mail: LENGWENS@MAIL.RU
'
' Применение:
' 1. ВАЖНО !
' "Чтобы обратиться к свойству Pages с помощью макроса или в программе Visual Basic,
' следует включить в форму или отчет поле, в значении свойства Данные (ControlSource)
' которого указано выражение, использующее свойство Pages."
' Цитата из Help-а
'
' Если такого поля в Отчете нет, нужно создать в секции заголовка отчета
' поле (можно невидимое) и указать в качестве .ControlSource значение =[PAGES].
' Естественно, поле в примечании страницы со значением = "Page " & Page & " of " & Pages
' тоже подойдет.
' 2. В отчете в секциях Detail и Footer на событие Format вызвать процедуру StringLast.
' Например:
'
'
'Private Sub ОбластьДанных_Format(Cancel As Integer, FormatCount As Integer)
' StringLast ОбластьДанных
'End Sub

'Private Sub ПримечаниеОтчета_Format(Cancel As Integer, FormatCount As Integer)
' StringLast ПримечаниеОтчета
'End Sub

'------------------------------------------------------------------------------------

Public Sub StringLast(sec As Section)
Dim Rpt As Report
Dim ReportName As String
Static TOP As Long

Set Rpt = sec.Parent
ReportName = Rpt.Name

Select Case sec.Name
Case Rpt.Section(acFooter).Name
' примечание отчета
'
If Rpt.Pages = 0 Then
' первый проход
TOP = -1
PrivateProperty "PageLast", ReportName, 0
PrivateProperty "RecordLast", ReportName, Rpt.CurrentRecord
End If
'
' Увеличиваем кол-во листов, если из-за вставки строк отчет увеличился
'
If PrivateProperty("PageLast", ReportName) < Rpt.Page Then
PrivateProperty "PageLast", ReportName, Rpt.Page
End If

Case Else
' область данных отчета,
' а также любые разделы (как правило примечания групп),
' данные (как правило итоги) из которых нужно вывести
' на последней странице, даже, если собственно
' раздел данных, а следовательно и последняя строка
' на печать не выводятся
'
If Rpt.CurrentRecord = PrivateProperty("RecordLast", ReportName) _
And Rpt.Page < PrivateProperty("PageLast", ReportName) _
And Rpt.Pages > 0 Then
' последняя запись не на последнем листе,
' редактируем данные
If Rpt.TOP <> TOP Then
' добавить пустую строку и пытаемся напечатать текущую,
' пока данных не окажется больше
' чем помещается на странице
TOP = Rpt.TOP
Rpt.NextRecord = False
Rpt.PrintSection = False
End If
End If
End Select

' MsgBox _
ReportName & vbCrLf & _
sec.Name & vbCrLf & _
"CurrentRecord=" & Rpt.CurrentRecord & vbCrLf & _
"TOP=" & Rpt.TOP & vbCrLf & _
"RecordLast=" & PrivateProperty("RecordLast", ReportName) & vbCrLf & _
"Page=" & Rpt.Page & vbCrLf & _
"Pages=" & Rpt.Pages & vbCrLf & _
"PageLast=" & PrivateProperty("PageLast", ReportName) '***** ОТЛАДКА ******

Exit Sub
End Sub

Private Function PrivateProperty(strPropertyName As String, _
strReportName As String, _
Optional longValue) As Long

On Error GoTo Err_Property

Dim doc As Document, db As Database
Dim errLoop As Error

Set db = CurrentDb
Set doc = db.Containers("Reports").Documents(strReportName)

If IsMissing(longValue) Then
' попытка чтения свойства
PrivateProperty = 0
longValue = 0
PrivateProperty = doc.Properties(strPropertyName)
Else
' Делает попытку задать значение указанного свойства.
PrivateProperty = longValue
doc.Properties(strPropertyName) = longValue
End If

Exit Function

Err_Property:

' Ошибка 3270 означает, что свойство не найдено.
If DBEngine.Errors(0).Number = 3270 Then
' Создает свойство, задает его значение и добавляет
' свойство в семейство Properties.
doc.Properties.Append doc.CreateProperty(strPropertyName, dbLong, longValue)
doc.Properties.Refresh
Resume Next
Else
' При возникновении другой ошибки выводит сообщение.
For Each errLoop In DBEngine.Errors
MsgBox "Код ошибки: " & errLoop.Number & vbCr & _
errLoop.Description
Next errLoop
End
End If

End Function

'
'-------------------------------------------------------------------------------------------
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Отчет: не отрывать Примечание от Данных / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]