<?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='\
(0) Интересный подход. А если формы нет, и парсить надо в модуле чего-либо?
(1)
MSScriptControl видимо юзать
Объект = Новый COMОбъект(«htmlfile»);
можно попробовать
Так где описание способа то?
(1)Если формы нет , то не судьба. Тогда пользуйтесь чем то другим.
(5) Я почти везде использую объект «VBScript.RegEx». Функционал и синтаксис практически тот же, что и в java-script, но никаких дополнительных форм использовать не надо. Да и в каждой Windows есть по умолчанию.
В общем, пока 1С не даст нам нормальный инструмент для работы с регулярками, так и будем — кто на что горазд.
(4)Это не статья, это обработка с примером работы. Кому нужно, может скачать.
А этот способ прощеэтого ?
Нужно больше способов
(9)Будет много способов, пока 1С не встроит наконец в платформу.
(8) Тот способ — отличная штука. Но он для проверки «содержит ли строка заданный паттерн». У меня в меморизе та публикация)
RegExp’ом, зачастую,надо не только проверять, но и возвращать значение.
Но действовать через поле HTML Документа как то уж слишком стремно.
Удивительно, почему в платформе до сих пор нет регулярок…
(11)Здесь то как раз доступно намного более всего. Не только поиск но и замена. Причем здесь можно не просто тупо заменять строку по шаблону, но и прописывать свои реплейсеры. Это очень помогает когда необходимо прописать сложный алгоритм замены. В этом случае сначала прописываешь функцию — реплейсер, а потом указываешь его вместо строки замены. Это еще и бывает полезно когда в реплейсере не просто надо строку заменить, но и выполнить попутно еще какие-то действия, например создать какие то новые объекты и т.д. Лично мне это все очень пригодилось.
(12) Такие вещи, как правило, делаются на сервере, а то и в общем модуле с повторно возвращаемым значением.
html поле совсем не годится для таких целей. Для тех же самых целей можно вызвать VBScript.
Ну или вот что вам надо делать вместо использования поля html документа (по сути своими действиями вы это и делаете + еще кучу ненужного мусора):
Ну или хотябы так (это прям 1 в 1 что вы делаете в статье, только без рендера мусора и занимания места на форме с дальнейшем замедлением работы):
Показать
И да, яваскрипт в поле документа — игрушка дьявола, ежжи, при неблагоприятном стечении обстоятельств (особенно если скрипта много и он сложный) он может не умирать даже при завершении работы платформы, так и висеть полудохлым сеансом.
Это дело лечится с грехом пополам.