powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / PB9 Как поднять итоги по странице к последней строке detail на странице?
17 сообщений из 17, страница 1 из 1
PB9 Как поднять итоги по странице к последней строке detail на странице?
    #35717018
Как поднять итоги по странице к последней строке detail на странице?

- Есть группы новая группа с новой страницы и тп
Итоги в footer

- Кстати заодно еще вопрос
в footer может быть вложенное dw
так оно ретривится на каждой странице что очень тормозит
как бы его заставить один раз читаться?


Спасибо
...
Рейтинг: 0 / 0
PB9 Как поднять итоги по странице к последней строке detail на странице?
    #35717393
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гриценко А.В.Как поднять итоги по странице к последней строке detail на странице?
Не помещать их в footer.
Гриценко А.В.
- Кстати заодно еще вопрос
в footer может быть вложенное dw
так оно ретривится на каждой странице что очень тормозит
как бы его заставить один раз читаться?

Никак. Можно только изменить запрос чтобы он отрабатывал быстрее.
...
Рейтинг: 0 / 0
PB9 Как поднять итоги по странице к последней строке detail на странице?
    #35717722
Локшин Марк,

Спасибо
Запрос простой - долгая инициализация ~140 раз

Не помещать в фоотер - это как?
У меня там ~строк 15 (инвентаризационаая ведомость с подписями и пр пр на каждом листе)

Пока смог только серый фон сделать на свободном месте...
...
Рейтинг: 0 / 0
PB9 Как поднять итоги по странице к последней строке detail на странице?
    #35717917
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гриценко А.В.Запрос простой - долгая инициализация ~140 раз
Ну так откачайте во временную табличку до запроса, а потом из нее select * делайте. При большом желании строки туда добавлять можно вручную - на форуме обсуждалось как получить доступ к nested DataWindow. Однако это недокументировано.
Гриценко А.В.
Не помещать в фоотер - это как?
У меня там ~строк 15 (инвентаризационаая ведомость с подписями и пр пр на каждом листе)
Пока смог только серый фон сделать на свободном месте...
Ну вот как-то так. Footer печатается снизу страницы - Вам нужно не снизу - значит туда не нужно помещать то, что вы туда помещаете . По-моему звучит логично.
...
Рейтинг: 0 / 0
PB9 Как поднять итоги по странице к последней строке detail на странице?
    #35720611
Ок


А все же напечатать такую вещь как?
После последней строки таблицы должен быть итог по странице вместо серого фона

В отчете есть группы - каждая с новой страницы

Игры с дублированием итогов в итогах по группе и по странице и их видимостью
в полной мере не помогают так как из-за резервирования места под footer возможен перенос итога по группе на следующую страницу

В 10-ке есть resize footer?
мб и поможет а в 9-ке?
...
Рейтинг: 0 / 0
PB9 Как поднять итоги по странице к последней строке detail на странице?
    #35720623
...
Рейтинг: 0 / 0
PB9 Как поднять итоги по странице к последней строке detail на странице?
    #35720632
Сорри то не цепляет рисунок - то дублирует - глюки какие-то
...
Рейтинг: 0 / 0
PB9 Как поднять итоги по странице к последней строке detail на странице?
    #35720729
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы делал следующим образом.
Высота футера - фиксированная насколько я могу судить по описанию и картинкам.
Рассчитываем кол-во строк (N)которое может максимально вместиться на страницу в пространство между хедером и футером.
В резалтсет отчета вводим поле Page (число).
После выборки данных проходим по каждой строке и заполняем это поле значением счетчика, которое увеличивается на 1 через каждые N строк.
По этому полю делаем группу и футер страницы помещаем в трейлер группы. Включаем для группы печать с новой страницы каждой группы.

ЗЫ. И избавьтесь от всех вложенных отчетов. Делайте все итоги через агрегатные ф-и DW в вычисляемых полях.
...
Рейтинг: 0 / 0
PB9 Как поднять итоги по странице к последней строке detail на странице?
    #35720767
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дополнения:
Anatoly Moskovsky
Рассчитываем кол-во строк (N)которое может максимально вместиться на страницу в пространство между хедером и футером.
Это естественно делается не вручную, а автоматически.
Например, в пустой отчет (до выборки) вставляются строки по одной до тех пор пока PageCount() не станет больше 1.

Anatoly MoskovskyПосле выборки данных проходим по каждой строке и заполняем это поле значением счетчика, которое увеличивается на 1 через каждые N строк.
После это операции не забыть про GroupCalc()
...
Рейтинг: 0 / 0
PB9 Как поднять итоги по странице к последней строке detail на странице?
    #35728421
Спасибо
Идея помогла


Кому интересно получилось так:

Retrievestart:

if dataobject='d_inv3a_2' then
Modify( "datawindow.print.preview = Yes" )
reset()
int li_i,rows_in_trailer,li_detail_height,li_trailer_height
string ls_err
is_height=describe('datawindow.trailer.1.height')

// ------- Сколько строк detail помещается в trailer
li_trailer_height=long(is_height)
li_detail_height =long(describe('datawindow.detail.height'))
rows_in_trailer = li_trailer_height/li_detail_height
if rows_in_trailer*li_detail_height<li_trailer_height then rows_in_trailer++
// -------
ls_err=modify ('DataWindow.Trailer.1.Height=0') // трайлер как бы убрать
if ls_err<>'' then messagebox('Внимание!','Ошибка модификации высоты подитогов!')


// ------- Сколько строк detail помещается на странице
for li_i =1 to 200
insertrow(0)
object.page[li_i]=1
groupcalc()
if long(Describe("evaluate('pagecount()',1)"))>1 then
ii_rows_on_page=li_i - 2 - rows_in_trailer // почему 2? если 1 то не лезет...??
exit
end if
next

reset()
end if



Retrievend:

if dataobject='d_inv3a_2' then // для подтяжки итогов по страницам
long ll_rowcount,ll_page,ll_i
int li_rows
ll_rowcount=rowcount()
li_rows=1
ll_page=1
object.page[1]=1
for ll_i=2 to ll_rowcount
li_rows++
// если превышен размер страницы или новая группа
if li_rows>ii_rows_on_page or object.waretype_type_group[ll_i]<>object.waretype_type_group[ll_i - 1] then
ll_page++
li_rows=0
end if
object.page[ll_i]=ll_page
next

string ls_err
ls_err=modify ('DataWindow.Trailer.1.Height='+ is_height )
if ls_err<>'' then messagebox('Внимание!','Ошибка модификации высоты подитогов!')
GroupCalc( )
end if


-------------------------------------------------------------------------------
Обнаружены глюки:
Модификация высоты фоотера почему-то игнорируется - так не вышло
те высота меняется но при расчете кол-ва строк на странице его как бы и нет

//ls_err=modify ('datawindow.footer.height='+ is_height ) // не влият на страницу!?
//if ls_err<>'' then messagebox('Внимание!','Ошибка модификации высоты подитогов!')

При расчете кол-ва строк помещающихся на место трейлера приходится
добавлять +1 даже после округления в большую сторону. Почему - не понял

А так заработало - Спасибо

А зачем форматирование в сообщениях убивается?? - читать тексты тяжело
...
Рейтинг: 0 / 0
PB9 Как поднять итоги по странице к последней строке detail на странице?
    #35728437
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гриценко А.В.А зачем форматирование в сообщениях убивается?? - читать тексты тяжело
А тэг SRC для кого придуман ;)?
...
Рейтинг: 0 / 0
PB9 Как поднять итоги по странице к последней строке detail на странице?
    #35728802
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я отказался делать сложные отчеты для печати посредством DW, делаю DataStore и из него посредством OLE в Excel, получаются красивые и емкие отчеты, мало того сам пользователь может форматировать отчет под себя, может передать в электроном виде другим.
...
Рейтинг: 0 / 0
PB9 Как поднять итоги по странице к последней строке detail на странице?
    #35730951
maxATCЯ отказался делать сложные отчеты для печати посредством DW, делаю DataStore и из него посредством OLE в Excel, получаются красивые и емкие отчеты, мало того сам пользователь может форматировать отчет под себя, может передать в электроном виде другим.

Подискутировать хочу...

Это все классно
Я и сам здесь писал о таком механизме (блин делись куда-то все старые сообщения)
В мои проги стандартно встроен интерфейс с Excel,Word (ну и там Crystal Report до кучи)
Все отчеты вызываются единообразно из деревянного справочника отчетов
печатные формы по электронным документам оттуда же с фильтром ...
Причем для Excel делается буфер данных в виде DW и автоматом выплевывается
во временный xls файл. Далее вызывается шаблон xls и макрос в ем с предопределенными параметрами
который и формирует документ. Макрос получает имя файла и ...



Возникают вопросы чисто по VBA
Как боретесь с этими проблемами

1) Сложно и долго конструировать - вручную практически на VBА прописывать

2) долго формируется (решается копированием данных блоком но не всегда проходит)

3) Возникает проблема - Иногда гадкие клиенты требуют запретить редактирование отчета!!!
Как его запретишь в Excel

4) ХУже всего Как например те же подитоги по страницам делать
Вроде сделал но время убивается... кошмар


Например


'------------Расчет итогов по странице ---------------------------------
'Зарезервировать строки под итоги

n_hbp = 0
For Each hpb In ActiveSheet.HPageBreaks
n_hbp = n_hbp + 1
'If ActiveSheet.HPageBreaks.Count > n_hbp Then 'на последнем листе уже есть
hpb.Location.Offset(-1, 0).EntireRow.Insert
Cells(hpb.Location.Offset(-1, 0).Row, 1).Value = "Итого"
Range(Cells(hpb.Location.Offset(-1, 0).Row, 1), Cells(hpb.Location.Offset(-1, 0).Row, 3)).Select
With Selection
.HorizontalAlignment = xlRight
.VerticalAlignment = xlTop
.WrapText = True
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.MergeCells = True
.Borders(xlDiagonalDown).LineStyle = xlNone
.Borders(xlDiagonalUp).LineStyle = xlNone
.Borders(xlEdgeLeft).LineStyle = xlNone
.Borders(xlEdgeBottom).LineStyle = xlNone
End With
'End If
Next
'Вставка разрыва страницы если итоговые данные не влазят на последний лист
Range(Cells(colrow + ndata + Worksheets(1).HPageBreaks.Count - 1, 1), Cells(colrow + ndata - 1, 1)).Select
If Worksheets(1).HPageBreaks.Count > 0 Then
If ActiveCell.Row < (Worksheets(1).HPageBreaks(Worksheets(1).HPageBreaks.Count).Location.Row) Then
ActiveWindow.SelectedSheets.HPageBreaks.Add before:=ActiveCell
' подитог По странице
ActiveCell.EntireRow.Insert
Cells(ActiveCell.Row, 1).Value = "Итого"
Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 3)).Select
With Selection
.HorizontalAlignment = xlRight
.VerticalAlignment = xlTop
.WrapText = True
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.MergeCells = True
.Borders(xlDiagonalDown).LineStyle = xlNone
.Borders(xlDiagonalUp).LineStyle = xlNone
.Borders(xlEdgeLeft).LineStyle = xlNone
.Borders(xlEdgeBottom).LineStyle = xlNone
End With
'-----
End If
End If
'собственно итоги
summa_str = 0
kol_str = 0
For i = ndata To colrow + ndata + Worksheets(1).HPageBreaks.Count
If Cells(i, 1).Value = "Итого" Then
Cells(i, 11) = summa_str
Cells(i, 4) = kol_str
kol_str = 0
summa_str = 0
Else
summa_str = summa_str + Cells(i, 11).Value
kol_str = kol_str + Cells(i, 4).Value
End If
Next
Cells(colrow + ndata + Worksheets(1).HPageBreaks.Count, 11) = summa_str
Cells(colrow + ndata + Worksheets(1).HPageBreaks.Count, 4) = kol_str
...
Рейтинг: 0 / 0
PB9 Как поднять итоги по странице к последней строке detail на странице?
    #35730963
Ну и пример формочки

Подитоги я оттудова выкинул в конце концов - уж очень долго
...
Рейтинг: 0 / 0
PB9 Как поднять итоги по странице к последней строке detail на странице?
    #35733532
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гриценко А.В.Ну и пример формочки

Подитоги я оттудова выкинул в конце концов - уж очень долго

А, что дискутировать, люди мы все одинаковые с двумя руками и ногами и одной головой, и идеи почти одинаковые, у Вас все правильно написано концепция решения и у меня почти такая же. Разница лишь в чём нибудь маленькая. Отчеты делаю почти такие же, проблем со скоростью не имею, а что значит запрещено редактировать отчет.
...
Рейтинг: 0 / 0
PB9 Как поднять итоги по странице к последней строке detail на странице?
    #35734497
При вставке в Excel подитогов по странице сильно замедляется формирование формы
даже если там 3-5 листов

А если 200 то вообще можно забыть об этом варианте

Без подитогов скорость приемлемая

Может секретное слово знаете - что у меня неверно (текст был выше)?
...
Рейтинг: 0 / 0
PB9 Как поднять итоги по странице к последней строке detail на странице?
    #35735846
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гриценко А.В.При вставке в Excel подитогов по странице сильно замедляется формирование формы
даже если там 3-5 листов

А если 200 то вообще можно забыть об этом варианте

Без подитогов скорость приемлемая

Может секретное слово знаете - что у меня неверно (текст был выше)?

Да нет ничего секретного. Я управляю Excel через OLE из самого PB макросами на пользуюсь, делаю DS на основе вьюшки или процедуры, где после ретрива для данных имеются и специальные значения для их расположения на листах, название листа название колонки и.т.д. После считывания строк из DS посредством цикла, сразу формируется строка VB и выполняется.
пример простенький:
oleEx.Range(ds_avg_temp.Object.col_excel + String(li_div + ds_avg_temp.Object.hour_utc
)).Select
oleEx.ActiveCell.FormulaR1C1 = ds_avg_temp.Object.temp

Данную вьюшку или процедуру я формирую с помощью специальных нумерованных таблиц. В конце формирования отчетов файл сохраняется и затем:
if Run(ls_Excel + ' ' + ls_new_file) < 0 then messagebox('Не могу запустить Excel!')
где ls_Excel путь нахождения Excel.exe, из реестра беру. Пользователю запускается отчет.
Например вся отчетность климатического описания района за многолетний период (их 78 штук, из них 32 отчета каждый с 13 листами), если запустить формирование подряд выполняется за 17 мин. 1 Г. оперативки, 1,2 ГГц проц.
Для подитогов я бы сделал отдельное DS и после их ретрива вставил бы данные или во время цикла вставки данных вычислял парралельно и итоги, помещается допустим 30 строк на лист то после 30 строк итог, далее обработка следующего листа через 30 опять итог и.т.д. Если считаете, что геморройно, то пробовал делать отчеты стандартно РВэшными инструментами, вот там чтобы получить такой отчет и был настоящий геморрой.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / PB9 Как поднять итоги по странице к последней строке detail на странице?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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