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




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2026-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 не будет опубликован. Обязательные поля помечены *