|
|
|
Отчет: не отрывать Примечание от Данных
|
|||
|---|---|---|---|
|
#18+
Народ! Вопрос таков: есть отчет с кучей страниц данных и есть footer к нему, с Итого и подписями. И Бывают приятные случаи, когда этот фу-у-у-утер печатается на новом листе, а подписи от данных отрывать низя. ;) Вопрос: как заставить А2000 перенести строчки две данных на новую страницу и уже за ними допечатать футер?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2003, 13:39 |
|
||
|
Отчет: не отрывать Примечание от Данных
|
|||
|---|---|---|---|
|
#18+
Если достаточно, как минимум, одной строки, то вот: http://am.rusimport.ru/MsAccess/topic.aspx?ID=240 Ф-я StringLast ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2003, 14:11 |
|
||
|
Отчет: не отрывать Примечание от Данных
|
|||
|---|---|---|---|
|
#18+
Ох-х-х... mdw-шка на мне висит, базу открыть не дает, а сменить ее нет прав... КТо может текстом эту функцию выкинуть?.. Или еще идеи етьс у кого?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2003, 15:59 |
|
||
|
Отчет: не отрывать Примечание от Данных
|
|||
|---|---|---|---|
|
#18+
'------------------------------------------------------------------------------------------- '------------------------------------------------------------------------------------------- ' ' Отчет с переносом последней строки (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 ' '------------------------------------------------------------------------------------------- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2003, 17:01 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32208592&tid=1680527]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 201ms |
| total: | 369ms |

| 0 / 0 |
