Работа из 1С с Google maps без ActiveX




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

40 Comments

  1. Плывущая с бакланами

    Привет соседям! 😉

    Reply
  2. Варвар

    Привета пропажа 🙂

    ЗЫ: сначало выложена была картинка, не то закачал. Сейчас уже обработка.

    Reply
  3. Плывущая с бакланами

    Санёк, ты будешь смеяться, но я даже картинку не качала. 😎

    Reply
  4. Директор PR отдела

    Гениальная разроботка! 😉

    Reply
  5. Плывущая с бакланами

    О! Возникла сногсшибательная идейка.

    А давайте устроим флешмоб и раскрутим Саньку рейтинг ну хотя бы за сотню? ❗

    Reply
  6. Варвар

    Не взлетит :))

    Reply
  7. MRAK

    Плюсую авансом, щас гляну 🙂

    Reply
  8. Душелов

    Есть аналогичная mini-map http://infostart.ru/public/20005/

    Reply
  9. MRAK

    хм…

    {Форма.Форма.Форма(44,28)}: Переменная не определена (РаботаСКартами)

    СтрокаХТМЛ=СтрокаХТМЛ+<<?>>РаботаСКартами.ДобавитьМаркер (СтрокаТаблицы.Значение.Широта,СтрокаТаблицы. начение.Долгота,СтрокаТаблицы.Значение. Заголовок,СтрокаТаблицы. Значение.Информация,СтрокаТаблицы.Значение.НомерМаркера);

    Reply
  10. Варвар

    (9) уберите РаботаСКартами — это общий модуль, процедуры в обработку скопированы, завтра подправлю.

    Reply
  11. Варвар

    (8) спасибо, я ее не нашел, потому сам делал. Посмотрю.

    Reply
  12. Трактор

    (8) Между этими разработками большая разница. Обработка Варвара работает под фирефоксом, а та на которую ссылаешься ты — нет.

    Reply
  13. Душелов

    (12) Ну разница есть еще и в платформах 🙂

    Reply
  14. Abadonna

    Красноярцы, предупреждаю: не качайте никаких обработок (хоть ВК, хоть не ВК) по работе с Google maps. Они нам так нагугломепили, что в городе-миллионнике и регионе-доноре только одна улица есть — трасса М-53 😉

    Reply
  15. Варвар

    (14) зато широкая улица :))

    Reply
  16. Abadonna

    (15) Не сколько широкая, сколько длинная: «От Москвы до самых до окраин» 😀

    Reply
  17. Kondrat

    Обработка не открывается! почему?

    Reply
  18. Варвар

    (17) в какой версии 1С открываете? Как управляемое приложение или как обычное?

    Reply
  19. Kondrat

    В 8.2

    О, наверное как обычное! А как открыть как управляемое?

    Reply
  20. Kondrat

    (19)

    Просто открываю внешний файл «РаботаемСКартойПример.erf»

    Reply
  21. Варвар

    (19) там только управляемая форма

    Reply
  22. Kondrat

    (21) Извини за дилетантский вопрос, а как открыть ее как управляемую форму

    Reply
  23. Варвар

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

    Reply
  24. Kondrat

    (23) Спасибо, Варвар, все получилось!

    Reply
  25. p etrovich

    не, ну ты гад… мне терь что, на 8.2 переходить?!!! 😮

    Reply
  26. Варвар

    (25) о, а это идея!!! Перепишу эту мега обработку на 8.1 за большие деньги :))

    Reply
  27. kravchuk

    Занимательно)

    Reply
  28. igor_kav

    Классная обработка! Сделай чтоб еще и маршруты прокладывала

    Reply
  29. spleen

    (26) Так что на 8,1 не будет? и не ждать?

    Reply
  30. CagoBHuK

    Я не знаю, что вы все так пищите. Попробуйте запустить обработку в веб-клиенте и обломитесь. Хорошо, конечно, что она работает в УФ, но без веб-клиент реального применения от нее ноль.

    Reply
  31. Варвар
    spleen пишет:

    Так что на 8,1 не будет? и не ждать?

    Не будет.

    CagoBHuK пишет:

    Я не знаю, что вы все так пищите. Попробуйте запустить обработку в веб-клиенте и обломитесь. Хорошо, конечно, что она работает в УФ, но без веб-клиент реального применения от нее ноль.

    тебе может и 0, а у меня работает, юзеры довольны. Вебклиент — не нужен.

    Reply
  32. Варвар
    CagoBHuK пишет:

    Я не знаю, что вы все так пищите. Попробуйте запустить обработку в веб-клиенте и обломитесь. Хорошо, конечно, что она работает в УФ, но без веб-клиент реального применения от нее ноль.

    Можешь пробовать сейчас, теперь работает в вебклиенте.

    Reply
  33. CagoBHuK

    (32) При попытке найти адрес через поиск «Метод объекта не обнаружен (eval)». Причем, победить у тебя это не получится, так как в веб-клиенте DOM возвращается не в виде COM-объекта, а в виде ВнешнийОбъект, который не поддерживает данного метода. В общем, не работает и работать не будет априори. К чему я это пишу? Делал то же самое, только с рисованием всяких полигонов из 1С и прочими вкусностями, но тоже уперся в это. А без вебклиента управляемые формы смысла не имеют, т.к. под виндой можно запустить и обычное приложение.

    Reply
  34. Варвар

    (33) только что проверил. Работает на ура.

    Reply
  35. CagoBHuK

    (34) Какая версия IE? Пробовал ли на FF или Chrome?

    Reply
  36. Варвар

    (35) IE 9. FF 6 не работает, Хром не ставил, но думаю тоже работать не будет.

    Reply
  37. jarOjar

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

    Reply
  38. jarOjar

    Вот бы еще ее с GPS связывать.

    Reply
  39. jarOjar

    Как работать с картами Google разобрался немного.

    Reply
  40. echo77

    Что я делаю не так? IE 11 стоит

    Reply

Leave a Comment

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