Путевой лист легкового автомобиля




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

52 Comments

  1. riop

    замените файл рисунка на файл обработки

    Reply ↓
  2. simuljakr

    Да, обшибся маленько.

    Заменил.

    Reply ↓
  3. riop

    организация не подставляется в поле «Организация» печатной формы. так и задумано?

    Reply ↓
  4. simuljakr

    Исправил.

    Reply ↓
  5. bnw

    А у меня не заполняется печатная форма там, где адрес организации и куда выезжал…

    Reply ↓
  6. simuljakr

    (5)

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

    А адреса в таб. части у вас не заполняются судя по всему из за того, что они должны быть заданы «в формате КЛАДР», а у вас похоже забиты вручную.

    Reply ↓
  7. bnw

    Добрый день!

    А как же быть с печатью? В печатной форме тоже не заполняется правая сторона. А ведь нужно.

    Reply ↓
  8. simuljakr

    (7) Я же уже ответил Вам в 6 сообщении. Чтобы заполнялась правая сторона — адреса контрагентов, к которым ездил водитель, должны быть введены в «формате КЛАДР».

    Reply ↓
  9. Iriss

    Обработка хорошая…

    А нет случайно для БП 2.0? Очень хотелось бы 🙂

    Reply ↓
  10. simuljakr

    (9) Я не знаком с БП 2.0, но если там есть регистр сведений «Сохраненные настройки» то, я думаю, будет работать… Если нет — могу и подкрутить — за соответствующее вознаграждение 😉

    Reply ↓
  11. Tanya_ya

    а у меня всё работает, всё прекрасно… спасибо! это щастие! 😀

    Reply ↓
  12. simuljakr

    Пожалуйста 🙂

    Как мало оказывается надо для щастья 🙂

    Reply ↓
  13. simuljakr

    Пожалуйста 🙂

    Как мало, оказывается, надо для щастья 🙂

    Reply ↓
  14. kodina

    Хочется на платформе 8.2 😀

    Reply ↓
  15. simuljakr

    (14) Я думаю — ничего сложного переделать не будет…

    Не знаю только — где там можно будет сохранять необходимые данные…

    Какой нибудь аналог регистра «СохраненныеНастройки» там есть ?

    Reply ↓
  16. kouch

    Спасибо. Помогло.

    Reply ↓
  17. Iriss

    (15) Да, в БП 2.0 есть регистр сведений «Сохраненные настройки».

    Reply ↓
  18. WildFire

    Не нужно никакой переделки, достаточно просто сконвертировать обработку под конфигуратором 8.2.

    У меня всё работает, спасибо за обработку — на ее базе сделаю документ и вообще подсистему путевых листов, с регистрами и отчетами. Не пойму, почему разрабы не предусмотрели это штатными средствами.

    Reply ↓
  19. Alexey55

    Спасибо! Пригодилась

    Reply ↓
  20. dreamland
    Iriss пишет:

    Обработка хорошая…

    А нет случайно для БП 2.0? Очень хотелось бы

    Очень нужная вещь. Кто-нибудь тестировал в конфигурации Бухгалтерия предприятия 2.0?

    Reply ↓
  21. pav22001

    Отлично, то что надо!

    Reply ↓
  22. Deniz200

    полезная обработка!

    Reply ↓
  23. icemurm

    Пригодилась, просто для себя подправил немного)

    Reply ↓
  24. icemurm

    даешь еще десяточку)

    Reply ↓
  25. CaSH_2004

    Странно, скачивается как «PechatjPutevogoLista.ert» при этом ни 8.1 ни тем более 7.7 (судя по расширению) не открывается. Что за чудо? Можете перезалить?

    Reply ↓
  26. simuljakr

    (25) Что то не то у Вас скачалось… Файл называется ПечатьПутевогоЛиста.epf

    Только что сам его скачал — в 8.1 открывается.

    Reply ↓
  27. vv-adm

    Было бы удобно если путевые листы можно было бы сохранять во внешнем файле. Нет ли такой обработки?

    Reply ↓
  28. simuljakr

    (27) При необходимости все можно сделать…

    Reply ↓
  29. VragHorosh

    Хорошая обработка, допилю под себя малость) Сделаю Таблицу куда едим ввиде журнала, добавив поле дата и водитель с машиной, а еще вид топлива, чтоб удобней свести инфу вконце месяца. В целом гуд одобряю))) Простенько и совкусом, автор молодец!!!!!!!

    Reply ↓
  30. bnw

    Добрый день!

    Возможно ли сделать эту обработку, как ВнешняяПечатнаяФорма к Авансовому отчету?

    Reply ↓
  31. VragHorosh

    Да возможно, при и наличии программиста под рукой)))

    Reply ↓
  32. ksaur

    Спасибо, ждем обработку для 8.x…

    Reply ↓
  33. simuljakr

    Зачем ждать ?

    Можно и самостоятельно дописать.

    Код открыт 😉

    Reply ↓
  34. Nado2010

    отличная обработка. мне очень облехчила жизнь

    Reply ↓
  35. Nado2010

    отличная обработка. мне очень облегчила жизнь..большое спасибо разработчику

    Reply ↓
  36. irishen
    Nado2010 пишет:

    отличная обработка. мне очень облегчила жизнь..большое спасибо разработчику

    Так все заполняется нормально или нет?

    Reply ↓
  37. irishen
    VragHorosh пишет:

    Хорошая обработка, допилю под себя малость) Сделаю Таблицу куда едим ввиде журнала, добавив поле дата и водитель с машиной, а еще вид топлива, чтоб удобней свести инфу вконце месяца. В целом гуд одобряю))) Простенько и совкусом, автор молодец!!!!!!!

    А Вы переделывали ее под себя или нет?

    Reply ↓
  38. irishen
    CaSH_2004 пишет:

    Странно, скачивается как «PechatjPutevogoLista.ert» при этом ни 8.1 ни тем более 7.7 (судя по расширению) не открывается. Что за чудо? Можете перезалить?

    Скачала, у меня тоже нигде не открывается.. В чем дело? кто может подсказать с помощью чего открыть? или с помощью какого документа?

    Reply ↓
  39. bnw

    Должно быть расширение epf и все будет работать

    Reply ↓
  40. Iriss

    (18) Спасибо за подсказку! 🙂

    Открылась обработка в БП 8.2.

    И еще одно спасибо автору!!

    Reply ↓
  41. yuraskas

    Обработка помогла, спасибо. Жалко нет возможности печатать раздельно 1 и 2 сторону.

    Reply ↓
  42. Ange-Lika

    Путевые листы для легковых и грузовых автомобилей отличаются. Здесь только одна форма — для легковых?

    Reply ↓
  43. Ange-Lika

    Печать на двухстороннем принтере?

    Reply ↓
  44. simuljakr

    (42) Да, форма только одна. Для каких автомобилей — не знаю. Какую дали — такую и нарисовал )). У нас с этими путевыми листами ездят мини-грузовики типа газели.

    (43) На одностороннем.

    Reply ↓
  45. Ange-Lika

    Понятно. Спасибо.

    Reply ↓
  46. alekseies

    спасибо разработчику нужная обработка бухам облегчила жизнь..большое …..

    Reply ↓
  47. lady_lace@mail.ru

    использую в работе спасибо

    Reply ↓
  48. Anyu-n

    Вы обращали внимание из города в область неверно считает. Если по городу — то все ок, а если выезжает из города в область считает только до окраины (Нижегородская область). Что может на это влиять (Адреса все из КЛАДРа)

    Reply ↓
  49. simuljakr

    (48) На это влияет мерзкий сервис Карты Мэйл ру — который неправильно считает километраж.

    В Москве и по городу считает не правильно.

    Я писал им в техподдержку — они не отвечают.

    Надо бы обработку переделать на Яндекс Карты — они хорошо работают даже с адресами в произвольном формате…. да все как то не соберусь…

    Reply ↓
  50. ivolgas

    Подскажите, знающие люди.

    Версия 8.1., версия 8.2 один результат — при подтвержении адреса доставки пишет «Преобразование значения к типу Число не может быть выполнено». (Адрес из КЛАДР, КЛАДР обновлен).

    Что может блокировать расчет расстояния?

    Reply ↓
  51. simuljakr

    (52) При расчете адреса программа обращается к интернету — к сервису Карты Мэйл ру. Если у Вас есть какие либо ограничения с интернетом — может возникать ошибка.

    Вообще расчет расстояний у Мэйл ру — работает ОТВРАТИТЕЛЬНО (как впрочем и все остальное у Мэйла). На него нельзя ориентироваться. У себя на работе я переделал на Яндекс.

    Яндекс — молодец — он правильно считает даже без КЛАДРа.

    Сюда Яндекс не выкладывал — т.к. обработка не универсальная — надо допиливать — чтобы в любой базе работала.

    Если с интернетом все в порядке — пришлите адреса — откуда куда едете — я проверю у себя на компьютере.

    Reply ↓
  52. ivolgas

    Ограничений с интернетом нет.

    Вставляю этот блок из Расчет расстояния между адресами в формате КЛАДР

    «Российская Федерация, государство» — не всегда в ответе бывает надо добавить (обратите внимание)

    //%%% SolarGard — начало

    ДанныеСКоординатами=СтрЗаменить(ДанныеСКоординатами,»; ‘, CntrLat: «,СимволРазбиения);

    //%%% SolarGard — конец

    пишет «Ошибка в адресе», посчитать не может, убираю его — беда с преобразованием в число …

    адрес в поле с КЛАДР выглядит

    ,350001,Краснодарский край,,Краснодар г,,им Фурманова ул,3,,

    Reply ↓

Leave a Comment

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