<?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='\
Continue;EndIf; Ссылка = TZSsilki.Ссылка;If Ссылка.DeleteMark() = 0 Then Return 0; Else НайтиВСписке = ValueList1.FindValue(Ссылка);
{C:DOCUMENTS AND SETTINGSADMINISTRATORDESKTOP 6-11UDELENIEOBIEKTIUDELENIEOBIEKTI.ERT(22)}: Значение не представляет агрегатный объект (DeleteMark)
Это при каких обстоятельствах вышло сообщение?
у меня нечто подобное вывалилось с ошибкой. в базе 5000 помеченых, колбасило долго. минут 10. потом проверяло по %, а потом вывалилось. незачет.
Это и некоторые другие выявленные мною ошибки я уже вчера подорвали и выложил второй вариант
Хорошая обработка, особенно радует, что не нужно заходить монопольно.
Continue;EndIf; Ссылка = TZSsilki.Ссылка;If Ссылка.DeleteMark() = 0 Then Return 0; Else НайтиВСписке = ValueList1.FindValue(Ссылка);
{C:DOCUMENTS AND SETTINGSADMINISTRATORDESKTOP 6-11UDELENIEOBIEKTIUDELENIEOBIEKTI.ERT(22)}: Значение не представляет агрегатный объект (DeleteMark) — такая же ошибка
а ссылки удаляются или нет?
если после свертки wrap запустить вашу — ссылки удалятся?
Спасибо!!!
(7) evg300183, У меня это ощибка не выходила.
(9) evg300183, Обработка работает аналогично типовой с разницей что не монопольно!
(10) Arin, Всегда пожалуйста!
Отлично, класс что юзверей не надо выгонять
Спасибо.
Ага, то что не требует монопольный доступ это большой плюс!
Автору спасибо. Удаление без монопольного режима это то что нужно, а то не дождешься пока все «выйдут», хть после работы не оставайся.
Сыровато. Да и не все меры «предохранения» соблюдены.
If SsiLkA.DeleteMark() = 0 Then
{C:USERSPETALDOWNLOADSUDELENIEOBIEKTI_2UDELENIEOBIEKTI_2.ERT(120)}: Значение не представляет агрегатный объект (DeleteMark)
Пишет ошибку
Назад в прошлое.. после перехода на восьмерку подумал обработки для 7.7 не понадобятся.. ан нет.. иногда приходится.. спасибо, скачал, заработала.. свои функции выполнила.
Полезная обработка. Огромный плюс обработки в том, что она не требует выгонять юзеров из базы. Спасибо.
А что произойдет если во время удаления узер попытается токумент снять с удаления и перпровести его скажем на другую дату? Список документов котырые будут удалены формируется и сразу удаляются документы?
Во время удааления иногда выскакивает ошибка. я так понимаю как раз в это врямя кто-то обращется к удаляемому документу. Бывает правда очень редко.
(22) Tatar_Ed, Да.
(23) Tatar_Ed, Скорей всего, надо смотреть.
(25) А можно каким нибудь способом ограничить пользователей и не давать им править удаленные документы? Ну т.е. если по какой то причине документ был удален, то все в его никто не может открыть редактировать и т.д.
(26) Tatar_Ed, Для этих случай монопольный режим.
(25)
В смысле, помеченные на удаление? В конфигураторе выставьте права, там широкие возможности, можно поставить галочку только на пометку удаления и не ставить на отмену пометки, тогда пользователь не сможет отменить пометку удаления и что-либо сделать с документом.