<?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='\
Где описание? Скриншоты?
Да и сама обработка?
да… что-то не понятно, что это за зверь! 🙂
момент ))
Сорри за то что сразу не выложил описание.
Но за что минусовать то сразу ((
порядок… полезная вещь
(5) Для таких случаев есть галочка «опубликовывать». Пока не готова, ее можно не нажимать… А со стороны смотрелось, как очередное издевательство над пользователями сайта…. Минус снял.
(6) А плюс за что? Файла обработки до сих пор нет.
(8) За картинку — мне достаточно для идеи. А строки соединений у меня в другой отдельной структуре храняться. осталось добавить кнопку «раскидать по базам» 🙂
Пока нет файла обработки лучше справа на экране выбрать опцию «снять с публикации» . Потом поставите галочку «Опубликовать в общем каталоге» при записи и всё.
Сорри, обработка выложена ))
(9) Собственно это и делает кнопка «Выполнить»
Почему большинство программеров клепает такие ужасные формы?
(13) потому что заказчик хочет заплатить (условно) 1000 рублей за программу, а при стоимости часа работы в 1000 рублей — прог должен даром потратить еще час-два на нормальный юзабельный дизайн?
(14) Хочешь сказать, что выровнять по краям таблицу заняло бы лишних 2 часа?
Боюсь, что ту дело в другом. А именно в отсутствии вкуса. А если он отсутствует, то нужно заставлять себя делать хотя бы как в типовых. Иначе такие поделки выглядят весма непрофессионально и только порятят общее впечатление
(15) да, согласен. Тривиальный порядок на форме — д.б. это много времени не занимает. Но вот удобная для работы форма — это совсем другое…
(15)
Согласен, но только если про чисто 1с-овские, а то есть другие товарисчи (типа Раруса), — они не лучше делают (а даже хуже 🙂 ).
Есть стандарты оформления на ИТС-е… Если я не ошибаюсь.
(14) Если насчет заказчика еще как-то и можно согласиться, то перед тем, как выкладывать свои труды во всеобщий доступ профессиональному сообществу, можно пол-часика и посидеть, привести работу в божеский вид. Это, как минимум, уважение к окружающим.
кому не нравится тот сам подправит! 😉
(20) Спасибо, друг! Вот за красотой формы точно никогда не гонялся.
(21) Лучше внимательно прочитать (19).
За идеи спасибо! Плюс 🙂
никогда без особой нужды не заморачиваюсь дизайном — главное правильная работа . плюс
Обработка с таким дизайном не получит сертификат «Совместимо! Система программ 1С:Предприятие»
Спасибо за функционал и идею — плюс…