|
PB9 Как поднять итоги по странице к последней строке detail на странице?
|
|||
---|---|---|---|
#18+
Как поднять итоги по странице к последней строке detail на странице? - Есть группы новая группа с новой страницы и тп Итоги в footer - Кстати заодно еще вопрос в footer может быть вложенное dw так оно ретривится на каждой странице что очень тормозит как бы его заставить один раз читаться? Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2008, 13:25 |
|
PB9 Как поднять итоги по странице к последней строке detail на странице?
|
|||
---|---|---|---|
#18+
Гриценко А.В.Как поднять итоги по странице к последней строке detail на странице? Не помещать их в footer. Гриценко А.В. - Кстати заодно еще вопрос в footer может быть вложенное dw так оно ретривится на каждой странице что очень тормозит как бы его заставить один раз читаться? Никак. Можно только изменить запрос чтобы он отрабатывал быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2008, 14:54 |
|
PB9 Как поднять итоги по странице к последней строке detail на странице?
|
|||
---|---|---|---|
#18+
Локшин Марк, Спасибо Запрос простой - долгая инициализация ~140 раз Не помещать в фоотер - это как? У меня там ~строк 15 (инвентаризационаая ведомость с подписями и пр пр на каждом листе) Пока смог только серый фон сделать на свободном месте... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2008, 16:38 |
|
PB9 Как поднять итоги по странице к последней строке detail на странице?
|
|||
---|---|---|---|
#18+
Гриценко А.В.Запрос простой - долгая инициализация ~140 раз Ну так откачайте во временную табличку до запроса, а потом из нее select * делайте. При большом желании строки туда добавлять можно вручную - на форуме обсуждалось как получить доступ к nested DataWindow. Однако это недокументировано. Гриценко А.В. Не помещать в фоотер - это как? У меня там ~строк 15 (инвентаризационаая ведомость с подписями и пр пр на каждом листе) Пока смог только серый фон сделать на свободном месте... Ну вот как-то так. Footer печатается снизу страницы - Вам нужно не снизу - значит туда не нужно помещать то, что вы туда помещаете . По-моему звучит логично. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2008, 17:29 |
|
PB9 Как поднять итоги по странице к последней строке detail на странице?
|
|||
---|---|---|---|
#18+
Ок А все же напечатать такую вещь как? После последней строки таблицы должен быть итог по странице вместо серого фона В отчете есть группы - каждая с новой страницы Игры с дублированием итогов в итогах по группе и по странице и их видимостью в полной мере не помогают так как из-за резервирования места под footer возможен перенос итога по группе на следующую страницу В 10-ке есть resize footer? мб и поможет а в 9-ке? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2008, 17:00 |
|
PB9 Как поднять итоги по странице к последней строке detail на странице?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2008, 17:04 |
|
PB9 Как поднять итоги по странице к последней строке detail на странице?
|
|||
---|---|---|---|
#18+
Сорри то не цепляет рисунок - то дублирует - глюки какие-то ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2008, 17:07 |
|
PB9 Как поднять итоги по странице к последней строке detail на странице?
|
|||
---|---|---|---|
#18+
Я бы делал следующим образом. Высота футера - фиксированная насколько я могу судить по описанию и картинкам. Рассчитываем кол-во строк (N)которое может максимально вместиться на страницу в пространство между хедером и футером. В резалтсет отчета вводим поле Page (число). После выборки данных проходим по каждой строке и заполняем это поле значением счетчика, которое увеличивается на 1 через каждые N строк. По этому полю делаем группу и футер страницы помещаем в трейлер группы. Включаем для группы печать с новой страницы каждой группы. ЗЫ. И избавьтесь от всех вложенных отчетов. Делайте все итоги через агрегатные ф-и DW в вычисляемых полях. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2008, 17:31 |
|
PB9 Как поднять итоги по странице к последней строке detail на странице?
|
|||
---|---|---|---|
#18+
Дополнения: Anatoly Moskovsky Рассчитываем кол-во строк (N)которое может максимально вместиться на страницу в пространство между хедером и футером. Это естественно делается не вручную, а автоматически. Например, в пустой отчет (до выборки) вставляются строки по одной до тех пор пока PageCount() не станет больше 1. Anatoly MoskovskyПосле выборки данных проходим по каждой строке и заполняем это поле значением счетчика, которое увеличивается на 1 через каждые N строк. После это операции не забыть про GroupCalc() ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2008, 17:43 |
|
PB9 Как поднять итоги по странице к последней строке detail на странице?
|
|||
---|---|---|---|
#18+
Спасибо Идея помогла Кому интересно получилось так: 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 даже после округления в большую сторону. Почему - не понял А так заработало - Спасибо А зачем форматирование в сообщениях убивается?? - читать тексты тяжело ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2008, 17:24 |
|
PB9 Как поднять итоги по странице к последней строке detail на странице?
|
|||
---|---|---|---|
#18+
Гриценко А.В.А зачем форматирование в сообщениях убивается?? - читать тексты тяжело А тэг SRC для кого придуман ;)? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2008, 17:30 |
|
PB9 Как поднять итоги по странице к последней строке detail на странице?
|
|||
---|---|---|---|
#18+
Я отказался делать сложные отчеты для печати посредством DW, делаю DataStore и из него посредством OLE в Excel, получаются красивые и емкие отчеты, мало того сам пользователь может форматировать отчет под себя, может передать в электроном виде другим. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2008, 20:05 |
|
PB9 Как поднять итоги по странице к последней строке detail на странице?
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2008, 18:52 |
|
PB9 Как поднять итоги по странице к последней строке detail на странице?
|
|||
---|---|---|---|
#18+
Ну и пример формочки Подитоги я оттудова выкинул в конце концов - уж очень долго ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2008, 18:58 |
|
PB9 Как поднять итоги по странице к последней строке detail на странице?
|
|||
---|---|---|---|
#18+
Гриценко А.В.Ну и пример формочки Подитоги я оттудова выкинул в конце концов - уж очень долго А, что дискутировать, люди мы все одинаковые с двумя руками и ногами и одной головой, и идеи почти одинаковые, у Вас все правильно написано концепция решения и у меня почти такая же. Разница лишь в чём нибудь маленькая. Отчеты делаю почти такие же, проблем со скоростью не имею, а что значит запрещено редактировать отчет. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2008, 20:10 |
|
PB9 Как поднять итоги по странице к последней строке detail на странице?
|
|||
---|---|---|---|
#18+
При вставке в Excel подитогов по странице сильно замедляется формирование формы даже если там 3-5 листов А если 200 то вообще можно забыть об этом варианте Без подитогов скорость приемлемая Может секретное слово знаете - что у меня неверно (текст был выше)? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2008, 12:05 |
|
PB9 Как поднять итоги по странице к последней строке detail на странице?
|
|||
---|---|---|---|
#18+
Гриценко А.В.При вставке в 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 опять итог и.т.д. Если считаете, что геморройно, то пробовал делать отчеты стандартно РВэшными инструментами, вот там чтобы получить такой отчет и был настоящий геморрой. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2008, 18:40 |
|
|
start [/forum/topic.php?fid=15&fpage=37&tid=1336433]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
142ms |
get topic data: |
10ms |
get forum data: |
1ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 252ms |
0 / 0 |