Подключение сканера штрихкода




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

25 Comments

  1. zigan2005

    Буду очень рад увидеть ваши комменты… 🙂

    Reply
  2. Serj1C

    Расскажите про случай, если USB сканер (например, Symbol LS2208) не создает ком-порт, выбирается только «в разрыв клавиатуры». Возможно ли его настроить, чтобы он вызывал «ВнешнееСобытие» ?

    Reply
  3. Noy

    (2) В семерке я делал так: http://infostart.ru/public/75804/

    Возможно в восьмерке можно сделать по аналогии

    Reply
  4. просто учусь

    http://infostart.ru/public/17021/

    Кроме атол, кто еще выпускает драйвера для 1с?

    Вы сами пробовали настраивать сканер в терминале?

    (2) ставьте драйвера от Атол. Версия 6.5 (кажется) еще была бесплатной

    Reply
  5. zigan2005

    usb я настраивал как обычный com, только в подборе приходиться каждый раз нажимать f7, а далее обычная обработка(сразу не скидывает в табличную часть документа).

    Кроме Атол и 1С кажется еще есть драйвера от Рарус.

    Reply
  6. zigan2005

    кстати, +++++++ если можно…:)

    Reply
  7. zigan2005

    Последние бесплатные уже не подходят, говорит что староваты..:)

    Reply
  8. просто учусь

    (7) вроде-бы под 8.1 нормально работают, хоть и ругаются

    Reply
  9. Skif46

    Господи… Кто мешает настроить нормальную трансляцию портов в терминальном режиме?

    И атоловские дрова и одинэсные нормально со всем работают. Это проблема не дров, а настройки терминального клиента. И change port тут нахрен не нужен. Что мешает прсто проверить автоопределение сканера?

    Жду описание проблемы подключения денежных ящиков. Они же напрямую с 1С взаимодействуют — получают информацию, сколько денег в них сунут…

    Reply
  10. ПСВ

    Давай про весы и про кассу 🙂

    Reply
  11. zigan2005

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

    Reply
  12. victuan

    (4) Астор например.

    Есть у меня для длл и обработка обслуживания для 7.7 (сам писал).

    Но она как и scanopos не поддерживает усб сканеры.

    Reply
  13. -=BES=-

    Насчёт подключения торгового оборудования все понятно, но хотелось бы узнать. Если бы была статья, что необходимо для автоматизации маленького магазина с одним ПК. Например хватит ли сканера и принтера для начала, или чтобы продавец (кассир) работал сам и обязательно для этого иметь фискальный регистратор. Ну по проще.

    А то все говорят про оборудование, а че с ним делать, просто туман какой-то… ❓

    Reply
  14. anig99

    берите сканер в разрыв клавиатуры и не ….те мозг

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

    Reply
  15. IP43

    Сканеры в терминале подключил, один из четырех оказался USB, прокинул его на COM все заработало, только СОМ оказался №5, а остальные живут на 2. Посему в торговом оборудовании две строчки для двух моделей сканеров.

    Вопрос как привязать торговое оборудование к пользователям (компьютерам) в терминальном режиме?

    Пока проблему решаю так: заходим вначале там где стоит USB ставим галку против его сканера, выходим из программы, заходим снова, все работает, но что бы другие зашли без проблем переключаем галку на СОМовские сканеры. Галка осталась включена, заходит пользователь без сканера, и ему во всех формах где может работать сканер ругается, типа не могу сканер подключить, раздражает однако.

    Reply
  16. -=BES=-

    Спасибо!

    И ещё. С необязательностью применения фискального регистратор для ИП по ЕНВД. То, можно обойтись без ФР и денежного ящика. И оставить только сканер, ПК с 1С и принтер, так как к продавцам недоверия нету.

    Например, на принтере печатаю этикетки и если потребует покупатель можно ему чек распечатать, а на ПК и в 1С7.7 (ТиС) можно права ограничить.

    Тогда мне эмулятор ФР нужен для принтера или нет.

    Reply
  17. ratinc

    (13) очень рад за вас что все понятно. Однако подключить сканер что бы 1С отлавливало событие сканирования не так то просто. Все сканеры разные и стандартные драйверы к ним зачастую не подходят. Так что подключить грамотно сканер тот еще секас. А примитивно нажимать в 1С «F7» и в эту срочку сканировать каждый может. А вот иметь или не иметь фискальный регистратор вам в налоговой разъяснят — в зависимости от системы налогообложения и типа деятельности. Вообще принять от розничного покупателя деньги не выдав чек выйдет дороже покупки фискальника.

    Reply
  18. Stepping1C

    Стандартный Сканер от 1С вполне нормально работает.

    Reply
  19. GreenLab

    (2) Serj1C, Можно, Атоловские драйвера отлично работают со сканером в разрыв клавиатуры, перехватывая по префиксу штрих код и генерирую ВнешнееСобытие. Вот только с определнных пор они стали платными, но последняя бесплатная версия драйверов нормально работает со стандартной обработкой из пакета обработок 1С, нужно только закомментировать проверку версии.

    Reply
  20. saiten

    (19) Комментировать надо не проверку версии, а строки обработки обслуживания, содержащие слово «Чувствительность», бо в версиях 6.5 и менее регулировать её нельзя, и нормально работают дрова вплоть до 5.5.5.0 (меньше просто не попадались, так что не знаю). Для отключения проверки версии в параметрах торгового оборудования есть табличка «Совместимая версия», куда и требуется добавить ту, которая есть. Но это для старого механизма, как оно в УТ11 и прочих обстоит — не знаю пока.

    Reply
  21. savranskii

    еще есть на просторах рунета волшебная библиотечка rs_232.dll которая работет как часы. Но для нее приходится править ручками конфигурацию.

    Reply
  22. dimaskl

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

    Reply
  23. Alexey55

    подключил сканер через эмуляцию Com порта

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

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

    Reply
  24. Loe

    Подскажите, пожалуйста, как решить проблему:

    а) Есть сканер ШтрихКода Symbol DS9808 USB для использования в конфигурации УПП.

    Установлен с эмуляцией COM-порта. Драйвер (эмулятор) взят с сайта Моторолы (http://support.symbol.com/support/search.do?cmd=displayKC&docType=kc&externalId=12593&sliceId=&dialogID=­194616748&stateId=1%200%20194610670).

    б) После установки отсканены управляющие ШК Эмуляции COM-порта и

    в) установки суффиксов 13 и 10 (дабы избежать проблемы сканеров Symbol: »

    Проблема с подключением к 1С обусловлена тем, что по-умолчанию в сканерах данной модели отключена посылка суффикса в порт ПК. Решение описано в http://www.atol.ru/support/encyclopedy/tech-articles/peripherals/periph-scanners/symbol-LS9208/ и сводится к явному указанию сканеру передавать суффикс программированием кода <DATA> <SUFFIX> из мануала«. Источник: http://kb.mista.ru/article.php?id=26.)

    Результат: Сканер виден в виде COM-3 с такими настройками: 115200, 8 бит, 1 стоп, контроля четности НЕТ.

    г) Сканер внесен в ТорговОборудование и настроен в соотв с COM-3 (115200, 8 бит, 1 стоп).

    д) Используется 1С-овский (не Атоловский) драйвер сканера ШК.

    е) Сканер успешно проходит тест в обработке Подключение и настройка ТО, выдавая при сканировании результат в виде <Сканируемый штрихкод> ‘CR’ ‘LF’.

    жжж) В самой базе 1С при сканировании любого ШК не происходит НИКАКОГО результата. Точки останова, расставленные в ОбработкеВнешнегоСобытия, и ОбработкахСобытия объектов скучно зевают.

    Что это может быть, кто сталкивался, какие ваши соображения и как это побороть?

    Reply
  25. kitminsk

    Сканера QUANTUM T нет в списках 1с и Атолл. Можно ли его подключить? Я пытался — не сканирует последний символ.

    Reply

Leave a Comment

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