Обработка, делающая все хорошо




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

57 Comments

  1. new_user

    За 10sm? Может в наименовании кнопки добавить «Сделать все хорошо Павлу Чистову)))» ?

    Reply ↓
  2. GROOVY

    (1) new_user, Не тот эффект будет! 🙂

    Reply ↓
  3. new_user

    (2) я думаю действительно будет другой эффект: больше скачиваний)

    Reply ↓
  4. GROOVY

    (3) new_user, идею понял. Надо делать!

    Reply ↓
  5. new_user

    (4) была бы обработка на github, сделал бы pull request.

    Reply ↓
  6. ben_art

    Скачивать не готов, но думаю тема Нового года не раскрыта )

    Reply ↓
  7. klinval

    Это что какое-то маркетинговое исследование: типа проверки сколько людей «поведутся»/скачают?

    Reply ↓
  8. karpik666

    Господи, где же вы раньше были? год то уже заканчивается, вот в начале было бы вообще «все замечатально». Хотя мой друг скачал и сказал, что даже сейчас может помочь: было все плохо, а теперь вдруг все хорошо. Так что — разработчики молодцы, нужная вещь, как накоплю 10sm сразу скачаю, а то к новому году ну очень нужно, чтобы было все хорошо.

    P.S. Есть предложение по развитию обработки: некоторые не могут себе позволить, чтобы было все хорошо за такую цену, но можно разбить обработку на лайт версию — «все немного хорошо», про — «все зашибись» , вип — «все супер-пупер», и по поводу оповещения можно сделать отправку на почту, или письмом почтальоном, так как не у всех есть интернет, да и компьютер.

    Reply ↓
  9. kit

    Отличная обработка! Давно была идея в программах 1С вместо множества разных кнопочек сделать одну большую «Выполнить ВСЁ». ))

    Reply ↓
  10. rozer

    5 баллов !

    Reply ↓
  11. Resheteev

    Reply ↓
  12. CheBurator

    (9) давно уже сдеоано

    И эту обработку тупо передрали с клюшек: http://infostart.ru/public/14694/

    Смайл

    Reply ↓
  13. GROOVY

    (12) CheBurator, Да, меня уже ткнули носом. Но давайте не забывать, что это УФ! 😉

    Reply ↓
  14. GROOVY

    Да и Гаечка, для тех кто понимает…

    Reply ↓
  15. binex

    По-моему кнопка должна быть ещё больше. И зелёной. И вообще — круглой.

    Reply ↓
  16. GROOVY

    (15) binex, планируется во второй версии.

    Reply ↓
  17. MiniMuk

    А подскажите, все будет хорошо? Или только в 1с все будет хорошо? Не очень подробно рассмотрели этот вариант

    Reply ↓
  18. GROOVY

    (17) MiniMuk, я писал вообще «все буде хорошо», просто, писал на 1С. На чем умеем на том и пишем.

    Reply ↓
  19. Armando

    Хочу чтоб шуткам тоже было хорошо.

    Reply ↓
  20. DO_WHILE_LOOP

    Супер.

    Reply ↓
  21. masterkio

    В описании не указано для чего поле ввода. ?

    Reply ↓
  22. GROOVY

    (21) masterkio, там нет поля ввода.

    Reply ↓
  23. Lapitskiy

    сбор стартмани на корпоратив?

    Не стыдно?

    Reply ↓
  24. vano-ekt

    когда выйдет версия с техподдержкой за рубли?

    Reply ↓
  25. GROOVY

    (24) vano-ekt, обработка не требует поддержки, так как сама делает все хорошо.

    Reply ↓
  26. vano-ekt

    хммм, не зря скачал. в ней оказалось, не только извещение пользователя о том, что все хорошо, а кое-что еще 😉

    ps. зря только в описании не написал полностью, в чем фишка. Скачиваний на порядок больше было бы.

    Reply ↓
  27. qwinter

    (23) Lapitskiy, все различными штуками от Павла пользуются, а 10 см жалко. Эх люди люди.

    Reply ↓
  28. DitriX

    (26) vano-ekt, и таки да, надо было Павлу не юлить, и написать — что действительно находится в этой обработке 🙂

    А так да, за такое не жалко 10$m!

    Reply ↓
  29. BigB

    (0) хочу заказать автору обработку, но только такую «Сделать все красиво»

    Reply ↓
  30. Светлый ум

    (1)(23)

    Новогодний сюрприз…

    Идеальная публикация на кануне праздника — улыбнуло)

    Reply ↓
  31. 1cNyb

    (0) в обработке курс по СКД?

    Reply ↓
  32. igo1

    АААА у меня под УТ 10.3 не отрывается. Не видать мне все хорошо =(

    Reply ↓
  33. GROOVY

    (32) igo1, обработка под УФ, можете в настройках конфигурации включить «Разрешить открывать управляемые формы в обычном приложении».

    (31) 1cNyb, Просто открыл обработку в базе к курсу.

    Reply ↓
  34. AnryMc

    (9) kit,

    Когда то делал (вроде ещ₴ на 8.0) — «распознавалку» голоса для 1С.

    Главбух говорил: «Баланс» и получае баланс на текущую дату…

    Вот это было счастье у человека…. А это — так…

    Reply ↓
  35. GROOVY

    (34) AnryMc, «1С, внатуре, баланс построй!» 🙂

    Reply ↓
  36. AnryMc

    (35)

    «Перло» главбуха от такой крутизны немерено….

    Reply ↓
  37. vitn55

    (9) kit, Для «умных» бухгалтеров, был сделан отчет с названием «Все отчеты одной кнопкой» (он ничего не делал просто показывал процент выполнения отчета по кругу) — самый умный бух ждал трое суток — просто бухи ржали тихо………………..

    Reply ↓
  38. amoarok

    Спасибо! Раньше использовал вот эту программу: http://qt-apps.org/content/show.php/Zaebis?content=102362

    Но теперь можно использовать весь функционал, не выходя из 1С!

    Reply ↓
  39. IDija

    Кнопка должна быть по центру большая и зеленая!

    Иначе заказчик не примет!

    Reply ↓
  40. GROOVY

    (39) IDija, это не вписывается в концепцию разработки управляемых форм.

    Reply ↓
  41. IDija

    (40) Ну не знаю, заказчик требует!)

    Reply ↓
  42. GROOVY

    (41) IDija, желание заказчика значения не имеет 🙂

    Reply ↓
  43. IDija

    (42) Да и правда, чего это я….

    Reply ↓
  44. МимохожийОднако

    Напомнило как лет 15 назад сделал одному из директоров кнопку «Сделать всё!». При нажатии выводилось сообщение на весь экран «Всё в порядке, Шеф!». Попросил убрать только через полгода ))

    Reply ↓
  45. 20tanush

    Весело!

    Reply ↓
  46. cargobird

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

    В связи с чем «сваял» вариант на обычных формах.

    Reply ↓
  47. librefx

    Замечательная обработка! 🙂

    Reply ↓
  48. igo1

    (33) Это была шутка такая. Странно, что ни кто не заценил ((

    Reply ↓
  49. jobkostya1c8

    А я как-то писал противоположную «Сделать очень плохо» (точное название не помню), но это было давно. И то было недоумение: «…может назвать «большая радость»? И продолжение «что главбуху сделал гадость».

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

    Reply ↓
  50. klaus38

    Необходимо несколько специалистов для внедрения данного решения, на крупном производственном предприятии.

    Reply ↓
  51. ryutao

    Ну это же просто каменный век какой-то! Какая кнопка? Что за архаичность? Надо же соответствовать как-то хоть немного, идти, так сказать, навстречу чаяниям заказчика. Такую обработку у меня не принял бы ни один заказчик. Требуется срочно все исправить: обработка при открытии должна в автоматическом режиме начать процесс улучшения всего. Ну, прогресс бар конечно, который необходимо снабдить пояснениями: «Начат процесс улучшения всего.», «Процесс улучшения … 10%» и т.д., вплоть до конечного результата. Анимация и звуковое предупреждение, что все стало хорошо, только приветствуются.

    А то придумали, заказчик кнопки будет нажимать! Щаз! =)

    Reply ↓
  52. AllexSoft

    Обработка как нибудь хорошо НДСу делать умеет? а то он совсем того ( вместе с бухом его считавшим..

    Reply ↓
  53. dj_serega

    Теперь понятно почему у меня когда-то не изменялся индикатор.

    А нужно было вызвать обновление…

    Спасибо 🙂

    Reply ↓
  54. SmArtist

    Классно! Хоть не Новый год, но улыбнулся:)

    Reply ↓
  55. hromovanton

    Нужно после нажатия на кнопку менять текст кнопки на «Уже почти все хорошо, нажмите еще раз»! Затем «Все хорошо, но можно сделать еще лучше, делаем?», затем «Ну теперь то совсем другое дело. Все почти почти хорошо, еще один клик, и все будет хорошо? «. Ну и так генератор слов сделать! Интересно будет на пользователей потом посмотреть, кто сколько раз кликнул, пока не психанул 🙂

    Reply ↓
  56. v3rter

    Дарю антикнопку: http://www.nooooooooooooooo.com/

    Reply ↓
  57. MichiMaloy

    Прикольно)

    Reply ↓

Leave a Comment

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