создание пользовательского отчета на примере договора

advertisement
Создание пользовательского отчета на примере договора
Инструкция описывает пошаговое руководство по созданию отчётных
форм в Медицинской Информационной системе «БАРС поликлиника»
(далее МИС). Рассмотрим процесс на примере отчётной формы
«Договор». В поставке МИС есть отчётная форма договора, но часто
его нужно изменить под требования клиента.
Порядок создания любой отчётной формы состоит из следующих
этапов:
1.
2.
3.
4.
5.
Создание frm-файла отчёта
Регистрация отчёта в разделе «Пользовательские отчёты»
Вызов отчёта
Приложение 1. Основные HTML-теги
Приложение 2. CSS (Каскадные таблицы стилей)
Создание frm-файла отчёта
Формы делятся на общие и пользовательские. В файловой структуре
общие для всех клиентов формы находятся в корне в папке «Forms/».
С обновлением МИС наполнение общих форм меняется, поэтому
специфичный функционал клиента нужно выделять в
пользовательские формы.
Настройка пользовательской директории
1. создайте в корне системы папку «UserFormsКОД_КЛИЕНТА».
«КОД_КЛИЕНТА» - например: RKOD16 — ГАУЗ "Республиканский
клинический онкологический диспансер МЗ РТ" + 16 код
республики Татарстан
2. В файле Etc/conf.inc замените опцию
1 'UserForms'=>'/UserFormsRkob/',
на свою. Здесь:
1 'UserForms'=>'/UserFormsRKOD16 /',
Структура папок и файлов пользовательских форм полностью
повторяет директорию «Forms/». Общий договор находится:
«Forms/Reports/ContractsReports» следовательно нужно в
«UserFormsRKOB16» создать папки «Reports/ContractsReports».
Копируем в неё из основной директории:
«/chunk/contract.frm» - внешний вид договора.
«/chunk/contract_header_action.frm» - действия в БД и источники
данных.
Внешний вид отчёта
Форма — документ xml-формата (применимы XML и XHTML правила
разметки). При редактировании внешнего вида используются html-теги
см. приложение 1 и css-стили см. приложение 2.
Кроме разметки, на форме расположены компоненты (тег
«components»). Тип компонента определяется по атрибуту cmptype="
".
1.
2.
3.
4.
компонент текст cmptype="Label"
компонент Источник данных cmptype="DataSet"
компонент Вызова процедуры в базе данных cmptype="Action"
HTML теги, объявленные как компоненты, значение cmptype не
регламентировано:
1 <HTML-тег cmptype=”tmp” name=”MyComponent”></HTML-тег>
Используется для фиксирования события создания формы.
Обработчики:
oncreate=”Событие создания формы” onshow=”Событие показа
формы, после загрузки источников данных”
Так же используется, чтобы получить доступ к тегу и его
содержимому. Например, часто используется чтобы динамически
скрыть часть информации на форме:
скрыть: getControlByName(”MyComponent”).style.display=”none”;
открыть: getControlByName(”MyComponent”).style.display=””;
В первой строке договора — html-тег div, объявленный как компонент,
используется для выполнения функции «base().getContractHeader();»
на событие «Показ формы».
1 <div width="100%" cmptype="tmp"
onshow="base().getContractHeader();">
В теле функции Form.getContractHeader, команды в какие компоненты
расставить значения из базы данных.
Команда: установить в компонент с именем 'CONTRACT_DATE_0'
значение переменной с именем «CONTRACT_DATE». После выполнения
команды
1 setCaption('CONTRACT_DATE_0', getVar('CONTRACT_DATE'));
строка из формы:
1 <component cmptype="Label" name="CONTRACT_DATE_0"
class="field"/>
в браузере будет переобразована в строку со значением:
1 <span cmptype="Label" name="CONTRACT_DATE_0"
class="field">21.01.2011</span>
Переменные
Есть ряд предопределённых переменных, которые создаются вместе с
созданием отчёта в результате выполнения действия
Action="GET_CONTRACT_HEADER" (/chunk/contract_header_action.frm).
Переменная
CONTRACT_DATE
CONTRACT_NUMB
CONTRACT_SUMM
EMPFIO
Расшифровка
Дата договора
Номер договора
Сумма по договору
ФИО сотрудника, оформившего договор
ФИО сотрудника, оформившего договор родит.
EMPFIO_FR
Падеж «в лице Иванова Ивана Ивановича»
PATIENT
Идентификатор пациента
PATIENT_FIO
ФИО пациента, полное
PATIENT_SHORT_FIO ФИО пациента , краткое
BIRTHDATE
Дата рожденья, формат dd.mm.yyyy
PERSDOC_SER
Серия паспорта
PERSDOC_NUMB
Номер паспорта
PERSDOC_WHEN
Дата выдачи паспорта
PERSDOC_WHO
Кем выдан
ADDRS
Адрес пациента
LPU_FULLNAME
ЛПУ название
LPU_FULLADDRESS ЛПУ адрес
LPU_HEADDOCTOR ФИО главного врача
LPU_OGRN
ЛПУ ОГРН
LPU_INN
ЛПУ ИНН
LPU_KPP
ЛПУ КПП
LPU_AGNACC
ЛПУ банковские реквизиты
LPU_BANKNAME
ЛПУ банковские реквизиты, Банк
LPU_BANKACC
ЛПУ банковские реквизиты, р/с
LPU_BANKFCODEACC ЛПУ банковские реквизиты, БИК
REC_DATE
DOVER_NUMB
DOVER_DATE
Дата записи на последнюю из услуг в договоре.
Может быть полезна для строчки: «Услуги
должны быть оказаны в срок до ...»
Номер доверенности сотрудника, оформившего
договор
Дата доверенности сотрудника, оформившего
договор
Для удобства настройки большинство параметров организации
доступны для редатиирования в отдельном окне: «НастройкиНастройка структуры ЛПУ-ЛПУ:реквизиты»
Сумма прописью
1. Подключите следующий JS-скрипт для кодирования суммы:
1 <component cmptype="IncludeFile" type="js"
src="System/js/number_to_string"/>
2. В теле функции Form.getContractHeader добавьте следующий
код:
3. 1 if(!empty(getVar('CONTRACT_SUMM')))
4. 2 {
5. 3
var sum = getVar('CONTRACT_SUMM');
6. 4
setCaption('CONTRACT_SUMM', sum);
7. 5
8. 6
var _string=getVar('CONTRACT_SUMM').replace(' руб. ',
'.').replace(' коп.', '');
9. 7
setVar('CONTRACT_SUMM_STR',
number_to_string(parseToJSFloat(_string)));
10. 8
setCaption('CONTRACT_SUMM_STR',
getVar('CONTRACT_SUMM_STR'));
9}
Алгоритм: Если в договоре указана сумма, то заполнить
компонент 'CONTRACT_SUMM' числовым значением. Далее
создаём js-переменную var _string, обрабатываем её функциями:
parseToJSFloat(строка) — получить из строки число,
number_to_string(число) получить число прописью.
Пример разметки:
1 Стоимость оказываемых услуг на день заключения настоящего
договора
2
составляет: <component cmptype="Label"
name="CONTRACT_SUMM" class="field"/> (<component
cmptype="Label" name="CONTRACT_SUMM_STR" class="field"/>)
Пример результата:
Стоимость оказываемых услуг на день заключения настоящего
договора
составляет: 150 руб. 10 коп. (сто пятьдесят рублей десять
копеек)
Услуги в договоре
В зависимости от клиента можно установить свой вид списка услуг.
Одной строкой:
1 <span cmptype="tmp" repeate="0" dataset="DS_SERVICES"
style="border-bottom:1px solid black; padding:0px 10px;width:100%;">
2
<component cmptype="Label" captionfield="SERVICE_NAME"/> ,
3 </span>
В виде таблицы:
1 <table width="100%" style="font-size:8pt;text-align:justify;textindent:20pt;">
2
<tr>
3
<td style="text-align:center"> Услуга</td>
4
<td style="text-align:center"> Цена</td>
5
<td style="text-align:center"> Кол-во</td>
6
<td style="text-align:center"> Скидка</td>
7
<td style="text-align:center"> % скидки</td>
8
<td style="text-align:center"> Итого</td>
9
</tr>
10
<tr cmptype="tmp" repeate="0" dataset="DS_SERVICES">
11
<td style="text-align:left"> <component cmptype="Label"
captionfield="SERVICE_NAME"/></td>
12
<td style="text-align:center"> <component cmptype="Label"
captionfield="PRICE"/></td>
13
<td style="text-align:center"> <component cmptype="Label"
captionfield="QUANT"/></td>
14
<td style="text-align:center"> <component cmptype="Label"
captionfield="DISCOUNT_SUMM"/></td>
15
<td style="text-align:center"> <component cmptype="Label"
captionfield="DISCOUNT_PROCENT"/></td>
16
<td style="text-align:center"> <component cmptype="Label"
captionfield="SUMM"/></td>
17
</tr>
18 </table>
Во обоих вариантах текстовые компоненты связаны с источником
данных «DS_SERVICES», запросом к БД (описание которого находится
на форме /chunk/contract_header_action.frm).
Разберём строку:
1 ... cmptype="tmp" repeate="0" dataset="DS_SERVICES"



cmptype="tmp" - HTML тег, объявленный как компонент.
dataset="DS_SERVICES" ссылка на источник данных
«DS_SERVICES»
repeate="0" Источник данных возвращает выборку 0-n записей,
repeate — указывает количество показываемых записей из
выборки. «0» — вывести все записи, «1» — вывести одну запись,
«10» - вывести десять записей и т.д.
Связь текстового компонента с полем выборки задаётся в атрибутом
captionfield="Имя поля в выборке".
В первом примере, наименования услуг будут напечатаны в строку
через «, ». Во втором примере, будет таблица с шапкой: «Услуга |
Цена | Кол-во | Скидка | % скидки | Итого», в строках будут
соответствующие данные выборки.
Имя поля
Расшифровка
SERVICE_NAME
Наименование услуги
PRICE
Цена
QUANT
Количество услуг
DISCOUNT_SUMM
Сумма скидки
DISCOUNT_PROCENT Процент скидки
SUMM
Сумма со скидкой
Логотип
Создайте в пользовательской директории папку Logo
(UserFormsRKOD16/Logo)
добавьте файл логотипа организации «report_logo.png»
Во многих отчётах, логотип оформлен, как прямая ссылка на
изображение — что не правильно. Здесь явная ошибка:
1 <img src="UserFormsRKOD16/Logo/report_logo.png"/>
Правильно пользоваться относительной ссылкой на изображение:
1 <component cmptype="Image" src="Logo/report_logo.png"/>
Прямые ссылки исключают возможность переименования
пользовательской директории. Есть изображение
«Forms/Logo/report_logo.png» - это общий логотип для всех клиентов,
если у клиента есть свой логотип, добавьте его в пользовательскую
директорию «UserFormsRKOD16/Logo/report_logo.png» и он перекроет
общий. При этом ссылку на изображение логотипа ни у кого клиентов
менять не нужно. Подобным образом работаю все пользовательские
формы — они перекрывают собой общий для всех клиентов
функционал.
Расширение списка переменных. Константы.
С помощью расширения списка переменных возможно сделать договор
более универсальным.
Главное меню «Словари-Константы» в дереве ветка «Константы-ЛПУ
реквизиты». Здесь основные константы, которые могут быть полезны
при создании отчётных форм:
Аббревиатура ЛПУ, для
LpuShortName
печати в документах
Лицензия на медицинскую
LpuLicense
деятельность в заголовке
договора
Например, для
Должность, в подписи
поликлиник «Главный
LpuJobInContract
договора
врач», для частных
клиник «Директор»
контекст «
Должность, в подписи
LpuJobInContractR
ИСПОЛНИТЕЛЬ в лице
договора (Родит. падеж)
{Главного врача}»
ФИО сотрудника от чьего
имени подписывается
LpuPersonContract договор (здесь может быть
ФИО Главного врача или
Директора)
ФИО сотрудника от чьего
LpuPersonContractR имени подписывается
договор (Родит. падеж)
LpuPersonDover
Доверенность,
подписывающего контракт
Константы, которые описывают профиль оказываемых учреждением
услуг
Тип услуг по контекст: «обязуется оказать ПАЦИЕНТУ
договору
{офтальмологическую помощь}»
контекст: « 3.1.2. Предоставить
Тип услуг по ПАЦИЕНТУ бесплатную, доступную,
LpuServTypeF договору
достоверную информацию о
(Дат. падеж) предоставляемой {офтальмологической
услуге}»
контекст: « Прейскурантом цен на
Тип услуг по
оказываемые {офтальмологические
LpuServTypeM договору
услуги}» «2.3. Оплата за
мн.ч.
{офтальмологические услуги}»
Тип услуг по
договору
контекст: «3.3.2. Отказать ПАЦИЕНТУ в
LpuServTypeV
(Родит.
оказании {офтальмологической услуги}»
падеж)
LpuServType
Список можно дополнить необходимыми параметрами.
Пример договора, в котором были перименены константы:
Договор_c_расширенным_списком_переменных.zip
Расширение списка переменных. Получение значений
констант на отчёте.
Скопируйте файл «/chunk/contract_header_action.frm» в
пользовательскую директорию.
Добавим вывод «Аббревиатуры ЛПУ» - код константы: LpuShortName.
После вызова пакета d_pkg_rep.info_for_contract и перед оператором
end; добавьте строчку:
1 :LpuShortName
:=d_pkg_constants.SEARCH_STR('LpuShortName',:pnlpu,:pdcontract_date,
1);
добавьте выходной параметр процедуры:
1 <component cmptype="ActionVar" name="LpuShortName" put="v55"
src="LpuShortName" srctype="var" len="250"/>
Где put="" - уникальный код для передачи параметра на сервер, src=""
- название переменной,
srctype="var" — тип объекта в который будет передано значение
выходного параметра процедуры, len="250" — длина значения.
Откройте «/chunk/contract.frm» в теле функции Form.getContractHeader
добавьте команду присвоения подписи компоненту Label
1 setCaption('LpuShortName',getVar('LpuShortName'));
добавьте Label на форму:
1 <component cmptype="Label" name="LpuShortName"/>
Регистрация отчёта в разделе «Пользовательские отчёты»
Любой пользовательский отчёт должен быть зарегистрирован в
разделе «Система-Пользовательские отчёты».
Все основные отчёты уже зарегистрированы. Поэтому нет
необходимости регистрировать договор, договор на операцию или
информированное согласие. Но желательно понимать принцип
устройства данного раздела. Прочитайте документацию по
регистрации отчётов в МИС:
(РА.001_Доработка_функционала_Системы.pdf - страницы 21-33).
Вызов отчёта
Отчёты вызываются из форм с помощью JavaScript — функции:
printReportByCode(код_отчёта);
Пример вызова договора есть на формах:
Forms/Cash/cash.frm (касса) функция «Form.PrintContract»
Forms/Reg/reg_finish.frm (последняя форма записи пациента в МИС)
функция «Form.PrintContract»
! Формы даны для примера, их нельзя менять или заменять
пользовательскими.
Приложение 1. Основные HTML-теги
HTML (HyperText Markup Language, язык разметки гипертекста) — это
система верстки, которая определяет, как и какие элементы должны
располагаться на веб-странице.
1.«Блочные теги» после закрытия тега, генерируют переход
на новую строку
DIV – Блок для текста и компонентов
1 <div> Пример Блока </div>
P – Параграф блок для текста
1 <p>Пример Параграфа</p>
BR – Принудительный перевод строки
1 Текст <br/>
2 Текст с новой строки
2. Форматирование шрифта: B, I
B – жирный шрифт
1 <b>Жирный шрифт</b>
I – курсив
1 <i>Курсив</i>
3. Таблицы
1 <table>
2 <colgroup>
3 <col/>
4 <col/>
5 </colgroup>
6 <tr>
7 <td> Ячейка 1 </td>
8 <td> Ячейка 2 </td>
9 </tr>
10 </table>
table – контейнер для «сетки» таблицы
tr – строка таблицы
td – ячейка таблицы – Контейнер для текста и компонентов
colgroup – контейнер для задания ширины колонок
col – одна колонка
Приложение 2. CSS (Каскадные таблицы стилей)
Стилем или CSS (Cascading Style Sheets, каскадные таблицы стилей)
называется набор параметров форматирования, который применяется
к элементам документа, чтобы изменить их внешний вид.
Синтаксис
1 <ТЕГ style=”Название-Стиля1 : Значение1; Название-Стиля2 :
Значение2;”/>
1. Семейство шрифтов: font-family
Значения : Tahoma (Шрифт), Arial(Шрифт), Times New Roman(Шрифт).
2. Размер: font-size
1 <ТЕГ style=”font-size:20px;”>Шрифт в 20 пикселей</ТЕГ>
3. Цвет: color
1 <ТЕГ style=”color: red;”>Шрифт красного цвета</ТЕГ>
4. Насыщенность (плотность): font-weight
Значения bold – жирный
normal – нормальный, обычный
1 <ТЕГ style=”font-weight: bold;”> Жирный шрифт </ТЕГ>
5. Границы border
1 border: 1px solid #000000;
2 border: 3px solid red;
1. тонкая граница в 1 пиксель черного цвета
2. жирная граница в 3 пикселя красного цвета
Синтаксис:
border: ширина стиль(solid) цвет ; (точка с запятой)
6. Заливка – Фон background
background-color :цвет;
7. Отступы padding
Внутренние отступы у контейнера
Синтаксис:
padding: верхний px правый px нижний px левый px;
1 <ТЕГ style=”padding: 2px 5px 2px 15px;”> Текст в html-элементе
находится в приделах отступов</ТЕГ>
Отступы формируются по принципу часовой стрелки, начиная сверху.
Здесь верхний отступ=2px, правый 5 px, нижний 2px, правый 15px.
Для одинаковых отступов со всех строн используйте краткую форму
"padding: 2px;"
8. Цвета
Есть 16 базовых цветов, обратиться к которым в стиле можно по
названию. Например: black-черный, white-белый, green-зеленый, redкрасный
В основном используется 16тиричная кодировкой цвета, всего их 256
#000000 – чёрный, #FFFFFF – белый
Так же иногда можно встретить числовую RGB-кодировку rgb(0,255,0)
9. Форматирование текста
<component cmptype="Label" captionfield="ANAM" formated="true"/>
Атрибут formated="true" необходим в основном для отчетов по
визитам.
В тех местах, где заполняются "большие" поля с типом "TextArea"
formated="true" служит для того чтобы при выводе таких полей в
отчет, сохранять форматирование (все отступы, переносы строк..)
Download