<?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 500 позиций в один клик, было бы еще лучше 🙂
а еще бы здорово иметь возможность отключить контроль по ГТД
не формирует отрицательные остатки, т.е. нажимаю прочитать, а таблица остается пустой, хотя минусы есть
Спасибо, все работает!
Добрый день, сделайте, пожалуйста, в табличной части в колонке «обрабатывать» функцию «выделить все позиции».
Отличный инструмент. Работает стабильно. Весьма странно, что автор поленился прикрутить флажки выделения. Кому надо сделайте следующее:
Показать
Что делать, если купил обработку и через месяц обработка не функционирует по любой причине? Например,
смена релиза конфигурации, смена платформы, смена вида клиентского приложения, смена операционной системы и т.д. и т.п. Может изначально ставить стоимость выше, но в эту стоимость будет включено обслуживание 6 мес например?
(7)Так на ресурсе и устроено. техподдержка доступна только для коммерческих публикаций. А здесь возможно автор просто выложил идею, а дальше ему некогда, и это нормально.У меня свежий релиз БП как файловый так и серверный вариант базы. Все работает.
(8) Алексей, спасибо за реакцию. Звучит неплохо. Как техподдержка инфостарта будет поправлять ту или иную обработку, если автор этой обработки молчит?
(9)Инфостарт сам поправлять не станет. Инфостарт своего рода агрегатор 1с — ников. Код в обработке открыт. Доработать может любой программист. Или вы можете посмотреть коммерческие разработки с платной поддержкой. Тут есть подобные. А что у вас за ошибка? В чем проблема? Может я уже сталкивался и смогу помочь?
Я-продавец. У меня есть заявки. Программист, с которым я работаю в тандеме, не всегда может выполнить задачу. Не знаю почему, наверное потому что обработка-обработке рознь. Грубо говоря, заявки есть-исполнителя нет. На мой вопрос «Я куплю обработку на инфостарте, а ты сможешь её дорабатывать по необходимости?», программист отвечает «Надо сначала посмотреть». Я его понимаю и всё такое, но заявка-то сама себя не сделает. В итоге 1) я покупаю обработку за свои деньги, например за 3000р 2) плачу свои деньги за потраченное время программиста на анализ этой обработки, 2000р 3) получаю от программиста отрицательный ответ. Ну или положительный, как повезёт. Вот я и решил, а почему бы напрямую не платить автору обработки и за саму обработку, и за её дальнейшее ежемесячное обслуживание. Зачем изобретать колесо так сказать, если вот он автор с колесом в руках. На данную обработку у меня есть заявка, только не для бух 3.0, а для БСО. И чёрт его знает, брать заявку или нет.