<?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='\
Что такое в данном случае «каталог»? Если ты подразумеваешь группу справочника, то так и пиши. Называй вещи своими именами.
(1) Под «Каталогом» подразумевается Папка/Директория/Каталог на локальном/сетевом диске. В описание внес изменения. Спасибо за замечание! 😀
А для чего вообще применяется эта обработка? Я что-то так сходу не могу придумать где можно использовать данный механизм.
(3) Ну каждому свое 😀
Мне нужно было посмотрел на инфостарте нет вот решил написать и поделиться.
(4) Вопрос был в другом, а именно: для каких нужд используется эта обработка?
(5) Цели могут быть различные, каждый определяет сам. Например можно создать каталоги по контрагентам и хранить какие-то документы — договора, акты и прочие документы.
Гениально! А для чего это?
Предлагаю ещё такую обработку написать — «Создание элементов справочника по каталогам на диске».
А что по подкаталам, нельзя было сделать?
(9) В смысле иерархию справочника сделать?
(7) см (6)
(8) Ну это вы интересную идею обмена данными предложили, такие идеи надо продавать!
Хм, работа интересная!
Один из простых пример где это можно применить, к примеру по всему справочнику сотрудники, создать для них каталоги на общем диске
Имеется ввиду, чтобы при сохранении предлагалась возможность выбора структуры справочника. Например: номенклатура, имеет вложенные папки. А при использовании обработки это не учитывается.
Когда-то, лет семь назад, была такая мысль это сделать. Потом подумал — а зачем?
Пример с сотрудниками удачным не кажется. Автор, зачем ещё это может быть нужно?
Создание справочника по каталогам — и то нужнее (мне пригодилось, когда я конфу для учёта своих аудио-видео писал и базу грузил, наводил порядок на харде).
А я знаю одно такое решение: привязали структуру каталогов к справочнику (хранят данные)… Одно хреново — на пользователя ложится ответственность отслеживать изменение наименований и местоположения каталогов в случае изменения элементов справочника…
В общем, на мой взгляд, это не инструмент а какое-то разовое решение