Гость
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / PB9 Как поднять итоги по странице к последней строке detail на странице? / 17 сообщений из 17, страница 1 из 1
16.12.2008, 13:25
    #35717018
PB9 Как поднять итоги по странице к последней строке detail на странице?
Как поднять итоги по странице к последней строке detail на странице?

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

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


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

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

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

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

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


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

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

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

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

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

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


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

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
22.12.2008, 17:30
    #35728437
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PB9 Как поднять итоги по странице к последней строке detail на странице?
Гриценко А.В.А зачем форматирование в сообщениях убивается?? - читать тексты тяжело
А тэг SRC для кого придуман ;)?
...
Рейтинг: 0 / 0
22.12.2008, 20:05
    #35728802
maxATC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PB9 Как поднять итоги по странице к последней строке detail на странице?
Я отказался делать сложные отчеты для печати посредством DW, делаю DataStore и из него посредством OLE в Excel, получаются красивые и емкие отчеты, мало того сам пользователь может форматировать отчет под себя, может передать в электроном виде другим.
...
Рейтинг: 0 / 0
23.12.2008, 18:52
    #35730951
PB9 Как поднять итоги по странице к последней строке detail на странице?
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
23.12.2008, 18:58
    #35730963
PB9 Как поднять итоги по странице к последней строке detail на странице?
Ну и пример формочки

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

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

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

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

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

Может секретное слово знаете - что у меня неверно (текст был выше)?
...
Рейтинг: 0 / 0
25.12.2008, 18:40
    #35735846
maxATC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PB9 Как поднять итоги по странице к последней строке detail на странице?
Гриценко А.В.При вставке в 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
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / PB9 Как поднять итоги по странице к последней строке detail на странице? / 17 сообщений из 17, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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