1

(4 replies, posted in Russian)

Наконец-то удалось осуществить задуманное.
Расчет стоимости в зависимости от количества пролеченных дней (вся сложность ситуации описана выше) реализован непосредственно в самом отчёте.

2

(4 replies, posted in Russian)

С небольшой частью вопроса разобрался,может кому пригодится.
Запрос для расчёта количества дней между датами:
----------------------------------------------------------------------------------
SELECT (julianday(vypis) - julianday(postup)) FROM klient
----------------------------------------------------------------------------------
Здесь "vypis"-это конечная дата,"postup"-начальная дата,"klient"-таблица, в которой эти даты хранятся.
В моём случае, нужно учитывать ещё и последний день, поэтому в запросе добавляю 1:
SELECT (julianday(vypis) - julianday(postup) + 1) FROM klient

3

(4 replies, posted in Russian)

DriveSoft wrote:

Приветствую,


Немного доработал ваш проект, но на счет расчетов тарифов не подскажу, не совсем понял, что к чему

Спасибо большое.
Сам перечитал вопрос и не совсем понял smile
Т.е. имеется первая тарифная группа, в ней может меняться сумма за оказанную услугу в зависимости от того, больше или меньше среднего срока пациент лечился.
Для автоматизации расчета, как я понимаю, нужно сравнить даты начала лечения и окончания.
Вот простыми словами запрос могу объяснить, а на языке программирования нет:
----------------------------------------------------------------------------------
Для "тарифная_группа_1"
"дата_начала" - "дата_окончания" = "количество_дней"
Если "количество_дней"="средний_срок"+-20%, то "стоимость_услуги"="тариф_законченного_случая_(ЗС)"
Иначе "стоимость_услуги"="тариф" * "количество_дней"
-----------------------------------------------------------------------------------
С остальными группами не так всё запутано, там стоимость фиксированная, т.е. для них всегда считать по "тарифу законченного случая".
После этого уже печать справки по шаблону и выдача пациенту.

Добрый день.
Делается небольшая программка для выдачи посетителю больницы справки о стоимости оказанных ему услуг. Присутствует ФИО клиента, период лечения (с "такого-то числа" по "такое"), список оказанных услуг и их стоимость. С услугами и возник вопрос.
Их список стандартизированный для лечебного учреждения и делится на 5 подкатегорий (стационар, стационар-отдельные мед.услуги, поликлиника-профилактика, поликлиника-заболевание, поликлиника-неотложка).
На главной форме (в программе) вышеописанные пункты.
Возникло несколько вопросов:
1) Как сделать, чтобы на главной форме можно было через Checkbox выбрать "Тарифную группу" (одну из пяти) и в зависимости от этого для пациента можно было указать услуги из конкретной "Тарифной группы"?
2) Выбор услуг для пациента лучше реализовать так же через чекбоксы? Если ему услуг 10 нужно добавить? Некрасиво по-моему 10 боксов держать на главной форме
3) Самый сложный для меня вопрос:
Первая тарифная группа отличается от остальных тем, что человека могут лечить несколько дней. Например по стандарту "Профиль КПГ: Кардиология; Средний срок: 12,7; Тариф койко-дня: 2368,13; Тариф ЗС: 30075,25". Если "средний срок" отличается от того, который забит в тарифах на +-20%, то стоимость лечения=тариф койко-дня*количество дней (т.е. в данном случае, если вылечили за 10-15 дней, то стоимость лечения равна стоимости законченного случая 30075,25;  а если его вылечили за срок менее 10 дней или более 15 дней, то срок умножается на тариф койко-дня). Как можно реализовать данный пункт для подсчёта суммы за услугу?
Заранее спасибо.
ПС. Прикрепил "черновую форму"  проекта, а то может не совсем внятно описал свои проблемы sad

5

(16 replies, posted in Russian)

В общем, сыровато у меня пока получилось, но для v.1.0 пока сойдёт, времени не хватает свободного на изучение инфы по написанию скриптов и sql-запросов (может подскажите, какие ресурсы/книги использовать для заполнения пробелов в моей голове?). smile
Некоторым может пригодиться в качестве примера (хотя всё это есть здесь на форуме, но некоторым людям может лень пользоваться поиском). Ну, порядку.
Программа предназначена для ведения реестра пациентов в отделе мед.статистики с последующей сдачей отчетности выше по лестнице власти smile
Кому интересно, в папке "Служебное" есть черновая инструкция.

Что нужно доделать:
1. Желательно переделать счётчик записей следующим образом: отображается количество пациентов только за выбранный месяц (допустим, в таблицах отображаются только те пациенты, которые поступили в октябре => счётчик выводит количество только этих пациентов).
2. В таблицу добавить столбец с нумерацией (именно не id записи, а просто номер по порядку от 1 до N, где N-последняя запись). При сортировке по ФИО/дате/полу и т.д. данный столбец остаётся в неизменном состоянии (т.е. также от 1 до N). Необходимо, чтобы этот столбец выводился в отчете в таком же виде.
3. Заменить существующий экспорт в Excel на экспорт в отчётную форму, настроенную по шаблону.
4. Думаю всё-таки вернуть "Поиск" (спрошу в отделе после тестирования, нужен ли данный функционал).
5. Настроить ввод заглавными буквами в поле ФИО (простое использование маски типа >llllllllllllllllll не нравится).
6. Что-то сделать с датами. При импорте из CSV пациентов, рожденных до 1960 года в таблице отображается некорректный год рождения (т.е. если родился в 1925-1959, то при импорте записывается 2025-2059)... (в системных настройках стоит промежуток 1930-2029). Из-за этого пришлось перейти на формат даты dd/MM/yy.
7. Отказался от Бэкапа при старте программы (вылетает ошибка о нарушении структуры скрипта, если я правильно понял, хотя при первых запусках бэкапилось всё замечательно). Так же при многократных запусках создаётся много копий БД smile По причине многократности копий отказался от бэкапа при выходе (в скрипте можно поудалять // в соответсвующих процедурах)

Пока вроде всё. Как появится время, буду добивать проект. Опять же, он предназначен для свободного пользования, если кому-то пригодится - пользуйтесь (сделан в MVDB v.1.46 beta)

6

(16 replies, posted in Russian)

А нельзя эту задумку реализовать, добавив элемент "Counter"?
Пытаюсь сделать так:  в главной таблице pacient создаю поле с типом "счетчик" с начальным значением 0, а в главном окне интерфейса добавляю элемент "Counter" ну и соответственно указываю в свойствах данного элемента TableName=pacient... Если чисто теоретически, при добавлении пациента в этом элементе должна обновляться цифра? У меня оно (это самое окошко) остаётся пустым...

7

(16 replies, posted in Russian)

Чучкин Евгений wrote:

по последней потребности
возможно так решить.

procedure Main_OnShow (Sender: string; ACol, ARow: Integer);
var
   s: string;
begin
s := VarToStr( SQLExecute('SELECT count(id) FROM table ;') );
Main.Label8.Caption:= 'количество пациентов в базе-' + s;
end;

но точно по синтаксису не уверен.

Работает, но немного не так: счетчик обновляется только при перезапуске программы..
Подвесил пока на кнопку таким образом:

procedure Main_Button2_OnClick (Sender: string; ACol, ARow: Integer);
var
     s: string;
     begin
            s := VarToStr( SQLExecute('SELECT count(id) FROM pacient ;') );
            Main.Label14.Caption:= 'количество пациентов в базе-' + s;
     end;

При таком способе хоть по кнопке тыркнуть можно и количество пациентов обновится.
Спасибо за помощь smile

8

(16 replies, posted in Russian)

DriveSoft wrote:

baster.89
Немного поправил ваш проект.

1. Для дат у вас использовался тип Текст, заменил на тип Дата


2. Не было поиска, сделал, но добавление нового пациента теперь через кнопку "Добавить пациента"


3. Неверно были настроены фильтры в TableGrid на вкладках, поправил.


4. Кнопка очистить теперь автоматически обновит все TableGrid


5. Надпись в Label Импорт завершен заменил на всплывающее сообщение.

Спасибо за уделённое время. Потестил обработанный вами проект, одна из основных функций (а именно импорт записей из csv-файла) не хочет работать, поэтому всё же от некоторых моментов откажусь...В общем, лучше отвечу по пунктам smile
1. Если использовать тип "Дата", то ввод идёт через комбобокс. Работники организации сказали,что проще с клавиатуры ввести в обычное окошко. Поэтому всё-таки оставил тип "Текст" с маской 00.00.0000
2. "Поиск" не является необходимой функцией опять (из-за специфики работы). Но его я оставлю, т.к. всё же порой вещь полезная.
3. Фильтры хорошие smile Тоже оставляю (более практичные что ли, по сравнению с моими?)
4. С кнопкой "Очистить" разобрался путём, который указал Евгений на несколько постов выше, работает чудно (ещё раз отдельное спасибо).
5. Замена надписи на всплывающее сообщение - как раз то, что мне и хотелось увидеть. Конечно же оставляю.

Пока тестил, появилась потребность в ещё одной маленькой функции: на видимом месте должно отображаться общее количество записей (т.е. сколько всего пациентов внесено в базу) ну и соответственно данная цифра обновляется автоматически при добавлении нового пациента (будь то ручной ввод либо импорт из csv). Или в крайнем случае можно выводить данную информацию во всплывающем сообщении после нажатия  предназначенной для этого кнопки.

Извиняюсь за столь глупые вопросы, но ни в написании скриптов,ни в написании SQL-запросов не силён sad

9

(16 replies, posted in Russian)

Спасибо большое, моих познаний точно бы не хватило, чтобы так быстро додуматься,снова часов до 3-х ночи общался бы с гуглом smile
Теперь нормально таблицу чистит и обновляет.
Остался вопрос по поводу "исчезновения" надписи об успешном импорте... Или всё-таки реализовать через скрипт? Т.е. после того,как записи импортировались, появляется форма с сообщением об успешном импорте и потом её ручками закрывать.

ПС. Как доведу до работоспособного состояния, проект будет выложен в теме "РЕШЕБНИК. БИБЛИОТЕКА ГОТОВЫХ РЕШЕНИЙ. Исходник прилагается".

10

(16 replies, posted in Russian)

Приветствую.
Помогите с проблемой: при нажатии на кнопку выполняется SQL-запрос вида DELETE FROM table_name (т.е. мне необходимо,чтобы были удалены все записи из таблицы). Данная процедура проходит нормально, но если в настройках запроса указать, чтобы данные выводились в TableGrid,то после выполнения запроса ошибка "Cursor not returned from Query".
Пришлось делать две кнопки: одна удаляет записи, другая обновляет таблицу  (запрос вида SELECT column_name  FROM table_name с обновлением TableGrid).
Как реализовать, чтобы при нажатии на одну кнопку происходило сначала удаление записей и потом происходило обновление? Либо, более предпочтительно, чтоб обновились все TableGrid (их 13 штук)?
И вторая загвоздка: после выполнения скрипта выводится сообщение "Импорт завершён" (скрипт писался на примере проекта, по ведению базы стоимости валют,брался на форуме). Вопрос следующий: можно ли сделать так, чтобы это сообщение исчезло,допустим, через 30 секунд?
ПС. Проект выкладываю для свободного пользования и исправления под свои нужды. В нём ничего замудрённого нет. Хотя, можно глянуть скрипт для импортирования из *.csv