Электронная регистратура медицинского учреждения




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

38 Comments

  1. NoMax

    А что-же МКБ-10Б не подключил?

    Reply
  2. seermak

    (1).так это не проблема — забить данные в справочник «диагнозы»(списка МКБ в электронном виде не нашел)- давайте список -закачаю 😀

    Reply
  3. IDija

    Как то в регистратуре видел подобную прогу(не 1С)…. я так понял стоит дорого. Так, что бери конфу и в больницу пусть покупают)))

    Reply
  4. NoMax

    (3) Ага, только за «Аналитом» в очередь 🙂 , тем более тут и намека на ОМС нет.

    (2) Вот здесь можно взять http://www.sql.ru/forum/actualthread.aspx?tid=228229

    Reply
  5. seermak

    (4)спасибо,скачал Слить из дбф дело нехитрое. Можно все дописать и ОМС и другие отчеты — было бы желание у заказчика.

    (3) в госбольницах ждут халяву — что управление что-нибудь им купит(хоть счеты), на том будут плеваться, но работать

    Reply
  6. IDija

    (4) Я конфу не смотрел, не знаю как там с омс! Думаю можно разработать. Аналит — это конфигурация для медицинских учреждений?

    Так эта же бесплатна)))

    Reply
  7. seermak

    (1) что-то в этом роде Вы имели ввиду

    Reply
  8. NoMax

    (7)В принципе да, я об этом говорил.

    и очень понравилось у вас в запросе выражение «СостояниеЗубовСрезПоследних», всесляет оптимизм.

    А касательно (5) что «в госбольницах ждут халяву — что управление что-нибудь им купит(хоть счеты), на том будут плеваться, но работать» не совсем верно, в МУЗ-ах деньги есть и купить они тоже могут многое, только это очень деликатный процесс.

    Reply
  9. uagav

    Все конечно красиво, НО: это более похоже на бухгалтерию, а не регистратуру. Естественно это больше подходит для стоматологов. Для обычной поликлиники это не вариант. К нам приезжало очень много таких халявщиков (это не к автору) которые начинали именно с стоматполиклиники, т.к. бухгалтерию они еще как-нибудь знают, а в медицине полный 0. Ни одна из этих программ не соответствовала потребностям. Все кстати и говорили что можно дописать, но за отдельную плату. А надо рабочую и сразу. Относительно больниц, так там вообще сделать универсальную программу просто практически невозможно, т.к. каждая отдельная больница имеет свою специфику, которую предусмотреть может только штатный программист (из практики). Учтите сразу что изменений будет очень много, а средств на это никто постоянно выделять не будет. Такие программы должны писаться в министерствах и посылаться бесплатно (в смысле за счет бюджета) вниз.

    Стоит ли это продолжать, имеет ли оно перспективу? Удачи, но оптимизма не вселяет…

    Reply
  10. seermak

    (9) Интересное Ваше мнение — то Вы говорите, что «написать универсальную программу практически невозможно», то «Такие программы должны писаться в министерствах и посылаться бесплатно (в смысле за счет бюджета) вниз» = там такие же программисты (наши, советские) писать будут — только еще проще = набросал программу «общими фразами», продал ее министерству (примеры — написания сайтов некоторым государственным структурам — деньги влупили немеренные, а получили в итоге…..) В результате = работа фирме-изготовителю универсальной программы «пожизненная» на исправлениях и доработках + оплата бюджетными денежками, пользователю (т.е. медучреждению) геморр (бесплатный от вышестояшего министерства)на всю оставшуюся жизнь и плевки в сторону ВСЕХ программистов.

    Теперь по делу: да программа не универсальна — написана для частной медицинской фирмы, их пока все устраивает = писал по их словам как им надо было. Вообще мое мнение = хотите чтобы программа любая (кроме счет) работала так, как Вам надо — берите на работу программиста, он без работы не останется и не ждите милости от министерств…………..

    Reply
  11. r2d255

    Сделал документ Прием(Наряд), провел, не отображается ни в одном отчете.

    в чем может быть причина?

    Reply
  12. ruslanmusa

    почему-то только график приема на рабочем столе не отображается и добавить туда не могу никого из врачей. а так очень даже понравилась конфигурация

    Reply
  13. seermak

    (12) сначала надо установить график работы самого учреждения

    (11) посмотрите по датам — отчеты на начало выбранного дня

    Reply
  14. trustgros

    скачал.. сыроватая конечно (по моему мнению), но есть с чего начинать. Спасибо за труды

    Reply
  15. l_oleg

    Понравилось

    история болезни в плане удобства использования тестового редактора,вставки изображений.

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

    Reply
  16. seermak

    (15)кстати запрос оптимизирован (только я не помню — есть ли он в этой конфигурации = если есть ОбщийМодульПовторныхЗапросов — то есть)

    Reply
  17. l_oleg

    (16)

    ОбщийМодульПовторныхЗапросов есть.

    В нем функция ПостроитьЗапросГрафика(…), которая в цикле формирует текст запроса.

    Вопрос оптимальности /не оптимальности творческий, и не однозначный.

    Я рассматривал оптимальность запроса не в разрезе составления его текста, а по времени его выполнения. 4-5 сек. наверно много для получаемого объема данных.

    Думаю что возможно избавить пользователя от возможности медитировать на изображение песочных часов.

    Reply
  18. seermak

    (17) Сделаете лучше — честь и хвала, а поделитесь еще и спасибо скажу.Исходные данные есть, результат известен — дерзайте)))(кстати запрос выполняется только первый раз долго — все последующие разы он не выполняется а результат берется из кэша, что повышает скорость выполнения)

    Reply
  19. kariatida

    Мальчики помогите! Вроде программа бесплатная, а почему-то, проработав полгода, именно с 1 декабря перестала запускаться, когда меняешь дату компьютера на ноябрь запускается. Что с ней и что делать?

    Reply
  20. seermak

    (20) в форме настройки есть кнопка регистрация + справка

    Reply
  21. kariatida

    Спасибо, что-то не обратила я почему-то внимание на нее)))

    Reply
  22. Idol

    И как зарегистрироваться чтоб открыть полную конфигурацию а то там ограничения по работе регистрация + справка не работает при отправке пищит что метод объекта не обнаружен (Создать Wmio)

    Reply
  23. seermak

    (23) значит осталась внутренняя ошибка. конфигурация после публикации почти год назад притерпела значительные изменения

    Reply
  24. kariatida

    Доброго времени суток! У меня тоже так пишет: «Метод объекта не обнаружен (СоздатьWmio)». Можно ли что-то сделать?

    Reply
  25. DUSIK

    Полезно,но исключительно как отправная точка, под каждую поликлинику приодеться переделывать.

    Reply
  26. 7fortune

    Скачал вашу конфигурацию,но она у меня не запускается:(( никаких ошибок при этом не пишет,просто окно закрывается и все! Другие конфигурации при этом стартуют нормально.Платформа 8.2.14

    Reply
  27. galiaf1386

    Добрый день! Как зарегистрировать эту конфигурацию при регистрации пишет «Метод объекта не обнаружен (СоздатьWmio)»

    Reply
  28. 7fortune

    В приеме пациентов,если выбрать период год,то программа долго думает и вываливается ошибка «Нехватка памяти»

    Reply
  29. seermak

    (29) Да Вы, батенька, наверное, экстремал — нафига выбирать период год (если для отчета — есть отчет, если для постановки на учет больного — не доживет) Вообще-то для года есть там второй график «предварительной записи»

    Reply
  30. Tezka99

    (27) 7fortune, У меня было также, вышел из положения созданием пользователя…

    Неплохо бы было еще выложить инструкцию для работы и начального заполнения…

    Reply
  31. kapa

    Как все-таки зарегистрировать программу? При попытке отправить письмо пишет: {ОбщийМодуль.ОбщийСервер.Модуль(704)}: Метод объекта не обнаружен (СоздатьWmio)

    Reply
  32. seermak

    на базе этой конфигурации сделана другая большая программа Эта конфигурация не обслуживается

    Reply
  33. Мать Тереза

    Может кому-то и пригодилась бы.

    Reply
  34. Saifa

    (31) Tezka99, у меня тоже не запускается (( Добавила пользователя, не помогло.

    Reply
  35. @Sonya

    1С медицина поликлиника — вот где ужас для простого пользователя, а порой и для программиста. Сделаете лучше — спрос будет. Юзабилити здесь очень важна, и простота структуры программы для понимания, и однозначность действий, и защита от «дурака» (горький опыт внедрения 1с медицины). Скачаю посмотрю, плюс в любом случае. На первый взгляд ничего.

    Reply
  36. seermak

    (36) на основе этой конфигурации сделана новая, специально заточенная для ортапедического салона = работают 3 год — претензий нет Посмотрите конфигурацию «Ежедневник». Если есть «нормальный» интерес = пишите, что-нибудь придумаем…..

    Reply
  37. @Sonya

    (37) клиент ушел, не вынес мук, причем программу сам выбирал и покупал. Но буду иметь ввиду вашу разработку.

    Reply
  38. zharkov.ss

    Бесплатная конфигурация для медицины, очень интересно, надо посмотреть, судя по скриншотам, вариант очень даже интересный. Нам как раз нужно что то подобное, по сути, запись на прием и оплата. Автору большое спасибо.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *