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




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

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