powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Определение возраста
25 сообщений из 187, страница 6 из 8
Определение возраста
    #38028513
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir, Нет вроде ваш код правильный.. У пациента возраст 6 и 15 лет, а код Е343 может услуга с кодом Е343 может быть только у тех пациентов возраст которых <=1 тогда он выводит эти услуги как те у которых код МКБ не соответствует возрасту. Правильно же вроде..
...
Рейтинг: 0 / 0
Определение возраста
    #38028516
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991Обнаружил ошибку.

Вот в таблице hediag код E343 соответствует пациентам у которых возраст < или = 1. У пациента с услугой у которого код Е343 возраст 6 и 15 лет. А в результате выдается эти услуги как те у которых код мкб не соответствует возрасту. А тут в чем загвоздка?

дополнил код tanlir'a прописав после всего
Код: sql
1.
HAVING checkmkb=.f.



А что, разве соответствует?

Heading <= 1
У пациента 6 и 15
...
Рейтинг: 0 / 0
Определение возраста
    #38028517
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir, Извиняюсь, сразу не подумал просто. Вам спасибо большое.
...
Рейтинг: 0 / 0
Определение возраста
    #38028670
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно еще один вопрос. Теперь тоже самое пытаюсь сделать для случаев. есть курсор sluch но вместо поля ds в нем три поля ds0,ds1,ds2. Это тоже коды МКБ, которые хранятся в hediag.

Этот же код, переделал под случаи, но он вместо полей ds0,ds1,ds2 использует как мне кажется тоже самое поле usl.ds. и в результате получается тот же результат что и для услуг. Хотя код МКБ тут уже другой

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT  p.spolis,p.npolis,h.code,p.agep,h.compr,h.age,sl.ds0 as MKB0,sl.ds1 as MKB1,sl.ds2 as MKB2;
   ,cast(icase(alltrim(h.compr)=='>',p.agep>h.age;
   ,alltrim(h.compr)=='<=',p.agep<=h.age;
   ,alltrim(h.compr)=='<',p.agep<h.age;
   ,alltrim(h.compr)=='>=',p.agep>=h.age;
   ,.null.;
  ) as logical;
 ) as CheckMKB;
from pacient p ;
join sluch sl on ALLTRIM(p.spolis)==ALLTRIM(sl.spolis) and ALLTRIM(p.npolis)==ALLTRIM(sl.npolis);
left join hediag h on chrtran(alltrim(sl.ds0),'.','')==alltrim(h.code) ;
HAVING checkmkb=.f.
...
Рейтинг: 0 / 0
Определение возраста
    #38028685
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет все работает. такого кода просто не было в hedag. Получилось. Всем спасибо.
...
Рейтинг: 0 / 0
Определение возраста
    #38029620
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jonny540, в функциях не разбираюсь я в фокспро вообще.. Ваш код который вычисляет дату, можно сделать так чтобы при выполнении программы она вычисляла возрасты и записывала результат в поле pacient.agep ?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
* вх.параметры: дата рождения (формат: дата), дата проверки/обследования (формат: дата)
* результат: количество полных лет (числовой, =>0)
* 1-й параметр не в формате DATA: -1 
* 2-й параметр не в формате DATA: -2 
* 1-й параметр > 2-й параметр: -3 
FUNCTION Full_Years
PARAMETERS Dr, Do
PRIVATE k, d1, cOldDate, cOldCent
IF TYPE("Dr")#'D'
	RETURN -1
ENDIF
IF TYPE("Do")#'D'
	RETURN -2
ENDIF
IF Dr > Do
	RETURN -3
ENDIF
IF DAY(Dr)=29 AND MONTH(Dr)=2 AND MOD(YEAR(Dr),4)=0
* здесь зависит от того, как принято определять возраст в вашей конторе
* некоторые пишут  Dr=Dr+1, но ИМХО, это неправильно
	Dr=Dr-1
ENDIF
cOldDate=SET("DATE")
cOldCent=SET("CENTURY")
SET DATE TO GERMAN
SET CENTURY ON
k=1
d1=LEFT(DTOC(Dr),6)
DO WHILE .T.
	IF CTOD(d1+STR(YEAR(Dr)+k,4)) >= Do
		EXIT
	ELSE
		k=k+1
	ENDIF 
ENDDO
SET DATE TO (cOldDate)
SET CENTURY &cOldCent
RETURN k-1
ENDFUNC
...
Рейтинг: 0 / 0
Определение возраста
    #38029645
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991Jonny540, в функциях не разбираюсь я в фокспро вообще.. Ваш код который вычисляет дату, можно сделать так чтобы при выполнении программы она вычисляла возрасты и записывала результат в поле pacient.agep ?Можно.
Одно небольшое исправление: не ">=",а ">"
Код: sql
1.
IF CTOD(d1+STR(YEAR(Dr)+k,4))  >  Do


Использовать готовую функцию, надеюсь, сможешь?
...
Рейтинг: 0 / 0
Определение возраста
    #38029646
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jonny540, в том то и дело что я не умею пользоваться функциями в фокспро, всю жизнь на делфи работал.. недавно только начал с фокспро.
...
Рейтинг: 0 / 0
Определение возраста
    #38029650
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991, 13413986
...
Рейтинг: 0 / 0
Определение возраста
    #38029657
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jonny540, там написано что в селекте надо писать, а потом через iif(). а в курсор нельзя вывести возрасты, а в селекте потом просто с полем из курсора работать?

хотел бы так если можно:

ВАШ_КОД
******
*****
в pacient.agep занести вычисленные возрасты
...
Рейтинг: 0 / 0
Определение возраста
    #38029667
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991,

Откуда брать исх. данные? Некогда весь топик перечитывать.
...
Рейтинг: 0 / 0
Определение возраста
    #38029697
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jonny540, возраст должен вычисляться на момент обследования. в курсоре pacient.dr это дата рождения этого пациента, а в услугах поле usl.data_1 это дата обследования. и надо вычислять возраст исходя из ээтого
...
Рейтинг: 0 / 0
Определение возраста
    #38029809
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991,

Как связаны pacient и usl, формат полей?
...
Рейтинг: 0 / 0
Определение возраста
    #38029818
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jonny540, они связаны полями spolis и npolis формат строковый (С)
...
Рейтинг: 0 / 0
Определение возраста
    #38029927
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991,

Что-то типа этого:
Код: sql
1.
2.
3.
4.
SELECT full_years(pacient.dr, usl.data_1) AS agesp ;  
FROM  paciebt INNER JOIN usl ;
ON  ALLT(pacient.spolis)+ALLT(pacient.npolis) == ALLT(usl.spolis)+ALLT(usl.npolis) ;
INTO CURSOR aaa

Это навскидку, возможно, есть ошибки, проверь.
...
Рейтинг: 0 / 0
Определение возраста
    #38029947
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jonny540, Проверил.. оказывается не data_1 а data_in ,но это неважно исправил это и мне выдает ошибку что data_in не найден, а в Курсоре usl есть такое поле

Код: sql
1.
2.
3.
4.
SELECT full_years(pacient.dr, usl.data_in) AS agep ;  
FROM  pacient INNER JOIN usl ;
ON  ALLT(pacient.spolis)+ALLT(pacient.npolis) == ALLT(usl.spolis)+ALLT(usl.npolis) ;
INTO CURSOR aaa
...
Рейтинг: 0 / 0
Определение возраста
    #38029966
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что значит Full_eyars does not exist
...
Рейтинг: 0 / 0
Определение возраста
    #38029971
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Full_eyars.prg does not exist точнее
...
Рейтинг: 0 / 0
Определение возраста
    #38029979
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ой ой ой создал файл Full_years.prg и туда вписал функцию определения возраста.. в результирующем курсоре поле agep везде -1 получилось и причем возрастов гораздо много там чем пациентов (количество записей)
...
Рейтинг: 0 / 0
Определение возраста
    #38030002
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991причем возрастов гораздо много там чем пациентов (количество записей)потому что кол-во записей там не равно кол-ву пациентов, оно равно кол-ву записей об услугах, оказанных пациентам (зачем там джойн, по-вашему?).
...
Рейтинг: 0 / 0
Определение возраста
    #38030054
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir, а почему везде -1 выдает?
...
Рейтинг: 0 / 0
Определение возраста
    #38030077
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991,

См. код:
Код: plsql
1.
2.
3.
4.
* результат: количество полных лет (числовой, =>0)
* 1-й параметр не в формате DATA: -1 
* 2-й параметр не в формате DATA: -2 
* 1-й параметр > 2-й параметр: -3 
...
Рейтинг: 0 / 0
Определение возраста
    #38030091
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jonny540, у меня в курсорах в таком виде дата 28.05.1975 12:00:00 AM тогда как сделать чтобы при заполнении курсора был формат даты? У меня тип стоит dr T
...
Рейтинг: 0 / 0
Определение возраста
    #38030107
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и еще такой вопрос, вы выводите вычисленные возрасты в курсор ааа, а можно вывести в тот же курсор pacient в поле agep?
...
Рейтинг: 0 / 0
Определение возраста
    #38030139
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991тогда как сделать чтобы при заполнении курсора был формат датыcast(поле as date)
Дима1991можно вывести в тот же курсор pacient в поле agep?читать про update
...
Рейтинг: 0 / 0
25 сообщений из 187, страница 6 из 8
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Определение возраста
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]