Географическая схема Москвы (.geo)




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

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

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

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

53 Comments

  1. sva0

    Жаль не могу плюсануть. СПасибо.

    Reply
  2. Aleksey.Bochkov

    А у меня скриншоты не отображаются 🙁

    Reply
  3. Serj1C

    Оренбург! Или подсказку как делать такую красоту из «типовых» карт (*.rus, *.img или прочие)!!!

    Reply
  4. bashta.aleksey

    Питер, если есть.

    Reply
  5. boozin

    Нижний Новгород, пожалуйста

    Reply
  6. rayson

    дада

    SPb очень ниид

    Reply
  7. amazonka

    Зачетно…. ну Москва всегда первая…. ну и закономерно … после Москвы — Питер! ….. очень… нужен и питер 🙂

    Reply
  8. sashulyT

    Я так понял, это просто просмотр картинки с функцией маштаба?

    «-» — незачет.

    Reply
  9. Re:аниматор

    Иркутск если есть.

    Reply
  10. Abadonna

    Опять непонятное стремление пихать в 1С все, что ни попадя…

    Карту Москвы с масштабированием нечем больше что ли посмотреть?

    Reply
  11. adun

    (9) интересно, как ты картинку засунешь в геосхему??? читай доку http://v8.1c.ru/overview/Geo.htm

    (11) в 1С никто ниче не пихает — оно там было, а вообще-то используется в транспортной логистике: для построения кратчайших маршрутов, ЖПС и т.д

    Reply
  12. Abadonna

    Ну ежели так — спорить не буду (если для логистики, не просто для разглядывания)

    Reply
  13. Душелов

    (12) Не думаю, что 1С-ка сильно быстро работает с подобными геосхемами. И тем более, прокладывать маршрут.

    Reply
  14. adun

    (14) «прокладывать маршрут» — это всего лишь отображение определенных объектов конкретного слоя…

    Reply
  15. Душелов

    (15) Что такое маршруты я понимаю. Я про «оптимальный» говорю. С учетом одностороннего движения, запретов поворотов «налево» и т.д. 🙂

    Reply
  16. sashulyT

    (12) То что представленно здесь, для меня это просто картинка которая маштабируется, и все! Я не вижу ни какой работы с геосхемой.

    Что б доказать что я не прав добавь хоть что-нибудь, выбор слоев, поиск по карте, ….

    Reply
  17. adun

    (16) …ну геосхема нужна лишь для вывода результата. все остальное реализуется любым удобным способом. Есть уже наработки по жпс(маршрут торговых) и по прокладке маршрута(кратчайшая дистанция, затраты топлива).

    (17) …Здесь выкладывается просто геосхема, если нужны примеры — есть от 1С демонстрационная конфигурация «Географические схемы». Там подробно все расписано…

    Reply
  18. wetka

    Интересно, тот, кто составлял эту геосхему, смотрел правильное название населенных пунктов? Первое, что бросилось в глаза, это название » ОдинСово» вместо » ОдинЦово»

    Reply
  19. Душелов

    (18) Это понятно. Но я бы реализовывал совсем другим способом, используя карты от того же Ozzi, благо обновляются они часто и акутальное состояние дорог 🙂

    Reply
  20. adun

    (19) …изначально в шейп-файле названия были в транслите …могли остаться где-то корявости

    Reply
  21. adun

    (20) ози в 1с-ку не затянешь… а делать через разные ВК — зачем изобретать велосипед с тремя педалями???

    Reply
  22. jhfrek

    Молодец

    Reply
  23. sashocq

    А можно Волгоград выложить?

    Или подскажите, как ее вообще можно сделать — эту карту?

    Reply
  24. adun

    (24) Я подумаю…

    ….В основе работы географической схемы лежат шейп-файлы, содержащие топологические данные. Также эти файлы могут быть созданы с помощью программ семейства ESRI ArcGIS…

    Reply
  25. DeepDiver

    Украины бы такую!

    Reply
  26. adun

    (26) http://infostart.ru/projects/2991/ если нужна более детализирована стучи в аську

    Reply
  27. o.nikolaev

    (27) А что, более детализированную информацию опубликовать нельзя?

    Reply
  28. adun

    (28) какую информацию ты хотел бы получить детализировано?

    Reply
  29. o.nikolaev

    🙂 Я в том смысле что уж коль скоро публикуются сведения о технологии, то почему бы не написать все сразу. Т.е. зачем что-то нужно после «стука в аську»?

    Reply
  30. adun

    (30) Во первых: здесь никто не говорил о технологиях. Если вам интересна технология изготовления самой карты — зайдите на любой сайт по ГИСу или ЖПС, там вам обязательно помогут! 🙂 Во вторых: карты изготовляются по количеству просьб и если кому-то нужна какая либо другая карта (или более детализированная), можно обговорить, связавшись непосредственно с нами.

    Reply
  31. PeRom

    0. + 26. А всей России такая карта есть?

    Reply
  32. adun

    (32) …если только регионы и города — есть в 1С-ой демо «ГеоСхемы»

    Reply
  33. molot

    (19) А лучше — «1С_ово»!!!

    Reply
  34. molot

    (19) — а вообще — нашел ошибку — сам правь слои!

    Автору — огромное спасибо!!! Круть!!! +

    Тем, кто говорит — что это просто масштабируемая картинка — читать документацию к гео. схемам.

    Reply
  35. sashulyT

    (32) Вся Россия есть на диске ИТС

    Reply
  36. molot

    За Белгород полжизни 🙂

    Reply
  37. alext79

    А Новороссийск, Краснодар можете?

    Reply
  38. Аверков

    Дайте Ростов-на-Дону. Где вообще их брать? Хотелось бы всю Ростовскую область 🙂

    Reply
  39. Аверков

    (37) Что-то не могу найти карты на ИТС

    Reply
  40. Душелов

    (39) Берутся исходники карт в shape формате и конвертятся.

    Reply
  41. adun

    (40) Посмотри здесь: http://v8.1c.ru/metod/fileworkshop/Demo.exe

    Там есть три карты: «Россия регионы и все города» , «Россия регионы и столицы»(которая на ИТС) и «Карта мира».

    Reply
  42. sashulyT

    (40) на диске «работаем с программой» в CD:1CItsEXEGEOSCHEMES\

    Reply
  43. Аверков

    (41), (42), (43), спасибо

    Reply
  44. serezhik

    Очень нужно Краснодарского края, есть возможность выложить?

    Reply
  45. adun

    (45)… геосхемы будут выкладываться исходя из наличия шейп-материалов, количеству просьб и интереса к данной теме. В связи с тем, что тема еще не раскрыта и наработок в данной области очень мало — не вижу смысла терять время на отрисовку карт, которые не пользуются популярностью. Ну, если «ну очень нужно» — можем изготовить на заказ (думаю, мы договоримся ;-))))).

    Reply
  46. modem1986

    Хочу г.Киров, Плиз.:-)

    Reply
  47. LiaWid

    У меня не открывается ничего… 😮 ……. не распаковывает… помогите, плиз! 😥

    Reply
  48. 26178_mail.ru

    Да неплохо однозначно +++++++++++++++++++++++++++++++

    Reply
  49. bintape

    Можно ли с подобными картами работать полноценно, например добавлять метки, балуны? (аналог Yandex / Google карт)

    И какая скорость отрисовки?

    Reply
  50. Bukaska

    Как хорошо! А то по части географическим схем нигде ниче не найти, даже ИТС ничего кроме Демоконфига и двух-трёх слов, в одной из книг чуть есть: Решение специальных прикладных задач , глава 3. Вообще жесть как мало материала. НО буду работать с чем есть))))

    Reply
  51. adun

    (50) batan, в каком-то смысле — да)), и скорость отрисовки вполне устраивает.

    Reply
  52. bintape

    (52) есть готовые публичные примеры для использования? Интересует город Тюмень.

    Reply
  53. adun

    (53) batan, готовых публичных нет((. К сожалению Тюмени тоже нет.

    Reply

Leave a Comment

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