Как организовать прогнозирование пробега автомобилей и приглашение на техническое обслуживание в Альфа-Авто




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2026-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='\

20 Comments

  1. AndrewK990

    Добрый день, мы также используем Альфа-Авто и не единожды пытались организовать маркетинговые мероприятия для приглашения клиентов на первое ТО, обязав мастеров приемщиков пригласить тех клиентов которые были у каждого из них в прошлом году, однако так и не смогли отследить результативность этого мероприятия.

    Назрело 2 организационных вопроса:

    1. Удалось ли привлечь доп. клиентов уже или все еще только внедряется?

    2. Как оператор узнает что для определенного клиента сработал прогноз и его следует пригласить на ТО, работает какая -то система оповещения? (что-то вроде подсказки или всплывающего окна — «через 5 дней планируется запись на ТО для такого-то такого-то»)?

    Reply ↓
  2. miavolas

    (1) AndrewK990, конечно описываемая методика, которая используется не на одном предприятии позволяет привлечь дополнительных клиентов. Но оценивая количество привлеченных клиентов надо самим понимать, что сформировав отчет с цифрами положительных ответов, мы никогда так и не узнаем сколько из них в момент звонка отказались от визита, а позже все равно приехали. Так же как некоторые из клиентов приехали бы и без нашего звонка 🙂

    В описываемой системе не используется механизм напоминаний, но это не потому что его никогда не было 🙂 практика работы реальных клиентов показала, что пользователь будучи не выделенным только для звонков по телефону специалистом напоминание откладывает, и не факт что реально к нему вернется. А если речь идет о выделенных для проведения обзвонов специалистах call-центра, то им напоминания не нужны, ведь они по списку клиентов совершают звонки.

    Reply ↓
  3. miavolas

    Хотя вместо рассказа о напоминаниях можно было бы описать похожую систему, которую делали с использованием механизма бизнес-процессов платформы 1с

    самая простая реализация вообще была линейная



    Но при использовании бизнес-процессов так и не получилось корректно отразить ситуацию с изменением документов задним числом, которое встречается в реальной жизни

    Reply ↓
  4. izofen

    Документ опрос, только фиксирует ответы на вопросы или есть программная обработка результатов ответа?

    Reply ↓
  5. chernyshova_darya

    (4) izofen, у меня близкий к вашему вопрос, действительно интересно, ну ответил посетитель автосервиса, что сейчас какой то там пробег его автомобиля и он отличается от того который в вашей базе , и что?

    Reply ↓
  6. miavolas

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

    Reply ↓
  7. pim56

    Мы используем смс информирование для приглашения клиентов однако замечаем что количество клиентов для приглашения становится все меньше и меньше, но детального анализа с чем связано это уменьшение пока не проводили

    Reply ↓
  8. miavolas

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

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

    Reply ↓
  9. Гарик55555

    Хорошая статья. Я только не понял это отдельная конфигурация или доп. обработка?

    Reply ↓
  10. miavolas

    (9) Гарик55555, это описание методики работы с типовым функционалом отраслевой конфигурации Альфа-Авто, при наличии очень ограниченной информации которая идет в поставке, не сразу получилось запустить процесс.. делимся своим опытом

    Reply ↓
  11. vikupinov

    (3) Очень интересно было бы посмотреть на реализацию приглашения клиентов в виде бизнес-процесса. Думаю что такой бизнес-процесс нашел бы большое применение не только в Альфа-Авто, но и в типовых конфигурациях

    Reply ↓
  12. miavolas

    (11) vikupinov, реализация бизнес-процесса не является секретом, но учитывая, то что фрагменты кода включены в различные объекты метаданных, не знаю какая часть вас особенно заинтересовала бы.. могу отправить на почту

    Reply ↓
  13. ДимокШ

    Пришлось переделывать типовую или нет?

    Reply ↓
  14. miavolas

    (13) ДимокШ, данная публикация описывает использование типового отраслевого решения, как его можно было бы использовать без внесения изменений и касается в основном методической части. Обозначенные вопросы :

    — о фиксации нулевого пробега автомобиля, если на момент продажи не зарегистрированы показатели одометра;

    — регистрации данных о владении автомобилем в процессе опроса клиента по телефону;

    — регистрации примерного значения последнего пробега со слов клиента

    — регистрации данных о прохождении ТО в другом месте

    — о возможности контролировать полноту клиентской базы для приглашения на обслуживание

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

    Reply ↓
  15. bpc222

    (1) AndrewK990,

    обязав мастеров приемщиков пригласить тех клиентов которые были у каждого из них в прошлом году, однако так и не смогли отследить результативность этого мероприятия

    Явная проблема со SMART при постановке задач…

    Reply ↓
  16. papami

    (2) поставил + за то что делитесь опытом.

    Сам достаточно давно участвую в автоматизации автобизнеса, в том числе есть холдинг, где все основные действия расписали по бизнес-процессам в 1С.

    Для тех кто начинает:

    1. Нужны не напоминания, а задачи с исполнителями и максимальными сроками выполнения.

    2. Опишите в виде бизнес-процессов работу отделов:

    а) Сервис — «Выполнение ремонта»(от приезда автомобиля и до выдачи). Это основная функция сервиса — она будет упорядочена. Будет меньше «косяков»

    б) Продажи — «Визиты клиентов в салон». Упорядочиваем трафик и «мотивируем» продавцов вбивать данные о клиентах.

    Бизнес процессов конечно нужно больше. И чем больше действий описано, тем лучше Вы понимаете что происходит в организации. Главное не валить все в кучу.

    3. Задачи, связанные со звонками нужно интегрировать с системой записи. Т.к. не всегда та информация, что указана в телефонной анкете соответствует словам клиента. Могли вообще не звонить.

    4. Задачи, связанные с созданием каких либо документов желательно закрывать автоматически с указанием исполнителя. Если есть возможность избавить персонал от лишних действий — нужно избавлять.

    5. Все задачи нужно анализировать отчетами, в том числе принимать меры при несвоевременном выполнении

    Reply ↓
  17. miavolas

    (16) papami, спасибо большое за столь дельный комментарий. Изначально данная публикацию планировалось в двух частях… 1-ая описывает типовой функционал и 2-ая рассказывает про доработки, К сожалению я недооценил время которое потребуется для написания статьи поэтому пока опубликована лишь первая часть которая описывает методику использования того что есть….

    Очень интересна ваша практика использования бизнес-процессов и инструментов для управления ими.

    Очевидные плюсы от использования бизнес-процессов как механизма платформы могут быть сведены на нет отсутствием удобного инструмента для их анализа и управления ими. Существующие CRM-решения позволяют не изобретать велосипед

    Особенно интересно как коллеги решают задачу нехватки инструментов управления задачами и бизнес-процессами во отраслевых конфигурациях?

    Reply ↓
  18. trader7777777

    (16) papami, понравился ваш комментарий.. вы пишете:

    «Задачи, связанные с созданием каких либо документов желательно закрывать автоматически с указанием исполнителя. Если есть возможность избавить персонал от лишних действий — нужно избавлять»

    Интересно есть наработки как можно было бы отразить в бизнес процессе отмену проведения или пометку удаления документа?

    Мы так понимаем что вы говорите об автоматическом выполнении задачи (очередного этапа бизнес-процесса) при проведении документа.

    Интересно был ли опыт отработки проведения / перепроведения документов задним числом (например при восстановлении последовательностей) , что в таком случае должно происходить с бизнес процессом?

    Reply ↓
  19. papami

    (17) Альфа — неплохая база для развития, не более. Она оптимальна для учета в автобизнесе, но уже из коробки не соответствует требованиям вендоров в плане CRM (JLR, VAG. Думаю подобная ситуация у большинства представительств). По другим отраслевым решениям не решусь давать оценку.

    Да, написать понятную статью — большой труд. Мне не дано, видимо)

    (18) trader7777777, не знаю Вы программист или управленец. Если в общих словах, то связь документа с выполнением какой-либо задачи следует выполнять только в интерактивном режиме, т.е. когда документ проводит пользователь. Точнее «Процедура ПослеЗаписи()». Восстановление последовательностей не повлияют на бизнес-процесс.

    Reply ↓
  20. miavolas

    (3) в продолжение поста возможна и нелинейная структура как на картинке

    Reply ↓

Leave a Comment

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