Анализ продаж на карте 2




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

21 Comments

  1. phsin

    Анализ продаж на карте по свойству.

    Контрагенты с разными свойствами отображаются разными цветами.

    Обработка для 1С Торговля и Склад и Комплексная

    Для начала нужно запустить обработку [Установка координат] — кого найдет на фактическому адресу, тем сохранить координаты.

    А потом можно формировать Отчет Анализ продаж.

    Если у кого-то будет желание, можно добавить еще аналитику….

    Это не законченное решение, а скорее решение для обсуждения 🙂

    Reply
  2. CheBurator

    Алле! Установка координат тупо тянет координаты из свойств… ничего нет про фактический адрес…

    Reply
  3. phsin

    Исправил. — по ошибке залил не тот файл…

    кстати! Google Chrome почему-то не заливает файлы на сервер, это вопрос наверно к support…

    Reply
  4. phsin

    И еще одно предупреждение…

    Если показываете большой файл xml, то IE часто выдает ошибку что-то вроде

    Сообщение: HTML Parsing Error: Unable to modify the parent container element before the child element is closed (KB927917)

    в Google Chrome, Opera эта ошибка не возникает…

    Reply
  5. Ёпрст

    Сообщить(«Выберите маршрут из папки «+СокрЛП(Константа.АдресКартыFtp)+»

    {АНАЛИЗПРОДАЖНАКАРТЕ2.ERT(32)}: Поле агрегатного объекта не обнаружено (АдресКартыFtp)

    Reply
  6. phsin

    Спасибо, исправил.

    Reply
  7. Ёпрст

    А так, понравилось, вот только один хрен придётся половине (даже большинству) адрес руктями ставить… 🙁

    Reply
  8. phsin

    (7) да от этого никуда не деться… к сожалению!

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

    Reply
  9. phsin

    Поиск проходит по всем большим городам. Почти все миллионники в списке…

    Reply
  10. Ёпрст

    Мы юзаем деловую карту — для прокладки маршрута и логистики — считается ЗП водил от этого…

    Дык, половина адресов вообще хрен найдешь — их нет ни в классификаторе , ни на карте.. 🙁

    Reply
  11. phsin

    (10) Интересно. а можно по-подробнее о деловой карте?

    а маршруты тоже составляются? удачные?

    Reply
  12. Ёпрст

    (11) Составляются.. по ним и идёт потом пересчет в «км»… Но, иногда приходится проверять — может «не» щаметить прямого пути — проложит хрен знает как.

    И сопряжение карт (разных областей) тоже хромает.

    Reply
  13. Serjik78

    Забацайте для восьмерки, цены Вам не будет! А так плюс 🙂

    Reply
  14. phsin

    (13) ок, 💡 идея

    Reply
  15. buhkiller@mail.ru

    В центре города всегда продажи лучше, чем на окраине.

    И для этой прописной истины надо делать картинки ?

    Чудная страна, населенная одинэсовцами !

    Reply
  16. Ёпрст

    (15) Гы… вы продаете только в 1 городе ?

    Как вы себя ограничиваете…

    Reply
  17. Ёпрст

    +16 или взять, например Мск — интересно посмотреть распределение по скеторам — где в каком округе больше продается, так что вам низачот.

    Reply
  18. buhkiller@mail.ru

    (17) Игрушка для богатого заказчика 😉

    Reply
  19. phsin

    (18) Ага, с учетом, что всЁ бесплатно, то для ОООчень богатого… 😀

    как говориться, нет ограничений… кроме тех, которые мы себе придумали…

    Reply
  20. Serjik78

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

    Reply
  21. V.Nikonov

    Красиво. Но анализируется похоже только покрытие территории…

    В лучшем случае анализ перекрытия разных направлений (менеджеров, ТоргПредов и т.п.)

    Reply

Leave a Comment

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