Реестр доставок с Яндекс картой




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?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='\

16 Comments

  1. voler

    Могли бы добавить переменную которая определяла место положение и показывала ту карту в котором находится человек использующий данную обработку. А то показывает Краснодар.

    Reply
  2. Cyberboy

    (1) Можно, но только идея была еще показать границы областей, а там уже одной переменой не отделаешься. Для тех кому интересно в строчке 20 поменять координаты на ваш город, свои координаты можно узнать здесь, цифра 12 означает масштаб карты.

    Reply
  3. Cyberboy

    Жаль, 100 скачиваний и комментарий нет!

    Reply
  4. andrej198422

    У меня пишет «На этой странице произошла ошибка сценария»

    строка 7

    символ 9

    Reply
  5. 31337

    Я пользуюсь, переделал немного чтоб по информации из клиента эта окно вызывалось нам это более актуально чем смотреть заказы)

    Один момент — (вещь очень прикольная и удобная) — нельзя ли подвязать Яндекс-пробки??? Ведь там только адрес чуть поменяется в коде HTML ???

    И ещё — у меня чё-то окно «получить API ключ» не доступно, хотя галочку что принимаю правила устанавливаю…

    А в общем автору большое спс, кстати пробовал не тока Краснодар — всё работает отлично, просто я сразу при открытии сделал чтоб точка показывалась с адресом (адрес берёться из контактной инфы контрагента.)

    Reply
  6. Cyberboy

    (4) Скорей всего у вас стоит win7 и последние обновление для IE8, на самом деле просто поставьте галочку что бы больше это сообщение не выскакивало и все, дальше скрипт работает так как нужно.

    Reply
  7. Cyberboy

    (5) На счет пробок сейчас гляну, на счет ключа, попробуйте очистить кэш через что смотрите, все должно по идеи открываться.

    P.S. Если обработка понравилась, то ставте плюс, не стесняйтесь!

    Reply
  8. 31337

    автору — Всё ключ получил, там нада было адрес сайта просто ввести)))

    А насчет пробок актуально, думаю там в параметрах адреса просто какой-то ключ заполнить нада чтоб было с пробками…. Ну в общем если это скажите как сделать буду очень признателен!

    Reply
  9. Cyberboy

    (8) По поводу пробок, вот нашел на форуме разработчиков.

    «Не нашел в api — яндекс-карт возможность отображения пробок, очень бы хотелось использоавть такую возможность, а еще возможность проложить маршрут к объекту с объездом пробок.»

    «В API в настоящее время такая возможность отсутствует»

    Reply
  10. OLEG4120

    Сообщение:

    Строка: 10

    Ошибка: ‘YMaps’ — определение отсутствует

    Reply
  11. Cyberboy

    (10) Посмотри сообщение (6)

    Reply
  12. andrej198422

    (6) Нет у меня win server 2003

    Выскакивает окно — нажимаю «да» ни чего не происходит, а в обработке даже карту не показывает ((


    Reply
  13. Cyberboy

    (12) Версия IE какая?

    Reply
  14. Valery_Y

    Автору — а в каком месте можно указать стиль метки?

    Никак не могу совместить ваш код с примерами с сайта Яндекса. (

    Или можно пример наложения на уже выведенную карту метки с координатами, а не через запрос к геокодеру?)

    Reply
  15. starjevschik

    совершенно бессовестно стащил эту обработку, ну не совсем буквально, подпилил местами, но основу взял именно отсюда, автору спасибо!

    Reply
  16. gosizo

    Яндекс карта. допустим есть несколько меток, можно ли как-то смасштабировать карту (не руками, а программно), что бы масштаб был максимально увеличен и в тоже время все метки были видны (в границах карты)?

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *