Разработка автоматизированной системы учета выбывших из стационара 
	
	
6. Больные, переведенные в другие лечебные учреждения; 
7. Нозология больных, переведенных из других стационаров; 
8. Нозологическая таблица умерших; 
9. Нозология больных умерших по возрастам; 
10. Нозология умерших в возрасте от 0 до 6 дней жизни; 
11. Операции умерших; 
12. Нозология умерших до суток; 
13. Нозология инфекционных заболеваний; 
14. Распределение инфекционных заболеваний по отделениям; 
15. Распределение выбывших иногородних больных по каналам  госпитализации  и 
   отделениям больницы; 
16.  Число  больных,  переведенных  в  другие  стационары,  из   них   число 
   новорожденных,  переведенных  в   другие   стационары,   и   число   лиц, 
   госпитализированных для обследования и оказавшихся здоровыми; 
17. Число новорожденных, умерших в возрасте от 0-6 суток,  число  умерших  в 
   первые 24 часа после поступления в стационар: в возрасте 0-24 часа  после 
   рождения, до 1 года, в том числе от пневмонии; 
18. Число больных инфарктом миокарда, поступивших в первые сутки  от  начала 
   заболевания, число больных инфарктом миокарда, умерших в первые  24  часа 
   после поступления в стационар; 
19. Число умерших беременных, рожениц и родильниц, из них число  умерших  от 
   заболеваний, осложняющих беременность и роды. 
   Модуль настройки выполняет следующие функции: 
 > организация меню настройки; 
 > коррекция справочников по структуре стационара. 
      Вызов всех модулей второго  уровня  осуществляется  из  главного  меню 
программы. Связь между отдельными  модулями  второго  уровня  осуществляется 
только по данным через глобальные переменные и файлы активной базы данных. 
      Работа программы во  всех  режимах  кроме  режима  настройки  детально 
описана в документе "Руководство  программиста".  Режим  настройки  является 
режимом администратора базы данных и описан в настоящем документе в  разделе 
"Настройка программы". 
                           4. Настройка программы 
      Настройка программы на режим конкретного использования  заключается  в 
корректировке  справочников.  Для  корректировки  справочников   необходимо, 
находясь в главном меню программы, нажать Ctrl-F10. 
При этом пользователь попадает в меню со следующими альтернативами: 
 > выбор и изменение списка отделений стационара; 
 > выбор и изменение списка профилей коек; 
 > выбор и изменение списка направляющих организаций; 
 > выбор и изменение списка причин смерти; 
 > выбор и изменение списка районов; 
 > выбор и изменение списка возрастов; 
 > выбор и изменение списка причин перевода; 
 > выбор и изменение списка причин направлений; 
 > выбор и изменение списка стран содружества. 
      При  выборе  любого  пункта  меню  пользователь   переходит   к   меню 
добавления, удаления и переименования выбранного списка. 
      В меню, для добавления нового элемента необходимо нажать клавишу  INS. 
При этом вам будет предложено ввести новое название. Введите его  и  нажмите 
клавишу ENTER. Для удаления элемента нажмите  клавишу  DEL.  Предоставляется 
другое меню из двух альтернатив "Удалять элемент из списка",  "Не  удалять". 
Для отказа от удаления выберите пункт "Не удалять" и нажмите  клавишу  ENTER 
либо клавишу ESC. Для  удаления  стационара  выберите  пункт  меню  "Удалять 
стационар из списка" и нажмите клавишу ENTER. 
      При нажатии клавиши ENTER осуществляется  выбор  текущего  элемента  в 
списке с целью его переименования. Введите новое название и нажмите  клавишу 
ENTER. ESC означает отказ от переименования. 
      При нажатии ESC происходит возврат в предыдущее меню. 
                    5. Сообщения системному программисту 
      В программе не  предусмотрено  специальных  сообщений  для  системного 
программиста. При работе программы возможна выдача сообщений  исполнительной 
системой Clipper. Типичными сообщениями могут быть: 
 > "Not enought memory","Memory fault" - по этим сообщениям следует  удалить 
   из оперативной памяти все резидентные программы, кроме русификаторов. 
 >  "Unable  to  open  file  "  -  следует  проверить  наличие  в 
   директории указанного файла и при его отсутствии скопировать с  резервной 
   дискеты. 
      В более сложных случаях  следует  записать  сообщение  и  ситуацию,  в 
которой оно возникло и обратиться к разработчикам программы.. 
                                                                Приложение 5 
                         Текст и описание программы: 
          “Автоматизированная система учета выбывших из стационара” 
                                      . 
                       1. Общие сведения о программе. 
ВНИМАНИЕ! 
Перед  прочтением  данного  документа  следует  ознакомиться  с  документами 
"Описание применения" и "Руководство оператора". 
      Автоматизированная система  учета  выбывших  из  стационара  (условное 
обозначение  КАРТА)  предназначена  для  автоматизации  процесса  заполнения 
формы №066/у Минздрава и получения фиксированных отчетных форм. 
      Программа работает под управлением операционной системы MS DOS  версии 
3.1 и выше. 
      Перед  первым  запуском  программы  в  файл  AUTOEXEC.BAT   необходимо 
включить запись: 
      SET CLIPPER=F50. 
      В файле CONFIG.SYS параметр FILES установить равным 50 
      (FILES=50). 
      Программа реализована на языке программирования Clipper Summer'87. 
                        2. Функциональное назначение. 
Программа выполняет следующие функции: 
1. Ввод, хранение, коррекцию данных по выписанным из стационара больным; 
2.  Оформление  печатных  документов  по  данным  о  выписанных  больных  за 
   отчетный период; 
3. Настройку на структуру конкретного стационара. 
              3. Описание логической структуры программы КАРТА. 
                  3.1 Общие сведения о структуре программы 
      Структура программы КАРТА представлена на рис.7. 
[pic] 
                   Рис. 7. Логическая структура программы. 
      Программа состоит из 5 функциональных  модулей  функций  и  библиотеки 
функций. 
      Главный модуль выполняет следующие функции: 
 > инициализация глобальных переменных; 
 > ввод текущей даты; 
 > открытие всех рабочих областей с индексными файлами; 
 > организация главного меню. 
      Модуль ввода данных выполняет следующие функции: 
 > создание и ввод данных в новую КАРТУ; 
 > редактирование данных уже существующих КАРТ. 
      Модуль навигации организует просмотр БД по определенным  пользователем 
условиям. 
      Модуль удаления удаляет из БД КАРТЫ, определенные пользователем. 
      Модуль отчетов формирует следующие отчеты: 
 > месячные по любому отделению; 
 > квартальные как по всему стационару, так и по любому его отделению: 
1. Состав больных в стационаре, сроки и исход лечения; 
2. Состав больных новорожденных, поступивших в возрасте 0-6  суток  жизни  и 
   исход их лечения; 
3. Хирургическая работа учреждений; 
4. Распределение больных по возрасту и району; 
5. Состав больных, выбывших в возрасте от 0 до 6 суток жизни; 
6. Больные, переведенные в другие лечебные учреждения; 
7. Нозология больных, переведенных из других стационаров; 
8. Нозологическая таблица умерших; 
9. Нозология больных умерших по возрастам; 
10. Нозология умерших в возрасте от 0 до 6 дней жизни; 
11. Операции умерших; 
12. Нозология умерших до суток; 
13. Нозология инфекционных заболеваний; 
14. Распределение инфекционных заболеваний по отделениям; 
15. Распределение выбывших иногородних больных по каналам  госпитализации  и 
   отделениям больницы; 
16.  Число  больных,  переведенных  в  другие  стационары,  из   них   число 
   новорожденных,  переведенных  в   другие   стационары,   и   число   лиц, 
   госпитализированных для обследования и оказавшихся здоровыми; 
17. Число новорожденных, умерших в возрасте от 0-6 суток,  число  умерших  в 
   первые 24 часа после поступления в стационар: в возрасте 0-24 часа  после 
   рождения, до 1 года, в том числе от пневмонии; 
18. Число больных инфарктом миокарда, поступивших в первые сутки  от  начала 
   заболевания, число больных инфарктом миокарда, умерших в первые  24  часа 
   после поступления в стационар; 
19. Число умерших беременных, рожениц и родильниц, из них число  умерших  от 
   заболеваний, осложняющих беременность и роды. 
   Модуль настройки выполняет следующие функции: 
 > организация меню настройки; 
 > коррекция справочников по структуре стационара. 
      Вызов всех модулей второго  уровня  осуществляется  из  главного  меню 
программы. Связь между отдельными  модулями  второго  уровня  осуществляется 
только по данным через глобальные переменные и файлы активной базы данных. 
      Работа программы во  всех  режимах  кроме  режима  настройки  детально 
описана  в  документе  "Руководство  оператора".  Режим  настройки  является 
режимом  администратора  базы  данных  и  описан  в  документе  "Руководство 
системного программиста и администратора базы данных" в  разделе  "Настройка 
программы". 
      Исходный текст программы (всех модулей) находится в  файле  KARTA.PRG. 
Библиотека функций находится в файле LIB.OBJ. Справочники размещены в  файле 
CODIF.DBF.  Для  получения  загрузочного  модуля   необходимо   набрать   на 
клавиатуре следующую команду: 
         rtlink fi KARTA, lib lib terminal, clipper, extend, dbfntx 
и нажать клавишу ENTER. 
                      3.2 Описание алгоритма программы 
      Схема алгоритма работы программы представлена на рис. 8. 
      Для   работы   с   Международным   классификатором   болезней    (МКБ) 
использовалась функция MKB(). 
      Для работы с каталогом операций использовалась функция CATALOG(). 
[pic] 
                  Рис. 8. Схема алгоритма работы программы. 
      Для работы со справочниками используются следующие функции: 
 > codif() - функция выбора альтернативы из вертикального меню, построенного 
   на основе данных справочника. 
 > mempro(), codpic(), codtxt() - функции для экранного редактирования  МЕМО 
   - полей баз данных. 
 > extra() - функция восстановления  текста  выбранной  альтернативы  по  ее 
   номеру в справочнике. 
 > ins_pic() - функция добавления информации в справочник. 
 > del_pic() - функция удаления инфомации из справочника. 
      Для представления текста отчетного документа  на  экране  используется 
функция viewer(). 
                    4. Используемые технические средства 
      Программа "КАРТА" предназначена для установки на персональных ЭВМ  IBM 
PC XT/AT cо следующим набором периферийных  устройств:  принтер,  дисплей  с 
платой адаптера EGA\VGA, накопитель на жестком диске  объемом  не  менее  80 
Мб. Минимальный объем свободной оперативной памяти 540 Кб. 
                             5. Вызов и загрузка 
      Для вызова программы следует набрать в командной строке: 
                                   =>karta 
или выбрать файл karta.EXE с помощью «оболочки» типа  'NORTON  COMMANDER'  и 
нажать клавишу ENTER. 
                              6. Входные данные 
      Входной информацией программы является следующая: 
 > данные, вводимые пользователем (см. "Руководство оператора"); 
 >  данные,  хранящиеся  в  базе  данных  по  пациентам  (см.   "Руководство 
   системного программиста"); 
 > текущая системная дата; 
 > данные, хранящиеся в справочных базах данных (см. "Руководство системного 
   программиста"). 
                             7. Выходные данные 
      Выходной информацией программы является следующая: 
 >  данные,  введенные  пользователем  в  базу  данных  по  пациентам   (см. 
   "Руководство системного программиста"); 
 >  документы,   сформированные   по   введенным   данным(см.   "Руководство 
   оператора"); 
                                      . 
                 Текст программы на языке Clipper Summer'87 
Модуль: Karta.prg 
********************************************************************* 
*    Название программы :         "KARTA"                           * 
*    Дата последних изменений :   23.12.92                          * 
*    Исходный текст :             Clipper Summer'87                 * 
********************************************************************* 
SET CONSOLE OFF 
SET ESCAPE ON 
SET MESSAGE TO 23 CENTER 
SET BELL OF 
SET DATE GERMAN 
SET SCOREBOARD OFF 
SET CONFIRM ON 
SET WRAP ON 
SET KEY -9  TO GO_MAIN            && ПО F10 - ВОЗВРАТ В МЕHЮ 
SET KEY -29 TO recon 
init_lib()         && Функция настройки для работы с библиотекой LIB29 
t_qwerty=.T. 
CLEAR 
******************************************** 
* глобальные переменные программы 
******************************************* 
PUBLIC edit_index  && .T.- редактировать номер ИБ нельзя 
                   && .F.- можно 
       edit_index=.F. 
PUBLIC gotomain    &&  принудительный возврат в главную процедуру 
                   &&  .T.- прервать внутренний цикл и вернуться в MAIN 
       gotomain=.F. 
PUBLIC _today      &&  Текущая дата работы 
PUBLIC rec_num     &&  Номер текущей записи 
******************************************* 
f1 = CHR(218) + CHR(196) + CHR(191) + CHR(179) + ; 
     CHR(217) + CHR(196) + CHR(192) + CHR(179) 
f2 = CHR(201) + CHR(205) + CHR(187) + CHR(186) + ; 
     CHR(188) + CHR(205) + CHR(200) + CHR(186) 
f3 = CHR(218) + CHR(196) + CHR(191) + CHR(179) + ; 
     CHR(180) + CHR(196) + CHR(195) + CHR(179) 
f1_fon = CHR(218) + CHR(196) + CHR(191) + CHR(179) + ; 
         CHR(217) + CHR(196) + CHR(192) + CHR(179) + ; 
         CHR(178) 
f2_fon = CHR(201) + CHR(205) + CHR(187) + CHR(186) + ; 
         CHR(188) + CHR(205) + CHR(200) + CHR(186) + ; 
         CHR(178) 
dn_s=CHR(198)+CHR(205)+CHR(181)+CHR(179)+; && стыкуется с рамкой 
       CHR(217)+CHR(196)+CHR(192)+CHR(179) && по верхней границе 
fon1=CHR(177) 
fon2=CHR(32) 
singl=CHR(218)+CHR(196)+CHR(191)+CHR(179)+; 
       CHR(217)+CHR(196)+CHR(192)+CHR(179) 
doubl=CHR(201)+CHR(205)+CHR(187)+CHR(186)+; 
      CHR(188)+CHR(205)+CHR(200)+CHR(186) 
IF .NOT. ISCOLOR() 
        color1="W+/N,N/W,W+/N,W/N,W/N"         && для меню 
        color2="W/N,W+/N"                      && для gets 
        color3="W+/N,N/W"                      && для кодификаторов 
        color4="W/N,N/W"                       && для рамки каталога 
        color5="W/N,N/W"                       && для меню при 
редактировании 
        color6="W/N,W+/N"                      && для memed 
        color7=color2                          && для шаблонов 
        color8="W/N,W+/N,N/W"                  && для HYPERTEXT 1-го уровня 
        color9="W/N,W+/N,N/W"                  && для HYPERTEXT 2-го уровня 
ELSE 
        color1="W+/B,N/G,BG/N,RB+/B,BG/B" 
        color2="BG/B,GR+/B,BG/B,RB+/B,BG/B" 
        color3="N/W,W+/GR" 
        color4="N/GR,W+/GR" 
        color5="G+/B,N/W,BG/B,RB+/B,+GR/B" 
        color6="W+/GR,N+/W" 
        color7="N/GR,+GR/GR" 
        color8="W+/B,G+/B,N/W" 
        color9="B/G,W+/G,W+/N" 
ENDIF 
********************   ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ   ********************** 
PRIVATE _NUM_IB      && Номер истории болезни больного 
PRIVATE _FAM         && Фамилия больного 
_FAM=SPACE(25) 
PRIVATE _F_S_NAME    && Имя,Отчество больного 
PRIVATE _DATE_B      && Дата рождения больного 
PRIVATE  time_B      && Время рождения 
time_B="00.00" 
PRIVATE _HOUR_B      && Часы рождения 
PRIVATE _MINS_B      && Минуты рождения 
PRIVATE _POL         && Пол 
PRIVATE _OLD         && Возраст на момент поступления 
PRIVATE _OLD_D       && Возраст на момент смерти 
PRIVATE _MASSA       && Масса 
PRIVATE _PLACE_LIV   && Место жительства 
PRIVATE _RAION       && Район проживания 
PRIVATE _CITY_VILL   && Городской/сельский житель 
PRIVATE _DIRECT1     && Кем направлен 
PRIVATE _DIRECT2     && Номер направляющего стационара 
PRIVATE _STATE       && Название государства 
PRIVATE _PLACE       && Название области РФ 
*PRIVATE _WHY         && Причины направления 
PRIVATE _DEPARTMENT  && Отделение 
PRIVATE _KOIKA       && Профиль койки 
PRIVATE _PASS        && Характер поступления (экстренно,не экстренно) 
PRIVATE _TIME        && Через какое время после заболевания 
PRIVATE _DATE_IN     && Дата поступления 
_DATE_IN=DATE() 
PRIVATE  time_IN     && Время поступления 
time_IN="00.00" 
PRIVATE _HOUR_IN     && Часы поступления 
PRIVATE _MINS_IN     && Минуты поступления 
PRIVATE _END1        && Исход заболевания 
PRIVATE _END2        && Причина исхода 
PRIVATE _END3        && Если переведен, то куда 
PRIVATE _DATE_END    && Дата выписки 
PRIVATE  time_END    && Время выписки 
time_END="00.00" 
PRIVATE _HOUR_END    && Часы выписки 
PRIVATE _MINS_END    && Минуты выписки 
PRIVATE _ALL_DAY     && Общее количество дней, проведенных в стационаре 
PRIVATE _DIA_DIRECT  && Диагноз направляющего учреждения 
PRIVATE _NUM_COME    && Номер поступления 
PRIVATE _RW_DATE     && Дата анализа на RW 
PRIVATE _RW_REZ      && Результат анализа 
PRIVATE _FAM_DOCTOR  && Фамилия лечащего врача 
PRIVATE _KOD1        && Клинический диагноз 
PRIVATE _KOD2        && Поталого-анатомический диагноз 
PRIVATE _SHIFR       && Шифр заболевания по МКБ 
PRIVATE _SHIFR_ILL   && Шифр операции из каталога операций 
********************************************************************* 
SELECT 0             && БД шифров заболеваний всех больных 
 USE DIA66 INDEX DIA66 ALIAS DIA66 
 COPY STRUCTURE TO BUFF.DBF 
SELECT 0             && Вспомогательная БД для формирования диагнозов 
больного 
 USE BUFF ALIAS BUFF 
 INDEX ON NUM_IB+KOD2+KOD1 TO BUFF.NTX 
SELECT 0             && БД шифров операций всех больных 
 USE OP66 INDEX OP66 ALIAS OP66 
 COPY STRUCTURE TO BUFF2.DBF 
SELECT 0             && Вспомогательная БД для формирования шифров операций 
 USE BUFF2 ALIAS BUFF2 
 INDEX ON NUM_IB TO BUFF2.NTX 
SELECT 0             && БД кодификаторов 
 USE CODIF INDEX CODIF ALIAS CODIF 
SELECT 0             && БД с основной информацией о пациентах 
 USE KARTA66 INDEX KARTA66 ALIAS KARTA 
SELECT 0             && БД с шаблонами 
 USE CODPIC INDEX CODPIC ALIAS CODPIC 
SELECT 0             && БД с прототипами 
 USE CODTXT INDEX CODTXT ALIAS CODTXT 
***********************   ОСHОВHАЯ РАМКА   *************************** 
SET COLOR TO "W+/N" 
flop_box('c', 0,0,24,79,doubl+fon1) 
saycent(0,0,79," ФОРМА N 66 ") 
saycent(24,0,79,'  перемещение     - выбор    F10-меню  ') 
********************   ВВОД СЕГОДHЯШHЕЙ ДАТЫ   *********************** 
SET COLOR TO(color2) 
_today=DATE() 
flop_box('c', 9,25,11,55,singl+fon2) 
@ 10,32 SAY "СЕГОДHЯ:" GET _today 
READ 
_NUM_IB=RIGHT(STR(YEAR(_today)),2)+"00000" 
********************************************************************** 
*                      ОСНОВНОЙ ЦИКЛ ПРОГРАММЫ                       * 
********************************************************************** 
@ 1,1 CLEAR TO 23,78     && очистка экрана для переменных 
SET COLOR TO (color1) 
@ 2,1,22,78 BOX f1_fon 
choice = 1 
PRIVATE screen0 
DO WHILE choice # 6 
  SET COLOR TO (color1) 
  gotomain=.f. 
  ***************** ВЫВОД ГЛАВНОГО МЕНЮ ********************* 
  @ 1,2  PROMPT "Создание" MESSAGE " ввод новой записи  ИБ" 
  @ 1,12 PROMPT "Удаление"   MESSAGE " удаление записи из ИБ" 
  @ 1,22 PROMPT "Редактирование/Печать" MESSAGE " редактирование записи ИБ 
" 
  @ 1,45 PROMPT "Навигатор"    MESSAGE "движение по базе данных" 
  @ 1,56 PROMPT "Отчет"        MESSAGE "составление отчетных форм" 
  @ 1,67 PROMPT "  Выход    "  MESSAGE " выход из программы " 
  MENU TO choice 
  SAVE SCREEN TO screen0 
DO CASE 
   CASE choice=1                  && Добавления записи 
      IF( inpindex()=0)           && Ввод ключа "НОМЕР ИСТОРИИ БОЛЕЗНИ" 
        @ 11,18 CLEAR TO 14,62 
        saycent(12,20,60,"ПОДОЖДИТЕ НЕМНОГО - ИДЕТ ИНИЦИАЛИЗАЦИЯ") 
        DO edit WITH .T. 
      ENDIF 
   CASE choice=2                  && Удаление записи 
        DO del 
   CASE choice=3                  && Изменение записи ИБ 
        SET COLOR TO(color2) 
        PRIVATE D1 
        DO WHILE .T. 
    D1=det()                && Поиск нужной записи 
     IF D1=1                && Запись найдена 
           saycent(12,20,60,"ПОДОЖДИТЕ НЕМНОГО - ИДЕТ СЧИТЫВАНИЕ ИЗ БД") 
           DO edit WITH .T. 
       EXIT 
     ELSEIF D1=2            && Запись не найдена 
           saycent(12,20,60,"ИНФОРМАЦИИ ОБ УКАЗАННОМ БОЛЬНОМ В БД НЕТ  ") 
       INKEY(5) 
     ELSE 
       EXIT 
     ENDIF 
    ENDDO 
    RELEASE D1 
   CASE choice=4                  && Движение по БД 
        DO navy 
   CASE choice=5                  && Составление отчетных документов 
        rez() 
   CASE choice=6                  && Завершение программы 
        EXIT 
ENDCASE 
PRIVATE sel 
sel=SELECT() 
SELECT BUFF 
ZAP 
SELECT BUFF2 
ZAP 
SELECT (sel) 
RELEASE sel 
RESTORE SCREEN FROM screen0 
ENDDO 
COMMIT                            && Сохраняем рабочие области на диске 
CLOSE ALL 
DELETE FILE BUFF.DBF 
DELETE FILE BUFF.DBT 
DELETE FILE BUFF.NTX 
DELETE FILE BUFF2.DBF 
DELETE FILE BUFF2.DBT 
DELETE FILE BUFF2.NTX 
RETURN 
********************************************************************** 
*                    КОHЕЦ ГЛАВHОГО МОДУЛЯ                           * 
********************************************************************** 
********************************************************************** 
*          INPINDEX() - функция ввода номера истории болезни         * 
********************************************************************** 
FUNCTION inpindex 
PRIVATE sel,ret,scr 
ret=-1 
@ 2,1,4,78 BOX f3+fon2 
sel=SELECT() 
SELECT KARTA 
SET CURSOR ON 
DO WHILE !gotomain 
  SET COLOR TO(color2) 
  @ 3,28  SAY "Номер ИБ " GET _NUM_IB  PICTURE "@R 99/99999" 
  READ 
        IF LASTKEY()=27           && ESC 
                ret= (-1) 
                EXIT 
        ENDIF 
  IF LEN(ALLTRIM(_NUM_IB))=7 
        SEEK  _NUM_IB 
        IF FOUND() 
       TONE(100,3) 
           message('e',"ТАКАЯ ЗАПИСЬ УЖЕ СУЩЕСТВУЕТ,ПРОВЕРЬТЕ HОМЕР ИБ ") 
                LOOP 
        ENDIF 
                ret=0 
                EXIT 
  ELSE 
       TONE(100,3) 
       message('e','HЕ ЗАПОЛHЕH НОМЕР ИБ,ПРОВЕРЬТЕ ЗАПИСЬ') 
       ret=-1 
  ENDIF 
ENDDO 
SELECT(sel) 
RETURN (ret) 
********************************************************************** 
********************************************************************** 
*    DET() -  функция поиска необходимой для редактирования записи   * 
********************************************************************** 
FUNCTION det 
PRIVATE ret1,menu1 
PRIVATE sel1,clr1,screen1 
 ret1=2 
 sel1=SELECT() 
 clr1=SETCOLOR() 
 SELECT karta 
 SET COLOR TO &color5 
 @ 10,8 CLEAR TO 14,72 
 SAVE SCREEN TO screen1 
 @ 11,15 PROMPT "ВВЕДИТЕ НОМЕР И/Б        " 
 @ 13,15 PROMPT "ВВЕДИТЕ ФАМИЛИЮ БОЛЬНОГО " 
 MENU TO menu1 
 IF menu1=0 
    ret1=0 
 ELSEIF menu1=1 
  SET CURSOR ON 
  @ 11,45 GET _NUM_IB PICTURE "@R 99/99999" 
  READ 
  SET CURSOR OFF 
  SEEK _NUM_IB 
  IF FOUND() 
     ret1=1 
  ENDIF 
 ELSEIF menu1=2 
  SET CURSOR ON 
  @ 13,45 GET _FAM PICTURE "@K" VALID RUSSIAN(_FAM) 
  READ 
  SET CURSOR OFF 
  SET FILTER TO FAM=ALLTRIM(_FAM) 
  GO TOP 
  IF !EOF() 
     ret1=1 
     _NUM_IB=NUM_IB 
  ENDIF 
  SET FILTER TO 
 ENDIF 
 RESTORE SCREEN FROM screen1 
 SELECT (sel1) 
 SET COLOR TO (clr1) 
RETURN (ret1) 
********************************************************************** 
*                         ЗАПОЛНЕНИЕ 66 ФОРМЫ                        * 
********************************************************************** 
PROCEDURE edit 
PARAMETERS do_edit 
PRIVATE wt,wb,wl,wr,choice,beg_line,length,string,string1,title 
PRIVATE sel,str,i 
****************   ОБЪЯВЛЕНИЕ  МЕНЮ   ***************** 
PRIVATE last,numenu 
last=SELECT() 
numenu=1 
 select 0 
 use menu.dbf index menu alias menu 
numenu=RECCOUNT() 
DECLARE promp[numenu-1],vars[numenu-1],row[numenu-1],col[numenu-1] 
         && массив промптеров  для основного меню 
GO TOP 
i=1 
SEEK "MAIN" 
title=STRTRAN(ALLTRIM(text),'Н','H') 
SKIP 
DO WHILE !EOF()  &&LEFT(KEY,4)="MAIN" 
  promp[i]=STRTRAN(ALLTRIM(text),'Н','H') 
  i=i+1 
  SKIP 
ENDDO 
 use 
SELECT (last) 
*******************   КОНЕЦ ОБЪЯВЛЕНИЯ   ************** 
AFILL(vars,' ') 
AFILL(col,1) 
wt=3 
wb=22 
wl=2 
wr=77 
length=wr-wl+1     && Длина строки текста, выводимого на экран 
beg_line=1 
PRIVATE   New_Str  && Признак новой строки для Context 
New_Str=.F.        && Без выделения промптеров 
************************************************************** 
s=IF(KARTA->END1=3,6,3) 
DECLARE promp1[s],vars1[s],row1[s],col1[s] && массив промптеров дополн. 
меню 
   promp1[1]="Основное заболевание :" 
   promp1[2]="Осложнения :" 
   promp1[3]="Сопутствующие заболевания :" 
   AFILL(vars1,' ') 
   AFILL(col1,1) 
IF s=6 
   promp1[4]="Основное заболевание :" 
   promp1[5]="Осложнения :" 
   promp1[6]="Сопутствующие заболевания :" 
ENDIF 
************************************************************** 
DO initial         && Процедура формирования выводимого текста 
************************************************************** 
cur_promp=1 
@ 3,1 CLEAR TO 22,78 
DO WHILE .T. 
IF gotomain.AND.do_edit 
   IF yesno(12,"  Сохранить изменения в базе данных ? ")=1 
      IF all_r() 
         DO new_save 
     RETURN 
      ELSE 
         gotomain=.F. 
      ENDIF 
   ELSE 
         RETURN 
   ENDIF 
ELSEIF gotomain.AND.!do_edit 
   RETURN 
ENDIF 
new_str=.F. 
choice=hypertxt(wt,wl,wb,wr,string,promp,row,col,@beg_line,@cur_promp,color8 
,; 
                title) 
cur_promp=cur_promp%len(promp)+1 
IF do_edit 
   i=choice 
   DO CASE 
      CASE i=0 
           LOOP 
      CASE i=1 
           LOOP 
      CASE i=2 
       vars[i]=offset_get(wt,wl,beg_line,row[i],col[i],promp[i],@_FAM,; 
                          "","RUSSIAN(_FAM)") 
      CASE i=3 
      vars[i]=offset_get(wt,wl,beg_line,row[i],col[i],promp[i],@_F_S_NAME,; 
                         "","RUSSIAN(_F_S_NAME)") 
      CASE i=4 
       _DATE_IN=d_input(_DATE_IN) 
       vars[i]=DTOC(_DATE_IN) 
       _ALL_DAY=_DATE_END-_DATE_IN 
       IF _ALL_DAY=0 
          _ALL_DAY=1 
       ENDIF 
       DO ch_day    && Изменение количества дней, проведеннх в стационаре 
      CASE i=5 
       vars[i]=offset_get(wt,wl,beg_line,row[i],col[i],promp[i],@time_IN,; 
                          "99.99","check_T(time_IN)") 
       _HOUR_IN=VAL(SUBSTR(time_IN,1,2)) 
       _MINS_IN=VAL(SUBSTR(time_IN,4,5)) 
      CASE i=6 
       vars[i]=codif1("POLS",@_POL) 
      CASE i=7 
       _DATE_B=d_input(_DATE_B) 
       vars[i]=DTOC(_DATE_B) 
      CASE i=8 
       vars[i]=offset_get(wt,wl,beg_line,row[i],col[i],promp[i],@time_B,; 
                          "99.99","check_T(time_B)") 
       _HOUR_B=VAL(SUBSTR(time_B,1,2)) 
       _MINS_B=VAL(SUBSTR(time_B,4,5)) 
       y_m_day(_DATE_B,_HOUR_B,_MINS_B,_DATE_IN,_HOUR_IN,_MINS_IN) 
      CASE i=9 
       vars[i]=codif1("OLDS",@_OLD) 
      CASE i=10 
       vars[i]=m_input()                             && Ввод веса тела 
      CASE i=11 
vars[i]=offset_get(wt,wl,beg_line,row[i],col[i],promp[i],@_PLACE_LIV) 
      CASE i=12 
       vars[i]=codif1("RIGS",@_RAION) 
      CASE i=13 
       vars[i]=codif1("CITZ",@_CITY_VILL) 
      CASE i=14 
       vars[i]=codif1("DIRS",@_DIRECT1) 
       IF _DIRECT1=1 
           vars[i]=codif1("BIRS",@_DIRECT2) 
       ELSEIF _DIRECT1=2 
           vars[i]=codif1("HOSP",@_DIRECT2) 
       ELSE 
          _DIRECT2=0 
       ENDIF 
      CASE i=15 
       vars[i]=codifpic("CODIF","STTE",@_STATE) 
       IF _STATE=1 
          promp[i]="Регион :" 
          vars[i]=codifpic("CODIF","PLCE",@_PLACE) 
       ELSE 
          promp[i]="Государство :" 
       ENDIF 
*     CASE i=15 
*      vars[i]=codif1("RIZS",@_WHY) 
      CASE i=16 
       vars[i]=codif1("DEPS",@_DEPARTMENT) 
      CASE i=17 
       vars[i]=codif1("KOIK",@_KOIKA) 
      CASE i=18 
       vars[i]=codif1("EXTR",@_PASS) 
      CASE i=19 
       vars[i]=codif1("TIMS",@_TIME) 
      CASE i=20 
       vars[i]=codif1("REZS",@_END1) 
      CASE i=21 
       _DATE_END=d_input(_DATE_END) 
       vars[i]=DTOC(_DATE_END) 
       _ALL_DAY=_DATE_END-_DATE_IN 
       IF _ALL_DAY=0 
          _ALL_DAY=1 
       ENDIF 
       IF _ALL_DAY>=0.AND.EMPTY(_DATE_IN)=.F. 
        vars[i]=vars[i]+SPACE(5)+"Проведено дней в стационаре 
:"+STR(_ALL_DAY) 
       ENDIF 
      CASE i=22 
       vars[i]=offset_get(wt,wl,beg_line,row[i],col[i],promp[i],@time_END,; 
                          "99.99","check_T(time_END)") 
       _HOUR_END=VAL(SUBSTR(time_END,1,2)) 
       _MINS_END=VAL(SUBSTR(time_END,4,5)) 
      CASE i=23 
       PRIVATE txtd 
       txtd=SPACE(100) 
vars[i]=offset_get(wt,wl,beg_line,row[i],col[i],promp[i],@_DIA_DIRECT,; 
                          "@R 999.9") 
       mkb(1,1,@_DIA_DIRECT,@txtd) 
       IF _DIA_DIRECT="    " 
            vars[23]="" 
       ELSE 
            vars[23]=SUBSTR(_DIA_DIRECT,1,3)+"."+SUBSTR(_DIA_DIRECT,4,1)+" 
"+; 
                          "" 
            new_str=.T. 
       ENDIF 
       RELEASE txtd 
      CASE i=24 
       vars[i]=codif1("VIZI",@_NUM_COME) 
      CASE i=27 
       _RW_DATE=d_input(_RW_DATE) 
       vars[i]=DTOC(_RW_DATE) 
      CASE i=28 
       vars[i]=codif1("RWRZ",@_RW_REZ) 
      CASE i=29 
       vars[i]=codifpic("CODIF","FAMS",@_FAM_DOCTOR) 
********************************************* 
      CASE i=25 
       vars[i]=diagn() 
       new_str=.T. 
********************************************* 
      CASE i=26 
       DO op 
       new_str=.T. 
      ENDCASE 
*********************************************************** 
string1="" 
IF choice#25.AND.choice#26 
   vars[choice]=TRIM(vars[choice])+"." 
ENDIF 
context(@string1,promp[choice],vars[choice],length,New_Str) 
IF choice=20 
       IF _END1=2          && переведен 
      context(@string1,"Причина:",codif1("RIZ2",@_END2)+".",length,.F.) 
      context(@string1,"Куда:",codif1("HOSP",@_END3)+".",length,.F.) 
       ELSEIF _END1=3      && умер 
      context(@string1,"Причина:",codif1("RIZ3",@_END2)+".",length,.F.) 
       ENDIF 
ELSEIF choice=22.AND._END1=3 
       y_m_day(_DATE_B,_HOUR_B,_MINS_B,_DATE_END,_HOUR_END,_MINS_END) 
       context(@string1,"Возраст на момент смерти :",; 
                        extra1(_OLD_D,"OLDS")+".",length,.F.) 
ELSEIF choice=26 
   context(@string1,"Обследование на реакцию ВАССЕРМАНА :","",length,.F.) 
ENDIF 
stuff1(@string,length,string1,choice,row,len(promp)) 
ENDIF 
ENDDO 
RETURN 
********************************************************************** 
*               ПРОЦЕДУРА ФОРМИРОВАНИЯ СОДЕРЖИМОГО 66 ФОРМЫ          * 
********************************************************************** 
PROCEDURE initial 
PRIVATE sel,i,v 
PRIVATE rez 
SET CURSOR OFF 
sel=SELECT() 
v=replicate(chr(176),30) 
@ 13,25 SAY v 
SELECT karta 
vars[1]= SUBSTR(_NUM_IB,1,2)+'/'+SUBSTR(_NUM_IB,3,7) 
vars[2] =FAM 
 _FAM=FAM 
vars[3] =F_S_NAME 
 _F_S_NAME=F_S_NAME 
vars[4]=DTOC(DATE_IN) 
 _DATE_IN=DATE_IN 
*__________________________________ 
_HOUR_IN=HOUR_IN 
_MINS_IN=MINS_IN 
IF _HOUR_IN=0.AND._MINS_IN=0 
   time_IN="00.00" 
ELSEIF _HOUR_IN=0 
   time_IN="00."+STR(MINS_IN) 
ELSEIF _MINS_IN=0 
   time_IN=STR(HOUR_IN)+".00" 
ELSE 
   time_IN=STR(HOUR_IN)+"."+STR(MINS_IN) 
ENDIF 
vars[5]=time_IN 
*---------------------------------- 
vars[6] =extra1(POL,"POLS") 
 _POL=POL 
vars[7] =DTOC(DATE_B) 
 _DATE_B=DATE_B 
*__________________________________ 
_HOUR_B=HOUR_B 
_MINS_B=MINS_B 
IF _HOUR_B=0.AND._MINS_B=0 
   time_B="00.00" 
ELSEIF _HOUR_B=0 
   time_B="00."+STR(MINS_B) 
ELSEIF _MINS_B=0 
   time_B=STR(HOUR_B)+".00" 
ELSE 
   time_B=STR(HOUR_B)+"."+STR(MINS_B) 
ENDIF 
vars[8]=time_B 
*----------------------------------- 
vars[9] =extra1(OLD,"OLDS") 
 _OLD=OLD 
 _OLD_D=OLD_D 
vars[10] =MASSA 
 _MASSA =MASSA 
vars[11] =PLACE_LIV 
 _PLACE_LIV=PLACE_LIV 
vars[12] =extra1(RAION,"RIGS") 
 _RAION =RAION 
vars[13]=extra1(CITY_VILL,"CITZ") 
 _CITY_VILL=CITY_VILL 
*___________________________________ 
 _DIRECT1=DIRECT1 
 _DIRECT2=DIRECT2 
 vars[14]=IF(_DIRECT2=0,extra1(_DIRECT1,"DIRS"),; 
                        IF(_DIRECT1=1,extra1(_DIRECT2,"BIRS"),; 
                          extra1(_DIRECT2,"HOSP"))) 
*------------------------------------ 
promp[15]=IF(PLACE#0,"Регион :","Государство :") 
vars[15]=IF(STATE#0,IF(STATE=1,; 
                      IF(PLACE=0,"Российская 
Федерация",extra1(PLACE,"PLCE")),; 
          extra1(STATE,"STTE")),; 
                    "Российская Федерация") 
 _STATE=IF(STATE=0,1,STATE) 
 _PLACE=PLACE 
vars[16]=extra1(DEPARTMENT,"DEPS") 
 _DEPARTMENT=DEPARTMENT 
vars[17]=extra1(KOIKA,"KOIK") 
 _KOIKA=KOIKA 
vars[18]=extra1(PASS,"EXTR") 
 _PASS=PASS 
vars[19]=extra1(TIME,"TIMS") 
 _TIME=TIME 
*__________________________________ 
 _END1=END1 
 _END2=END2 
 _END3=END3 
vars[20]=extra1(_END1,"REZS") 
*---------------------------------- 
vars[21]=DTOC(DATE_END) 
 _DATE_END=DATE_END 
*__________________________________ 
_HOUR_END=HOUR_END 
_MINS_END=MINS_END 
IF _HOUR_END=0.AND._MINS_END=0 
   time_END="00.00" 
ELSEIF _HOUR_END=0 
   time_IN="00."+STR(MINS_END) 
ELSEIF _MINS_END=0 
   time_IN=STR(HOUR_END)+".00" 
ELSE 
   time_END=STR(HOUR_END)+"."+STR(MINS_END) 
ENDIF 
vars[22]=time_END 
*__________________________________ 
 _ALL_DAY=ALL_DAY 
 IF !EMPTY(_DATE_END) 
   vars[21]=vars[21]+SPACE(5)+"Проведено дней в стационаре :"+STR(_ALL_DAY) 
 ENDIF 
*---------------------------------- 
 _DIA_DIRECT=SHIFR 
 IF _DIA_DIRECT#"    " 
   PRIVATE txtd 
   txtd=SPACE(100) 
   mkb(1,1,@_DIA_DIRECT,@txtd) 
   vars[23]=SUBSTR(_DIA_DIRECT,1,3)+"."+SUBSTR(_DIA_DIRECT,4,1)+" "+; 
            "" 
   RELEASE txtd 
 ELSEIF _DIA_DIRECT="    " 
   vars[23]=_DIA_DIRECT 
 ENDIF 
*---------------------------------- 
vars[24]=extra1(NUM_COME,"VIZI") 
 _NUM_COME=NUM_COME 
vars[27]=DTOC(RW_DATE) 
 _RW_DATE=RW_DATE 
vars[28]=extra1(RW_REZ,"RWRZ") 
 _RW_REZ=RW_REZ 
vars[29]=extra1(FAM_DOCTOR,"FAMS") 
_FAM_DOCTOR=FAM_DOCTOR 
v=replicate(chr(178),10) 
@ 13,25 SAY v 
************************************* 
vars[25]=initial1("DIA66") 
v=replicate(chr(178),20) 
@ 13,25 SAY v 
************************************* 
SELECT op66 
SET SOFTSEEK ON 
seek  _num_ib 
SET SOFTSEEK OFF 
IF !FOUND() 
    vars[26]=""                         && Хирургические операции 
Страницы: 1, 2, 3, 4, 5 
	
	
					
							 |