<?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='\
Автор coder1cv8http://infostart.ru/public/20333/
http://infostart.ru/public/20165/
Автор Evg-Lylyk
Вопрос : чем ваш шаблон лучше ?
Чем 1-й — наличием удобного выбора периода.
Ну а 2-й, как я понял, вообще не шаблон, а генератор отчетов на основе других шаблонов.
Собственно, прежде чем разрабатывать свой, вроде бы искал на сайте, но ничего не нашел. Оказалось, плохо искал.
Если бы не потребность во всех отчетах вводить период, вообще не делал бы этот шаблон. Вот так.
Ндаа, как то не впечатлило совсем
А по мне так хороший отчет. Пригодится в разработках.
Если использовать один и тот же шаблон для разных отчетов, то настройки будут юзаться одни и те же для этих отчетов.
http://infostart.ru/public/20165/ от Evg-Lylyk
Для исправления юзай обработку
Подробнее проблема описана там же.
Ничего эффектного…
Был где то выложен шаблон поинтересней…
ИМХО
💡 мне понравилось +
Ни в одном из ранее выложенных шаблонов я не увидел нормального выбора периода. А это, по-моему, самая главная (чуть ли не единственная) причина, по которой вообще создавать шаблон для отчета.
А мне понравился именно выбор периода.
Только если выбрать период, например с 01.01.2010 по 28.02.2010, а потом нажать кнопку регулирования вверх, то получится с 01.03.2010 по 28.04.2010,
а интуитивно ожидалось (мною) по 30.04.2010.
Впрочем, это я дописал сам.
Удобен для тех, кто только начинает учиться пользоваться СКД.Спасибо, плюсую
Для создания отчета «на лету» вполне подойдет
Меня тоже очень даже устроил для создания отчетов на лету, сенкс.
Большое спасибо за данную разработку . Мне пригодилось, правда было это давно.=)
Что-то я не понял. Акцент с этой публикации делался именно на выбор периода, период выбирается. А в печатную форму-то почему не выводится?
я так понял, это не УФ
Да, не УФ. А что бы вы хотели от шаблона отчёта на УФ? Я как-то не вижу смысла в нём.