<?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='\
Есть и помощнее обработки для контрагентов, например:
http://infostart.ru/public/20083/
http://infostart.ru/public/20201/
(1) Спасибо за ссылки, посмотрю Вашу реализацию алгоритмов. Наверное, подчерпну что-то для себя новое. Про свою же обработку скажу: она сделана для максимально быстрой работы, с максимально понятным интерфейсом и без наворотов. Писалась для себя, а тут выложил, т.к. не видел Ваших обработок, и подумал, что кому-то может пригодиться. В общем-то, как мне кажется, она делает все тоже самое, что предложено в Ваших обработках. Плюс, форма собственности указывается строкой, что позволяет не привязываться к формам собственности только на территории РФ. Да и, практически, дает полную свободу обработки, т.к. может убирать эти сочетания из любой части наименования, а не только из начала строки.
(2) на мой взгляд, основной минус, что обрабатываются только 3 значения, а не произвольный список.
в вышеуказанных разработках можно указать произвольное сочетание для формы собственности.
(3) Как мне показалось, 3 значения, этого вполне достаточно. Но как вариант, можно сделать одно текстовое поле, где будет возможность вводить сразу бОльшее количество. Вопрос, нужно ли оно?
(4) Не обратил внимание на скриншоте.
Если нужно больше параметров для обрезки номенклатуры, то я могу вынести это добро в таблицу значений. Отпишитесь, если кому-то это требуется
(3) Скоро будет выбор произвольного количества параметров обрезания.
(3) спасибо за идею, реализовано 😉
Прошу прощения, забыл сразу залить новый файл обработки… 😮
Данная обработка полезна, если Ваш бухгалтер любит писать ООО/ЗАО/ОАО и прочее в начале краткого наименования контрагента
Не скажите….
Бухгалтер как раз и борется изо всех сил с манагерами, которые любят так писать и переделывает все после них…
(0) Есть более универсальная обработка, которая уже месяц тут выложенаhttp://infostart.ru/public/63315/ — замена любых символов в любом справочнике в любом реквизите.
> 🙂 Во всемирной паутине ничего подобного не отрыл.
Юзай поиск 😉
(10) Я говорил о частном случае у себя в организации 😀
(11) В том то и дело, мне не было нужно громоздкое ВСЕ 😀 Да и иногда быстрее написать самому, чем найти что-то полезное в поииске :D. В любом случае, реализацию посмотрю, спасибо.
(11) Да и, собственно, смысл обработок немного разный, согласитесь.