powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / расположить итог по странице в отчете
9 сообщений из 9, страница 1 из 1
расположить итог по странице в отчете
    #32763826
Хам трамвайный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подкиньте идеи по добавлении поля "Итого по странице",
чтобы оно находилось сразу же под последней строчкой данных,
как получить сумму по странице, я знаю, а вот
как расположить впритык к области данных - не знаю
...
Рейтинг: 0 / 0
расположить итог по странице в отчете
    #32764042
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Товарная накладная торг-12

ту кажись должно быыть....
автор что-то сдлелал
...
Рейтинг: 0 / 0
расположить итог по странице в отчете
    #32764106
Фотография ДАВИД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как говаривала Скарлет: "Об этом Я подумаю [ хорошенько ] завтра!"
Ну а сегодня... Идея глупая , но логичная (а скорее какая есть).

Каким-то образом отлавливать событие конца страницы (хотя, скорее печати последней строки на странице). После этого блокировать переход к следующей записи
Код: plaintext
Reports!МойОтчет.NextRecord = False
, но перейти к следующей позиции печати и печатать текущий раздел
Код: plaintext
1.
Reports!Стикеры.MoveLayout = - 1 
Reports!Стикеры.PrintSection = - 1 
, хотя они и так True по умолчанию.
А уже в следующей сторке вставлять поле в нужные координаты, куда помещать расчитанный заранее программно ИТОГ по странице.

(Либо заранее поместить поле.visible=0,а потом все поля прятать, а это - показывать).

Или Отлавливать Событие печати Колонтитула, хотя возможно ли это ???
В общем ... "Об этом Я подумаю завтра!"
С уважением Давид.
...
Рейтинг: 0 / 0
расположить итог по странице в отчете
    #32764511
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 XT

в общем сделал то что задумал, но чтоб сделать законченное демо - решение
пока времени не хватает

отчет с постраничными итогами идущими в прикреплении к данным

1 Форматирование и вывод контролов итогов
код расчитан на определенное количество строк для первой и отдельно последующих страниц (т.е расширение не учитывается)

например на 1 стр 25 строк и 40 на остальных - потом итоги

2 рассчет постраничных итогов
приватный массив накапливает постраничные значения функцией получаем сумму

3 скрытие постраничных итогов в каждой строке осуществляется за счет видимости контролов. сжатия области данных и унбоунд контрола в области данных

код такой
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
Option Compare Database

Private Type DataPage
'Этот тип для массива накопления сумм
    DATA As Double
    Page As Integer
End Type

Private SUMDATA( 15 ,  1000 ) As DataPage 'Этот массивчик накапливает в себе значения суммируемых постранично полей в привязке к счетчику строк
Private Const FirstpageRecords =  25    'Эта константа определяет количество строк на первой странице после которой подтитог
Private Const NoFirstpageRecords =  40  'Эта константа определяет количество строк на остальных страницах после которой подтитог


Private Sub Report_Open(Cancel As Integer)

If КОДНАКЛАДНОЙ = "" Then
    MsgBox "Для открытия документа необходимо установить значение переменной КОДНАКЛАДНОЙ из вызывающей формы"
    Cancel = True
    Exit Sub
End If

sql = "SELECT  фирма.окпо as фирма_окпо,([Сумма]-[СуммаНалога]) AS СУММА_С_НДС ,([Сумма]-[СуммаНалога])/[Делитель]AS СУММА_НДС, ([Сумма]-[СуммаНалога])*[Множитель] AS СУММА_БЕЗ_НДС,  ПРОДАЖА.[Цена]*[Множитель] AS ФАКТ_ЦЕНА , Накладные.Накладная, Продажа.СуммаНалога, Товары.Размерность, Накладные.Наличные, Товары.Налог, Продажа.ПроцентНалога, Товары.Страна, Товары.Декларация, Товары.[Цена (опт)], Накладные.Дата, Накладные.Номер, Покупатели.[Полное название] AS Покупатель, Накладные.Предприятие, Покупатели.Город, Покупатели.Дотошность, Покупатели.Название, Покупатели.Адрес as ПокупателиАдрес , Покупатели.Телефон, " & _
" Покупатели.Счет, Покупатели.Банк, Покупатели.ИНН, Покупатели.ОКОНХ, Покупатели.ОКПО, Продажа.Товар, Товары.Наименование, Продажа.Количество, Товары.Разновидность, Продажа.Цена, Продажа.Сумма, [Группы товаров].Примечание AS НДС, [Группы товаров].Множитель, [Группы товаров].Делитель, Фирма.Примечание, Фирма.Район, Покупатели.Примечание AS Прим, Фирма.[Полное название], Фирма.Адрес, Фирма.ИНН " & _
" FROM Фирма INNER JOIN (Покупатели INNER JOIN ((Товары LEFT JOIN [Группы товаров] ON Товары.Группа = [Группы товаров].Код) INNER JOIN (Накладные INNER JOIN Продажа ON Накладные.Накладная = Продажа.Накладная) ON Товары.Товар = Продажа.Товар) ON Покупатели.Предприятие = Накладные.Предприятие) ON Фирма.Код = Накладные.Фирма WHERE (((Накладные.Накладная)=" & КОДНАКЛАДНОЙ & "));"
Me.RecordSource = sql

End Sub


Private Function PageSumVisible(visibility As Boolean)
'отображение и скрытие контролов постраничного подитога из области данных
Me.itog.Visible = visibility
Me.p8.Visible = visibility
Me.p9.Visible = visibility
Me.p10.Visible = visibility
Me.p11.Visible = visibility
Me.p12.Visible = visibility
Me.p13.Visible = visibility
Me.p14.Visible = visibility
Me.p15.Visible = visibility
Me.pb.Visible = visibility
End Function

Private Function SUMPAGE(ctn, spage)
Dim i
For i =  1  To  1000 
    If SUMDATA(ctn, i).Page = spage Then SUMPAGE = SUMPAGE + SUMDATA(ctn, i).DATA
Next i
End Function



Private Sub ОбластьДанных1_Format(Cancel As Integer, FormatCount As Integer)
'скрыть постраничный итог
PageSumVisible (False)

Dim ctls, ctl
'Список контролов которые суммируются
ctls = Array("10", "12", "14", "15")
'Запоминание сумм
For Each ctl In ctls
If Nz(Me.Section( 0 ).Controls("D" & ctl).value, "") <> "" Then
    SUMDATA(ctl, Me.tcount).DATA = Me.Section( 0 ).Controls("D" & ctl).value
    SUMDATA(ctl, Me.tcount).Page = Me.tpage
End If
Next ctl

'Если последняя строка страницы - отобразить итог
If (Me.tcount - FirstpageRecords) Mod NoFirstpageRecords =  0  Then Call PageSumVisible(True)


End Sub
Private Sub ПримечаниеГруппы1_Format(Cancel As Integer, FormatCount As Integer)
'Если последняя запись не вывела примечание итога страницы
If (Me.tcount - FirstpageRecords) Mod NoFirstpageRecords =  0  Then
ПримечаниеГруппы1.Visible = False
Else
ПримечаниеГруппы1.Visible = True
End If
End Sub

если хочешь скину макет отчета
...
Рейтинг: 0 / 0
расположить итог по странице в отчете
    #32764524
ищ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
идея понятна. спасибо. у меня как раз
расширение строк плавает.
думал есть способ определения
последней строки на странице
...
Рейтинг: 0 / 0
расположить итог по странице в отчете
    #32764558
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
идея по расширениею есть, но пока не осуществил решение

запускать отчет два раза - первый раз резервирование места под примечание за счет колонтитула и промер числа строк по страницам в событии печать , второе открытие - вывод итогов
...
Рейтинг: 0 / 0
расположить итог по странице в отчете
    #32765139
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ищ - это mdb-jet или adp?

2АлексейК - пока вижу, что массив нужен, только если нужно по верху страницы указывать "входящее по странице накопленным итогом".

Исходящие и так пересчитаются.

2 всем
мне всегда было достаточно входящее/исходящее по странице печатать
в колонтитулах отчета. Как "привязать к последней строке колонтитул" - не знаю.
Для АДП искать ответ не буду (не смогу).
Возможно, что для МДБ делал бы так():
попробовал бы в селект для отчета добавить вычисляемое поле на основе юзер-функции - типа Select GetDummyFunc() as MyCalcField,трам-пам-пам

По этому полю завел бы группировку, видимостью которой управлял бы в событии формат

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Private Sub ПримечаниеГруппы1_Format(Cancel As Integer, FormatCount As Integer)
  
  If Page = Pages Then
    ПримечаниеГруппы1.Visible = True
  Else
    ПримечаниеГруппы1.Visible = False
  End If
End Sub

исходящее по странице копил бы ~ так
Код: plaintext
1.
2.
Private Sub ОбластьДанных_Print(Cancel As Integer, PrintCount As Integer)
   RunningAm = RunningAm + Nz([inputR])
End Sub

и присваивал/обнулял по достижении нижнего колонтитула страницы
Код: plaintext
1.
2.
3.
Private Sub НижнийКолонтитул_Format(Cancel As Integer, FormatCount As Integer)
  Me.txtF = RunningAm
  RunningAm =  0 
End Sub

GetDummyFunc - пустышка
Код: plaintext
1.
2.
Function GetDummyFunc() As Boolean
  GetDummyFunc = true
End Function

для входящих по странице - натурально, задействовал бы (типизированный) массив
...
Рейтинг: 0 / 0
расположить итог по странице в отчете
    #32765172
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
типа очепятка вышла - хотел так написать - открывая видимость
на последней странице примечания соответствующей группировки -
закрывал бы одновременно видимость нижнего колонтитула или скрывал бы в нем "суммирующие" контролы...


(с выражением лица)
...
Рейтинг: 0 / 0
расположить итог по странице в отчете
    #32765734
lobodava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АлексейКидея по расширениею есть, но пока не осуществил решение
Вариант:

Два глобальных типизированных массива во внешнем модуле
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Public Type RecordInfo
    RecordHeight As Long
    Amount As Currency
End Type

Public gaRecordInfo() As RecordInfo

Public Type PageInfo
    PageHeigth As Long
    NumberOfRecord As Long
    PageAmout As Currency
    RecordsHeight As Long
End Type

Public gaPageInfo() As PageInfo

определение размерности массива в том же модуле
Код: plaintext
1.
...
ReDim gaRecordInfo(rst.RecordCount)

из того же модуля запуск измерительного отчета, который считает высоту строк при расширении - ширина расширяемого контрола в измерительном отчете, как и размер и тип шрифта, в точности как у контрола на основном отчете.

В измерительном отчете
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer)
    MoveLayout = False
    NextRecord = True
    PrintSection = True
    
    gaRecordInfo(Me.tboCounter).RecordHeight = Me.tboDescription.Height
    gaRecordInfo(Me.tboCounter).Amount = Nz(Me.tboAmount,  0 )
End Sub
где tboCounter - текстбокс с ControlSource = "=1" и Running Sum = "Over All"
и где tboDescription расширяемый контрол

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


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