<?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='\
Здравствуйте, для чего это нужно объясните пожалуйста.
(1) Возможно, чтобы узнать дату розлива в справке по форме 1
А по какой логике оно работает? 15 последних запрашивает? А если уже запрашивали, то 15 следующих???
Все верно — основное применение, узнать дату розлива.
Справки 1 запрашивает с пустой датой розлива.
Справки 2 запрашивает, те где не выбрана справка 1.
???
Запрашивает те справки, по которым еще нет информации.
(6)
Начиная с новоприбывших? А то у нас в базе множество незапрошенных справок, нужно запрашивать актуальные и не трогать старьё.
Скриншоты с результатом работы добавьте плиз 🙂
(7) Подправил обработку. Теперь начинает запрашивать со свежих справок.
(9)что-то не работает
как раз сейчас похоже, что загружает со старых по непонятному мне принципу.
Пришли сегодня ТТН, жму в вашей обработке «запрос всех справок РФУ1» кол-во 5 штук.
Смотрю в УТМ. В исходящих запрос на справкиА, у которых дата ТТН стоит 2015 год и эти справки уже есть в базе.
Жму снова 5 штук. Закачивает те же самые 5.
Жму 25, те же 5 и ещё 20 каких-то старых.
Вцелом идея отличная, надеюсь пофиксите, жду исправлений.
(9)обработка будет развиваться по моему вопросу?
(11)Странно, но у меня запрашивает справки начиная с последних…
(12)ок, ещё раз перепроверю при след. доставке и опишу ситуацию подробно
(12) не работает всё-таки. качает вразнобой одни и те же, причём которые уже есть, вы точно ту обработку выложили? Розница 2.2.5.23
Возможно сможете реализовать форму запроса большого количества справок А?
Туда вставили сами номера справок и кнопка отправить. Каждая с красной строки.
FA-000000021871300
FA-000000021871301
FA-000000021871311
и т.д.
5 sm отдам за такое легко или предложите свою цену.
Здравствуйте. Обработка будет работать в версии 2.2.6.33?
Здравствуйте. Вы могли бы доработать обработку «Автоматический запрос справок А и Б ЕГАИС». Нужно делать запрос справок А на основании номера справки А, указанного в справке Б (так как в конфигурации 2.2.6 справки А вообще не загружаются в базу вместе с ТТН, есть только их номер, который записан в виде строки в справке Б). Логика такая: Нужно запрашивать в ЕГАИС справку А, если справка А с номером, указанным в справке Б, отсутствует в базе или в справке А с таким номером не заполнена дата розлива. Нужно сделать в обработке возможность выбора Организации ЕГАИС и делать запросы в ЕГАИС только по номерам справок А, которые указаны в справках Б, выбранной в обработке организации (организация не указана в справке Б, но указана в ТТН ЕГАИС, которая является основанием Справки Б). Запросы в ЕГАИС нужно начитать делать с конца (с последней справки А, которая отсутствует в базе или, в которой не заполнена дата розлива). Так же нужно использовать ограничение на количество запросов в ЕГАИС за одну обработку.
(16) Здравствуйте, к сожалению сейчас нет на это времени.
в 2.2.7 — не работает
День добрый!
Подскажите, а можно запросить недостающие справки А и Б? Входящих ТТН нет, или запрс справок только через номер ТТН ?
(19)Как понять недостающие? Откуда вы берёте номера справок, если не из ТТН?
Посмотрел обработку и так не понял в чём прикол. Я понимаю, вы бы сделали запросы справок, очень нужно, если создаётся новая база и туда загружаются остатки, но при этом раскладе ваша обработка отработает если остатки были в регистре1, а если в регистре2, ваша обработка ничего не может, так что смысла большого в ней не вижу. Так как запросы по движениям справок можно спокойно и в новых версиях Розницы сделать.
Для БП Корп такое можно сделать?
Здравствуйте! Вы будете еще дорабатывать данную обработку под новые версии?