по отчетам кое что готово
строятся таблицы, суммируются итоги, выводится в PDF(результат прилагается)
вот код для формирования этого отчета
#откроем БД
db=pentadb.pentaBase(driver="QSQLITE", database="./tlw_test.sqlite")
#получим таблицу test
test=db.test
#откроем таблицу
test.refresh()
#создаем канву для вывода
r=zzPageReport ("zzr.pdf", format="border-width:1")
#заголовок страницы
ph=zzBaseGrid(2, 2, format="text-align:center;border-width:4;")
ph.setHeight("1;0.2")
ph.setData(1, 1, u"Программа Пента", format="font-size:25pt")
ph.setData(2, 1, u"Проба", format="font-size:25pt;text-align:right")
ph.span(1, 2, 2, 2)
pf=zzBaseGrid(3, 1, format="text-align:center;")
pf.setHeight("2")
pf.setData(1, 1, u"подвал страницы")
#грид с детальной информацией
dtl=zzBaseGrid(7, 1, format="text-align:right")
dtl.setWidth("20%")
dtl.setHeight("0.8;0.5")
dtl.setData(2, 1, "a")
dtl.setData(3, 1, "b")
dtl.setData(4, 1, "c")
dtl.setData(5, 1, "x")
dtl.setData(6, 1, "y")
dtl.setData(7, 1, "z")
#грид заголовка - делаем через копию детального, чтобы не повторять описание
th=deepcopy(dtl)
th.format="text-align:center;"
th.setHeight("1") #выставляем высоту строк - по сантиметру
th.setData(1, 1, u"Заголовок таблицы")
th.setFormat(1, 2, u"text-align:left;border-width:1 1 1 1")
#грид заголовка первого уровня группировки
g1h=zzBaseGrid(7, 1)
g1h.setWidth("20%")
g1h.span(1, 1, 7, 1)
g1h.setData(1, 1, 2*" "+u"заголовок 1", "text-align:left;")
#грид заголовка второго уровня группировки
g2h=zzBaseGrid(7, 1)
g2h.setWidth("20%")
g2h.span(1, 1, 7, 1)
g2h.setData(1, 1, 8*" "+u"заголовок 2", "text-align:left;")
#грид итога первого уровня группировки
g1f=deepcopy(dtl)
g1f.setData(1, 1, 2*" "+u"итог 1", "text-align:left;")
#грид итога второго уровня группировки
g2f=deepcopy(dtl)
g2f.setData(1, 1, 8*" "+u"итог 2", "text-align:left;")
#грид итога
tt=deepcopy(dtl)
tt.setData(1, 1, u"Общий итог")
tt.setHeight("0.5")
#грид итога по станице
pt=deepcopy(dtl)
pt.setData(1, 1, u"Итог по странице")
##############################
#привязываем к детальному гриду группировки поля a,b таблицы БД
dtl.addGroup("a", g1h, g1f)
dtl.addGroup("b", g2h, g2f)
#привязываем грид для заголовка таблицы, отображения итога,итога по станице
dtl.headGrid=th
dtl.totalGrid=tt
dtl.totalPageGrid=pt
##############################
#создаем документ для печати
dc=zzPrintDoc()
#добавим заголовок и подвал страницы
dc.append(ph, dc.PHEAD)
dc.append(pf, dc.PFOOT)
#добавим детальную таблицу
dc.append(dtl, dc.DETAIL, test)
#выведем документ на канву r
dc.go(r)
dc.go(r)
dc.onEndOfPage()
#сохраним канву
r.save()
#просмотрим отчет
os.system('zzr.pdf')
##############################################
сейчас начну копать в сторону RTF и HTML
RTF - страшен