Всем привет! С вами сегодня Лео, и я профессионально занимаюсь оцифровкой видеокассет уже больше 7 лет.
Скоро майские праздники, и поток клиентов возрастает. Да так, что с ними стало тяжело справляться - в сутки может прийти 7-8 человек, и попробуй их запомни. До этого дня использовал для учёта самописную панельку для учёта заказов на PHP, и программу "Бизнес Пак" для печати товарных чеков. В целом, их хватало. Но когда поток людей стал превышать все мыслимые нормы, было понятно, что надо с этим что-то делать.
Для решения вопроса было принято решение перевести всё на систему штрих-кодов. Иду на известную площадку объявлений, и покупаю себе за 500 рублей самый дешёвый сканер.
Сканер этот работает в режиме эмуляции клавиатуры - навели на код, он распознал и пропечатал.
Дописал панельку таким вот образом: внизу расположил поля ввода, которые ведут на add.php, inwork.php, и т.п., которые выполняют запрос в базу. Максимально просто, но работает.
На радостях скачал шрифты для создания кодов, распечатал на бумаге... И ничего! Сканер просто не сканирует код, либо сканирует с 5-6 попытки.
...Напечатал на глянцевой бумаге - работает! Как выяснилось, дело было в стандарте - в Code128 нужно было добавлять управляющие символы в начале и конце строки. И если на глянцевой бумаге сканер кое-как, но понимал код с ошибкой, то на матовой бумаге уже не мог его отсканировать.
Проблему решил использованием стандарта Code 39 - он намного проще для печати из любого текстового редактора, чем другие виды штрих-кодов.
Для этого достаточно закодировать номер в формате *1234567890*.
Не вникая в теорию, проще говоря, звёздочки здесь - управляющие символы.
Печатаем, сканируем код... Всё работает!
Однако, сканер нам отдаёт код вида T000001.
Как я понял после чтения документации на сканер - символ T
здесь образуется из нескольких бит информации, которые он отдаёт софту, который должен понять что используется сканер.
Можно конечно перенастроить, но мы этот символ в PHP просто вырежем:
$num = htmlspecialchars($_POST["num"]);
$num = preg_replace('/[^0-9]/', '', $num);
if (strlen2($abc)<3)
{
echo "Номер заказа не может быть менее 3-х символов";
exit;
}
mysql_query ("UPDATE myloveclients SET `status` = 'open' WHERE `number` = '$num';");
"Пикаем" сканером по коду, и наш код успешно в базе!
Теперь при помощи штрих-кодов мы можем успешно менять номера заказов в базе, и даже смотреть телефона клиента :)
...Только вот как нам распечатать кучу кодов на одном листе? Можно конечно использовать специальный софт, но вот тащить 1,5 гб не очень хочется. В этом нам поможет Excel!
...Для этого просто скачем шрифт Code 39, и создадим 2 поля. Единичка в первом поле, двойка - во втором.
...Затем выделяем эти 2 ячейки и тянем вниз за вот этот уголок, насколько хватит.
Теперь у нас очень много циферок. Добавляем к концу кода символ "*" чтоб закрыть строку, и выбираем шрифт. Далее настраиваем столбцы и строки по вкусу. Ура, у нас есть пачка штриходов, которые можно напечатать!
Теперь можно клеить штрих-код к клиентскому заказу, и обновлять его статус.
...Только вот снова проблема. Мы утыкаемся в ручное заполнение товаров в программе "Бизнес-пак". Нам надо как-то сделать это быстрее.
Берём нашу панельку в качестве основы, в таблице sales
создаём несколько полей - автоматический id строки, время добавления строки, id товара, id чека. Делаем интерфейс, заточенный исключительно под сканер.
В качестве товарных позиций - ID. Например, 0001 = "Оцифровка VHS", 0002 = "Оцифровка Video8", и т.д. Их мы распечатаем, чтоб повесить на стену.
Настало время для ChatGPT. Времени у меня было очень мало, поэтому написал индусский код в виде if-else, и попросил ChatGPT оптимизировать его. Она успешно справляется!
...Просим написать ещё кусок кода.
...В JS она тоже "умеет".
По итогу, с ChatGPT за час мы собрали вот такой товарный чек, который можно отправлять на печать :)
Формочки, заточенные под сканер, тоже есть.
В общем, теперь наш сканер штрих-кода "подружился" с PHP, а скорость обработки заказов увеличилась в несколько раз. Всем добра :)
Комментарии (11)
csharpreader
17.04.2023 19:52+2Отлично. Очень интересно видеть пусть и велосипед на костылях (я по-доброму), но в практическом применении.
FanatPHP
17.04.2023 19:52+1Я бы скорее сказал, что chatGPT успешно облажался. Как обычно.
Причем я даже не буду упоминать оператор ??, который заменяет простыню с isset.
Главная проблема здесь — это утверждение "позволяет избежать ошибки, если тип не существует". Совершенно идиотское, как раз в стиле этого генератора галлюцинаций.
Если подумать, то ошибку "тип не существует" этот код никак не исправляет. Тип (хотя на самом деле не тип, а его имя) из ниоткуда волшебным образом не появляется. Ошибка (логическая), как была — так и осталась.
То есть этот код не исправляет, а подавляет, и не ошибку, а сообщение об ошибке.
Которое могло бы помочь программисту исправить логическую ошибку в коде, когда тип есть, а названия для него нету.
А вместо этого код просто выдает пустоту. Но зато сообщения об ошибке нету! Ну чисто страус — раз не видно сообщения об ошибке, то и ошибок нет, правда же?
Если бы ваш жестяной помощник был хоть чуть-чуть поумнее, хотя бы на уровне способного джуниора, то написал бы либо
$name = $services[$post['type']];
и тогда сообщение об ошибке подскажет программисту, что он забыл добавить в $services новый тип. Либо мог бы сделать более щадящий вариант, который информирует о проблеме, но при этом программа продолжает работать штатно:
$name = $services[$post['type']] ?? "Неизвестный тип ".$post['type'];
vassabi
17.04.2023 19:52в общем - кроме багов джуниоров, будут еще и баги ChatGPT.
Единственная надежда, что оно будет обучаться быстрее, чем будут выходить новые фреймворки и стандарты ....
Wesha
Картинка
... так автор изобрёл компилятор из естественного языка в PHP.
Который у любого нормального программиста — в голове.
(Кстати, если ничего не передавать, то выдастся "цена товара 0 руб".)
... а программисты помнят, что Enter вызывает отработку кнопки Submit по умолчанию, причём отработка игнорируется, если кнопка disabled. Поэтому не нужно мутить никаких жабаскриптов:
Как говориться, "сводить лошадь к воде много ума не надо. Но вот если вы научили её плавать на спине — вот тогда вы чего-то добились" (c)
Valle
Любой нормальный программист необязательно в курсе как php работает
Wesha
То есть любой, кто знает, как работает система, с к оторой он общается/работает — ненормальный? Спасибо, так Петровичу, который в гараже свой старый "жигуль" перебирает, и передам.
FanatPHP
Это вы к чему? "Компилятор из естественного языка в PHP" не требует знания того "как работает РНР". Собственно, говорящая жестянка, которая выдала этот код, знает и того меньше.
Речь идет всего лишь о знании синтаксиса языка и самых примитивных алгоритмов. То есть буквально о переводе фразы "если у джона был два яблока, а а эндрю шесть..." в синтаксис ЯП. При чем здесь какое-то сокровенное знание о том, как ЯП будет этот код обрабатывать?
Valle
Я имел в виду что множество нормальных программистов включает тех кто на PHP ни разу не программировал, никаких подвохов и оскорблений не имел в виду, извините что пришлось объяснять
FanatPHP
Понятно. То есть вы решили просто придраться к фразе "любой нормальный программист", даже без всякого контекста. Хотя под "PHP" там очевидно имеется в виду "язык, на котором программист пишет".
Ну давайте тогда придираться дальше. Возьмем код c картинки
и поищем программиста, который не в состоянии написать (или хотя бы прочитать) этот код. Предлагайте варианты. Меня вполне устроит "вот я — Valle, программист, "синьер" и занимаюсь бигдатой. Ваще не понимаю, что здесь написано. Мне для этого потребуется глубокое изучение механизма работы интерпретатора РНР".
Valle
Надеюсь вам не нужно глубокое изучение русского языка для понимания фразы «никаких подвохов и оскорблений не имел в виду»
FanatPHP
Не нужно. Вот только хотелось бы, чтобы кроме отсутствия подвохов комментарий имел хоть какой-то смысл и отношение к обсуждаемому вопросу. Извините, если я требую слишком многого.