<?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='\
что-то интересное…можно поподробне? может хелп есть?
Пока со временем на хелп не складывается 🙁
Обновил обработку — добавил к ней хелп.
Зачет! Мне нужно было отобрать и удалить. Отаботала хорошо.
Спасибо за обработку, все получилось..
Классная вещь, автору респект, наверное много сил положил на создание этого поистине универсального механизма!
А отборы для удаления возможны через разименование?
Удаление происходит по ключам созданного набора. Самый простой вариант создания набора записей — любой отбор на существующие записи в пределах возможностей СКД (в т.ч. по разименованным путям).
Обработка выше всяких похвал. Плюсую однозначно.
Я бы Еще бы добавил в действия функцию копирования записей регистра на заданную дату! а так плюс несомненно!
(11) Alex1Cnic,
1. Отбираете записи переходите к редактированию.
2. На закладке «Пользовательские параметры» создаете параметр «МояДата» и присваиваете нужное значение.
3. На закладке пользовательские поля перетаскиваете поле «Параметры.МояДата» из доступных полей и указываете значением «Результат поместить в поле» нужное поле регистра.
4. Жмете «Применить» и получаете готовый набор с нужной датой. После чего уже выбираете нужную операцию над набором. В данном случае — запись.
(11) Либо второй более универсальный вариант.
1. Переходим на закладку «Пользовательские источник данных», жмем «Конструктор схемы», формируем запрос получения нужных данных, походу переустановив значение периода на новое.
2. Устанавливаем соответствия полей схемы полям регистра.
3. Жмем перезаполнить — далее записываем набор
(13)
Ок, попробую сделать…
Спасибо 🙂
Неплохо бы еще сортировку по представлению ПриОткрытии() добавить…
(15) igor_gk, это уже дело вкуса 🙂
Просто СПАСИБО! =)
Спасибо, хорошая работа!
Сформировал запросом набор… И как во всех записях этого набора установить ресурс в одно значение?
(20) olsy, Например в результат запроса включить ресурс с уже нужным значением. Либо на закладке отбор/параметр добавить новый параметр, присвоить ему нужное значение и ассоциировать с нужным полем набора.
10!? О_О