Журнал документов с Google-картой




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

24 Comments

  1. alexscv

    Интересная мысль…

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

    Reply
  2. Klyacksa

    Автор, добавь конфигурацию УТ10.3+CRM:

    Управление торговлей и взаимоотношениями с клиентами (CRM)

    ID_Конфигурации = УправлениеТорговлей_CRMПроф

    Reply
  3. RomikSh

    Эта конфигурация есть на партнёрском диске ИТС, как она называется на сайте 1С поддержки?

    Reply
  4. Zas1402

    Интересно

    Reply
  5. pt_olga

    не хватает маршрутизации 🙂

    или я её не заметила…

    Reply
  6. RomikSh

    (5) pt_olga,

    Нет, там нет маршрутизации, учту пожелание на будущее…

    Reply
  7. wolder

    переделал под УПП — работает 🙂 Спасибо автору!

    Reply
  8. CagoBHuK

    В веб-клиенте работает?

    Reply
  9. RomikSh

    (7) wolder,

    Если напишите как, вставлю в код, чтобы при последующих обновлениях у Вас ничего не пропадало. ))

    Reply
  10. RomikSh

    (8) CagoBHuK,

    под web пока не проверял, сейчас добавляю отображение в виде обычного журнала-таблицы

    Reply
  11. LaNaite

    Отлично! В must have однозначно. Адаптировать можно под кучу задач и «хотелок». Автор, ты крут:)

    Reply
  12. RomikSh

    Спасибо!

    Reply
  13. Krasnyj

    Весьма интересно.

    Reply
  14. Prad2002

    Однозначно плюс! Для своих нужд можно перепилить.

    Reply
  15. dmbal

    У меня почему то ошибку дает при попытке сохранить координаты:

    {ВнешняяОбработка.DocumentsOnMap.МодульОбъекта(3012)}: Ошибка при вызове метода контекста (Получить): Ошибка доступа к файлу ‘maps/geo?q=%D0%9C%D0%BE%D1%81%D0%BA%D0%BE%D0%B2%D1%81%D0%BA%D0%B0%D1%­8F+%D0%BE%D0%B1%D0%BB%2E%2C+%D0%9F%D0%BE%D0%B4%D0%BE%D0%BB%D­1%8C%D1%81%D0%BA%D0%B8%D0%B9+%D1%80-%D0%BD%2C+%D0%B2%D0%B1%D0%BB%D0%B8%D0%B7%D0%B8+%D0%B4%2E%D0%­9A%D1%80%D0%B0%D1%81%D0%BD%D0%B0%D1%8F+%D0%9F%D0%B0%D1%85%D1­%80%D0%B0%2C+42%D0%BA%D0%BC+%D0%B0%2F%D0%B4+%D0%9C%D0%BE%D1%­81%D0%BA%D0%B2%D0%B0-%D0%A0%D0%BE%D1%81%D0%BB%D0%B0%D0%B2%D0%BB%D1%8C&output=csv&­oe=utf8&sensor=false&key=ABQIAAAA_UUqGTA4Hf2QROyN47O-hBS_tQyTYploLA7a8a_SQ6b1IuEd7RRXzpdvILlStpFZCB-IhukOKvKIZQ’: Ошибка работы с Интернет:  доступ запрещен (403). <html><head><meta http-equiv=»content-type» content=»text/html; charset=utf-8″/><title>Sorry…</title><style> body { font-family: verdana, arial, sans-serif; background-color: #fff; color: #000; }</style></head><body><div><table><tr><td>Google</td><td style=»text-align: left; vertical-align: bottom; padding-bottom: 15px; width: 50%»><div style=»border-bottom: 1px solid #dfdfdf;»>Sorry…</div></td></tr></table></div><div style=»margin-left: 4em;»><h1>We’re sorry…</h1><p>… but your computer or network may be sending automated queries. To protect our users, we can’t process your request right now.</p></div><div style=»margin-left: 4em;»>See Google Help for more info: Ошибка работы с Интернет:  доступ запрещен (403)
    Не заполнен объект.
    
    
    Reply
  16. dmbal

    При этом интернет есть в полном объеме. Что может быть?

    Reply
  17. dmbal

    Функция EncodeURL(СокрЛП(Адрес)) возвращает такую хрень, это нормально? А дрес там как адрес 🙂

    %D0%9C%D0%BE%D1%81%D0%BA%D0%BE%D0%B2%D1%81%D0%BA%D0%B0%D1%8F+%D0%BE%D0%B1%D0%BB%2E%2C+%D0%9F%D0%BE%D0%B4%D0%BE%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D0%B9+%D1%80-%D0%BD%2C+%D0%B2%D0%B1%D0%BB%D0%B8%D0%B7%D0%B8+%D0%B4%2E%D0%9A%D1%80%D0%B0%D1%81%D0%BD%D0%B0%D1%8F+%D0%9F%D0%B0%D1%85%D1%80%D0%B0%2C+42%D0%BA%D0%BC+%D0%B0%2F%D0%B4+%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B0-%D0%A0%D0%BE%D1%81%D0%BB%D0%B0%D0%B2%D0%BB%D1%8C
    Reply
  18. RomikSh

    Это Google запретил функцию определения координат по адресу для этой программы, придётся её временно убрать…

    Reply
  19. RomikSh

    Проверил причину ошибки, скорее всего на Google изменили систему запроса геокодирования, а старую забанили. В ближайшее время исправлю. Спасибо за сообщение об ошибке!

    Reply
  20. xten

    А для УТ 11.1 подойдет?

    Reply
  21. Anri81

    Обновления не появились? а то очень бы нужна такая обработка!!! Выдает ошибку при попытке определить координаты по адресу.

    {ВнешняяОбработка.DocumentsOnMap.МодульОбъекта(3012)}: Ошибка при вызове метода контекста (Получить): Ошибка доступа к файлу ‘maps/geo?q=127276%2C+%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B0+%D0%B3%2C+%­D0%9C%D0%B0%D1%80%D1%84%D0%B8%D0%BD%D1%81%D0%BA%D0%B0%D1%8F+­%D0%91%2E+%D1%83%D0%BB%2C+%D0%B4%D0%BE%D0%BC+№+1%2C+%D0%BA%D­0%BE%D1%80%D0%BF%D1%83%D1%81+5&output=csv&oe=utf8&sensor=fal­se&key=ABQIAAAA_UUqGTA4Hf2QROyN47O-hBS_tQyTYploLA7a8a_SQ6b1IuEd7RRXzpdvILlStpFZCB-IhukOKvKIZQ’: Ошибка работы с Интернет:  доступ запрещен (403). <html><head><meta http-equiv=»content-type» content=»text/html; charset=utf-8″/><title>Sorry…</title><style> body { font-family: verdana, arial, sans-serif; background-color: #fff; color: #000; }</style></head><body><div><table><tr><td>Google</td><td style=»text-align: left; vertical-align: bottom; padding-bottom: 15px; width: 50%»><div style=»border-bottom: 1px solid #dfdfdf;»>Sorry…</div></td></tr></table></div><div style=»margin-left: 4em;»><h1>We’re sorry…</h1><p>… but your computer or network may be sending automated queries. To protect our users, we can’t process your request right now.</p></div><div style=»margin-left: 4em;»>See Google Help for more info: Ошибка работы с Интернет:  доступ запрещен (403)
    
    
    Reply
  22. net7wolf
    {ВнешняяОбработка.DocumentsOnMap.МодульОбъекта(3012)}: Ошибка при вызове метода контекста (Получить): Ошибка доступа к файлу ‘maps/geo?q=664007%2C+%D0%98%D1%80%D0%BA%D1%83%D1%82%D1%81%D0%BA%D0%B0­%D1%8F+%D0%BE%D0%B1%D0%BB%2C+%D0%98%D1%80%D0%BA%D1%83%D1%82%­D1%81%D0%BA+%D0%B3%2C+%D0%9E%D0%BA%D1%82%D1%8F%D0%B1%D1%80%D­1%8C%D1%81%D0%BA%D0%BE%D0%B9+%D0%A0%D0%B5%D0%B2%D0%BE%D0%BB%­D1%8E%D1%86%D0%B8%D0%B8+%D1%83%D0%BB%2C+%D0%B4%D0%BE%D0%BC+№­+1%2C+%D0%BE%D1%84%2E23&output=csv&oe=utf8&sensor=false&key=­ABQIAAAA_UUqGTA4Hf2QROyN47O-hBS_tQyTYploLA7a8a_SQ6b1IuEd7RRXzpdvILlStpFZCB-IhukOKvKIZQ’: Ошибка работы с Интернет:  доступ запрещен (403). <html><head><meta http-equiv=»content-type» content=»text/html; charset=utf-8″/><title>Sorry…</title><style> body { font-family: verdana, arial, sans-serif; background-color: #fff; color: #000; }</style></head><body><div><table><tr><td>Google</td><td style=»text-align: left; vertical-align: bottom; padding-bottom: 15px; width: 50%»><div style=»border-bottom: 1px solid #dfdfdf;»>Sorry…</div></td></tr></table></div><div style=»margin-left: 4em;»><h1>We’re sorry…</h1><p>… but your computer or network may be sending automated queries. To protect our users, we can’t process your request right now.</p></div><div style=»margin-left: 4em;»>See Google Help for more info: Ошибка работы с Интернет:  доступ запрещен (403)
    
    Reply
  23. net7wolf

    хотя если вбить координаты и обновить то показывает

    Reply
  24. net7wolf

    и хотелось выбирать зум. чтоб при обновлении обратно на стандарт не уходил

    Reply

Leave a Comment

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