Представленный вам ресурс представляет собой универсальный (более-менее) инструмент подготовки шаблонов для отчетов, в частности, я делал все это для того, чтобы писать протоколы УЗИ (руками в ворде мне показалось медленно).
Для составления отчетов используются заготовки шаблонов - текстовые файлы, написанные в кодировке UTF8 (такие может делать, например, Notepad++), название пишется латиницей;
В шаблонах используются специальные метки - шаблонные теги, позволяющие добиться определенных свойств готовой формы для заполнения отчета на экране. Шаблонные теги заключены в двойные треугольные скобки.
Обработка данных шаблона состоит из 3-х этапов:
первый - заполнение базовых данных о пациенте (вид, масса возраст) и выбор используемого шаблона;
второй - выбранный шаблон обрабатывается программно, и мы получаем форму для заполнения;
третий - на основании заполненной формы выводится отчет, который можно скопировать и вставить куда там вам надо;
ПРОФИТ!
Внимание! При использовании шаблонных тегов не следует добавлять дополнительно перед и после них переносы строки - они останутся для обработки и использования в итоговом отчете!
На текущий момент используются следующие шаблонные теги:
Разбивает текст на отключаемые блоки произвольного содержания, от начала до следующего тега <<div>>, от тега <<div>> до тега <<div>>, от тега <<div>> до конца. При выводе формы для заполнения форма становится разделена на части, между которыми стоят вставки вида:
включить выключить
После отправки формы тот блок, который был отключен при заполнении, не выводится в итоговый отчет.
В случае, если по умолчанию блок не должен выводиться в отчет, внутрь блока нужно вставлять тег <<divoff>>
Выводит короткое поле для ввода значения (предполагается, что вводится число, хотя можно вводить что угодно); введенное в форме значение в неизменном виде выводится в отчет;
Выводит длинное поле для ввода значения на несколько строк; введенное в форме значение в неизменном виде выводится в отчет;
Состоит из титульной части и списка возможных значений. Титульная часть insert radio - обязательная, определяет тип тега. От списка возможных значений отделена одним двоеточием; возможные значения в списке разделены 3-мя двоеточиями. В случае, если необходимо установить один из вариантов как выбранный по умолчанию, после него дописываются 3 восклицательных знака, тогда тег приобретает вид
<<insert radio:1-е значение!!!:::2-е значение:::3-е значение>>
После заполнения формы в отчет вписывается выбранное при заполнении формы значение.
Состоит из титульной части, имени файла таблицы с нормативами (должна быть загружена на сервер), заголовка для шаблона. Тиульная часть insert table определяет тип тега, отделена от остальных частей одним двоеточием. Имя файла отделяется от заголовка для шаблона 3-мя двоеточиями.
При выводе в форму шаблона выводится заголовок для шаблона из тега.
Далее программными средствами происходит чтение таблицы; предполагается, что таблица имее вид:
|масса или возраст|контрольный параметр1|контрольный параметр2|контрольный параметр3| - в шапке таблицы, при этом масса указывается в килограммах, возраст - в годах.
Таблицы длжны быть загружены в формате CSV и в кодировке UTF8; я, например, для написания таблиц в этом формате использовал OpenOffice Calc, название пишется латиницей
При чтении таблицы определяется, исходя из шапки, зависят ли представленные данные от массы или от возраста, после чего находится строка, соответствующая данным о текущем пациете, с нее считываются нормативы и в форму выводятся поля вида:
контрольный параметр1: ___ при норме от Х до У
контрольный параметр2: ___ при норме от Х до У
контрольный параметр3: ___ при норме от Х до У
Где Х и У берутся из соответствующих заявленным весу/возрасту пациента ячеек заявленной таблицы.
При заполнении формы, если введенное знаечение не попадает в референтный интервал, текст вводимого значения подсвечивается красным (превышен интервал) или синим (ниже интервала)
В отчете отправленные данные выводятся в формате
контрольный параметр1: Z - выше нормы, при норме от Х до У (предполагается, что Z больше У)
Имеет структуру вида <<insert formula:::_перечисление пользовательских аргументов_:::_формулы и допустимые нормативы_>>
Пользовательские аргументы разбиты одним двоеточием и имеют вид аргумент1=A:аргумент2=B:аргумент3=C
Формулы и допустимые нормативы - исходя из пользовательских аргументов и базовых переменных (масса и возраст), можно проводить автоматический пересчет производных значений и проверку их на соответствие минимальным максимальным допустимым значениям. Данные, необходимые для пересчета, записываются в тег в конце, блоками вида
формула:название результата вычисления формулы:минимальное контрольное значение:максимальное контрольное значение
При написании формулы и контрольных значений, которые также могут быть вычисляемыми, используются буквенные значения переменных, использованных во 2-й части тега, и глобальные переменные mass и age - соответственно, масса и возраст.
Блоков может быть сколько угодно, блоки разделяются 2-мя двоеточиями. Например:
<<insert formula:::аргумент1=A:аргумент2=B:аргумент3=C:::A+B/C*mass+age:результат:2+mass+A:5+age-C::A+B-C*mass/age:результат2:2+mass+B:6+age-A>>
При обработке тега мы получим 3 запроса на введение переменных аргумент1, аргумент2, аргумент3; они, а также масса и возраст будут использованы для вычисления результата и результата2, каждое из вычисленных значений будет сравнено с миниумом и максимумом, вычисляемым исходя из введенных переменных и базовых переменных по представленным в теге формулам. То есть:
результат должен быть больше 2+mass+A и меньше 5+age-C;
результат2 должен быть больше 2+mass+B и меньше 6+age-A;
При этом A=аргумент1, B=аргумент2, С=аргумент3, эти значения вводятся при заполнении формы, которая получается после обработки тега.
В отчете результаты выводятся в том же формате, что для тега обработки таблиц.
Имеет структуру вида <<insert tips:произвольный текст>>
Произвольный текст после двоеточия выводится в форму для заполнения шаблона, но НЕ выводится в итоговый отчет