"Бескомпьютерная" автоматизация




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

32 Comments

  1. CheBurator

    +1

    на самом деле здесь я вижу два основных момента:

    — достаточно высокая «квалификация» менеджера запасов;

    (система поставок «на перспективу» держится исключительно на нем. невыход на работу — пипец системе).

    — обеспече

    Reply
  2. support

    В небольших фирмах «менеджер запасов» и директор — это одно и тоже лицо. Конечно, есть человек, один из самых «сообразительных», кто может его заменить. Ведь система проста до безобразия.

    Reply
  3. Vitaly

    Уважаемый, Сhe Burashka, описанная система действительно очень эффективна и рабочая! На себе испробовал. Я правда не знал, кто ее придумал и у меня были не маркеры, а листы заказов… ну, тоже самое только вид сбоку… Работала вся эта автоматизация лет десять! И люди менялись и болели… Всегда она была эффективна! Не буду вдаваться в подробности зачем такому предприятию хозяин и как он разруливает эти «проколы». Но из этой системы развился мой бизнес. На компьютеры перешел лет 5 назад и только тогда, когда счел не проблемой установить 17 машин, правда конфу писал сам, но некоторые элементы японского изобретения сохраняются и по сей день. Молодец Олег Сиголов! За статью +

    Reply
  4. Снусмумрик

    а всем бухам надо раздать деревянные счеты ! Ведь считали же раньше как-то и балансы сводили.

    Технический — это зло !

    Reply
  5. Снусмумрик

    Технический прогресс, в смысле

    Reply
  6. JohnyDeath

    Интересная статья. А курсирующие между киосками и складом мальчики с маркером напомнили мне протокол TCP/IP 😉 . А может всё отсюда и пошло???

    Reply
  7. viacht

    «а всем бухам надо раздать деревянные счеты ! Ведь считали же раньше как-то и балансы сводили.»

    В советские времена отчет по рейсу рыболовецкого траулера за 6 месяцев на счетах сводили за 3 дня. После применения компьютеров с ДОС прогами 6 дней, виндовс проги отнимают 12 дней. И где работа идёт быстрее?????

    Сейчас работаю на предприятии, где был ручной учёт себестоимости, занимавший у буха 1 день. Внедрили 1С — минимум 2 дня.

    Reply
  8. корум

    (8) Работал на заводе.

    На ДОС — армах план закупок составляли 14 дней, закрывали месяц — 7 дней.

    На 1с — 2 дня и 1 день соответственно…

    Reply
  9. ExugHa

    (7) Просто раньше, когда сводили «ручками», не учитывали столько много параметров. А любое изменение вводных требовало переделывания всей работы с нуля. Сейчас стали больше параметров считать, но местами и перегибают.

    Reply
  10. Abadonna

    Компьютер успешно решает все проблемы, которые до его появления и не существовали 😉

    Reply
  11. Мощный

    Лет 5 назад публикация сего опуса вызвала куда более неоднозначный интерес. Большинство тогдашних коментаторов высказавшихся не в пользу идей, высказанных г-ном Сиголовым в своей статье усматривали в ее появлении явное посягновение на традиционные методы автомиатизации, т.е. с применением и программ, и компьютеров. Статья и сейчас, несмотря на ее возраст, навевает тоску — 30 молодых людей снующих с ящиками пива на плечах от склада до магазина вызывают жалость и сострадание.. А если серьезно, то решение задачи носит черты односторонеего подхода к проблеме.. В данном случае вполне эффективно решаются вопросы управления запасами и только.. Ценоообразование, взаимоотношения с продавцами, покупателями, поставщиками, с теми ж юношами наконец, остаются за пределами этой самой «бескомпьютерной» автоматизации.. Интересными показались отзывы, в особенности, те что с примерами.. В особенности про балансы.. Свои примеры приводить не буду, но каково ? Сиголовщина находит своих почитателей.. Хе-хе..

    Reply
  12. menen

    Спасибо автору за идею (алгоритм). Главное — умело воспользоваться ее в процессах «компьютерной» автоматизации

    За статью +

    Reply
  13. alex_bob

    При такой системе часть склада может быть вообще заморожена — восполняются запасы на освободившихся полках, с которых легче доставать. А как быть с отслеживанием сроков годности? При добавлении карточек в контейнер менеджером запасов кто гарантирует, что дополнительный запас разместится в складе? Решение одной частной задачи всегда ставит новые.

    Больше согласен с господином Мощным, чем с автором. Компьютер все равно нужен.

    Reply
  14. Sprite

    Прочитал. Отметился. Без Рейтинга. » + » за поднятую проблему. » — » за «флуд» на сайте решающем проблемы автоматизации с помощью компьютерных и программных систем.

    Reply
  15. drmih

    Отличная статья.

    Сам занимаюсь автоматизацией опто-розничной торговли.

    Если раньше прочитал, может быть все оказалось намного проше

    Reply
  16. Yasen

    Статья хорошая, и до сих пор актуальная.

    Но, «баян» — читал ее года 4 назад.

    Reply
  17. Kastello

    Да, статья совершенно бесполезная, таким спосбом автоматизировали, если не изменяет память ещё в древнем Египте, всместо маркеров испольовали камешки, так что на инновацию эта тема не тянет совсем!

    Reply
  18. angeliccare

    Canban не позволяет контролировать извне: сколько меток активно на каком этапе. Только привносить метки/изымать.

    Т.е. для наладки аналитики (анализа спроса не в разрезе каждой позиции, а по срезам групп, при необходимости, например, корректировки целевых аудиторий) — потребуется … Считатель маркеров.

    Который бы вбивал эти данные по маркерам в компьютер.

    Т.е. система работает, управляема, но не анализируема.

    Reply
  19. angeliccare

    Существует более действенный способ — Radio ID (RFID).

    И метки есть (10 центов штука). И учёт — «поднёс к компьютеру» — посчиталось.

    И методология та же, но уже есть и аналитика.

    Reply
  20. Интересно, а о какой такой автоматизации можно говорить, когда Канбан развивался в после военные годы в Японии?

    Интересно, а какие компьютеры были в 1950-х ???

    Reply
  21. izidavld

    Отличная статья ) Канбан — наше все. Сами его активно применяем.

    Reply
  22. ad87

    (8) Viacht, на тему свода отчета за 3 дня, по сути не вопрос, только вот какой штат бухгалтеров был тогда и какой сейчас

    Reply
  23. aleksashin

    Спасибо автору за статью. Не думаю, что нужно воспринимать ее как данность. Это скорее принцип организации процесса, т.к. не везде и не всегда имеет смысл ставить ПК. Есть участки, на которых важна работа персонала, а не нажимание кнопок.

    Reply
  24. testik_vzv

    Плюсую. Статья иллюстрирует важное качество грамотного управленца или ИТ-директора от быдлокодера — знание различных технологий автоматизации, а не тупое применение привычной парадигмы по запросу клиента.

    Умная организация процесса, наверное, действительно важнее использования компьютера самого по себе. Как говорил Билл Гейтс, «Автоматизация эффективных операций увеличивает эффективность, автоматизация неэффективных операций увеличивает неэффективность» (В оригинале: «The first rule of any technology used in a business is that automation applied to an efficient operation will magnify the efficiency. The second is that automation applied to an inefficient operation will magnify the inefficiency»)

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

    Reply
  25. amadeus2011

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

    Reply
  26. SunShinne

    КРУТО

    Reply
  27. dmt

    Вот интересно, а сколько стоило для заказчика такое решение?

    Reply
  28. LexSeIch

    Это прекрасный пример эффективного использования KISS-принципа : «Keep It Simple Stupid! — Делай проще, дурачок!» ( принцип, запрещающий использование более сложных средств, чем необходимо ).

    Reply
  29. Ziggurat

    Всё гениальное просто. Встречал нечто похожее в организациях, работающих еще со времен СССР.

    Reply
  30. starik-2005

    В каждом Макдональдсе такое! Задача производства — заполнить пустые ячейки. Кончились гамбургеры — лепи гамбургеры!

    Reply
  31. ger_kar

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

    Reply
  32. ger_kar

    (31) И работает такой подход длительное время, и соответственно является подходом проверенным временем и доказавшим свою эффективность. Я вот до чтения этой публикации даже не задумывался о способах бескомпьютерной автоматизации, а теперь задумался. Интересно было бы почитать и другие подобные публикации. Наверняка есть и другие методы, позволяющие обойтись без компьютеров.

    Reply

Leave a Comment

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