powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Определение возраста
25 сообщений из 187, страница 3 из 8
Определение возраста
    #38020124
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот такой код набросал.. я не до конца понял задачу поэтому как мне кажется этот код должен работать правильно, но он не выводит ничего. хотя все условия учел

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
IF hediag.compr='>='
   IF pacient.agep>=hediag.age
      IF sluch.ds0=hediag.code AND sluch.ds1=hediag.code  AND sluch.ds2=hediag.code
         SELECT * FROM sluch
         ELSE
         MESSAGEBOX("Нету!")
      ENDIF
   ENDIF 
ELSE
Другое условие
...
Рейтинг: 0 / 0
Определение возраста
    #38020154
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991вот такой код набросал.. я не до конца понял задачу поэтому как мне кажется этот код должен работать правильно, но он не выводит ничего. хотя все условия учел

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
IF hediag.compr='>='
   IF pacient.agep>=hediag.age
      IF sluch.ds0=hediag.code AND sluch.ds1=hediag.code  AND sluch.ds2=hediag.code
         SELECT * FROM sluch
         ELSE
         MESSAGEBOX("Нету!")
      ENDIF
   ENDIF 
ELSE
Другое условие



Раз набросал такой код, то наверное, знаешь, что и куда этот код должен выводить?
...
Рейтинг: 0 / 0
Определение возраста
    #38020163
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IgorNG, код должен выводить те случаи в которых код МКБ не соответствует возрасту пациента. но что-то ничего не выводит ни окно msgbox ни данные селекта
...
Рейтинг: 0 / 0
Определение возраста
    #38020170
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991вот такой код набросал.. я не до конца понял задачу поэтому как мне кажется этот код должен работать правильно, но он не выводит ничего. хотя все условия учел

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
IF hediag.compr='>='
   IF pacient.agep>=hediag.age
      IF sluch.ds0=hediag.code AND sluch.ds1=hediag.code  AND sluch.ds2=hediag.code
         SELECT * FROM sluch
         ELSE
         MESSAGEBOX("Нету!")
      ENDIF
   ENDIF 
ELSE
Другое условие



Ну предположи, что 1-е условие соблюдается, а 2-е - нет. Куда попадешь?
...
Рейтинг: 0 / 0
Определение возраста
    #38020181
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IgorNG, хм.. этот момент я упустил. я не уверен что логика моего кода правильная. не совсем понял как проверить соответствие
...
Рейтинг: 0 / 0
Определение возраста
    #38020190
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
все равно не выводит

IF hediag.compr='>='
if pacient.agep>=hediag.age
IF sluch.ds0=hediag.code AND sluch.ds1=hediag.code AND sluch.ds2=hediag.code
SELECT * FROM sluch
ELSE
MESSAGEBOX("12312")
ENDIF
ELSE
messagebox("11111")
ENDIF
ENDIF
...
Рейтинг: 0 / 0
Определение возраста
    #38020246
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ye/ может так тебе понятней станет почему ничего не выводит. Скорее всего select пустой

WAIT "hediag.compr = " + hediag.compr WINDOW
WAIT "pacient.agep = " + STR(pacient.agep) WINDOW
WAIT "hediag.age = " + STR(hediag.age) WINDOW
WAIT "hediag.code = " + hediag.code WINDOW
WAIT "sluch.ds0 = " + sluch.ds0 WINDOW
WAIT "sluch.ds1 = " + sluch.ds1 WINDOW
WAIT "sluch.ds2 = " + sluch.ds1 WINDOW
IF hediag.compr='>='
IF pacient.agep >= hediag.age
IF sluch.ds0 = hediag.code AND sluch.ds1 = hediag.code AND sluch.ds2 = hediag.code
SELECT * FROM sluch INTO CURSOR MyCursor
SELECT MyCursor
BROWSE
ELSE
MESSAGEBOX("12312")
ENDIF
ELSE
messagebox("11111")
ENDIF
ENDIF[/quot]
...
Рейтинг: 0 / 0
Определение возраста
    #38020260
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IgorNG, сейчас пытаюсь разобраться. А вообще мой код правильно будет проверять соответствие кода МКБ т.е полей ds0,ds1,ds2 возрасту пациента? так как показано в таблице hediag? я выше описывал пример соответствия в hediag
...
Рейтинг: 0 / 0
Определение возраста
    #38020264
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
еще одно уточнение в sluch поля Ds0,ds1,ds2 имеют формат Z00.0 а в таблице Hediag поле code имеет формат Z000 без точки. надо еще и это учитывать в моем коде не учитывается т.к. не знаю
...
Рейтинг: 0 / 0
Определение возраста
    #38020273
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991,

Потому что описываешь мутно: "поле age в hediag содержат такие значения 14 может 19 и т.д. а поле compr такие ">=", "<", ">". "
Понятней нужно делать, потому что у тебя это перед глазами, а здесь ничего не видно. Если у тебя таблица, то и надо приводить таблицу, а не абстрактное перечисление.

age______headiag
14_______?????
19_______?????
...
Рейтинг: 0 / 0
Определение возраста
    #38020295
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IgorNG, вот таблица и поля курсора пациент и sluch:

create cursor pacient ( ;
id_paс I, ;
vpolis I, ;
spolis C(3), ;
npolis C(16), ;
smo C(5), ;
smo_ogrn C(13), ;
smo_ok C(5), ;
smo_nam C(20), ;
novor I, ;
inogor C(6), ;
fam C(30), ;
im C(30), ;
ot C(30), ;
w I, ;
dr t, ;
fam_p C(30), ;
im_p C(30), ;
ot_p C(30), ;
w_p I, ;
dr_p t, ;
mr C(10), ;
doctype I, ;
docser C(3), ;
docnum I, ;
snils I, ;
okatog I, ;
okatop I, ;
comentz C(10), ;
agep I, ;
adres C(18))




CREATE CURSOR sluch ( ;
id C(12), ;
idcase I, ;
mcod C(6), ;
glpu C(6), ;
spolis C(3), ;
npolis C(16), ;
novor I, ;
usl_ok I, ;
vidpom I, ;
npr_mo I, ;
order I, ;
t_order I, ;
podr C(6), ;
profil I, ;
det I, ;
nhistory I, ;
date_1 t, ;
date_2 t, ;
ds0 C(6), ;
ds1 C(6), ;
ds2 C(6), ;
code_mes1 I, ;
code_mes2 I, ;
rslt I, ;
ishod I, ;
prvs I, ;
iddokt I, ;
os_sluch I, ;
idsp I, ;
ed_col I, ;
tarif I, ;
sumv I, ;
oplata I, ;
sump I, ;
refreason I, ;
sank_mek I, ;
sank_mee I, ;
sank_ekmp I, ;
comentz C(10), ;
inogor C(6), ;
pr_nov I)
...
Рейтинг: 0 / 0
Определение возраста
    #38020301
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IgorNG, я привел одну строку из hediag чтобы было нагляднее как представлено соответствие кода МКБ возрасту
...
Рейтинг: 0 / 0
Определение возраста
    #38020397
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
с точкой в hediag.code проблем то не возникнет я думаю можно данные вывести в курсор и в курсоре заменить Z000 на Z00.0 при помощи STUFF(). .а вот логику не до конца понял я.
...
Рейтинг: 0 / 0
Определение возраста
    #38021029
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чтобы проверить в таблице hediag первую в первой записи поле age сделал 1, а поле compr=">=" и пишу следующий код:
Тут выбираю в курсор все записи из hediag и поле code из формата Z000 делаю таким Z00.0
Код: sql
1.
2.
3.
4.
5.
6.
SELECT * FROM hediag INTO CURSOR curs1 readwrite
SELECT curs1 
scan
replace curs1.code with STUFF(code,4,0,'.')
loop
endscan



а тут проверяю, если поле compr=">=" если поле pacient.age>=curs1.age то идет проверка кода МКБ они равны в hediag и в курсоре sluch, но результат в курсор cr не выводится и brow не выводит ничего на экран. может в коде у меня логика неправильная?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
IF curs1.compr='>=' 
   if pacient.agep>=curs1.age
      IF sluch.ds0=curs1.code 
         SELECT * FROM sluch  INTO CURSOR cr
         SELECT cr
         brow
      ENDIF 
   ENDIF 
ENDIF
...
Рейтинг: 0 / 0
Определение возраста
    #38021034
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
насколько я понимаю логика проверки соответствия кода МКБ возрасту должна быть такой: нужно проверить равно ли поле hediag.compr например ">=", далее больше ли или равно поле pacient.agep полю hediag.age. Если больше или равно нужно проверить равен ли код МКБ из sluch коду МКБ из hediag.code и если они равны то получается код МКБ из случая соответствует возрасту этого пациента. но что-то программно не получается сделать или не до конца понял логику я
...
Рейтинг: 0 / 0
Определение возраста
    #38021247
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Люди, у меня такой даже не работает. Почему? Не понятно. в первой записи поле pacient.agep=37 , а поле curs1.age=1, также первая запись поле curs1.compr=">=". Ведь должен по логике выводиться messagebox? что за непонятки?

Код: sql
1.
2.
3.
4.
5.
IF curs1.compr=">="
   if pacient.agep>=curs1.age
 MESSAGEBOX("111")
   ENDIF 
ENDIF 
...
Рейтинг: 0 / 0
Определение возраста
    #38021283
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
if curs1.age=1
messagebox("111")
endif

не работает.. у меня свет вырубился недавно и немного глючить стал fox может быть из-за этого?
...
Рейтинг: 0 / 0
Определение возраста
    #38021334
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991не работаетТекст ошибки где?
курсор curs1 вообще существует или как?
...
Рейтинг: 0 / 0
Определение возраста
    #38021350
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir, существует конечно.. текст ошибки нету.. логику задачи до конца понять не могу и возможно я что-то не так пишу в условиях.
...
Рейтинг: 0 / 0
Определение возраста
    #38021362
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991текст ошибки нетуЗначит, curs1.age<>1. Всё логично

Ещё раз можете описать, как связаны таблицы "пациент" и "случай"? Связь "хедиага" с ними вроде бы ясна...
...
Рейтинг: 0 / 0
Определение возраста
    #38021389
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir, pacient и sluch можно связать по полям npolis и spolis. Если нужно могу привести все поля из курсорв
...
Рейтинг: 0 / 0
Определение возраста
    #38021422
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir, поле age Не пустое, а просто он видимо проверяет весь курсор и на последней записи останавливается. а там age равно 18, но все равно по логике должен был вроде выдать результат. Просто я не понял до конца логику видать.. третий день вожусь((
...
Рейтинг: 0 / 0
Определение возраста
    #38021445
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991, переходим в выделенную тему, так, думаю, лучше будет.
...
Рейтинг: 0 / 0
Определение возраста
    #38022976
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991,

Включи эту UDF в SELECT:
UDF определения полных лет
Код: plsql
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
Определение возраста
    #38023122
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jonny540, Сейчас попробую разобраться в вашем коде.

Но у меня возник вопрос.

Написал такой же код для проверки соответствия кода МКБ для случая возрасту пациента вот код:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT distinct p.fam,p.im,p.agep as vozrast,sl.ds0 as MKB,sl.ds1 as MKB, sl.ds2 as MKB;
 ,cast(icase(alltrim(hediag.compr)=='>',pacient.agep>hediag.age;
   ,alltrim(hediag.compr)=='<=',pacient.agep<=hediag.age;
   ,alltrim(hediag.compr)=='<',pacient.agep<hediag.age;
   ,alltrim(hediag.compr)=='>=',pacient.agep>=hediag.age;
   ,.null.;
  ) as logical;
 ) as CheckMKB;
from pacient p ;
join sluch sl on p.spolis=sl.spolis and p.npolis=sl.npolis;
left join hediag h on chrtran(alltrim(sl.ds0),'.','')==alltrim(h.code) OR  chrtran(alltrim(sl.ds1),'.','')==alltrim(h.code) OR chrtran(alltrim(sl.ds2),'.','')==alltrim(h.code)



В таблице Hediag специально изменил возраст которому соответствует этот код на 45 лет, у пациента возраст определяется 43 года. Если я правильно понимаю работу этого кода то происходит выборка только тех случаев (случаи она должна выводить) для которых код МКБ соответствует возрасту. Но т.к. я в hediag сделал возраст для кода Z000 45 а у пациента с таким кодом возраст 43. то не должен был этот случай выводиться, но он выводится. Почему так?
...
Рейтинг: 0 / 0
25 сообщений из 187, страница 3 из 8
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Определение возраста
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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