XML   ODS   ODT   HTML/HTM   Report Builder   Главная   Страница в Интернет
Бланк в HTML/HTM, rb-отчет (создается в программе Report Builder) и готовый сформированный отчет.



Для запуска примера кликните m4rg.exe, программа выведет форму для выбора бланка ( ODS, XML,ODT, HTML/HTM), после чего сформированный отчет будет тут-же показан на экране.

ПРИМЕР ЗАПУСКА на основе бланка HTML/HTM
1. DO m4rg.exe WITH "test_lists_html_word.html","проба test_lists2.html",0

или
2. DO m4rg.exe WITH "test_lists_html_openoffice.html","проба test_lists2.html",0

Первый бланк сделан в Word-е, второй - в Open Office Writer. И все же и тот и другой бланк обрабатывается генератором без проблем.

А вот пример запуска с открытием ИНТЕРАКТИВНОГО ("живого") отчета - при клике по фамилии абонента (по услуге телефонии) - откроется список телефонов по данному абоненту. Очень интересная штука, рекомендую попробовать.
DO m4rg.exe WITH "test_lists_html_word.html","проба test_lists2.html",-1

Обратите внимание на -1 в конце строки запуска - это обязательный параметр для интерактивного отчета!

ГЕНЕРАЦИЯ ОТЧЕТА НА ОСНОВЕ БЛАНКА HTML/HTM
С него все начиналось, в принципе...

Думаю, хоть раз кто-то делал следующее - брался некий html-ный файл, а уже в нем, вместо заранее внесенных тегов размещались поля таблиц/курсоров, значения функций и переменных.
Все потому, что html-формат достаточно прост для понимания, а для его редактирования можно воспользоваться обычным Блокнотом.
Плюс, огромные возможности для реализации любой задумки, например, несколько таблиц в одном отчете - это вовсе тривиальная задача :-)

Есть подводные камни. Например, Word от Microsoft постоянно норовит разместить дополнительные < span >-ы прямо в теге, поэтому приходится либо перед генерацией дополнительно обрабатывать бланк, либо отказываться от редактирования уже готового бланка Word-ом, т.е. пользоваться только Блокнотом.
Или, вот, например, размещение своей таблицы в документе.
Вроде бы ничего сложного (< table >< tr >< td >< /td >< /tr >), но ЕЙ-БОГУ иногда замучаешься правильно подобрать ширину колонок, шрифт, размер, цвет и другие параметры таблиц. А ведь еще хочется итогов, выделения этих итогов/подитогов и многого другого.
В общем, в какой-то момент наступает понимание, что двигаешься не туда :-), и руки опускаются (точнее, постепенно несколько охладеваешь к тому, что казалось достаточно простым).

Что предлагаю я?
I. Есть некий шаблон в формате html. Вы его редактируете каким-либо образом (Word, OO Writer, Блокнот и т.д.) и размещаете в его теле специальные теги - некий текст, ограниченный ` и ` с двух сторон.
Пример тега:
`&test_.saldo` - значение поля saldo курсора-селекта/таблицы test_
или
`&date()` - значение функции date(), которая возвращает текущую дату
или
`&m4rb_mr(test_.notes)` - значение поля test_.notes преобразуется в многострочный текст
или, код foxpro:
`
local ii
ii=datetime()
return ii
`

II. Если необходимо разместить в документе таблицу (с шапкой, группировками, итогами/подитогами, вставкой строк по условию и т.д.) - в специальной программе (report builder - rb) создается ее дизайн, а в шаблоне, в коде тега, дается команда на использование этой таблицы при генерации документа.
Например,
`
Select * from test into cursor test_ && курсор
return rb("svodno_saldo.m4rb") && запуск rb
`

Смысл вышеприведенного кода - получение курсора из test и запуск генерации таблицы по нему.
Курсор test_ может быть создан ранее, главное, что бы он был выбран в момент запуска rb

После этого запускаете генератор, выбираете шаблон и получаете готовый документ с размещенной таблицей (и даже не одной) внутри документа!

Чем хороша именно такая схема создания (шаблон+report builder)?
1. Редактируя шаблон в Word или oo Writer Вы можете не бояться того, что тег будет изменен - на работу тега это никак не отразится.
2. Таблица, созданная в report builder (rb) может применяться в других html-шаблонах (и, кстати, вид таблицы на html-странице ТЕРЕТИЧЕСКИ не зависит от браузера).
3. Таблица, созданная в rb, может разместить в своем коде другую таблицу (вложенная таблица), которая может строиться на совершенно другом селекте/курсоре.

Ну и, в конце концов, rb может Вам даже не понадобится :-)

Есть некоторые минусы использования бланка html:
1. Несколько больший размер получаемого документа по сравнению с ods и odt - ну что ж Вы хотите, по сути ods и odt - это все таки zip-архивы :-)
2. Готовый отчет может использовать картинки, и так как в обычном html невозможно разместить картинки прямо в теле файла - они будут собираться в подпапке с названием имяотчета.files
Т.е. по подобию, как это делает Word. Не забывайте про эту папку при копировании основного отчета, иначе документ может быть неверно отображен в браузере!
Впрочем, используя Проводник, это будет сделано Windows автоматом, за что ей, Windows, огромное спасибо!
3. Документ html может по разному отображаться в разных браузерах - от этого никуда не деться, конкуренция :( блин.
4. Документ, созданный в Word, oo Writer наверняка постарается изменить, и, возможно, не в лучшую сторону. Как и наоборот, впрочем, когда документ, созданный oo Writer, попытается открыть на редактирование Word.
И это не смотря на то, что используется одно расширение - html/htm :(
5. Для размещения расчетной таблицы нужно создать rb-репорт в Report Builder-е. Что, конечно, занимает некоторое время... Но! Вы только представьте, каков объем РУЧНОЙ работы в ином случае :-)

Плюсы создания отчетов на основе бланков html:
1. Бланк создается/редактируется либо визуальным редактором (Word, oo Writer и т.д.), либо, например, тем же Блокнотом.
2. Нет проблем с изменением тегов Word-ом или oo Writer-ом, генератор правильно определит, что является тегом. Ну и, правильно вставит вместо тега нужный текст.
3. Построение и вставка простых и сложных таблиц (Report Builder) с итогами по группам (+ с возможностью генерации подчиненных таблиц) без ограничения на количество в отчете.
4. Автоматический сбор картинок, используемых в отчете, в папку отчета (для простоты копирования) - причем как картинок бланка, так и картинок, генерируемых rb!
5. Редактирование дизайна таблицы в отдельной программе (Report Builder) - считаю это так же и плюсом (возможность вставки в другие бланки или в другие rb-репорты)!
6. Возможность создания интерактивных ("живых") отчетов (как в 1С).

Отличие генерации на основе HTML-шаблонов от генерации на бланках других форматов (xml, ods, odt)
1. Теги размещаются непосредственно в теле документа, между ` и `, а НЕ В КОММЕНТАРИИ, так как:
а) в Word невозможно ТОЧНО разместить комментарий в нужном месте и
б) форматы комметариев в Word и oo Writer несколько различаются, не смотря на то, что используется один формат HTML :(
2. Другие функции для подсчета итогов:
m4rb_sum('селект.поле') - итог по полю таблицы
m4rb_cnt() - количество по группе
3. Новая функция m4rb_mr(выражение) - преобразование текста выражения в многострочный текст (вместо перевода строки chr(13) вставляется < br >).
Область применения данной функции - только для обработки выражений вне rb (там все делается автоматом).

Особенности разработки Html-бланков и репортов rb.
1.Если Вы используете rb-репорты (файлы с расширением m4rb и одноименными каталогами) - ОНИ ОБЯЗАТЕЛЬНО ДОЛЖНЫ находиться в каталоге запуска генератора отчетов (т.е. там же, где находится файл m4rg.exe)!
2.Нужно признать, что rb формирует таблицы, более оптимизированные для отображения в IE.
Пример - по умолчанию высота ячейки в rb-репорте зафиксирована и не может меняться в зависимости от содержимого. В IE текст ПРАВИЛЬНО обрезается по высоте, а в FireFox НЕПРАВИЛЬНО растягивается.
Для растягивания ячейки по высоте (для отображения в IE) нужно стать на ячейку, которая ДОЛЖНА растягиваться, далее другой кнопкой вызвать контекстное меню и в нем выбрать - Row/ON Auto Height

Претензии к oo Writer (о как... :) )
1. Я не понимаю, ЗАЧЕМ надо в теле html-документа превращать имя рисунка (точнее, каталога, где он находится), написанное на русском в esc-последовательность (Word это делает только со знаками до пробела).
Впрочем, может это IE виноват? Как и Word, заодно?
ПОЧЕМУ IE не отображает картинку, русские буквы которого замененены на esc-последовательность? :-)
Обратите внимание, что готовый отчет по бланку отлично отображается как в Mozilla FireFox, так и в IE (так работает генератор).
Но это все работает только до первого изменения oo Writer-ом :( . После чего в IE отображаются пустые окна от рисунков.
2. Для Word-а html-формат - это попытка Microsoft как можно лучше отобразить doc-документ (не смотрите на расширение!) прямо на странице в Интернет.
Да, это не чистый HTML, да код излишний... и все же считаю, что попытка Microsoft удалась.

Разработка интерактивных отчетов
Сразу скажу - интерактивный отчет практически ничем не отличается от обычного. Надо лишь задать процедуру обработки ссылки ячейки и соответсвующим образом запустить генерацию.
В rb-репорте svodno_saldo_rb.m4rb (редактируется из rb_edit.exe) текст такой ссылки задается для ячейки фамилии по услуге Телефония.
Кликнув по ячейке другой кнопкой, выберите в меню Edit/Cell/Click - откроется форма редактирования генерируемой ссылки, а в ней будет находиться следующий текст:

"VFP:///LOCAL s_
s_=SELECT()
SELECT * FROM phone WHERE user_id=`&alltr(str(test_.user_id))` INTO CURSOR phonek
do m4rg.exe with 'phone_for_user.html','',-1
SELECT (s_)"

VFP:///
- указание обозревателю обработать ссылку, как процедуру FoxPro (при клике)

SELECT * FROM phone WHERE user_id=`&alltr(str(test_.user_id))` INTO CURSOR phonek
- текст формирования курсора из phone

`&alltr(str(test_.user_id))`
- в момент формирования основного отчета вместо тега запишется текущий test_.user_id

do m4rg.exe with 'phone_for_user.html','',-1
- запуск генерации детализированного отчета по курсору и открытие его в специальном обозревателе.
Обратите внимание на -1 в конце!!!
Если этого не сделать (не поставить -1) - сформированный отчет будет открыт в браузере по умолчанию.

Обратите внимание - текст ДОЛЖЕН НАЧИНАТЬСЯ и ЗАКАНЧИВАТЬСЯ ДВОЙНЫМИ КАВЫЧКАМИ (а двойных кавычек не должно быть внутри)!

Далее, надо запустить генерацию основного отчета в виде (обязательно с -1 в конце!):
DO m4rg WITH "test_lists_html_word.html","test_live_report.html",-1

В ИНОМ случае (если не будет -1) - отчет откроется в браузере по умолчанию, даже не смотря на название :-)





Rambler's Top100 Рейтинг@Mail.ru Участник проекта CMS Magazine