Конфигурация для стоматологической клиники




Принцип обмена данными из 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='\

69 Comments

  1. anton.fly7

    красиво!

    а торговое оборудование не цепляли?

    Reply
  2. Evg-Lylyk

    (1) Спасибо. Пока не было необходимости

    Reply
  3. script

    Здесь нехватает еще (не помню точно как называется — по моему сетки) Отчета где видна история полеченных зубов клиента (номер зуба и т.д.)

    Reply
  4. Evg-Lylyk

    (4) Да много чего еще не хватает 😉

    Reply
  5. Арчибальд

    Всякая…….на плюс © Арчибальд

    Reply
  6. Aleksey.Bochkov

    «стомотологического больного» 😀

    Reply
  7. RailMen

    Тема ОООООООЧЕНЬ интересная. Когда будет описание пользователя? Почему нет демо сборки? Эх… Буду ждать и надеятся. Многоперспективный продукт может получится. Надо еще о стоимости подумать. Твой клиент, как мне кажется, — это не гос учреждения (там все вяло), а частные лавочки, которые действуют в рамках конкурентного рынка. И твоя конфа может дать конкурентные преимущества. Эти вот конторки в большинстве не очень богаты, но потратиться вполне могут. Руководитель стоматологии, как правило еще и врач, человек высокообразованный. Ему с успехом можно провести презентацию демки. Удачи!

    Reply
  8. zavedeev

    Хорошая конфа

    Reply
  9. Valerich

    Отлично смотрится

    Reply
  10. boogie

    Такое дело надо продавать! 🙂 А то кто-то другой продаст.

    Reply
  11. Ish_2

    Без какой -либо структуры, рекламирющей , проталкивающей , поддерживающей соваться в продажи не стоит. Впрочем , «прикола ради» можно выставить в магазин ИС. Там не затеряется.

    Reply
  12. DoctorRoza

    Пожалуйста .. прошу подсказать .. как Вы реализовали печать общих макетов из серверного модуля? Ведь

    ТабДок.Вывести(*****);

    ТабДок.Показать(*****);

    Доступность:

    Тонкий клиент, веб-клиент, толстый клиент.

    Посмотрел Вашу конфигурацию, посмотрел код, хотел найти именно печать общих макетов по нажатию кнопки из любой формы, но у меня это не работает! 🙁 Жму на печать .. допустим .. «Договор» и ничего, вывода не происходит! 🙁 Может я что не так делаю?

    Reply
  13. Evg-Lylyk

    (12) Вывести (доступна на сервере). а вот Показать() нет. А я думаю что за фигня в тонком клиенте не выводится на печать (сообщений никаких) в толстом все отрабатывает нормально. Можете глянуть (пришлось переделать)… спасибо для меня данная проблема была непонятна.

    Reply
  14. DoctorRoza

    Значит так .. такое решение .. на клиенте придется добавлять

    &НаКлиенте

    Процедура АК043У(Команда)

    ТабличныйДокумент = ПечатьАмбулаторнойКарты();

    Если ТабличныйДокумент <> Неопределено тогда

    ТабличныйДокумент.Показать()

    Конецесли;

    КонецПроцедуры

    Соответственно, поменять процедуры на функции .. убрать Показать() .. И тонкий клиет работает! ВотЬ

    P.s. Конфа мне понравилась .. разрешите введу у себя в госпитале? 😉

    Reply
  15. Evg-Lylyk

    (14) Я так и сделал 🙂

    разрешите введу у себя в госпитале?

    Используйте на здоровье. Если что доработаете или найдете ошибки пишите

    Reply
  16. Armando

    А че БСП не стал прикручивать?)

    Reply
  17. Evg-Lylyk

    (17) Пока было незачем. Дальше посмотрим.

    Reply
  18. CheBurator

    Теперь понятно, благодаря кому за выдирание зуба берут 200 баков…

    Reply
  19. iov

    (0) Конфа- хорошая ,но 8.2 и маленькие стоматологии где учет на буке ведется — ихмо пушка и воробьи… для продажи и 8,1 и 8,2 думаю стоит сделать. А в целом давно задумывался над таким только вот карточка зубов — нужная весчь + сканер подключить или если используется цыфра оборудование- прикрепление картинки снимка зубов. И пардон не могу открыть для посмотреть сейчас — там есть запись на прием с резервированием по кабинетно или по креслам?

    Reply
  20. Evg-Lylyk

    (19) Спасибо… вы говорите по делу … это все в разработке

    Reply
  21. af2000

    Хорошее начало! Успехов в дальнейшем развитии конфигурации

    Reply
  22. artbear

    (0) Женя, если не секрет, сколько примерно времени потратил на разработку?

    Reply
  23. Evg-Lylyk

    (22) Около 25-30 ч. (на 8.2 разрабатывать попроще)

    Reply
  24. gigagr

    А не думали о разработке для урологического кабинета ❓ ?

    Reply
  25. Evg-Lylyk

    (24) не было заказчика

    Reply
  26. Evg-Lylyk

    Залил видео http://zalil.ru/30075615

    в нем можно узнать чуток больше

    Reply
  27. iov

    (26) посмотри личку.

    Reply
  28. cortes711

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

    Reply
  29. piton667

    Нормальная конфа, Я похожую делал, увидел твою, тоже под управляемое приложение переделал.

    Reply
  30. Evg-Lylyk

    (29) выложи, пришли… хочется посмотреть

    Reply
  31. mihaangel

    замечательная конфигурация 1с

    не используется ничего стороннего

    гораздо лучше инфордента с его фаербердом

    Reply
  32. Evg-Lylyk

    (31) Спасибо. Есть большой недостаток… она достаточно простая… работаю над этим.

    Reply
  33. gigagr

    Под кабинет уролога не появилось заказчика?

    Reply
  34. Evg-Lylyk

    (33) Пока нет.

    Reply
  35. kalash75

    очень помогла

    Reply
  36. demys

    хочу посмотреть и возможно приобрести. есть заказчик

    есть несколько вопросов для доработки

    Reply
  37. Evg-Lylyk

    (36) Хорошо… можно в личку а лучше на емайл Evg-LylykСАБАКАmail.ru

    Reply
  38. nitr02k

    Все конечно хорошо, но нужно допилить под собственные нужды и да управляемое приложение тут к стати…

    Reply
  39. ПринцТьмы

    В целом стоящий продукт для «начального» уровня со стандартным функционалом. Думаю, в основе данной конфигурации лежит конфигурация Аналит:Стамоталогия или другие анологичные продукты, которые стоят, между прочем, очень хороших денег. Конфигурацию можно дальше дополнять в зависимости от требований заказчика в частном случае. А вообще респект

    Reply
  40. Evg-Lylyk

    (39)

    ПринцТьмы пишет:

    Думаю, в основе данной конфигурации лежит конфигурация Аналит:Стамоталогия или другие анологичные продукты, которые стоят, между прочем, очень хороших денег.

    делалось с оглядкой, но конфигурация решает довольно узкую задачу.

    Reply
  41. trustgros

    хорошая конфа, но конечно пока больше «теоретическая»..думаю мало стоматологических клиник смогут «поставить» себе ее и начать сразу работать

    Reply
  42. looooop

    Как раз то что я искал. А то текст был а реализации не было. Теперь можно будет посмотреть это в живую. Спасибо выложившему. Удачных разработок.

    Reply
  43. Трактор

    Ностальгия….

    В 1998-2000 годах я тоже делал конфу для стоматологии.

    Reply
  44. Гость

    А скажите модули можно поспотреть?

    Reply
  45. Evg-Lylyk

    (44) Конечно смотрите

    Reply
  46. DUSIK

    Спасибо, интересная конфа.Только правильно сказали что не хватает сетки зубов,и еще я б прицепил возможность крепления определенного пациента к определенному врачу.

    Reply
  47. Evg-Lylyk

    (47) Сетка есть в другой версии (не опубл.).

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

    дельное пожелание… спасибо.

    Reply
  48. T-AleXandr

    Интересная конфигурация, как не раз раз было сказано надо прикрутить ККМ и сетку зубов, а так все красиво реализовано. Желаю успехов в дальнейших разработках.

    Reply
  49. Kreds1

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

    Reply
  50. Evg-Lylyk

    (50) Нужно задать константу организация (у нее основной график) уже будет формировать + назначить графики врачам

    Reply
  51. Kreds1

    Странно, но все задал организацию графики четные и нечетные, все равно не заполняет.

    Еще получается организация работает по графику или сотрудник?

    Reply
  52. Kreds1

    Конфигурации только 5 плюс.

    Reply
  53. Nado2010

    суперская конфигурация… много отчетов…очень полезная конфигурация…большое спасибо автору

    Reply
  54. electronik

    В целом стоящий продукт для «начального» уровня со стандартным функционалом. Думаю, в основе данной конфигурации лежит конфигурации для другие анологичные продукты, которые стоят, между прочем, очень хороших денег. Конфигурацию можно дальше дополнять в зависимости от требований заказчика в частном случае. А вообще респект автору за труд

    Reply
  55. zse

    Ну это самое начало пути.

    Reply
  56. Alfer

    хорошая разработка — но как всегда еще работать и работать

    Reply
  57. Aleksand1985

    Я так понимаю небольшая критика и пожелания приветствуются?!

    Критики особой не выдам, т.к. конфа хорошая, простая и решает основную задачу: учёт посещений и расчетов с клиентами! Многим этого достаточно! Так что GOOD!

    Пожелание следующее: Документ «Прием-Наряд» графы «Номер квитанции об оплате» и «Оплаченная сумма». Лучше бы было чтобы эти графы заполнялись автоматически при вводе на ооснование «Прием-Наряда» документа «Возврат долга пациента»! Причём чтобы они были просто в виде надписей (чтобы регистраторы не могли их изменять). Соответственно надпись оплаты чтобы изменялась соответственно введенного на основании документа оплаты. Причем оплата может производится частями, несколькими документами оплаты.

    Было бы вообще идеально!

    Reply
  58. sanek-net

    Евгений, отличный вариант программы для стоматологов (я сам стоматолог), однако есть не очень нужные вещи, есть нужные, чего то не хватает. Мне необходимо дописать программу под конкретные цели, можете ли ВЫ это сделать? С уважением Александр( sanek-net@mail.ru)

    Reply
  59. de0nis

    Автору респект. Хорошая конфигурация. Чуть-чуть допилить и можно будет делать коробочное решение. )

    Reply
  60. katii

    Почему не работает прием пациентов?

    В таблице ничего не появляется после записи графиков?

    Reply
  61. katii

    Что за ошибка? При нажатии уведомление пациентов?

    {Обработка.ст_Уведомления.Форма.Форма.Форма(24)}: Значение не является значением объектного типа (Объект)

    НовыйДокумент = ФормаДокумента.Объект;

    Reply
  62. katii

    И где расписание работы сотрудников? (графики врачей, ввод наряда из графика)?

    Reply
  63. Evg-Lylyk

    (66), (67), (68) конфигурация для ознакомления. к сожалению нет много времени отвечать на вопросы.

    Для построения расписания нужно заполнить константу Основная организация и ее график работы + графики врачей.

    Reply
  64. katii

    Жаль мне своего времени и денег, что потратила та такую пустую, не работающую программу, данную демонстрацию можно было и бесплатно выложить

    Reply
  65. Evg-Lylyk

    (70) Сочувствую… программе много лет, она для простого ознакомления. Платно — это политика сайта. Когда она размещалась было все бесплатно.

    Reply
  66. KontoraB

    Хотел бы узнать про конфигурацию — есть новые доработки, новый функционал ?

    Reply
  67. Mellow

    Хорошая конфигурация, но многое нужно напильником доработивать

    Reply
  68. r-guliev

    Было бы хорошо если в карточке пациента имелись бы снимки рентгеновских снимков. Есть ведь специальные аппараты для внутриротовой рентгенографии (дентальные аппараты)… подключить его как торговое оборудование и в онлайн режиме загружать в программу (сохранять) снимки. ИМХО Программа была бы на расхват!

    Reply
  69. user787560

    есть конфа на основе этой еще на сайте http://infostart.ru/public/624923/

    Reply

Leave a Comment

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