<?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='\
И в чем смысл и полезность этого отчета?
Я еще понимаю, была бы какая-то аналитика за период. График распределения продаж по часам в течение какого-то периода.
Но тупо группировка по количеству продаж в течение одного дня….
По-моему публиковать такое как отдельную публикацию это неуважение к посетителям.
(1) ekaruk, человек сидел, старался, писал отчет. Он ему показался неимоверно крутым, ибо создание его заняло большое время. А Вы вот так пришли и сказали все, что думаете, с высоты своего опыта.
Хотя, конечно, отчет смешной.
(2) starik-2005, Сидел, старался, писал отчет из одного запроса одного реквизита из одной таблицы.
Подозреваю, что даже без формы все по умолчанию.
У автора есть в профиле простые, но все-таки более полезные отчеты, так что причину появления тут этой публикации я лично не понимаю.
(3) ekaruk, а вот, например, если бы отчет показывал количество документов с одним номером по видам документов и часам, то такой отчет был бы полезным на Ваш взгляд?
(4) starik-2005,
Как-то мне сложно в предпредновогодний вечер осмыслить это предложение.
На мой взгляд, он был бы полезным и интересным, если бы показывал «количество документов по видам документов и часам». Т.е. то же самое, но по всем документам построчно с общим итогом. И не за день, а за произвольный период времени.
(5) ekaruk, я тут немного о другом. В 1С иногда происходит странная странность: создаются документы с одним и тем же номером — сбивается нумерация. Просто есть такой незамысловатый отчет, в котором за период по дням и часам выводятся документы одного вида, для которых Количество(Номер) > 1.
Вот вроде тоже может так показаться, что отчет тупой. Но нас в свое время на работе очень сильно помогал бороться с дублями.
(1) ekaruk, Не спорю, отчетик конечно простенький. Нужно было узнать, в какой час идет максимальный наплыв покупателей. Можно и руками посчитать, а можно и отчетом все вывести. Размещал его бесплатно, но что то пошло не так, и выставили за старт мани, как снять на бесплатно — не знаю.
(7) вот это как раз говорит о том, что в аннотации надо было четко указать, зачем этот отчет, что могло бы предотвратить такую вот «первую» на него реакцию. Если добавить к отчету диаграмму и сделать период с анализом по месяцу/неделе/дню — вывод среднего почасового колебания, то отчету цены бы не было! )))
(7) Такие данные за день не особо полезны для аналитики.
Логичнее усреднять за период и группировать, например, по дням недели.
По поводу бесплатно, то сами не сделаете.
Только по согласовани с администрацией и не по принципу «потому что платно никто брать не будет», а скорее по принципу «вещь классная, в самом деле нужная и автор хочет ее дать бесплатно как можно большему числу людей»
Если автор считает, что его вещь не стоит даже фантика (смартмани), то нет смысла эту вещь выкладывать.
(9) ekaruk,
Это вам не особо полезен. А есть те кому полезен. И анализировать количество продаж по часам на торговой точке иногда очень даже полезная вещь.
По поводу публикации, отчет очень простой, но в нем действительно есть некоторый смысл. Так если вы его выкладываете на сайт, оформите его — прикрутите диаграммы, возможность выбирать несколько типов документов (не только РТУ), различные периоды группировки (не только час), произвольный отбор по периоду и т.д. А так получается идея какая-никакая есть, но реализация — однозначный минус.
З.Ы. Автор, я не хочу придираться и по большому счету мне все равно, но вот вы программист, скажите мне, что значит «толстая форма»? Форма может быть обычной или управляемой, клиент может быть толстым или тонким, ну вы меня извините, вы же все-таки разработку выкладываете, выходит вы разработчик и такое невежество демонстрируете.
(13) starik-2005,
Народ — это и Вы тоже. Ведь зашли прочитали обругали и написали. Так сказать выразили своё ФУ.
Типа ХОДЮТ ТУТ ВСЯКИЕ а ПОТОМ …..
(14) ZVN, а Вы внимательнее прочитайте, что Я написал, а потом делайте выводы.