<?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='\
НайтиСсылки — не?
(1)
НайтиСсылки это для 7-рки.
Для 8.х НайтиПоСсылкам (FindDataByRef)
Синтаксис:
НайтиПоСсылкам (< Список ссылок> )
Параметры:
<Список ссылок> Обязательный
Тип: Массив. Массив со списком ссылок на объекты, ссылки на которые нужно найти.
Возвращаемое значение:
Тип: ТаблицаЗначений. Таблица значений, состоящая из колонок с индексами: 0 — Искомая ссылка; 1 — Ссылка на объект, который содержит искомую ссылку.
Описание:
Осуществляет поиск ссылок на объекты.
Но метод естественно проще )))) Видимо в запаре был, не в себе )))) Перепишу под эту функцию…
Stepan 21231312, спасибо за совет.
Не хочу обидеть автора, но такого рода «обработки» пора уже прикрывать!
Это уже становится похоже на хабр и темы по линукс.
(3)
Дмитрий, прошу прощения, а эта обработка какого именно рода? Обратная связь всегда полезна. Если ваш аргумент будет достаточно обоснованным я сам удалю обработку.
(4) Такого, что фактически дублирует (а исходя из «Перепишу под эту функцию…»,то вовсе копирует) стандартные возможности платформы…Смысловой нагрузки 0, информативности 0, полезности 0.
Например, если обработка делала бы этот функционал в несколько потоков и проводила полный анализ подчиненности с установкой пометки удаления для всей цепочки, которую можно удалить, то можно было бы ее рассмотреть.
(5) Дмитрий, спасибо за полезный комментарий. Доработаю обработку с учетом ваших замечаний. Примеры того, что вы описали на Инфостарте встречаются. Например:http://infostart.ru/public/267734/ . Я ими сам пользуюсь с благодарностью в сердце к авторам. Мне же нужна была обработка не отягощенная настройками, работу с которой можно было доступно объяснить тётушке на другом конце телефонного провода.
(3)чем же хабр и линукс не угодил
(6) «Мне же нужна была обработка не отягощенная настройками…» — в моем примере и не надо ничего настраивать юзеру 🙂
«Примеры того, что вы описали на Инфостарте встречаются» — к этому я и клоню.
Есть база бухгалтерии, в которой было помечено на удаление порядка 1 000 000 объектов. Стандартная обработка при анализе этих объектов (объекты разношерстные) через 4 часа просто вешалась с ошибкой. Я написал обработку, в которой достаточно было просто нажать одну кнопку (хоть и добавил возможность выбора объектов метаданных) и просто ждать. Через 2,5 часа обработка удалила порядка 600 000 объектов.
Хоть написанная мной обработка и решила указанную проблему гораздо быстрее, и написана была универсально, но я не увидел в ней чего-то необычного, чтобы сразу выкладывать на инфостарт.
(7) Кто-то открыл для себя линукс и смог его установить на виртуалку — сразу создается пост.
(8) Дмитрий, думаю многие были бы рады воспользоваться вашей обработкой для решения подобных задач. В том числе и я когда у меня возникнет такая потребность. Инфостарт это сообщество где у участников есть огромный выбор решений, а качество таких решений определяется рейтингом. Даже в нашем обсуждении есть определенная польза для участников Инфостарта. 😉
(9)Не у всех сложности с написанием статей, если следовали бы вашему примеру, то ни одной статьи бы не было.
(11) значит, Вы просто не читаете на хабре комменты и не поняли, к чем у я привел пример с хабром 😉
Я не против дележки опытом и радостью людей,что у них что-то получилось…Но,как писали в комментах на хабре, скоро ничего серьезного невозможно будет найти среди однотипных статей новичков 🙂
Ну,да ладно…Свое мнение я высказал и дальше флудить не вижу смысла.
Я для подобных случаев помечаю всех контрагентов и удаляю стандартной обработкой. Потом снимаю пометку удаления с тех, что остались
(4)
Здесь полно обработок вида «Удаление неиспользуемых элементов справочников» . Например,http://infostart.ru/public/19064/
Я так понимаю, что данная обработка из этого же рода.
А можно добавить опцию «переместить в группу»? Завидую тем, у кого есть «лишние» контрагенты )
(15) Добавил возможность переносить найденных контрагентов в указанную группу.
(16)Как получить обновлённую версию? А то скачивается старая.