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




Принцип обмена данными из 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='\

42 Comments

  1. Шёпот теней

    нуУууу… просто «подвижники» каки-то… конечно «+»… но на кого работаете… неужели по доброй воле — карты «шуруете»…?

    воооООооотвОпрОс…

    Reply
  2. adun

    (1) :))) …все карты, что представлены тут, делаются только по доброй воле и совершенно «безвозмездно» …их предназначение — расширение круга разработок с использованием географических схем

    Reply
  3. Шёпот теней

    (2)… блин… ну не знаю… тогда начинайте хоть маленькую денежку брать…

    ..со своей стороны обязуюсь наставить вам «+» за вашу работу…

    спасибо… удачи во всех ваших делах и начинаниях…

    воооОоооотЕщЁрАзСпаСибОвАм….

    Reply
  4. Шёпот теней

    «+» понаставил… теперь вопрос..:

    … а когда появятся азиатские регионы… или когда появятся столицы республик, областей, краЁв России…?

    ВоооООООооотЭтоЯХватил…?

    Reply
  5. Шёпот теней

    (4)+… и, что за «странная» любовь к географии, 1С, и картам…?

    воОооотУжТакЛюбопЫтнОтАклЮбОпЫтно..

    Reply
  6. Serj1C

    +

    Reply
  7. adun

    (4) …карты будут пополнятся в зависимости от наличия шейп-файлов …а с этим как раз проблемы — делится никто не хочет, все за денежку 🙁

    (5) …да не любовь, так, увлечение)))

    Reply
  8. Шёпот теней

    (7) проконсультируйте неграмотного, что такое шейп-файлы… ? … воОот…

    Reply
  9. adun

    (8)…шейп-файлы, это файлы содержащие топологические данные …пример есть тут http://infostart.ru/projects/3158/?ref=346

    Reply
  10. adun
  11. Шёпот теней

    грубо говоря, это особый вид электронной карты которую можно просматривать определЁнными программами… где указаны типы и виды топологии (природа), строения и взаимные расстояния…?

    непонятно назначение дополнительных файлов с др расширениями… видимо как раз в них находится вся информация по координатам и расстояниям…

    ..?…вооОооотПравильНоЯПонял…?

    Reply
  12. adun

    (11) …все верно …могу только добавить, что в дбф-файлах содержится вся информация по объектах (ее намного удобнее редактировать добавлять в дбфе)

    Reply
  13. Шёпот теней

    adun

    …СПАСИБО… за просветительскую работу…

    удачи во всЁм…

    ВоОоТ..

    Reply
  14. v.l.

    Всё бы хорошо, но это «ПЛЮСУЙТЕ»… Так и тянется рука к минусу… ИМХО. Под настроение.

    Как в анекдоте про гинеколога, убившего проститутку «… дай червончик, что-то покажу».

    «…хотите, чтобы мы выкладывали и другие города — не стесняйтесь, ПЛЮСУЙТЕ!»

    Reply
  15. adun

    (14) …ну вот ….стараешься для людей, а они тебе нате …»гинеколога убившего проститутку «))) …не, если «тянется рука к минусу», ставьте батенька, ставьте …мы не против …каждый имеет свое мнение …а по поводу плюсов — каждая работа требует вознаграждения, материального или морального …материальное мы пока не берем(но, наверное, уже надо), а моральное… если вы думаете что так просто сделать шейпы какого-нить Бобруйска(который нужен только одному Васе) — ну так давайте, помогайте!!! …работы хватит …у меня такими просьбами вся аська завалена …а вам за это просто будет «ПЛЮС» …а еще самое прикольное в том, что вопросы типа «а можете прислать примеры отображения маршрута по Киеву» в основном задают люди, которым даже плюс влом было ставить …вот

    Reply
  16. biv75

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

    Reply
  17. v.l.

    (15) Никто не говорит, что надо быть жадным. Согласен — дело крополтливое. Только не надо выпрашивать. ИМХО. Кстати, я уже подобрел.

    Пока халявно ща быстро накачаю себе 😉

    Reply
  18. adun

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

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

    Reply
  19. v.l.

    (18) Фраза «P.S. Если хотите, чтобы мы выкладывали и другие города — не стесняйтесь, ПЛЮСУЙТЕ!» — перечеркивает все «добрые начинания». суть — плюсования. А если хотите чтобы были запросы на «и другие города», измените на «P.S. Если хотите, чтобы мы выкладывали и другие города — не стесняйтесь, ЗАКАЗЫВАЙТЕ!»

    ИМХО

    P.S. — поподробнее про «чужие разработки, например, выкладывать)))». Аж интересно стало!

    Reply
  20. v.l.

    Я скачал карту Харькова и честно поставил плюс.

    Reply
  21. adun

    (19) …для непонятных повторю …плюс ставится в том случае если эта тема интересна и нужна(конкретно: географические схемы городов, стран, континентов), и народ хочет чтобы мы продолжали выкладывать геосхемы. …нужность и оригинальность того или иного отчета или обработки можно определить только после непосредственной работы с ним …к геосхемам это не относится т.к. они все имеют одинаковую структуру(разница только в топологических данных) и программный код в них не используется, и сама разработка производится совсем в другом программном обеспечении …так, что оригинальностью мы не блещем))) …только по плюсам(а не по закачкам) мы смотрим актуальность темы и решаем дальнейшее ее продвижение …и если кого-то смущает, слово «плюсуйте» то это ваши проблемы …у нас нет свободного времени разводить болтовню, так что с вашего позволения я эту тему закрою.

    (20) улыбнуло

    Reply
  22. marsohod

    Спасибо за Харьков 😀

    Любимый город …

    Reply
  23. Катя84

    спасибо за внимание моему родному городу:))))

    Reply
  24. DeepDiver

    Респектоз! МЕГА!

    вот бы щё и Одессу!

    Reply
  25. motogon

    И киев не помехал бы с харьковом

    Reply
  26. Jonny33

    Плюс с моей стороны.

    Есть вопрос:

    1.хотел сам сделать *.geo по ижевску в arcview 3.2а, но при загрузке в 1С 8.1

    выдается ошибка «Невозможно отобразить схему в указанной проекции »

    Как быть, все пробовал не получается, подскажите плиз!

    Reply
  27. Userman

    хочу город Пермь!!!

    Reply
  28. adun

    (26) …вероятнее всего проблема с системой координат …точно могу сказать, только посмотревши на слои.

    Reply
  29. alex_4x

    Поделись технологией рисования ГЕО !

    Я хочу делать план офиса с пользователями и техникой, чтобы кликнул по бошке и вся инфа — от установленных баз данных, до ипишника, должности, графика работы, внутреннего телефона и вся остальная информация из актив дайректери и по оборудованию через SNMP

    все графические данные у меня есть в Corel draw, через какие программы можно переносить это в geo ? Как привязывать к объектам IDшнички и всё такое ???

    Reply
  30. biv75

    (29) Вот тут описывается прога с помощью которой можно всё сделать http://infostart.ru/projects/4213/

    Reply
  31. alex_4x

    (30) там преобразование из растра. а у меня изначально уже есть все в векторе. Второе — мне не понятно как назначать слои и присваивать Айдишнички объектам. подскажите пожалуйста.

    Reply
  32. adun

    (29) можно использовать цепочку Corel -> AutoCAD -> ГИС …тип должно получится …но разбивку на слои нужно делать самому …в роли айди используйте обычные значения объектов

    Reply
  33. alex_4x

    (32) Я правильно понимаю, что из Автокада я уже могу сохранить в .geo ?

    Или нужна еще какая-то отдельная гис система, если нужна, то какая ?

    Насколько я понимаю, гис система нжна только когда высоты объектов надо заводить — уже как бы полный 3Д, а не вид чисто сверху. Мне же надо просто двухмерный план, без высот.

    Не понял — где и как управлять слоями ? Какими программами пользоваться ?

    Reply
  34. biv75

    (32) Если есть возможность выгружать шейп файлы векторов то их можно потом загрузать в формат карты 1С

    Reply
  35. alex_4x

    Shape файлы в каком должны быть формате ? Расширение какое ?

    И куда их загружать, чтобы потом объединить в одну карту geo, который и 1С поймет ? Можно полную последовательность действий ?

    У меня есть файл с замкнутыми областями, раскрашенный. я его могу в AI формат записать, могу в DXF, SVG. что дальше ?

    Reply
  36. adun

    (35) конвертишь в DXF потом импортируешь в формат MapInfo, а потом из него в шейп-файлы(*.shp) … высоты здесь не при чем, просто без ГИС ты не сможешь переконвертировать в шейпы …потом создаешь в 1с новый объект — геосхему и добавляешь их туда. Примеры шейпов есть тут http://infostart.ru/projects/3158/

    Reply
  37. RikON

    Думаю что это копия-порт ИГИТОВСКИХ вариантов

    Reply
  38. masenshi

    да все просто. Только вот как привязать еще координаты? У меня после привязки 1С уже не читает шэйпы.

    Reply
  39. Sharloc

    Присоединяюсь, после привязки к координатам в ArcMap 1С-ка не читает шейп, выдает ошибку. Уже 2 недели бьюсь над простой схемой.

    Reply
  40. DiselDen

    Для Молдовы или Кишинёва хотябы…………..

    Reply
  41. qwerty!

    Будет время, сделайте Днепропетровск, Украина, пожалуйста!

    Reply
  42. user931544

    Вот тут описано как сделать шейп файлы https://infostart.ru/public/60665/

    вот тут карты Украины и по областям Open Street Format в польском формате .mp

    http://navitel.osm.rambler.ru/?country=Ukraine

    Reply

Leave a Comment

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