<?php // Полная загрузка сервисных книжек, создан 2025-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='\
А как число талонов считаете?
В регистре СменныеЗадания наоборот, на одну услугу несколько 5и минутных талонов идет, т.е. по таблице услуг должно быть меньше талонов.
Тот же вопрос! Что такое количество талонов?
Талон = Заказ
То есть количество талонов это количество документов Заказ
Ещё странным кажется число регистраторов умеющих чеки пробивать.
Как я понимаю вы по ответственному у документов определяете автора заказа и чека.
Если число авторов заказов, в число которых входят и врачи, вполне нормально, то вот число регистраторов чеки пробивающих, как то настораживает.
У вас прям реально столько людей, работающих с деньгами?
У нас такой отчет разделен на несколько:
СтатистикаПоЧекам(примерно как в рознице)
СтатистикаЗаказов
СтатистикаНеОплаченныхЗаказов с причинами
Статистика по аналогичным периодам прошлых лет.
Кассиры смотрят чтоб продажи не падали, заведующая регистратуры мониторит заказы и отказы, когда всё плохо, смотрят «сезонность», вдруг это какой-то прогнозируемый спад.
(4)
Чеки пробивают кассиры . У чека основанием является Заказ , по нему и анализирую . Беру ответственных у документа Заказ и ответственных у основания документа Чек , в итоге в запросе через Объединить Все компоную отчёт .
(5) а как кассиры у вас влияют на продажи ?
(7) Когда продажи падают не планово, то старший кассир сигнализирует руководству. Далее оно уже начинает копаться, просит у зав регистратуры анализа почему такое произошло.
Ситуации разные, например заказали 100 услуг, из них оплатили лишь 50, но зато сумма продаж та же или выросла, или заказали 100, выполнили 80, но сумма продаж меньше, хотя по статистике вроде как у регистраторов планы выполнены, но оказывается что дорогостоящие услуги просто не оплатили.
(8)а у нас в практике замечено , что выписали человеку талон , а он увидев сумму разворачивается и уходит .
(4) У нас прям реально 13 регистраторов, по очереди работающих с деньгами.
(5) Может поделитесь на инфостарте?
(10)в вашем случае отчёт тоже будет работать корректно
Кто нибудь юзает эту конфу? Такая замудренная, где ей можно обучиться?
(13)Есть «Учебный курс 1С:Медицина.Поликлиника» ,поищите в интернете.
(14) спасибо, поищу
(13) Я юзаю. Обучиться можно только методом тыка, я наверное пачку листов переписки уже написала в техподдержку.
(16) Полностью с вами согласен, сами столкнулись с этой конфигурацией.
Прошу прощения что не по теме, у кого то были проблемы с ККТ, вид оплаты не правильно вставал и чек аннулировался?
И еще раз не по теме, но может кто ни будт подскажет как работает документ Прикрепление пациентов?)))
(18)
А что именно надо? Там по идее надо внешнюю обработку писать для каждой страховой и их разными форматами(демо пример есть в поставке), эта внешняя обработка подсунет данные в документ и он проведется по регистру прикреплений.
Механизм такой, во внешней обработке описываете формат своего файла, механизм загрузки и создания пациента, буквально 2 метода, если есть какие-то нюансы, в этих методах правите. Далее в приложении добавляете эту обработку, создаете элемент в справочнике МенеджерыЗагрузкиДанных, указав вашу обработку и поля загрузки, если они отличаются от тех, что по умолчанию в вашей обработке. И всё, идете в документ загрузки.
(11)
https://infostart.ru/public/936596/
Так как отчеты вшиты в конфу и используют новые метаданные, проблематично было сходу отчеты выложить.
Но все таки нашел время слепить внешний отчет, пока один, дальше по свободному времени буду смотреть.
Как будет полноценный функционал расширений, на него переделаю 😉
(19)Спасибо больше за разъяснение))) мы уже свою написали внешнею из экселя загружать. Теперь мне стал понятен смысл загрузки для этого документа.
(21) В больничной аптеке такая штука раньше была, сейчас не знаю уже =)
Менеджер загрузки удобен тем, что код по обработке данных из экселя не надо писать, на выходе таблица получается нужная просто. Там два предопределенных режима: прикрепления и листки нетрудоспособности, ну и произвольные загрузки можно в нём же делать. Удобно когда механизм загрузки один, а поля в файле меняются в зависимости от страховой )
(22) огромное спасибо за пояснение) а то конфигурация очень «интересная», сколько еще намучились с фискальным регистратором….
(23)
Не за что ) по формату фискальных данных можно подглядывать в Рознице, у них быстрее актуализируют =)
И пишите в поддержку, если что-то не ясно, там подскажут как исправить, ну нам, по крайней мере, не однократно помогали с проблемами
(24)Да так и пришлось поступить. А в поддержку пишите какому то из представителей?
(25)
Описание продукта
напрямую пишу.
раньше на форуме и почтой писал, сейчас на 1с коннект перешли =)
Коллеги, здравствуйте! Очень надеюсь на вашу помощь! В медицине поликлинике есть обработка «Просмотр занятости», в ней отображается порядка 40 медицинских рабочих мест.
Так вот, если поставить в настройках период автообновления = 1 сек, то она начинает потихоньку отжирать память. В итоге все заканчивается полным подвисанием с вылетом в «недостаточно памяти». Разработчики молчат пока…