Планшет и 1С (бюджетное решение вместо прайс-чекера)




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

23 Comments

  1. gorevg

    Добрый день!

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

    Reply
  2. rusmil

    Хотелось бы немного деталей:

    1) Планшет на какой системе Android или Windows?

    3) Сканер как подключаете к планшету?

    Reply
  3. WKBAPKA

    фигня это все. дорого получается.

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

    в наличии логистики и склад на 1С. крутились вокруг, как сделать дешевле, т.к. с одной стороны ТСД не хило так стоят, с другой, под них опять же надо ПО, которое стоит тоже мама не горюй.

    Рассматривали все варианты, в том числе и планшеты. В итоге сошлись на ТСД.

    Почему не планшеты. Причина банальна, они для этого не предназначены, не удобны, хрупкие. Это не для склада с бетонными полами, карами, паллетами и этажами.

    ну и сама связка планшет + сканер. Изверги, так над операторами склада издеваться 🙂

    Reply
  4. psih12

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

    Reply
  5. arteast

    (1) gorevg,

    Не уверен что видно, но другой фотографии под рукой нет)

    Делали кейсы на заказ. Стоимость кейса 1500 обошлась

    Изготавливали из орг.стекла.

    (2) rusmil, ОС планшета не имеет значения, сканер даталоджик USB через OTG-кабель

    (3) WKBAPKA, а я разве писал что для складских работников это? Сравнивать это с ТСД нелепо, данная связка аналог «Прайс-чекера» или информационного киоска

    А бегать вместо ТСД можно со связкой блюпуп сканер+андроид телефон с rdp, конечно после падения на пол не всегда выживет, но…тоже такое решение внедряли) И получалось порядка 10 т.р., опять же дешевле чем ТСД в разы

    Планшеты лучше брать с отдельным портом питания.

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

    Планшет ~7000 руб

    Кейс 1500 руб

    Сканер ~5500 руб

    итого около 15 т.р. за единицу, в отличии от аналогичных киосков, которые от 45 т.р. и выше это ну очень выигрывает.

    (4) psih12, не нашли подходящего по цене и запросам)

    Reply
  6. DitriX

    Меня так радуют статьи такого плана, что аж смеюсь до слез.

    Давайте посчитаем — блютуз сканер, стоит аж никак не 5500р, а 250-300уе, планшет стоит 200 — 250уе, итого — около 500уе.

    Но все же, если вы решили взять сканер проводной и подключить по ОТГ, то очень быстро будете садить бтарею.

    Вопрос номер два — кто оплатит стоимость оборудования в случае его разбивания?

    Как оно будет работать пр низких температурах и грязных руках?

    Батареи хватит на 8 часов работы с включенным экраном и зарядку он быстро делает?

    А теперь самое интересно — сколько стоит лицензия на RPD и лицензия 1С, да да, они тоже не бесплатные. И стоят от 100уе каждая.

    Итого — цена вашего реального кейса не 200уе, как вы написали (это при рубле по 30, да, но при текущем курсе — 15000р = 200уе), а 700уе.

    Поэтому не вводите людей в заблуждение 🙂

    Это раз, а два — с выходом мобильной платформы — вы можете сами поставить себе 1С на терминал и сделать вообще что угодно, и не будет софт вам стоить очень много. Тем более есть уже готовые шаблоны и т.д.

    Reply
  7. capitan

    Цитирую: Опубликовал arteast в раздел Программирование — Мобильные приложения

    Знаки… они везде.

    Цепляться к базе через rdp с планшета это моветон.

    Reply
  8. (5)

    Сканер ~5500 руб

    Блютулзный сканер за такие деньги…не смеши, нет сейчас таких цен, да и раньше они дорого стоили)

    Reply
  9. arteast

    (8) trade70, (6) DitriX,

    всегда можно пошевелить мозгами и подобрать решение)

    «Радуют» меня «специалисты», которые так и норовят втюхать клиентам самое дорогее решение, чтобы и самим процентик получить и не себя случайно не напрячь при настройке)

    1) Сканер посмотрел, тот который используетс в боевых условиях здесь , действительно, не 5,5к, а 4к. Но так даже лучше)

    2) Планшеты которые используются такие …удивительно.. а ЦЕНА то не изменилась)

    3) Быстро садится батарея? Думаю есть решение. Например этот же самый планшет с отдельным гнездом питания. О как ! Да, и такое бывает

    4) В общем, изучайте ТРИЗ и думайте, господа))

    А насчет мобильной платформы…хорошо ведь когда есть выбор)

    Reply
  10. arteast

    (6) DitriX, чую что где-то ступил жёстко)

    5500 — это цена обычного сканера, не блютуз (я про связку с планшетом)

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

    С планшетом поставили usb-hub на 4 дырдочки. Но в основном используем только для подключения сканера usb)

    Reply
  11. Reply
  12. WKBAPKA

    как бы там нибыло, планшет не самое удобное решение. А бегать с кучей девайсов, так еще и спец. форму покупать надо, с кармашками там разными 🙂

    Reply
  13. (12) WKBAPKA, да это даже не обсуждается…каждый придумывает гемор себе сам, не в наших правилах отговаривать от этого;-)

    если перефразировать классику — и опыт сынков ошибок трудных и гения парадоксов друг))

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

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

    Сканер с памятью

    У этих сканеров есть память 4М запоминает до 240тыщ сканирований автономно…сам понимаешь можно считывать потом все как ТСД, но количество в отличие от ТСД ты будешь что 100 раз сканировать одного товара?;-)

    Reply
  14. arteast

    Как говорится, слышал звон, а не знаю где он)

    Повторяю, решение для прайс-чекера или информационного киоска. Это стационарный объект, кто предлагает с ним бегать похоже вообще не ориентируется в оборудовании.

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

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

    (11) trade70, Брызгать слюной и бесноваться можно сколько угодно — но факт остаётся фактом. ссылочка для таких спецов )) Удачи.

    З.Ы. и да, «грамотный» пишется с одной «М». Раз уж кто-то попытался перейти на личности)

    Reply
  15. arteast

    (15) trade70, мне надоело проявление глупости и невнимательности, последний раз говорю, всё оборудование связанное с постом на гарантии.

    Что касается попытки подловить меня на чём-то — тешьте себя дальше, «специалист» в области торгового оборудования)

    Кому моё решение подойдёт, тот сам спасибо скажет, ка те, кто сейчас им пользуются.

    А кто только какахи метать может, пусть сам свои руки и марает.

    Reply
  16. baracuda

    А что если сканировать фронтальной камерой??? Через какую нибудь софтинку, и этот штрих передавать уже в клиентскую часть анписанную на php или js которая цепляется к 1с через веб-сервисы?

    Reply
  17. arteast

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

    Если бы была возможность найти софтинку которая фотала-скидывала куда-нить-на сервер распозновала и возвращала, то было бы супер.

    А так не комильфо ни разу(

    НЕ, сканер, удобнее чем камера, да и подносить как к камере, пока угол нормальный подберешь, пока камера сфокусируется.

    Кстати, пробовали связку с телефоном ещё мини-usb-сканера (размером с флешку который), тоже прикольно сочетается. Но не все мобилки otg поддерживают. Так что в итоге цена получалась совсем не радостной)

    Но это так, отступление от темы…

    Вообще может есть какое решение, типа внешней камеры для планшета, которая очень хорошо фотает и распознает. Но пока не думали в этом направлении

    Reply
  18. arteast

    А решение так и работает в крупной оптовой компании, количество устройств увеличено до 15-ти, полёт нормальный.

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

    Из планшетов 2 поменяли по гарантии в ДНС — была проблема с дисплеем.

    Из обнаруженных минусов.

    Иногда зависает сеанс RDP на сервере, решилось настройкой.

    Reply
  19. 77017242895

    Добрый день! А можно данное решение реализовать через блютуз сканер?

    Reply
  20. arteast

    (20) можно конечно, но блютуз почему то отваливается при некотором бездействие. По крайней мере на наших планшетах.

    Reply
  21. papami

    Добрый день. Я правильно понимаю, что после перезагрузки нужно руками входить или там само все стартует?

    Reply
  22. arteast

    (22) у нас на данный момент всё стартует автоматически. Это всё настраивается:

    1) При перезагрузки планшета автоматом запускается rdp клиент

    2) при входе в rdp-сеанс сервера под определенным пользователем запускается 1С с указанной обработкой

    Reply
  23. rpgshnik

    Хорошая задумка!

    Схоже организовал Терминал путевых листов, готовое решение стоит 250 000р (без учета интеграции), т.к. компания не является крупной, мною разработанное решение оказалось в 5 раз дешевле с прямым онлайн доступом без интеграции, так же стало тиражируемым и в планах установить второй терминал. А это уже экономия просто колоссальная вместо 500 000, выделить около 100 000.

    Reply

Leave a Comment

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