Smith писал(а):Вопрос уж обсуждался миллиард раз... Но все же ... Как задрал этот Дезигнер! Ну как чтоб спокойно делать отчеты?!
Чем громить врагов?! Как отстреливаться?
Братия кто чем пользуется и как выходит из положения?
Расскажу свой опыт.Smith писал(а):Вопрос уж обсуждался миллиард раз... Но все же ... Как задрал этот Дезигнер! Ну как чтоб спокойно делать отчеты?!
Чем громить врагов?! Как отстреливаться?
Братия кто чем пользуется и как выходит из положения?
Вначале были кларионовские репорты, но быстро стало понятно, что неудобно и функционал неконкурентен.
Потом для печати первички взял FRB, а отчеты стал выводить в виде броузера. Для многих ситуаций последний вариант оказался удобен. Формирем итоги в локальную кьюшку, в словаре делаем одну на всех системную таблицу с одним полем id, броуз по ней с range limit по количеству записей в локальной кьюшке, предварительно проверив, чтобы в системной таблице было записей не меньше. В точке фильтрации делается get на запись в локальной очереди и формирование выводимых в броуз значений. Для автоматической печати броуза был приспособлен какой-то опенсорсный класс, умевший делать автопереносы строк в колонках, разворот страниц и деление на строницы по горизонтали, если все колонки не помещались на листе. Для автоматического вывода броуза в excel был приспособлен класс dexcel Олега Руденко, который, собственно, и был разработан для этой цели. Такая технология позволила навесить на отчеты кучу разного функционала стандартным для клариона способом, сохранив возможности встроенной печати через report-структуру и экспорт в редактируемый excel-формат, причем с последним можно работать как через excel, так и через calc.
Подход с выводом отчетов в броуз очень хорош, но не всегда применим. Пользователям иногда хотелось получить формы определенного вида. Не всегда удобно было формировать таблицы с переменным количество колонок. Для таких случаев я сделал класс, производный от dexcel. Эту технологию я подробно описывал в клалист. Дизайним бланк в Excel, результат сохраняем через OLE в текстовом файле разметки, последний используем для вывода отчета через dexcel. Этим убиваются сразу несколько зайцев. По удобству дизайна табличных (или близких к ним) бланков в excel все другие печатники типа rw, LL и т.п. просто сосут. Форму бланка можно корректировать на стороне пользователя визуально как в excel, так и напрямую в любом текстовом редакторе. Пользователю для работы с отчетом не обязательно иметь excel, можно и бесплатный calc. Скорость формирования отчетов очень высокая, так как прямой вывод в файл без всяких оле и ком. В программе код максимально компактный, очень похож на используемый в 1с-предприятие. Описанный подход служит верой и правдой последнии 5-6 лет.
В начале этого года появились определенные проблемы с frb и возник вопрос, чем можно при случае заменить. В качестве эксперимента было сделано расширение описанного выше класса работы с excel-бланками. Отдельные методы теперь позволяют на основании все того-же текстового файла разметки выводить как xls-файл, так и кларионовскую report-структуру. Хотя есть некоторая погрешность при преобразовании единиц измерения координат контента, вид обоих целевых форматов очень близок. Были добавлены автоматическая разбивка на страницы, печать шапок и итогов страниц, поддержка функций перехода на новую страницу до или после вывода детальки, печать вместе с, режим этикеток (для report), поддержка в файле разметки динамических формул перед и после печати деталек, работа со словарем для конструирования формул и т.п.
Чуть позже же был сделан небольшой класс для вывода в rtf-бланки. Рисуем бланк в ворде, делим его спецсимволами на детальки, а потом довольно простым кодом заполняем. Тоже прямой вывод в файл без оле и ком, работа как из mco, так и из oo. В дополнительном текстовом файлике можно задавать формулы, которые автоматически выполняются перед или после вывода деталек. Таким способом получается полностью вынести дизайн из приложения, сохранив высокую скорость формирования и встраиваемость (с бланком rtf можно работать и в рамках приложения через rtf-контрол, хотя несколько горбато).
Все это хорошо. НО... Описанные решения с excel-report и rtf так и остаются в рамках бэты. Хотя я и сделал несколько бланков по этим технологиям в реальных приложениях, переводить кучу (более 150) бланков из frb, с которыми ежедневно работают пользователи, довольно большая работа, для которой не хватает мотивации.
Если нет религии "только кларион, winapi и опенсорц" и нет возражений против использования закрытых коммерческих библиотек, можно посмотреть в сторону упомянутых LL или FRB. FRB прост, компактен, легко встраивается в приложение, написан на кларион, но ограничен по функционалу. LL большой, дорогой, имеет развитый функционал, пишут немцы и не на/для кларион.