Процесс бар (индикатор состояния выполнения цикла)




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

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

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

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

37 Comments

  1. Abadonna

    >Надыбал в запасниках.

    Под запасниками ты понимаешь свои разработки, или когда-то скачанные.

    Если свои, тогда мне очень интересно: кто у кого спёр? (http://infostart.ru/projects/1880/)

    Если не свои, может расскажешь, откуда могли спереть по вышеприведнной ссылке?

    Люди, Инфостарт начинает превращаться с питательный бульон для плагиаторов!

    Пора что-то думать и решать.

    Reply
  2. ded00786

    (1) Что значит кто к кого спер? Обработки совершенно разные…

    Внешне похоже, но принцип совершенно разный.

    «ProcessBar» у меня уже давно, меня ей научили около полугода назад, с тех пор и начал программировать в 1С. Переделал и решил выложить а затем, на ее основе написал «ProcessBarCircle» и «ProcessBarCircleTwice». Собственно на ее основе можно вообще что угодно сделать, это лишь примеры полета мысли.

    Reply
  3. Abadonna

    (2) Про прогресс бар ничего не скажу, а кружок с точками имеет лишь небольшую разницу в коде.

    Кодинг — дело десятое, в http://infostart.ru/projects/1880/ я поставил плюс за ПРИНЦИП. Вот теперь мне и интересно: кто автор принципа?

    Reply
  4. ded00786

    (3) Сравни коды «ProcessBar»,»ProcessBarCircle» и «ProcessBarCircleTwice» — практически одно и тоже,за некоторым исключением, но это не http://infostart.ru/projects/1880/.

    Автор идеи «кружочков» скорее он, чем я, собственно, почитай тамошний комент:

    >Выложил нечто подобное http://infostart.ru/projects/1890/

    Reply
  5. ded00786

    (3) Да, кстати, сравни скорость выполнения.

    Хотя их вообще глупо сравнивать, это разные идеи, разный код, разный принцип, за исключением мигающих кружочков 🙂

    Reply
  6. Shaman100M

    (5) по коду должно работать быстрее чем http://infostart.ru/projects/1880/ , но задел еще есть.

    http://infostart.ru/profile/8196/projects/810/

    http://infostart.ru/profile/8196/projects/1330/

    Reply
  7. ded00786

    (6) Эх, полоса уж больно красивая… Я как-то до такого не дгнал…

    Reply
  8. CheBurator

    +1 за картинки в кружочек.. все остальное — бяка… 😉 Хочется какой-то «внешний» прогресс бар, который не надо встраивать в свои алгоритмы…

    Reply
  9. ufo58

    Дорогой ded!

    Не обращай вниманя на Abadonna подобных.

    Они уже похоронили один сайт (1C.proclub бывший hippo).

    Создали там «элитных сосателей идей», которые решают кому быть на сайте, а кому нет.

    Накушались. Стало мало. Решили «поуправлять» и здесь.

    Обработка отличная и идея хорошая.

    Спасибо.

    Reply
  10. Abadonna

    2ufo58. Слушай, неопознанный летающий объект, я на проклабе ваще не свечусь с момента появления инфостарта, и никогда модератором тем не был, и политику их не определял.

    Reply
  11. sfs

    Прикольно, для юзверей…..

    Reply
  12. CheBurator

    Дорогой ded! Советую поменьше обращать внимания на советы подобных (9) — для этого достаточно глянуть в их профиль.

    (9) проклаб похоронил себя сам, в основном — тормознутостью и постоянными неисправляющимися ошибками движка.

    Reply
  13. ded00786

    2ALL «Ребята, давайте жить дружно»

    З.Ы. Я уже для всех «ДОРОГОЙ» 🙂

    Reply
  14. OlegTor

    Надо отдать должное изобретательности автора (+1). ProcessBarCircle* можно использовать для пользователей женского пола. Могу предложить еще один вариант чудо-индикатора: http://www.infostart.ru/profile/1999/projects/442/

    Reply
  15. ded00786

    (14) >»можно использовать для пользователей женского пола»

    Не можно, а нужно, бухгалтерши в восторге 🙂

    Reply
  16. Sis-Adm

    Бухи точно будут в восторге.

    Reply
  17. ded00786

    Мда………. 485 скачиваний и 52 плюса, соотношение 9 к 1…………

    Reply
  18. ded00786

    А о комментах я вообче молчу, поначалу кто-то как-то что-то писал, а потом фсё.

    Reply
  19. buh

    К вопросу о скачивании и плюсах:

    Уважаемы господа программисты! Есть пожелание — снабжайте свои творения подробной инструкцией как заставить ваши обработки работать. На этом сайте «живут» не только программисты, но и простые пользователи, у которых, к сожалению, нет своих программистов, которые бы выполнили всю подготовительную работу. Ну вот я скачал, и что? Оценить в полной мере не могу, т.к. не знаю как это дело подключить. А раз не могу оценить, то не могу ничего и поставить — ни плюс, ни минус. Вот и получается, что скачиваний много, а плюсов мало…

    Reply
  20. ded00786

    (19) Учтем’с!

    Reply
  21. ded00786

    Добавил инструкцию, но определенными навыками обращения с конфигуратором все-же надо обладать

    Reply
  22. Abadonna

    (21) вот по пукту д) ты для ламеров как раз недостаточно объяснил

    им надо разжевать как с одной формы на другую перетащить элементы формы

    Reply
  23. ded00786

    (22) да там-то, собственно, все пункты для ламеров сложноваты, но я писал это для тех, кто уже имеет хоть какие-то навыки работы в конфигураторе, так что не обессудьте

    Reply
  24. buh

    (22) Это — то как раз не сложно

    Reply
  25. buh

    (23) Спасибо за инструкцию. Все в общем понятно, но… А если в обработке несколько циклов? Как в этом случае решается вопрос? Интересно было бы конечно получить общее время работы обработки, а не какого-либо одного процесса.

    Reply
  26. ded00786

    (25) Надо подумать, можно попробовать разбить прогресс на несколько частей, прикинуть примерно сколько по времени уходит на каждый цикл и выдать этому циклу определенное кол-во процентов на прогресс баре

    Reply
  27. Abadonna

    (25) Процесс применения прогресс бара не так однозначен и прост. В данном случае автор предлагает сам инструмент (индикатор), а уж как пользоваться им — это дело каждого программиста.

    Reply
  28. ded00786

    TO ALL: http://infostart.ru/projects/1940/

    Дополнил, по просьбе Buh (25)

    Теперь может быть скольугодно много циклов, инструкцию пока еще не составил, нет времени

    Reply
  29. Bylka

    ну собственно неплохо….

    где то это я уже видел… горизонтальный бар уже разрабатывался ранее .. лет 6 назад …

    хотя мне больше нравилась идея с крутящимся глобусом которая создавалась также на шрифте «Webdings» обыгравшею 3 буквы «э», «ю», «ь»… хоть её и приходилось дорабатывать чтоб он крутился не слишком быстро =)

    идея же с круговыми точками интересна… и свежа…

    код написан автором чисто с комментариями и видно явный стиль програмирования..

    собственно ставлю жирный плюс за всё… 🙂

    Reply
  30. Bylka

    P.S.// Да чуть не забыл, бар бесполезен, если он вставлен в обработки которые проводят документы, которые в в свою очередь выбрасывают комментарии не в нижнее окно, а в перед. (как в торговле)

    хотя их то можно и отключать =)

    Reply
  31. ded00786

    (29) Плюс действительно жирный 🙂

    Reply
  32. Loshko_WR

    А в 8-ке?

    Reply
  33. Abadonna

    (32)>А в 8-ке?

    А на кой ляд он там, если 1С-овцы наконец-то туда нормальный сразу встроили?

    Reply
  34. aleg

    Однозначно плюсую автору. Выгрузка (обработка) много тысячного справочника без визуализации процесса вызывала нервную дрожь у юзеров. Сейчас они чувствуют себя гораздо комфортнее, не лупят по левой клавише мышки беспрестанно, не беспокоят прогеров: «у меня программа зависла».

    Reply
  35. gia2011

    Автору — плюс. Спокойные юзеры — залог здоровья прогера.

    Reply
  36. АлексейН
    Автору — плюс. Спокойные юзеры — залог здоровья прогера.

    Спокойные юзеры — также спокойствие программиста

    Reply
  37. Alfer

    очень неплохо поюзаю обязательно — автору респект

    Reply

Leave a Comment

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