<?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='\
Оформление темы слабовато… Скрины, описалово, принцип действия…
Как удаляете периодические значения если они установленны документом?
Так же как и все остальные «Периодический.Удалить();». А вообще, чтобы не задавать такие вопросы откройте модуль (там все 100 строк) и Вам будет все понятно.
Конечно на вкус и цвет товарищей нет…
http://www.infostart.ru/projects/2788/
Для сравнения:
(3) обработку сам писал? Или помогал кто?
Перед «Периодический.Удалить();», стоит условие «Если Периодический.ТекущийДокумент().Выбран() = 0 Тогда».
Т.е. правильный ответ на (2) = Никак…
(5) Написал её года 3-4 назад. Тогда же и выложил на Proclub.
(6) интересно… а зачем выкладывать непроверенную обработку?
100 строк просмотреть трудно было? Вы же не новичок 🙂
(7) а в чем проблема с обработкой? Более 900 скачиваний и ни одного нарекания. То что написал «poppy» (5), я вообще не понял ни слова, кроме вопроса сам ли я это написал.
Выбираю справочник, ВЫБИРАЮ ДАТУ, в 3 ночи дело происходит, не особо читаю предупреждение, не хожу сначала в код, думая, что понимаю логику весь смысл обработки групповое удаление пер.реквизитов на ДАТУ (один на дату я и стандартно удалю) смотрю результаты и холодею — сметены ВСЕ пер.реквизиты на ВСЕ даты, улетела работа за сутки, иду в код, смотрю в коде честно все прописано или весь справочник на все даты или на дату и один реквизит. Я в шоке!!! Убери дату совсем, или сделай еще одно иначе!!!
Или хотя бы доступность даты убери при НЕВЫБОРЕ элемента справочника. Есть же защита от дурака, должна быть по всем канонам для усталых путников!!!
не особо читаю предупреждение — просто «на все
даты» очень похоже «на такую-то дату»…
Флажки:
-удалить значения элементов на дату,
-удалить все значения у всех элементов справочника,
должны быть взаимоисключающими, или надо переключатели ставить.
Вот такое мнение, не хотела писать, сама виновата и наверняка на это укажут, но увидела (8) и Остапа понесло.
(8)
В (5) poppy написала о том, что ты в (3) дал неправильный ответ на (2). Отсюда имхо и возник вопрос, сам ли ты писал? С обработкой вроде все нормально, но знаешь ли ты как она работает?
> Более 900 скачиваний и ни одного нарекания
Пока только 38 скачиваний. Откуда цифра 900?
(13) c Proclub
(14)>c Proclub
Да я уж сто лет не смотрел сколько с проклуба моих накачали! Там уж, поди, за мульон перевалило :))))))))))))))))
Вот еще мой скромный вариант:http://infostart.ru/projects/2071/
Хорошая обработочка, мне понравилась ;), сэкономила мне время ;), спасибо автору!
Скачивал еще на проклубе, сэкономил массу времени, а отзывов не написал ни разу.При всей простоте сделано отлично.Все работает как заявлено. Спасибо огромное.
Я попробовала, мне подходит. Спасибо!!!