<?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) Спасибо поправил :)…но с с двумя сс как то загадочнее было 🙂
(3)
Это почему они должны потерять связь у вас путь к данным что в первом случае что во втором будет один и тот же «Список.Ссылка», для ссылки ??? так что не должен потерять ничего..кстати применял и к запросу динамического списка, все отрабатывало…
Тут согласен, но как правило для формирования запросов для проведения такие конструкции не используются, а в описании написано что использовал я их в основном для этого..что бы при обновлении конфигурации можно было легче обнаружить ошибки…
Если бы вы скачали и посмотрели код вы бы заметили что этот момент учтен, более того автоматом он ставит левое соединение, у меня же можно любое сделать и указать поля соединения нужно
и еще один момент тоже есть и тоже учтен, если вы хотите добавить поля в выборку из временной таблицы…нужно указать эти поля как доступные иначе он выдаст ошибку что такие поля не найдены
P.S. А вообще данные функции использовал для замены запросов в основном для замены таблиц для проведения и пока ошибок там не было найдено, что бы что то не так сделал…
(4) Прошу прощения, если я ввел Вас в заблуждение своими рассуждениями, и Вам показалось, что это критика данной публикации. Я действительно не тестировал Вашу разработку. Зацепившись глазом за СхемуЗапроса, я лишь хотел поделиться своими наблюдениями относительно этого объекта встроенного языка, ну и поинтересоваться, решали ли Вы подобные проблемы. И не более того.
Что касается проблем с динамическим списком, то видно это старая проблема. Проверил еще раз на платформе и конфигурации, указанной выше (файловая база). Связи действительно никуда не деваются. Если обновлять текст запроса при создании формы на сервере, вообще никаких проблем не наблюдается. Если обновлять по команде уже после открытия формы, то все стандартные реквизиты, кроме Ссылки, у меня перестают отображаться. Черт его знает, в чем у меня проблема.
На счет псевдонимов выражениям (СКД), то столкнулся я с этой проблемой не при формировании запросов, а при попытке добавить пару новых полей в схемы источников данных для бюджетирования. Там как раз используются похожие на мой пример конструкции.
По поводу лишних связи, как я уже сказал, я не тестировал Вашу разработку. Я лишь поделился своими наблюдениями. Еще раз приношу свои извинения, если мои рассуждения на тему схемы запроса оказались неуместными.
(5)Ну почему по второму пункту кстати правильное замечание.
1с рекомендует замену запроса динамического списка делать такой конструкцией
Может быть так получиться, хотя честно говоря не пробовал менять текст запроса по команде..всегда при создании делал…
Вот как появилась возможность использовать схему, ни одной реальной задачи такой не было, где бы потребовалось.
И кстати оно довольно тормознутое, кто-то из знакомых юзал и сказал по итогам.
(7)
Тормозов замечено не было от слова вовсе.
А задачи я написал, замена запросов при проведении документов, в основном..что бы потом при обновлении конфы меньше проблем было.
(8)Ну хз… это в 16 году было… мож щас подтянули производительность… Ну пожалуй да, разве что для изменения типовых может пригодится, а так чтобы в самописном коде использовать польза отнюдь не очевидна