Практические вопросы внедрения и развития автоматизации склада. Часть 2




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

33 Comments

  1. AnderWonder

    «Возможность трансляции звука с терминального сервера на ТСД — существенно облегчает работу!» — интересно что и каким образом облегчает?

    Reply
  2. CheBurator

    (1) если после каждого скана у меня сотрудник будет на терминал смотреть отъто будет очень плохо и долго

    А так на любую нештатную ситуацию алярм шел и персонал толко на них реагировал

    Оказалось что это очень удобно

    Reply
  3. vasyak319

    (1) AnderWonder, отсканировал то — «пик», отсканировал не то — «ПИИИК!»

    Ещё у некоторых терминалов светодиодные сигналки есть разноцветные — можно ими тоже помигать.

    Reply
  4. CheBurator

    (3) нет

    У меня чуть попроще

    Если все ок то ничего не пикает

    Жутким алярмом орет если ошибка или нарушение

    Положительные пики делал только в конце заланий

    Типа задание на отбор все без отклонений то положительный пик

    Успешно закончен проход на сборке то положительный пик

    Если контрольупаковка без отклонений то торжественное положительное пиканье

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

    Заходишь на склад и уже по звукам понятно все

    Reply
  5. vasyak319

    (4) а как тогда они знают, что отсканировали ШК? ШК любят становиться нечитаемыми, кладовщики любят промахиваться сканером мимо ШК — всё это требует непременного подтверждения считывания, иначе им после каждого сканирования придётся пялиться в экран, а это ад.

    Reply
  6. CheBurator

    (5) считывание шк подтверждается пиком механики самого тсд

    Поэтому на каждое считывание шк дополнительных пиков программой у меня не надо (вполне допускаю что там где пиков от механики тсд нет там может быть имеет смысл озвучивать каждай пик программно)

    Reply
  7. vasyak319

    (6) если так, то ОК.

    Reply
  8. straus

    Спасибо за статью.

    Как я понимаю ТСД соединяются с системой через RDP по WiFi и передают данные о считанном штрихкоде через DataWedge. Мы используем подобную схему работы, но иногда возникает проблема, когда штрихкод передаётся в RDP сессию не полностью (похоже, что дело в качестве соединения, но мы так до конца не выяснили), поэтому мы сделали звук ещё и в сессии. Скажите у Вас такой проблемы не возникало?

    Reply
  9. CheBurator

    (8) спасибо за внимание к публикации

    Да именно так

    Работает как эмулятор клавиатуры без всяких драйверов

    Очень редко

    То есть ОЧЕНЬ РЕДКО

    У меня проглатывается иногда последний символ

    Но тут я грешу на неаккуратность в коде своем

    Бо это проявляется четко в конкретном месте

    Это не смертельно

    Бо построено так что в итоге такая ошибка или ее последйствия отловятся с вероятностью близкой к 100 процентам

    Так что такой проблемы не наблюдаю

    Попробуйте взять нормальные промыщленный вайфаиточки а не офисноигрушечное

    Reply
  10. straus

    (9) ошибка-то отлавливается, но последствия в основном — потеря времени (рабочего ритма) сборщика, поэтому мы решили, что нужно давать работнику обратную связь в виде: «всё в порядке» нежели «что-то не так».

    А точки у нас Ubiquiti Nano Station M2, вроде не самое офисное оборудование.

    Reply
  11. CheBurator

    (10) Понимаешь тут как: у меня на самописке любое отклонение от штатного режима — это громкий звуковой алярм и красный экран с содержательным сообщением об ошибке: типа такого



    и сборщик с рабочего ритма не сбивается — при звуковом алярме — он просто смотрит на экран и на то что держит в руке — и выполняет повторно действие.

    .

    сигналить на каждую ЭЛЕМЕНТАРИНУЮ операцию о ее успешности — я не вижу смысла. Сигналю только об отклонениях. В противном случае — сборщики — оглохли бы и притупили свое внимание.

    Reply
  12. Freadlave

    а сколько времени заняла автоматизация?

    Reply
  13. CheBurator

    (12) Как таковго ПРОЕКТА какого-то по автоматизации склада — не было. Поэтому говорить о времени проблематично. Вдобавок это все усугублялось тривиальным ДОЛГИМ наведением порядка на складе, выпинывания «королей» и т.д. и т.п. Вся эта «автоматизация» делалась «попутно»… вИдение как это должно быть — конечно же было, так что делалось потихоньку.. шаг за шагом. В итоге — с мая прошлого года перешли на «промышленную WMS» (хотя вообщем особой надобности в ней не было — переход был больше политическим решением). С переходом на WMS — существенного ничего не приобрели, те процессы которые были выпилены на самописке и доказали свою состоятельность — перешли на ВМС 1-в-1 практически. Улучшилось то — что не было сделано на самописке 😉

    Reply
  14. CheBurator

    Собственно, неупомянул почему-то что дала самостоятельная низкобюджетная автоматизация склада (назаовем таким словом переход на ТСД+РДП 😉

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

    Скорость упаковки-контроля прыгнула очень сильно.

    Пересорты исчезли как класс практически сразу же.

    Недоложили/переложили — уменьшилось существенно. Рекламации продолжали идти, но в меньших объемах у нормальных клиентов. У тех клиентов где раньше было много рекламаций — так и осталось сначала. Потом дополнительные предпринятые усилия позволили такие отклонения снизить еще. остальное — от склада практически не зависит и определяется качеством рабоыт экспедиторов и ситуацией на складах/местах сдачи/приемки товара покупателям.

    Reply
  15. CheBurator

    Пишу тестовый шаблон конфигурации для услуг ОХ.

    Reply
  16. CheBurator

    Голосуем за мой доклад на осенней конференции: http://event.infostart.ru/2015/agenda/agenda.php#item373007

    Reply
  17. CheBurator

    Запустились пилотно попробовать оказание услуг ОХ в серьезном (для нас) варианте (прием ~ 100 паллет в день)/ Бюджета на «допиливание» WMS на 8-ке не дали — пришлось оперативно «рожать» отдельную вполне себе приличную miniWMS на 77. Запущены процедуры приемки и размещения (пока только набиваем склад), все как положено: ячеечный учет, учет по срокам годности, качеству, собственникам… Приемка 30 паллет занимкает примерно 10 и менее минут. Паллеты как правило — однотипныне, несколько артикулов в поставке, монопаллеты. На каждую паллету — 1. идентифицируется товар по шк или выбором из списка заказа на приемку 2. на ТСД пробивается количество 3. на ТСД вводится дата изготовления или конца срока годности 4. лепится лейба со штрихкодом паллеты 5. жмак по лейбе 6. блымк! паллет принят… — дальше паллет пошел на размещение (до этого работало только прямое размещение из приемки в хранение сразу, завтра буду запускать из приемки в буфер бегунком, далее штабелером уже, рейтинги ячеек для размещения, автоподбор ячеек по ограничению веса итд., посмотрим что получится — пока что жестко сделал — можно из буфера только в запланированную ячейку поставить, при попытке поставить в другую ячейку — ругается, ибо пусть привыкают по плану… 😉 Пару скриншотов:

    Reply
  18. CheBurator

    Запустил планирование операций отбора, работает.

    Сегодня подготовил, оттестировал операцию отгрузки с использованием ТСД (достаточно простая)

    Reply
  19. CheBurator





    Reply
  20. CheBurator

    Персонал складской отнесся положительно к новым процессам/операциям. Интерфейсы старался делать максимально удобными, чтобы как можно меньше «непроизводительных» движений на ТСД надо было делать. Вроде получилось.

    Reply
  21. CheBurator

    Отгрузки работают стабильно, проблем нет.

    Сегодня с первого раза и без ошибок запустил плановую инвентаризацию…

    Процесс на ТСД совсем простой — ввиду особенностей паллетного хранения и обработки — за 2 часа полтора сотрудника «отчекрыжыли» 924 паллетомест, итог без отклонений, нашли две паллеты «пересорта» — стояли перепутанные паллеты между двумя местами (причем даже один и тот же товар с одинаковыми партиями).

    Reply
  22. CheBurator

    На Win2003 и Win7 — разные наборы шрифтов, поэтому если делать формы на другом компе — бывает нужных шрифтов и нет… — поэтому дизайн надписей немного и поехал…

    Reply
  23. valbir

    Спасибо, интересно. Оборудование какое брать? На ваших слайдах вроде MC9090G?

    Это уже на лям рублей. Что можете рекомендовать менее дорогое.

    Reply
  24. CheBurator

    (23) нет,

    9090G — это пистолетная рукоятка, нам такие неудобны

    9090S — это цфировая КОРОТКАЯ клавиатура, http://topresale.ru/image/cache/data/00000000380-700×700.jpg

    9090К — полноразмерная клавиатура http://www.barcode-arena.com/media/catalog/product/cache/1/image/800×800/9df78eab3352­5d08d6e5fb8d27136e95/m/c/mc9090kmain_3.jpg

    в 9090К может ставиться ЦИФРОВАЯ КЛАВИАТУРА (как в мобильном телефоне, с возможностью ввода букв с цифровых клавиш). 9090к отличается от 9090s — длиной панели кнопок, см 2 и 3 модель http://pace-uae.com/images/Handheld.jpg — 2 модель=К, 3 модель=S

    модель S нам показалась неудобной, так как голова перевешивает, а К — самое оно. Но у нас специфика такова, что мы буквы вводим очень редко, так что буквенно-цифровую клавитауру модели К мы заменили на цифровую, с возможностью ввода букв (клавитаура примерно как на S — но сответственно больше размером, над клавишами символы букв). у нас были два ТСД 9090К с буквенноцифровой клавиатурй — складские их всегда брали в последнюю очередь, так что в итоге мы просто сменили панели на цифровые, как на остальных…

    Reply
  25. CheBurator

    (23) 9090 сейчас не выпускают (но на рынке еще можно найти), им на замену модель 96xx

    можно посмотреть на модели MC3190 — они раза в два дешевле, но вполне нормальные.

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

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

    есть апологеты юзания андроидов.

    Reply
  26. ZLENKO

    (23) valbir, «Спасибо, интересно. Оборудование какое брать?»

    Мы использовали Терминал сбора данных Casio IT-800 — легкие, прочные.

    Reply
  27. ZLENKO

    Современные модели от Моторола https://portal.motorolasolutions.com/Support/US-EN/Mobile+Networks+RFID+and+BarCode+Scanners/OEM+Products/OE­M+Mobile+Computers

    Reply
  28. CheBurator

    Между делом (в режиме что бы такого сделать ненапряжного в режиме отдохновения) сделал сегодня «визуальную» схему склада, рисует послойно по ярусам (этажам). проходы-свободные-занятые-блокированные ячейки-прочее полезное… для моно-ячеек — артикул, количество, качество, паллета; для мультиячеек — просто инфо «много всякого». По жмаку на ячейку можно получить либо отчет об остатках либо упрощенную форму оперативных остатков см. (62), (67), (68)

    …а потом улучшил (не оставлять на потом, лучше день потратим, потом за час долетим) … в части возможности «нарезки» — можно выводить по разным сечениям: послойно по ярусам/этажам, можно развернуть сразу все этажи «бабочкой», можно ограничиться выводом только четной/только нечетной стен(ы) проходов(а).

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

    Обычно схемы любят рисовать там, где не хватает автоматизации. Нарисовать схему гораздо «дешевле», чем запрограммить кучу алгоритмов обработки кучи циферок… 😉

    Пример разворота одного из проходов «бабочкой»

    Свободные ячейки преимущественно на верхних ярусах — и это кузяво, потому что верхние ярусы — для легких паллет, а поставки в основном идут тяжелые паллеты, соответственно система их кидает по ограничениям/назначениям — тяжелые вниз, легкие наверх…

    Reply
  29. 1c.pro.fun

    (25) подскажите пожалуйста не было ли у Вас проблем с воспроизведением звука на терминалах Symbol MC9090? Технологию, аналогичную описанной Вами уже успешно применял ранее у других заказчиков, но на других моделях ТСД (CipherLab CP-30 если не ошибаюсь). На MC9090 звук пробрасывается с терминала на ТСД, но воспроизводится какое-то «пукание». Пробовал закачивать на ТСД WAV файл, эффект тот же. Не знаете с чем может быть связано?

    Reply
  30. CheBurator

    под 77 проблем с воспроизведением звука нет.

    под 8-кой внедренцы не смогли добиться нужного результата. Но так как на обслуживание процессов это не влияет (просто очень полезная помогалка) — то и не копали дальше…

    Reply
  31. CheBurator

    miniWMS на 7.7 успешно крутится и обслуживает поток паллет на вход и выход за месяц суммарно ~4 тысяч

    Reply
  32. CheBurator

    (29) нет, не было. порядка 20 аппаратов. на всех норм.

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

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

    однако ремонт такой стоит совсем недорого.

    Reply
  33. CheBurator

    миниWMS успешно отработала более двух лет. сейчас не работает по причине свертывания этого вида деятельности у клиента.

    на основе этой миниWMS в прошлом, 2018г, был сделан проект по «кроссдокингу» поставок учебников по школам в одном из крупнейших субьектов РФ. на фото — примерно половина по площади https://content.screencast.com/users/Che66/folders/Jing/media/6a7ae798-3984-4c1b-bc52-144f274e8177/2018-09-09_2251.png

    Reply

Leave a Comment

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