powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / проверить соответствие кода
55 сообщений из 55, показаны все 3 страниц
проверить соответствие кода
    #38021344
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
добрый день. Есть курсоры pacient, sluch и curs1.
Курсор pacient имеет основные поля agep, dr,npolis,spolis. Для каждого пациента из этого курсора имеются случаи которые хранятся в sluch. Основные поля npolis,spolis, ds0,ds1,ds2. Поля ds0,ds1,ds2 это коды МКБ. Нужно проверить соответствие кода МКБ возрасту пациента. в курсоре pacient agep - это поле возраст.

Проверка соответствия кода МКБ показана ниже: Есть курсор curs1 там поле code - КОД МКБ, age возраст, и поле compr - содержит знаки <,>,=.

если в curs1 поле age=1 а поле compr=">=" то значение в поле code соответствует пациенту возраст которого больше или равен 1 год

Задача проверить соответствие кода МКБ для каждого случая возрасту пациента.

помогите разобраться с логикой задачи.
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021369
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделай свою функцию и передавай туда возраст пациента, условие, возраст ограничения. А внутри проверяй и возвращай результат проверки.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
func CheckMKB
lpara tnAgep, tcUsl, tnAgeUsl
local llRet
tcUsl = alltrim(tcUsl)
do case
   case tcUsl == '>'
      llRet = (tnAgep > tnAgeUsl)
   case tcUsl == '<='
      llRet = (tnAgep <= tnAgeUsl)
   otherwise
      MessageBox('Неизвестное условие ' + tcUsl)
      llRet = .NULL.
endcase
return llRet


ЗЫ alltrim() и == использованы не случайно.
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021397
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, Usl это переменная или какое-то условие типа? у меня вроде идет в curs1 по полям age и compr условия. если age=10 к примеру и compr=">" то для таких пациентов код МКБ допустим Z000 это поле code
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021434
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А понял что значит Usl.. сейчас попробую разобраться в вашей функции
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021437
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не до конца понял. Ваша функция проверяет два условия и последнее otherwise выполняется если ни один из case не выполнился получается?
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021442
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991добрый день. Есть курсоры pacient, sluch и curs1.
Курсор pacient имеет основные поля agep, dr,npolis,spolis. Для каждого пациента из этого курсора имеются случаи которые хранятся в sluch. Основные поля npolis,spolis, ds0,ds1,ds2. Поля ds0,ds1,ds2 это коды МКБ. Нужно проверить соответствие кода МКБ возрасту пациента. в курсоре pacient agep - это поле возраст.

Проверка соответствия кода МКБ показана ниже: Есть курсор curs1 там поле code - КОД МКБ, age возраст, и поле compr - содержит знаки <,>,=.

если в curs1 поле age=1 а поле compr=">=" то значение в поле code соответствует пациенту возраст которого больше или равен 1 год

Задача проверить соответствие кода МКБ для каждого случая возрасту пациента.

помогите разобраться с логикой задачи.
Ну и что это, опять очередной курсовой проект ? "А голова нужна исключительно чтобы ею есть".
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021447
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CheckMKB в моем примере это пользовательская функция. tnAgep, tcUsl, tnAgeUsl - параметры.
Сохрани эту функцию в процедурный файл, или в файл CheckMKB.prg (без первой строки кода) и вызывай со своими параметрами:
if CheckMKB(pacient.agep, curs1.compr, curs1.age)
? 'Подходит'
else
? 'Не подходит'
endif

PS Ты бы книжку какую-нибудь почитал по фоксу. Судя по твоим постам ты в элементарных вещах путаешься.
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021448
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
reware, нет это не курсовая, по работе это..
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021450
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я по ходу учусь.. в свободное время читаю ведь
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021456
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991не до конца понял. Ваша функция проверяет два условия и последнее otherwise выполняется если ни один из case не выполнился получается?
Хэлп почитай про DO CASE

Читай книжку. Хотя бы синтаксис основных команд изучи.
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021457
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
select p.что_нибудь,u.что_нибудь
 ,icase(h.compr=='>',p.age>h.age
       ,h.compr=='<=',p.age<=h.age
       ,.null.) as CheckMKB
from pacient p 
join usl u on p.spolis=u.spolis and p.npolis=u.npolis
left join hediag h on u.ds==chrtran(h.code,'.','')
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021460
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir, не взрывай мозг начинающим
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021461
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правда, тут одна функция не на том месте поставлена... ну да это уже мелочи ))
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021463
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, сделал как ты говоришь. Мне нужно знаешь как: первый случай когда поле compr=">=". Надо проверить равно ли compr ">=" если равно проверить возраст пациента больше или равен возрасту в curs1. Если больше то получается возраст пациента удовлетворяет условию проверки возраста. как я понимаю и потом надо проверить коды МКБ из sluch которые удовлетворяют этому возрасту что ли? тут немного путаюсь
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021467
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir
Код: sql
1.
2.
3.
4.
5.
6.
7.
select p.что_нибудь,u.что_нибудь
 ,icase(h.compr=='>',p.age>h.age
       ,h.compr=='<=',p.age<=h.age
       ,.null.) as CheckMKB
from pacient p 
join usl u on p.spolis=u.spolis and p.npolis=u.npolis
left join hediag h on u.ds==chrtran(h.code,'.','')


Что-то сразу не заметил, не будет это работать.
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021470
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, это я-то взрываю? А зачем передавать в функцию tcUsl и tnAgeUsl, если достаточно одного tcCode (код случая), всё остальное она сама должна считать.
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021481
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЧто-то сразу не заметил, не будет это работать.Ладно, ладно:
Код: sql
1.
2.
3.
4.
5.
6.
7.
select p.что_нибудь,u.что_нибудь
 ,cast(icase(h.compr=='>',p.age>h.age
       ,h.compr=='<=',p.age<=h.age
       ,.null.) as logical) as CheckMKB
from pacient p 
join usl u on p.spolis=u.spolis and p.npolis=u.npolis
left join hediag h on u.ds==chrtran(h.code,'.','')

, так сойдёт?
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021485
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а нельзя сделать так как я говорю проверить первый случай поле compr если равно ">=" проверить возраст и потом код МКБ проверить и если соответствует вывести в курсор потом второе условие где compr="<" ? возможно ваши коды делают это но не все понимаю в них
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021494
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir, откуда usl? это у меня курсоры sluch,pacient и hediag (таблица), но я поле code в нем сделал тами: Z00.0 и вывел в курсор. А usl это другой курсор он тоже у меня есть но для него наверное отдельно надо проверять
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021501
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991и потом код МКБ проверитьТак я что-то не понял, мы что проверяем? Вроде бы код у нас уже есть, и нужно проверить возраст... а тут выясняется, что ещё и код проверять надо, что ли?

Мой пример соединяет услуги и пациентов по номерам полисов (первый джойн).
После чего для каждой пары "пациент-услуга" проверяет соответствие кода МКБ возрасту пациента (icase)
Чтобы это проверить, надо лезть в таблицу hediag, для чего и служит второй джойн. Он - левый(left), чтобы в случае, когда в услуге указан несуществующй код МКБ, пара "пациент-услуга" не потерялась (для таких пар результат проверки будет NULL).
Дима1991tanglir, откуда usl? это у меня курсоры sluch,pacient и hediagу вас же надо проверять usl.ds и sluch.ds1,ds2,ds3. Я написал для usl, но для случаев код будет тот же самый, только заменить таблицу и имена полей.
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021510
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirDima T, это я-то взрываю? А зачем передавать в функцию tcUsl и tnAgeUsl, если достаточно одного tcCode (код случая), всё остальное она сама должна считать.
Развернутый код проще понимается, несмотря на его объем и избыточность. Операции простейшие, можно построчно проследить что в какой последовательности происходит.
А когда решение всей задачи свернуто в одну строчку с непривычки можно мозг сломать пока поймешь что когда произойдет.
Может я и не прав. Проехали.
tanglir
Код: sql
1.
2.
3.
4.
5.
6.
7.
select p.что_нибудь,u.что_нибудь
 ,cast(icase(h.compr=='>',p.age>h.age
       ,h.compr=='<=',p.age<=h.age
       ,.null.) as logical) as CheckMKB
from pacient p 
join usl u on p.spolis=u.spolis and p.npolis=u.npolis
left join hediag h on u.ds==chrtran(h.code,'.','')

, так сойдёт?
Нет :)
Код: sql
1.
? '> ' == '>'


== вернет .F. если длина сравниваемых строк разная. Я ж не просто так alltrim() у себя добавил.
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021513
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir, вообще задача такова. опишу с самого начала. был xml Файл из него получили три курсора pacient, usl и sluch: пациенты, услуги и случаи. Для одного случая несколько услуг может быть. Задача такая стоит: проверить Соответствие кода МКБ возрасту пациента. Соответствие кода МКБ возрасту представлено в файле Hediag.dbf (в нем коды МКБ хранятся без точки, разделяющей подрубрики), пример на скриншоте:

тут выложу скрин таблицы hediag


Поля age и compr определяют возрастное условие. Определение возраста пациента нужно проводить на день даты исследования.
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021521
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
возраст пациентов определил сразу после получения курсоров и занес в поле pacient.age. теперь есть курсоры и возрасты.. дальше темный лес
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021526
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pacient.agep вернее
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021558
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991тут выложу скрин таблицы hediag

Ты лучше примеры в виде кода выкладывай, без ненужных деталей. Как то так:
Код: sql
1.
2.
3.
create cursor hediag (code c(5), Diag c(10), Age n(3))
insert into hediag ('Z000', 'Общий', 14)
insert into hediag ('Z001', 'Текущий', 19)


чтоб можно было скопировать и запустить.
Кстати откуда у тебя hediag взялся? Изначально была речь о pacient, sluch и curs1
вот их и выложи. По 3-4 строчки каждый. И пиши чего в итоге хочешь получить. А то все мутно и непонятно у тебя, мысли твои никто читать не умеет, телепаты на каникулах :)
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021582
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЯ ж не просто так alltrim() у себя добавилМда, аллтрим я и впрямь упустил.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select p.что_нибудь,u.что_нибудь
 ,cast(icase(alltrim(h.compr)=='>',p.agep>h.age
   ,alltrim(h.compr)=='<=',p.agep<=h.age
   ,.null.
  ) as logical
 ) as CheckMKB
from pacient p 
join usl u on p.spolis=u.spolis and p.npolis=u.npolis
left join hediag h on chrtran(alltrim(u.ds),'.','')==alltrim(h.code)

Для случаев почти то же самое, но для начала нужно хотя бы с услугами разобраться.
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021585
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TКстати откуда у тебя hediag взялся?Он его ещё в той теме выкладывал :)
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021595
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, Я опишу весь код где создаются курсоры и вычисляется возраст. Поля не все описываю только нужные. И еще мне тут на форуме помогли вывести данные из xml В курсор поэтому там доя пациентов, случаев и услуг по два курсора но все рабочее. А по поводу hediag такое дело в hediag поле код МКБ хранится в виде Z000 а в полученных курсорах в виде Z00.0 поэтому из hediag в curs1 вывел данные сделав значения в поле code такими Z00.0. Если так делать необязательно можно вместо curs1 сразу hediag использовать.

USE "C:\hediag.dbf" // тут путь так указал чтобы не возиться..а так пути у меня в таблице хранятся отдельно

USE IN SELECT('qweasd')
USE IN SELECT('pacient')
USE IN SELECT('usl1')
USE IN SELECT('usl')
USE IN SELECT('sluch1')
USE IN SELECT('sluch')

loXML = Createobject("msxml2.DomDocument.3.0")
loXML.Async=.F.
loXML.Load("D:\2.XML")
loXML1 = Createobject("msxml2.DomDocument.3.0")
loXML1.Async=.F.
loXML1.Load("D:\2.XML")
loXML2 = Createobject("msxml2.DomDocument.3.0")
loXML2.Async=.F.
loXML2.Load("D:\2.XML")

create cursor pacient ( ;
spolis C(3), ;
npolis C(16), ;
dr t)

create cursor qweasd ( ;
spolis C(3), ;
npolis C(16), ;
dr t)

create cursor usl1 ( ;
spolis C(3), ;
npolis C(16), ;
date_in t, ;
ds C(6))

create cursor usl ( ;
spolis C(3), ;
npolis C(16), ;
date_in t, ;
ds C(6))

CREATE CURSOR sluch ( ;
spolis C(3), ;
npolis C(16), ;
ds0 C(6), ;
ds1 C(6), ;
ds2 C(6))

CREATE CURSOR sluch1 ( ;
spolis C(3), ;
npolis C(16), ;
ds0 C(6), ;
ds1 C(6), ;
ds2 C(6))

loXMLNodes=loXML.getElementsByTagName("zap")
loNodes = loXMLNodes.nextNode
For i1=1 To loXMLNodes.Length
loXMLNodes2=loNodes.getElementsByTagName("pacient")
For i2=1 To loXMLNodes2.Length
m.xmldata='<?xml version = "1.0" encoding="Windows-1251" standalone="yes"?><vfpdata>';
+loXMLNodes2.Item(i2-1).xml;
+'</vfpdata>'
Xmltocursor(m.xmldata,'qweasd',8192)
Insert Into pacient SELECT * FROM qweasd
ZAP IN qweasd
loNodes2 = loXMLNodes2.nextNode
Endf
loNodes = loXMLNodes.nextNode
Endf
Release loXML

loXMLNodes=loXML1.getElementsByTagName("zap/sluch")
loNodes = loXMLNodes.nextNode
For i1=1 To loXMLNodes.Length
loXMLNodes2=loNodes.getElementsByTagName("usl")
For i2=1 To loXMLNodes2.Length
m.xmldata='<?xml version = "1.0" encoding="Windows-1251" standalone="yes"?><vfpdata>';
+loXMLNodes2.Item(i2-1).xml;
+'</vfpdata>'
Xmltocursor(m.xmldata,'usl1',8192)
Insert Into usl SELECT * FROM usl1
ZAP IN usl1
loNodes2 = loXMLNodes2.nextNode
Endf
loNodes = loXMLNodes.nextNode
Endf
Release loXML1

loXMLNodes=loXML2.getElementsByTagName("zap")
loNodes = loXMLNodes.nextNode
For i1=1 To loXMLNodes.Length
loXMLNodes2=loNodes.getElementsByTagName("sluch")
For i2=1 To loXMLNodes2.Length
m.xmldata='<?xml version = "1.0" encoding="Windows-1251" standalone="yes"?><vfpdata>';
+loXMLNodes2.Item(i2-1).xml;
+'</vfpdata>'
Xmltocursor(m.xmldata,'sluch1',8192)
Insert Into sluch SELECT * FROM sluch1
ZAP IN sluch1
loNodes2 = loXMLNodes2.nextNode
Endf
loNodes = loXMLNodes.nextNode
Endf
Release loXML2

SELECT pacient
SCAN
REPLACE pacient.agep WITH year(usl.date_in)-year(pacient.dr)
LOOP
ENDSCAN
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021602
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir, я думал ты для случаев делаешь поэтому не понял откуда usl.. и вместо "u.что-то" надо поля из курсора usl брать значит
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021630
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991Если так делать необязательноНеобязательно, я не зря chrtran в своём примере использовал.
Дима1991и вместо "u.что-то" надо поля из курсора usl брать значитНу да.

Кстати, возраст определяется с "обалденной" точностью - плюс-минус год. Вас это не смущает?
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021631
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991Если так делать необязательноНеобязательно, я не зря chrtran в своём примере использовал.
Дима1991и вместо "u.что-то" надо поля из курсора usl брать значитНу да.

Кстати, возраст определяется с "обалденной" точностью - плюс-минус год. Вас это не смущает?
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021636
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir, смущает, но это потом разберу.. главное с кодом МКБ разобраться.
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021638
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirDima TКстати откуда у тебя hediag взялся?Он его ещё в той теме выкладывал :)
ух ты, да тут целый сериал

Тогда подскажите где 2.XML искать.
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021642
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
написал так выдается ошибка: command is missing required clause

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select pacient.fam,usl.ds
 ,cast(icase(alltrim(hediag.compr)=='>',pacient.agep>hediag.age
   ,alltrim(hediag.compr)=='<=',pacient.agep<=hediag.age
   ,.null.
  ) as logical
 ) as CheckMKB
from pacient p 
join usl u on p.spolis=u.spolis and p.npolis=u.npolis
left join hediag h on chrtran(alltrim(u.ds),'.','')==alltrim(h.code)
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021647
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991написал так выдается ошибка: command is missing required clause

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select pacient.fam,usl.ds
 ,cast(icase(alltrim(hediag.compr)=='>',pacient.agep>hediag.age
   ,alltrim(hediag.compr)=='<=',pacient.agep<=hediag.age
   ,.null.
  ) as logical
 ) as CheckMKB
from pacient p 
join usl u on p.spolis=u.spolis and p.npolis=u.npolis
left join hediag h on chrtran(alltrim(u.ds),'.','')==alltrim(h.code)


не cast а case
там опечатка
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021659
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TДима1991написал так выдается ошибка: command is missing required clause

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select pacient.fam,usl.ds;
 ,cast(icase(alltrim(hediag.compr)=='>',pacient.agep>hediag.age;
   ,alltrim(hediag.compr)=='<=',pacient.agep<=hediag.age;
   ,.null.;
  ) as logical;
 ) as CheckMKB;
from pacient p ;
join usl u on p.spolis=u.spolis and p.npolis=u.npolis;
left join hediag h on chrtran(alltrim(u.ds),'.','')==alltrim(h.code)


не cast а case
там опечатка
Не туда посмотрел, все правильно с cast
точек с зяпятой не хватает
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021660
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, все равно ошибка осталась я делал так
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021683
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я написал такие поля и вы дал такой результат( на скриншоте): теперь хотел бы разобрать что именно она тут выдала, а то я ваш код вставил надо же еще и понять как работает

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select [color=red]pacient.agep[/color],[color=red]usl.ds[/color];
 ,cast(icase(alltrim(hediag.compr)=='>',pacient.agep>hediag.age;
   ,alltrim(hediag.compr)=='<=',pacient.agep<=hediag.age;
   ,.null.;
  ) as logical;
 ) as CheckMKB;
from pacient p ;
join usl u on p.spolis=u.spolis and p.npolis=u.npolis;
left join hediag h on chrtran(alltrim(u.ds),'.','')==alltrim(h.code)
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021725
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ваш код проверяет соответствие кода МКБ возрасту пациента для услуг? и как я понимаю этот код связан с тем кодом, который выше описал DimaT? т.е. в CheckMKB.prg есть шаблон по которому проверяет а тут уже с реальными данными. Но мне интересно делает ли она то что мне нужно и как делает.. в хелпе Не Нашел функций case, icase
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021768
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991Ваш код проверяет соответствие кода МКБ возрасту пациента для услуг? и как я понимаю этот код связан с тем кодом, который выше описал DimaT? т.е. в CheckMKB.prg есть шаблон по которому проверяет а тут уже с реальными данными. Но мне интересно делает ли она то что мне нужно и как делает.. в хелпе Не Нашел функций case, icase
Я давал только функцию проверки возраста, а не полное решение. В примере tanglir`а тоже самое внутри icase(), т.е. скомбинировать можно так:
Код: sql
1.
2.
3.
4.
5.
6.
select pacient.agep,usl.ds;
 ,cast(CheckMKB(pacient.agep, hediag.compr, hediag.age) as logical;
 ) as CheckMKB;
from pacient p ;
join usl u on p.spolis=u.spolis and p.npolis=u.npolis;
left join hediag h on chrtran(alltrim(u.ds),'.','')==alltrim(h.code)



этот код равносилен такому:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
create cursor result (agep I, compr C(3), age I, CheckMKB L)
sele pacient 
scan
   sele usl
   scan for pacient.spolis=usl.spolis and pacient.npolis=usl.npolis
       sele hediag
       llInsert = .F.
       scan for chrtran(alltrim(usl.ds),'.','')==alltrim(hediag.code)
            insert into result values (pacient.agep, hediag.compr, hediag.age, CheckMKB(pacient.agep, hediag.compr, hediag.age))
            llInsert = .T.
       endscan
       if !llInsert
            insert into result values (pacient.agep, hediag.compr, hediag.age, .NULL.)
       endif
   endscan
endscan
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021782
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tточек с зяпятой не хватает
Дима1991Dima T, все равно ошибка осталасьА у меня работает почему-то...
Дима1991Ваш код проверяет соответствие кода МКБ возрасту пациента для услуг? 13407926
Дима1991в хелпе Не Нашел функций case, icaseВозьмите лупу, ищите внимательней - они там есть.
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021795
Reese
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуйте искать по DO CASE
ICASE - появился в 9-ке
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021800
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, оба ваших кода,которые сейчас описали выдают ошибку field checkMKB does not accept null values . в предыдущем коде три поля таблицу вывели с тремя полями и тоже не понял что именно она вывела. Exp1 возраст наверное хотя я не понял почему везде 0.
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021805
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir, у меня тоже заработал проставил точки запятые. можете объяснить ваш код почему она 0 выводит в поле Expr1 и вообще работу вашего кода опишите пожалуйста
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021809
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Reese, у меня 9-я версия стоит
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021814
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запутался я уже в твоих селектах, не с того код написал :(
Код: sql
1.
2.
3.
4.
5.
6.
select pacient.agep,usl.ds;
 ,cast(CheckMKB(pacient.agep, hediag.compr, hediag.age) as logical;
 ) as CheckMKB;
from pacient p ;
join usl u on p.spolis=u.spolis and p.npolis=u.npolis;
left join hediag h on chrtran(alltrim(u.ds),'.','')==alltrim(h.code)


такой код взамен этого селекта
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
create cursor result (agep I, ds C(5), CheckMKB L null)
sele pacient 
scan
   sele usl
   scan for pacient.spolis=usl.spolis and pacient.npolis=usl.npolis
       sele hediag
       llInsert = .F.
       scan for chrtran(alltrim(usl.ds),'.','')==alltrim(hediag.code)
            insert into result values (pacient.agep, usl.ds, CheckMKB(pacient.agep, hediag.compr, hediag.age))
            llInsert = .T.
       endscan
       if !llInsert
            insert into result values (pacient.agep, usl.ds, .NULL.)
       endif
   endscan
endscan
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021819
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991выдают ошибку field checkMKB does not accept null values
да, забыл указать что NULL можно. Это так пишется:
Код: sql
1.
create cursor result (agep I, ds C(5), CheckMKB L null)
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021828
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, Вот этот код проверяет соответствие кода МКБ возрасту пациента? у меня в результате выдает "Неизвестное условие" раз 6-7. я сам запутался уже.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
create cursor result (agep I, ds C(5), CheckMKB L null)
sele pacient 
scan
   sele usl
   scan for pacient.spolis=usl.spolis and pacient.npolis=usl.npolis
       sele hediag
       llInsert = .F.
       scan for chrtran(alltrim(usl.ds),'.','')==alltrim(hediag.code)
            insert into result values (pacient.agep, usl.ds, CheckMKB(pacient.agep, hediag.compr, hediag.age))
            llInsert = .T.
       endscan
       if !llInsert
            insert into result values (pacient.agep, usl.ds, .NULL.)
       endif
   endscan
endscan
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021860
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991Dima T, Вот этот код проверяет соответствие кода МКБ возрасту пациента? у меня в результате выдает "Неизвестное условие" раз 6-7. я сам запутался уже.

Про МКБ не задумывался. Я смутно понимаю чего ты там вообще делаешь.
Я повторил тебе тоже что делает select, чтоб тебе понятней было. Т.е. то же самое, только по другому, с помощью SCAN ... ENDSCAN. Смотри логику и допиливай под свои нужды.
"Неизвестное условие" выдает функция CheckMKB() это значит что ты туда передал такое условие которое она не знает, т.е. надо там дописать соответствующий CASE для обработки данного условия.
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021932
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, как я понимаю твой код проверяет только возраст пациента.. но мне нужно код МКБ проверять. я сам не до конца понимаю логику. случай или услуга соответствует пациенту ведь. нужно в общем проверить соответствие кода МКБ если для услуги это поле usl.ds возрасту этого пациента. А в hediag описано какой код МКБ в какому возрасту соответствует
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38021973
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
дополнил код tanglir условиями которые вообще могут быть в hegiag.compr получилось так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select pacient.agep as vozrast,usl.ds 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 usl u on p.spolis=u.spolis and p.npolis=u.npolis;
left join hediag h on chrtran(alltrim(u.ds),'.','')==alltrim(h.code)



но почему возраст пустой показывается? совершенно непонято. в курсоре pacient вообще нет пациентов у которых возраст 0. вроде же код проверяет соответствие кода МКБ услуги в данном случае возрасту пациента?
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38022212
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991но почему возраст пустой показывается?Потому что надо
Код: sql
1.
p.agep as vozrast,u.ds

вместо
Код: sql
1.
pacient.agep as vozrast,usl.ds
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38022287
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir, вот сейчас выводит возраст и поле Exp2 имеет разные значения. Теперь получается в этой выборке выводятся те услуги где код МКБ соответствует возрасту пациента. Ведь так? и точно также можно сделать для случаев?
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38022666
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима1991Теперь получается в этой выборке выводятся те услуги где код МКБ соответствует возрасту пациента.Выводятся все услуги. При этом если в последней колонке true, то возраст соответствует коду, если false - не соответствует, если null - то код отсутствует в таблице hediag.
Дима1991и точно также можно сделать для случаев?Да.
...
Рейтинг: 0 / 0
проверить соответствие кода
    #38022691
Дима1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir, теперь по аналогии для случаев попробую сделать
...
Рейтинг: 0 / 0
55 сообщений из 55, показаны все 3 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / проверить соответствие кода
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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