Google Maps Framework, работающий под веб-клиентом




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

27 Comments

  1. YRAtomic

    не работает демка

    Reply
  2. CagoBHuK

    (1) YRAtomic, Демка-то работает. Глючит инфостартовская система отображения демосайтов (если установить просмотр обработок во вкладках).

    Reply
  3. YRAtomic

    (2) ок, уже работает

    Reply
  4. CagoBHuK

    Коллеги, сразу попрошу Вас не включать режим отображения окон во вкладках, т.к. это приводит к невозможности просмотра Вашими коллегами демосайта. Вопрос инфостарту я уже задал. Спасибо.

    Reply
  5. pumbaE

    Подскажите, если куплю вашу разработку, тогда мне не нужно будет платить гуглу за коммерческое использование Google Maps кругленькую сумму?

    Или же вы нарушаете лицензионное соглашение гугла на использование сервиса Google Maps?

    Скорее всего вы нарушаете…

    P.S. Интересно, Инфостарт нарушает ли лицензионное соглашение гугла?

    Reply
  6. CagoBHuK

    (5) pumbaE, я думаю, что Вы можете задать Ваш вопрос в первую очередь г-ну Душелову. По поводу фрэйма: если заходить через прямой адрес, который по правилам Инфостарта я не могу тут указать, но который Вы можете увидеть, открыв обработку, то все работает хорошо. Глюки начинаются, когда 1С открывается во фрейме.

    Reply
  7. bi4ara

    Идея интересная хоть и не новая, но на мой взгляд реализация жутко сырая для платного использования.

    Баги:

    1. Маршруты не работают — сыпят кучей ошибок. Как при создании, так и изменении/удалении

    2. Причина не выявлена, но после тыркания в разные объекты перестает открываться форма маркера и форма маршрута

    3. Поиск можно сказать не работает.

    Предложения по улучшению (если интересно)

    интерфейс стоит улучшать и к параметрам объектов пояснения.

    1. В все формы (линия, маркер,….) в поле цвет добавь выбор из списка и заполняй список возможными значениями. Если добавишь в список картинки с образцами цветов — будет отлично.

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

    3. Выбор координат с карты: проверяй открыта ли форма «ввода координат», если открыта то передавай координаты сразу в нее и форму активизируй — иначе куча лишних тырков.

    4. Раз всего в конфигурации одна обработка, то есть смысл поставить ее на рабочий стол и все прочие подсистемы отключить. Останется при запуске сразу нужная обработка

    Reply
  8. CagoBHuK

    (7) bi4ara, спасибо за развернутый комментарий. Информацию принял. Кто, как не Вы, коллеги, ткнете мне в глюки и шероховатости. 🙂

    Reply
  9. ZeusF1

    Красиво! Не думал что можно чтото подобное сделать 🙂

    Reply
  10. guildofthecode

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

    Reply
  11. CagoBHuK

    (10) допиливаю постоянно. Баги правлю регулярно. Думаю, что через 2-3 месяца все будет стабильно и красиво. Если Вы нашли баг, не поленитесь — отправьте его описание в комментарий.

    Reply
  12. CodeOptima

    Здорово. Первый раз вижу такой функционал.

    Если не секрет, как обошли проблему вызова

    Document.parentWindow.execScript

    в браузерах не IE?

    Reply
  13. LaNaite

    Хочется демку)

    Reply
  14. boolean
  15. madranger

    В разработке обнаружена ошибка:

    — добавляем два маркера

    — при движения обоих маркеров координаты меняются у только у какого то одного. Неправильно определяется объект в обработчике события (то же самое по событию onClick откроются свойства не того маркера).

    В чем может быть проблема?

    Reply
  16. CagoBHuK

    (15) Ошибка исправлена. Проверяйте. Если Вы купили продукт, укажите номер заказа, и я пришлю Вам обновленную конфигурацию, а заодно и учетные данные для подключения к хранилищу.

    Reply
  17. zekrus

    Вопрос:

    -Пакетное использование геокодирования строго запрещено в коммерческих целях, как у вас этим вопросом (договоренность есть)?

    Reply
  18. CagoBHuK

    (17) Я предоставляю механизм, а уж в каких целях этот механизм используется — вопрос к пользователю. Вы же не судите производителя оружия, за убитых его оружием людей.

    Reply
  19. zekrus

    (18) Думаю на счет оружия — это вопрос к другим органам (вам виднее).

    А что касается вашего «участия» то деньги вы берете вполне реальные и думаю

    производителям услуг будет не без интересно. Спасибо.

    Reply
  20. CagoBHuK

    (18) Сообщите в таком случае про меня куда надо и дело с концом. Не нужно устраивать словоблудие.

    Reply
  21. zekrus

    (20) Мое мнение людям будет полезно узнать, что покупая программу с нарушением

    лицензионного соглашения компании производителя услуги они становятся соучастниками (по закону).

    Reply
  22. vpaoli

    Интересная разработка.

    Не могли бы вы выложить для ознакомления инструкцию по установке вашей компоненты ? Что необходимо установить на Вэб-сервере и т.п. ?

    Reply
  23. vpaoli

    Интересная разработка.

    Не могли бы вы выложить для ознакомления инструкцию по установке вашей компоненты ? Что необходимо установить на Вэб-сервере и т.п. ?

    Reply
  24. CagoBHuK

    (22) Здравствуйте. Никаких внешних компонент нет. Все написано на языке 1С с использованием JavaScript во фрейме HTML. Иными словами просто разверните конфигурацию, опубликуйте ее на веб-сервере и вуаля!

    Reply
  25. ilya005

    Демо не доступно (

    Reply
  26. CagoBHuK

    Сделал публикацию бесплатной, пользуйтесь.

    Reply
  27. MuI_I_Ika

    было бы зашибись, если бы оно еще и на мобильной платформе работало

    Reply

Leave a Comment

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