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




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

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 не будет опубликован. Обязательные поля помечены *