<?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='\
Что со ссылками на этот объект делает?
УниверсальныеПодборИОбработкаОбъектов.epf — поделка от 1С, удаляет непосредственно, и еще много что делает, зачем изобретать велосипед???????
(1) ссылки бьются, естесственно
(2) спасибо, не пользовался
я тоже такое делал, меня потом залошили )))))
(3) Не вижу смысла в такой обработке.
(5) Ну посмотрите сколько людей скачало…
Хотя кто нибудь все равно скачает и испортит свою базу…
Вы написали что она удаляет объект безвозвратно, но не написали, что она нарушает ссылочную целостность…. Считаю обработку вредной. Посему минус
Люблю разработки в 1 пару строк.
(6) Виноват, в описании не добавил предупреждение об опасности использования, я и не рекомендую пользователям пользоваться удалением объектов без контроля ссылочной целостности, у меня возникала и неоднократно такая небходимость — быстро и удобно решает мои потребности, поэтому и выложил пару строк кода оформленные в виде маленькой обработки ДЛЯ ПРОГРАММИСТОВ
(7)Собери лучше коллекцию перенумероваторов 🙂
Борисыч, ты не прав. 😉
Это прям «вирусная реклама». Ещё допиши: «Починю случайно битую этой обработкой базу. Недорого» :-)).
я лично использую кухонный нож для резки салата и хлеба
(11) Одно дело салата и хлеба. А другое дело своих собственных пальчиков )))
У меня вот за довольно продолжительную практику никогда не возникло таких потребностей. Спросите почему? Да потому что себе дороже!!
Ну назовите хоть одну ВАЖНУЮ причину для применения данной обработки?
Добавлен флаг для контроля ссылочной целостности — теперь можно отказаться от удаления объекта, на который имеются ссылки и увидеть их (ссылки)
Борисыч, ну ты Мозг!
А это точно для 8.1? Мне выдало вот что
1С:Предприятие 8.1 (8.1.15.14)
Управление производственным предприятием, редакция 1.2 (1.2.23.2)
нет, для 8.2. 8.1 уже больше года не в ходу
Мало того что изобретен велосипед, она еще и вредна изначально, так как нарушает ссылочную целостность базы.
Для самоубийц адназначна
Если есть потребность удалить какой либо документ, то сначала ликвидируй ссылки на него в информационной базе.
Для этого есть стандартные инструменты от 1С (ПоискИЗаменаЗначений)