Красивый склад




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

40 Comments

  1. genayo

    Для склада производства многие описанные вещи конечно применимы, но для торговли (а большую часть потребителей WMS составляют торговые предприятия) увы…

    Reply
  2. izidavld

    (1) Есть опыт такой же системы для торговли. Для производства как раз сложнее

    Reply
  3. genayo

    (2) Для оптовой?

    Reply
  4. CheBurator
    можно будет громко гаркнуть: Шнелле, воурум ни[шх]т астгелифт кляйн ладун стрига (Schneller, warum nicht ausgeliefert Klein Ladungs Träger)

    еще, появляясь на складе обязательно надо назидательно гововрить типа Зизолен нихт шпацирен, зизолен арбайтен, арбайтен, унд арбайтен!

    Отдельное спасибо: за «Гестаповец, живущий глубоко в душе каждого автоматизатора, будет аплодировать стоя» — это ты точно подметил…

    Reply
  5. CheBurator

    Моя практика показывает что если с сотрудника снять или минимизировать «Умение считать» — все становится лучше…

    Reply
  6. CheBurator

    Во чего автор уперся в вмс и так их не любит? видно когда-то чем-то наслолили вмсники.

    По сути то, что автор написал — глубоко не вникал в написанное, только общую канву — собственно и есть вмс, то что ее удалось сделать с минимальным применением компов — ну и ладушки…

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

    Reply
  7. PAVI

    Класс! И по форме, и по содержанию )))

    Reply
  8. genayo

    (6) Склад производства вещь очень специфическая и интересная, там практически нет пределов улучшениям, и, в принципе, вполне можно обойтись без WMS. И Канбан вполне себе работает в Российских условиях, подтверждаю…

    Reply
  9. izidavld

    (3) Смешанная, опт/розница. Чистый опт еще проще по-моему, но утверждать не буду, хотя один очень для меня авторитетный человек внедрял и внедрил эту методику у P&G. На сколько мне известно успешный опыт уже 5 лет. Хотя сам не видел.

    Reply
  10. genayo

    (9) Возможно эта методика и подойдет для оптового склада производителя, с количеством наименований готовой продукции не более 100. Но, например, масштабы проблем на складе оптового дистрибутора продуктов питания (примерно 10 тыс. SKU, 40 тыс. позиций заказов ежедневно) вы себе даже не представляете…

    Reply
  11. izidavld

    (10) Представляю на пром. группе. Очень хорошо. 9 к. SKU (ох ненавижу я это сокращение), причем в них еще понятие партионности (одна партия может отличаться от другой тоном и это по-факту разные товары), характеристик (от 2 до 10 на 4 к позиций) и розница своя. И своя розничная сеть, причем факторы планирования закупа (соответственно и ресурсы склада) зависят от некоторых «невообразимых» факторов: сегодня дизайнер «сделал офигенный сет в шоуруме», его тиражировали на все филиалы — и поперло, а перед этим это была cz позиция почти год.

    Там просто иначе kanban делается, точнее даже не так — он делается почти полностью электронным, и, ясное дело — оптимизация по сбору заказа пишется своя, но и только. Адресное хранение практически 1 в 1 из УТ. Единственное что не успели в проект — вообще от СГП отказаться, но все к этому шло и вышло бы… Но из-за вышеуказанных факторов Продажи забоялись и я их понимаю. Мы бы просто экономили на складе и тратили на аналитике примерно столько же… )

    По продуктам питания скажу честно — опыта не имел, но понимаю что есть ньюансы с совместным хранением и сроками годности, а так же с условиями хранения и если это еще динамические объемы (по спросу, кстати вот и ответ на вопрос «что такое wms-планирование») то да, возможно будет сложно. А если упадет база, что делать будете? Вот пипец — админ окажется (не дай бог врагу) сволочью и решит уничтожить базы. Понятно найдут, паяльник, все дела… но толку то?

    Reply
  12. izidavld

    (10) в (11) я имел ввиду что мы далеко не все там сделали на складе да и учился я тогда этой методике, нельзя сказать что канбан там законченый логически, но именно вопросы комплектации заказов используют как-раз pull и kanban. А вот с организацией хранения тогда не вывез. Сейчас бы уже осилил.

    Reply
  13. genayo

    (11) Вероятность падения базы и злой админ — это такой форсмажор, который возможен с любой системой, есть планы восстановления, резервирование по железу и т.д, это в общем не является проблемой. А вот нюансы на самом деле таковы, что без WMS эффективная и стабильна работа такого склада не возможна.

    Reply
  14. CheBurator

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

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

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

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

    Reply
  15. ILM

    Браво, вам бы еще по ТОС прочитать, их методики обеспечения MTS и MTO, цены бы не было.

    Reply
  16. genayo

    (15) Да, это правильные вещи. Жаль, с производства ушел, а в продуктовой оптовке с Российской спецификой не особо методики планирования ТОС применять можно…

    Reply
  17. izidavld

    (15) А по ней и считаем ) Статья то не последняя. )

    Reply
  18. izidavld

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

    Reply
  19. gull22

    Познавательно — плюс.

    Reply
  20. fomix

    Супер! Если начать с описания положения дел на складе — мне было бы даже страшно браться за реализацию такого проекта…

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

    Reply
  21. genayo

    Да, кстати, сколько по времени заняло внедрение?

    Reply
  22. izidavld

    (21) проработка концепции и проектирование — 2 мес, подготовка 1 мес. И в 2 дня запустили первый этап. А потом где-то месяц «шлифовали» нюансы.

    Reply
  23. fomix

    Если учесть, что сумма затрат на внедрение данного функционала какие-то 5.000 деревянных (по заявлению автора!) — просто смешно! И не идет ни в какое сравнение с суммой внедрения 1С:Кортес (Адресный склад), где тебя начинают слушать от 100.000 руб. Молодца!

    Reply
  24. izidavld

    (23) Ну нет, еще на KLT нужно денег, но на них нужно в любом случае денег. Еще на маркеры, карточки. Тут заблуждаться не нужно, цена как внедрения WMS так и kanban ощутима, но в отличии от WMS — не требует поддержки за дорого. Ну и kanban дешевле, понятно

    Reply
  25. fomix

    (24) Канбан — я так понимаю не методология, а сами карточки? Тогда если можно пример с фото опубликуйте.

    А про «соллерс» хотел бы спросить поподробнее (работал там в моск.офисе) — там что такая же система внедрена или просто для продолжения линейного ряда написали … >> японский автопром, Ford, GMC, боинг, соллерс, да и тысячи других компаний<<

    Reply
  26. izidavld

    (25) да, Соллерс-Дальний восток при инспекции сотрудниками Toyota признан максимально соответствующим TPS (Система качества производства Toyota) в России. В принципе на своем опыте могу сказать — изучение этой методики и основы TPS я получил именно там. Если работали там, должны были слышать имя Андрей Алексеев — вот собственно он консультировал нас по канбану. А я разработал последнюю версию MES там (точнее 100% переработкой татарского MES). )))

    Reply
  27. Sykoku

    (4) CheBurator,

    У Вас с немецким также плохо, как и у автора: как минимум, «Sie sollen».

    Reply
  28. izidavld

    (27) Да какой к черту немецкий, у меня Китай под боком и Япония — я немцев то видел раза три в жизни, и то пьяных )

    Reply
  29. CheBurator

    (18) а у меня резервирование на этот случай

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

    Если и она рухнет

    Ну да

    На этот вариант продумываю простую ежедневную автоформируемую схему склада где что лежит

    Этого будет достаточно

    Reply
  30. izidavld

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

    Reply
  31. CheBurator

    Как пример вмс

    Сегодня тестировал

    Присутствует куча запланированных отборов

    Запускается абц перемещение с автокорректировкой отборов

    Также и с автокорректировкой подпиток

    Также автоотслеживание рейтингов ячеек-товаров для проведения волновых инвентаризаций при отсутствии основного объема работ

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

    Ну и прочее сейчас навскидку не упомню

    Както вот так

    Закончу проект тогда запилю вебинар

    Reply
  32. izidavld

    (31) Буду ждать — интересно.

    Reply
  33. dlebedev8

    Не совсем понял, как у вас АРМ организованы. Чем читаются штрих-коды, какую роль при этом выполняет компьютер на складе и можно ли его заменить ТСД?

    Reply
  34. izidavld

    (33) Постараюсь на днях приложить фотографии, ТСД можно, но зачем? Если есть лишние — можно, но в нашей общей системе нужны оперативные данные. АРМ обрабатывает штрих-коды и делает движения, печатает маршрутные карты. К АРМу в придачу беспроводные сканера штрих-кода. Думаем заменить на андроид-устройства.

    Reply
  35. izidavld

    http://infostart.ru/public/332761/ — продолжение «складской» тематики

    Reply
  36. CheBurator

    (32) планирую сугубо прикладные вопросы

    Что как почеумк

    Какие процессы построены

    Почему так получилось и прочее

    Еще разрешение у руководства придется просить

    И осторожно говорить чтобы страшные тайны не выдать

    Смайл

    Reply
  37. l_men

    (6) CheBurator,

    Во чего автор уперся в вмс и так их не любит? видно когда-то чем-то наслолили вмсники.

    Вот мне тоже интересно)))

    Судя по всему на складе хранится малогабаритная номенклатура, которая вполне умещаются в контейнеры KLM. На складе используется статическое хранение номенклатуры (т.е. мы всегда знаем где какой товар лежит) как в зоне быстрой сборки, так и в зоне длительного хранения. (Поправьте если я не прав. Три раза статью перечитал, что бы вникнуть) Да действительно в таком случае WMS не нужна. Хотелось бы еще знать какое количество строк заказов отгружается в день.

    А как будет работать данная система предположим с таким складом:

    3000 строк отгрузки в день, соблюдение сроков годности, порядка 3000 наименований, минимальная партия отгрузки коробка, в строке заказа от 1 до 40 коробок. ВГХ коробки от 10x20x30 см. И возможность сделать в нижнем ряду стеллажей (зона быстрой сборки) предположим 1000 ячеек под стандартную EUR паллету.

    Reply
  38. AlexWhite

    Спасибо автору, интересно! Себе закладочку на будущее, требуется более вдумчивое прочтение 🙂

    Reply
  39. Freadlave

    Солидарен и мне понравилась тема.

    Reply
  40. izidavld

    Ну, теперь есть шанс пообщаться на конференции. Кому действительно интересно — голосуйте http://event.infostart.ru/2015/agenda/agenda.php

    Reply

Leave a Comment

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