<?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='\
мегакруто
(0) >>>> как в запросе с двумя параметрами (дата начала, дата конца) получить список всех дней между ними
Это, не? Пример вывода дат в результатах запроса строкой (1.2.1.1) и календарик запросом в диапазоне дат до 2739 летhttp://infostart.ru/public/68269/
По датам в запросе ещё что-то было.
http://forum.mista.ru/topic.php?id=212785
v8: Как в запросе сгенерировать таблицу всех дат в заданном диапозоне?
Супер!!!
Молодец вот молодец! 🙂
+ автору за кропотливый труд 🙂
Красиво, спору нет!
+ ставлю, на «скачать» «инфоденежек» нету.
В качестве учебного пособия по СКД — нужная вещь, многие не заморачиваются условным оформлением, а тут наглядно…
(0) можно посмотреть здесь «Полные остатки по периоду во вложенном запросе «
Интересная разработка, полезно для изучения СКД. Спасибо.
(2) Да! Точно!!! Соединение цифр, как же я сразу не догадался! Спасибо, БОЛЬШОЕ Поручик, как всегда строго по теме и в точку!
Это ж теперь можно мой календарик да без единого гвоздя… Обязательно выберу время.
Симпатично.
Хорошая работа ! И поучиться есть чему.
Красотища! Неописуемая!
С нетерпением жду Ваших новых обработок!
Интересно, хотелось бы посмотреть, но… не хватает денюжек. Плюс
Полезный отчет для изучения СКД, автору респект!
Прикольно
Супер! Мне понравилось!
Делать календарь на СКД? Из пушки по воробьям?
(17) Да. Да.
Главное Сделать, ну или понять как это. А знания лишними не бывают, где ни будь точно пригодятся.
Я вот сколько пасусь тут — каждый день что ни будь как найду, причём не всегда по теме, мимоходом какую ни будь мелочь заметишь, которая потом кучу времени экономит и/или качество повышает.
Например параметры запуска 1С — не знал, ну не сталкивался;
Статья ФИФО в запросе — порадовала;
Люди умные — завсегда подскажут (2);
и много ещё чего, уже и не упомнишь.
(18) 🙂 эт верно — главное понять.
Спасибо за хорошую демонстрацию возможностей СКД.
P.S. вот только пишется что-нибудь 🙂
P.P.S. в прикрепленном файле отчет на СКД для УПП (укр.)
Вотещё способ но тут по днямhttp://www.kb.mista.ru/article.php?id=579&
Афффтар жжот) смотрел я на запрос- смотрел, и ничерта не высмотрел, вообще не понял)
Я разность дат делал в цыклах и полученные даты уже в таблицу и в СКД закидывал.
Круто! Жаль скачать не могу, интересно было бы на реализацию условного оформления посмотреть.
Календарь на СКД — это здорово!
http://nashe1c.ru/materials-view.jsp?id=290
Я когда-то пробовал без СКД, еще на 8.1:
Очень помог своей разработкой. Спасибо!
Класс