Кой генератор на отчети избрах
Сайт на Delphi: ежедневни Delphi-новини, документация, статии, рецензия, интервю, компютърен хумор.
Кой генератор на отчети избрах.
Вместо пролог Често срещам въпрос в различни форуми: „Къде мога да намеря нова версия на ReportBuilder“ или „Къде мога да намеря пукнатина за ReportBuilder“, на който има само един отговор: „Изхвърлете тази глупост и използвайте FastReport“. За съжаление животът показа, че лайна не винаги е лайна, но просто едно хубаво нещо не може да се използва правилно. По-долу написах с какви проблеми лично се сблъсках и как ги реших. Прочетете, може да не е нужно да стъпвате на същата рейка, на която стъпвах и аз.
Формулиране на проблема В края на 2001 г. властите ме озадачиха с разработването на програма за масово печатане на касови бележки. Реалният печат се извършва на принтери HP 8150 при скорост на печат около 32 страници A4 в минута. За прехвърляне на базата данни бяха използвани DBase-IV форматът на базата данни и компонентът на Karpov VKDBF за директен достъп. Между другото, компонентът е много готин и съветвам всички да го пробват, докато е безплатен. Машините, от които се генерира и отпечатва отчетът (между другото) имат следната конфигурация:
1. AMD-233, 128Mb RAM, 10GB HDD
2. Celeron-333, 128Mb RAM, 10GB HDD
Операционна система Windows NT WS с инсталиран сервизен пакет 5.
"Танцуване с тамбури" Първата задача, която започнах да решавам, беше да се увеличи скоростта на печат. Първият проблем не можа да бъде решен. Писах на разработчика и те почти заклети ме увериха, че самите те са мислили в тази посока и „след няколко месеца ще бъде пусната нова версия, която може да приложи всичко това“. „Разбирам“, помислих си и реших да тръгна от другия край. Мисълта, която ми хрумна: „Защо Access може да отпечатва 32 страници в минута, FoxPro също може, но FastReport не може?“ Отговорът се криеше в проблем 3. Въпросът беше, че когато се генерира отчет, тези 2, меко казано, СУБД използват езика PCL, но как. Пример за прост печат чрез TPrinter е взет от съвета на Озеров. Проста тестова програма, която отпечатва 1 ред текст, като просто рисува върху платното на принтера, формира файл в опашката на принтера от около 45 килобайта. Когато броят на редовете беше увеличен до 20, размерът на файла в опашката остана практически непроменен. „И така“ - помислих си, „но как се прави това в FastReporte“. Разгледах изходните текстове (слава Богу, че са дадени) и след няколко дни разбрах.
Не можете да направите това! Разработчиците на FastReport поеха по пътя на най-малкото съпротивление. Те оформят платното си под формата на прозорец, изчертават страница върху него, която се получава под формата на растерно изображение, след което го разтягат, за да пасне на платното на принтера и отпечатват. Евтино и весело. Защо има всякакви преобразуващи инчове в милиметри и обратно. В резултат на това тук има 800 килограма на опашката вместо 50. Ето паметта за съхраняване на всяка страница в паметта. Представете си: имам отчет за 2000 страници, умножен по 800 = 1600 мегабайта памет + същото количество в системната директория на Windows, докато всичко това „лежи“ в опашката за печат и ще „лъже“, докато не излезе на принтера . Естествено, никой няма такава RAM, всичко това ще се "разменя", така че "спирачките" са ужасни и системата "се срива" постоянно. Възникна вечният руски въпрос: И така какво да правя?