Волшебный штрихкод
Рустам подошел к Стасу, передал ему пачку бумаг — грязных, в масле, с помятыми уголками и какими-то пометками.
— Что за макулатура? — спросил Сергей, заглядывая через плечо Рустама.
— Сам ты макулатура. — обиделся Рустам. — Накладная это, на сборку.
— А нам ты ее зачем принес? — спросил Сергей.
— Да вон… — махнул рукой Рустам. — Даша опять чего-то намудрила, надо разбираться.
— Чего я намудрила, чё ты гонишь? — Даша была родом из деревни, что было видно невооруженным взглядом. Да она и не скрывала. — Мне сказали, я сделала!
— Кто тебе что сказал? — удивился Сергей. — Что тут вообще происходит?
— Да они документ меняют в системе, а потом Рустам вой поднимает. — ответил за всех Стас. — Обычно ничего страшного — позиции там местами передвинут, или одну строку на две разобьют.
— Нафига? — недоуменно спросил Сергей.
— Надо, чё ты. — с вызовом сказала Даша. — Я чего сделаю, если там минуса прут?
— Где какие минуса?
— В оборотке, где еще. Одна позиция, а лежит на разных счетах. Вот и разбиваю — немного отсюда, немного оттуда.
— Ну, это нормально. — кивнул Сергей. — А Рустам чего тогда докопался?
— Я не докопался, а задолбался! — сказал Рустам. — Мне дают в понедельник эту бумажку, с двумя сотнями позиций, я иду собирать. А во вторник захожу, а Даша говорит — возьми новую бумажку, там мы немного поменяли. Печатает — мать честная, а там уже двести пятьдесят позиций!
— Ну, она только что объяснила. — кивнул Сергей. — Разбивает позиции на несколько строк. Общее количество и позиции остаются без изменения.
— А я-то почем знаю, с изменениями или нет? — возмутился Рустам. — Наменяют чего-то, а мы потом виноваты, не то положили, не туда утащили.
— Даша, а давай запретим тебе документы менять? — прищурился Сергей. — Чтобы Рустаму спокойнее было.
— Щас! — Даша сделала руки в боки. — Я тебе запрещу! Меня главбух сожрет!
— Я сам тебя сожру! — с доброй улыбкой сказал Рустам.
— Ну-ну, обещаешь только. — с улыбкой ответила Даша.
— Так, друзья, валите отсюда, воркуйте под забором. — тоже улыбнулся Сергей.
— Ну щас, разберемся, и пойдем. — ответил Рустам.
— Все нормально. — Стас, все это время ковырявшийся в системе, повернулся к коллегам. — Я проверил. Работай дальше.
— А как ты проверил? — нахмурился Сергей.
— А у меня тут инструментик есть. — с гордостью заявил Стас. — Он старые версии документа достает, и сверяет с текущей. Я там строчки сворачиваю — ну, чтобы убрать все эти разбиения — и общие количества проверяю. На, Рустам, забирай.
— О, спасибо, Стасяндра! — заулыбался Рустам, взял бумажки и пошел к выходу. Даша направилась следом.
— И что, нормально это, по-твоему? — спросил Сергей, когда парочка закрыла за собой дверь.
— Что именно? — нахмурился Стас.
— Чтобы люди к тебе бегали за этой сверкой?
— А какие варианты есть? — немного обиженно ответил Стас. — Я сначала их самих заставлял сверять, но это адская работа, сам посуди — у нас, обычно, бумажки длинные, на несколько листов, потому что позиций много за раз перемещают, для сборки одной единицы оборудования.
— Ну да, это точно не вариант… — кивнул Сергей.
— Ну вот, и я так подумал. Потом думаю — о, есть же версии! Пусть версии сравниваются! Ну и написал этот инструментик, простенький. Только…
— Только что?
— Ну…Не всегда он помогает.
— Почему?
— Во-первых, не всегда я на месте есть. Во-вторых, версий бывает очень много, и тогда хрен поймешь, какую с какой сравнивать. Да еще и непонятно, с какой именно версии они распечатали — т.е., что считать оригиналом.
— Может, на бумажке выводить какую-то информацию об оригинале и версии? Ну, типа, распечатано второго октября в двенадцать часов.
— Я думал об этом, но не стал пока делать. Это ж какой геморрой — надо во все виды бумажек эту фигню выводить.
— Почему? — недоумевал Сергей.
— Ну как… На перемещение — одна форма бумажки, на отгрузку — другая, на передачу в производство — третья, и так далее. Некоторые бумажки еще и унифицированные, в смысле по государственному стандарту печатаются, там нельзя всякую фигню выводить, типа даты распечатки.
— А, ну да… И что?
— Что-то, не знаю я. — пожал плечами Стас. — Вот так и мучаемся.
— Не, так не годится… — задумчиво сказал Сергей. — Надо что-то придумать…
— Да пробовали мы, разные варианты. — чуть повысил тон Стас. — Еще до тебя пробовали. Терминалы сбора данных, например.
— Во, кстати, отличная ведь идея! — подхватил Сергей. — Никаких бумажек, и связь с системой прямая. Сделал бухгалтер документ — он сразу у кладовщика появился!
— Не, неудобно и дорого. — покачал головой Стас.
— Почему? Давай объясняй.
— Во-первых, дорого. — начал Стас. — Сам посуди. Обычный ТСД, с маленьким экранчиком — не годится, хотя он и не дорогой.
— Почему не годится?
— Ну ты попробуй сам с таким экранчиком пособирать две сотни позиций. — улыбнулся Стас. — ТСД для другого нужен — для розницы, там. Здесь он реально только мешать и бесить будет. Другое дело — планшет.
— Ну вот, заработала мысль! — снова подхватил Сергей.
— Заработала и отработала. — улыбнулся Стас. — Это реально дорого, потому что планшет нужен защищенный. Мы брали один, на пробу — бешеных денег стоит.
— Нафига защищенный? — нахмурился Сергей. — У нас же обычные условия, не жарко, не мокро.
— Ну как… Мокро. Видел, в каком состоянии бумажки?
— Грязные.
— Да. Потому что у нас, повторюсь, не розница. Детали без упаковки, зато — в смазке. Руки постоянно грязные.
— Перчатки может выдать?
— В перчатках планшетом пользоваться не получится, ты чего? — улыбнулся Стас. — Да и все равно промокают они, от масла, или чем там детали смазывают… Не годится, короче. Да и неудобно.
— Чего неудобно?
— С планшетом неудобно. На бумажке же как: взял позицию, положил в ящик — ручкой галочку поставил. Взял меньше — поставил количество, ручкой опять же. Бумажек можно с собой несколько таскать. Одну — в один карман, другую — в другой. Не надо ничего искать там в компьютере, листать, материться. Собираешь один заказ, принесли другой, более срочный — убрал бумажку в карман, и спокойно пошел дальше. Опять же, бумажку удобно в ящик с деталями положить.
— Это зачем?
— Ну как… Один кладовщик собирал, смена закончилась, выходит вторая. Подходит кладовщик к ящику, берет бумажку, и доделывает — собирает то, что осталось. Бумажку — хоть в зубы бери, хоть…
— Я понял. — нахмурился Сергей.
— Ну вот…
— А ты откуда так все детально знаешь, про бумажки? — вдруг осенило Сергея.
— Так я с ними сколько провозился тогда. — сказал Стас. — Прям сам пробовал эти ящики собирать. Вот и понимаю теперь, что у них там и как.
— Ладно, ну делать-то что-то надо? Допустим, оставляем бумажки. Как сверить бумажку и систему?
— Распознавать, наверное, надо…
— Не, это вообще дебилизм. — покачал головой Сергей. — Во-первых, бумажек несколько, на одну накладную. Во-вторых, формат разный — ты сам говорил. Тут на полгода работы хватит, чтобы их распознать, да еще потом и сопоставлять.
— Ну да… — задумчиво сказал Стас.
— Какие еще варианты есть?
— Может, нам унифицировать бумажки? — вдруг сказал Стас. — Ну, для внутреннего пользования.
— В смысле? Как? Разве можно заменить типовую форму, принятую в каком-нибудь законе?
— Нет, ты не понял. Смотри сам. Вот у него сейчас какая накладная была? — спросил Сергей.
— На перемещение вроде…
— Типовая форма?
— Ну да, какая-то типовая.
— И что с ней потом будет? Когда перемещение свершится?
— В бухгалтерию сдаст, на хранение, наверное.
— В таком виде? Грязную, помятую?
— Нет, наверное… А как тогда?
— Я думаю, они ее перепечатают, и он ее подпишет. Там же есть подпись?
— Да, отправитель и получатель.
— Ну вот, оба и подпишут. — кивнул Сергей. — А раз ее перепечатают, то нафига в первый раз была типовая форма? Тем более, что она содержит ненужную информацию, а нужной — не содержит.
— Кстати, да… — как будто что-то вспомнил Стас. — Они жаловались тогда, еще конфликт был, когда пометки свои ручкой ставили на накладной для отгрузки. Бухгалтерия возмущалась, потом менеджеры — ну, что клиентам такое свинство отправляют. Тогда вроде и решили перепечатывать сызнова. Ну и там места не было для этих пометок, на полях только.
— Ну! Я и говорю! — Сергей начал воодушевляться. — Давай сделаем универсальную бумажку! Они ведь чем отличаются? Складские операции в смысле. Надо что-то взять и куда-от отнести, правильно?
— Ну, так… — кивнул Стас.
— Или со склада на склад, или — со склада в цех, или — со склада в автомобиль, или — наоборот, когда приход.
— А комплектация?
— А что комплектация? — удивился Сергей. — А, да… Там же из четырех деталек собирают одну?
— Да.
— Ну ладно, будет одна бумажка немного от других отличаться. Везде будет одна таблица товаров, а для комплектации — другая. А главное — мы там ничего лишнего выводить не будем, и место для пометок им оставим!
— Кстати, может, тогда и номер версии вывести? — вспомнил Стас. — Ну, чтобы сверять-то…
— Точно! Молодец, Стас! — заулыбался Сергей.
— Стараюсь! — гордо ответил Стас.
— Единственное… — по лицу Сергея мелькнула тень.
— Ну что опять… — скис Стас.
— Версии я не люблю, им нельзя доверять…
— Почему? — уныло спросил Стас.
— Мы их чистим периодически.
— А, да… — сокрушенно покивал головой Стас. — Они ж места много занимают…
— Да и тяжеловатый способ какой-то получается. — Сергей задумчиво вертел в руках смартфон. — Версии-то сравнивать. Надо что-то попроще выбрать…
— Какой-то бы другой признак, идентификатор найти…
— Типа штрихкода? — с надеждой спросил Стас.
— Ну да, типа штрихкода… Ну, чтобы…Как объяснить-то…
— Да я понял.
— Что ты понял?
— Чтобы этот штрихкод, или какой-то другой идентификатор, однозначно определял эту бумажку.
— Не, ты не понял. — покачал головой Сергей. — Однозначно определить бумажку может ее номер, тут и штрихкод не нужен. Вот ты когда вручную сверял, какую информацию использовал? То есть, что именно проверял?
— Так… Дату документа проверял — ну, чтобы день тот же самый был, а внутри дня пусть двигают, как хотят…
— Так, еще что? — заинтересовался Сергей.
— Еще отправителя и получателя…
— Да, это понятно, дальше что?
— Номенклатуру и количество, после свертки таблицы. Ну, чтобы дублирующихся строк не было.
— Ну вот. Считаем. — Сергей стал загибать пальцы. — Дата, отправитель, получатель, таблица с номенклатурой и количеством. Это — суть документа, его ключевые поля. Остальное, с точки зрения складского учета — чушь.
— Это ты про что?
— Там полно полей еще, особенно в отгрузке. Договоры всякие, счета учета, комментарии, заказы и т.д. — вся аналитика, нужная для управленческого, бухгалтерского учета, CRM и т.д. С точки зрения склада все это — чушь.
— А, понял, понял. — немного пристыженно закивал Стас.
— Так вот, как-то бы вот все эти поля, нужные нам идентифицировать, понимаешь? Ну, чтобы по какому-то признаку, что ли, раз! — и проверить состав документа. Вот этот, наш, складской состав. Понимаешь?
— Да, понимаю. Только не понимаю, как это сделать. — покачал головой Стас. — С версией я понимаю. Я там, в принципе, то же самое и делаю. А как такую информацию на бумажке хранить? Ты же этого хочешь? Хранить на бумажке, сверять с программой?
— Да. Может, все-таки штрихкод?
— Штрихкод документа?
— Ну да… Хотя… Нет. — замотал головой Сергей. — Не подойдет штрихкод. Он же сам по себе живет, и никакой полезной информации в себе не содержит.
— Почему? Как? — удивился Стас.
— Ну ты просто присваиваешь документам штрихкоды, по порядку, и все. Один документ — один штрихкод. Меняешь документ — штрихкод не меняется. Это, как длинный номер, или второй номер, не знаю… Просто пригодный для сканирования. Пикаешь, программа ищет его, и определяет, какой документ отсканировали. Все.
— Ну ты мне рассказывай… — махнул рукой Стас. — Я с розницей несколько раз работал, будет он мне про штрихкоды рассказывать…
— Ну давай, просвети меня, умник. — ухмыльнулся Сергей.
— Ща, докурим и сдадим. — с улыбкой произнес Стас фразу из старого анекдота про студентов. — Слышал про плушки?
— Плушки? Я очень любить русский язык и много говорить на он?
— Ой деревня… Ты фрукты в супермаркете покупаешь?
— Ну да, конечно.
— Тебя никогда не удивляло, что на кассе твои бананы нормально пробиваются, с определением веса, цены и т.д.? Заметь, по штрихкоду.
— Да, а что тут… Погоди… — задумался Сергей. — Они что, хранят эти штрихкоды? После каждого взвешивания запоминают результат в базе? И потом по штрихкоду ищут мой результат взвешивания?
— Ну, я говорю, деревня. Шибко умная. — засмеялся Стас. — Там все намного проще. Вся информация, необходимая для продажи, содержится в самом штрихкоде.
— То есть как? — удивился Сергей.
— То есть так. Деталей я не помню, примерно расскажу. Там плушка, то есть PLU — это то ли три, то ли четыре цифры, они однозначно идентифицируют товар.
— Да, что-то припоминаю такое… — пробормотал Сергей. Потом вдруг стал картинно кричать. — Галя! Какой плу на яблоко роял гала?
— Ну да, оно и есть. — кивнул Стас. — Это где весов в зале нет, там кассир должен плушку знать, потому что сам взвешивает. Но там и штрихкод, как таковой, не возникает.
— Про плушку понял, дальше что? — заинтересованно спросил Сергей.
— Дальше вес и цена, вроде, но это уже не суть. — махнул рукой Стас. — Я ж тебе к тому рассказал, что в штрихкод можно засовывать любую информацию, особенно в сто двадцать восьмой.
— Какой?
— Ну они же разные есть, штрихкоды-то. Блин, какой ты тупой, а? — улыбнулся Стас.
— Давай рассказывай. — не стал отвлекаться Сергей.
— Короче, есть разные виды, или типы, не знаю как называется эта классификация. Наиболее распространенный — EAN13, ты его видишь чаще всего. Но, если тебе надо много информации в штрихкод запихать, то лучше подходит Code128 — там даже буквы писать можно, и они кодируются, и раскодируются, и читаются любым сканером современным.
— Буквы? — округлил глаза Сергей. — Серьезно?
— Ну.
— Блин, это ж кайф! — улыбался Сергей. — Тогда все на свои места встает! Мы можем весь состав документа — ну, те поля, что я перечислил — загнать в одну длинную строку, как в стек, и закодировать в штрихкод! А потом — быстро сверять!
— Ну, не знаю…Представь, двести позиций, по каждой надо, хотя бы, код номенклатуры, количество… Очень длинная строка получится. Такую и сканер может не взять, обычный. Широкий какой-то нужен, я не знаю…
— И что, как быть-то? — скис Сергей. — Давай, умник, гений штрихкодирования, подсказывай.
— Ее бы как-то заархивировать, что ли, не знаю…
— Погоди… — в голову Сергея пришла какая-то мысль. — Точно, хорошо что ты про архиватор заговорил! Контрольную сумму надо вычислять!
— Чего?
— Да не тупи, Стас. — улыбнулся Сергей. — Ну, контрольная сумма, по длинной строке. Она там по разным алгоритмам вычисляется, это не важно. Важно, что она — короткая, понимаешь?
— Нет.
— Ну строка — длинная, хоть километр, а контрольная сумма — короткая, всегда короткая. И она всегда однозначно идентифицирует эту строку! Точнее, не саму строку, а нам это и не надо. Она скажет главное — изменился документ или нет!
— Начинаю понимать… — задумчиво сказал Стас. — Ты будешь вычислять контрольную сумму документа, сохранять ее, а при печати — выводить в виде штрихкода прямо на бумажку?
— Да!
— А дальше?
— А дальше они к тебе придут со своими бумажками грязномазыми, а ты сканером пик! — и говоришь — все, валите, ничего не изменилось. Система сама сходит, поищет эту контрольную сумму, и если нашла — значит, все хорошо. А если не нашла — значит, документ поменялся. Тогда подойдет твой тяжелый алгоритм, с версиями.
— О, точно! — поддержал Стас. — Тогда мы просто к информации о версии добавим контрольную сумму! Блин, кайф! Тогда, даже если документ поменялся, я однозначно определю версию, из которой была печать!
— Ну. Тогда и бегать к тебе им не надо, в общем-то… Дашь ей сканер, дешманский какой-нибудь, и пусть себе пикает. Или даже Рустаму дашь сканер, жалко что ли.
— Клево, слушай… — мечтательно сказал Стас. — Прям решение классное, мне нравится. Главное — не будет реагировать на изменения, не связанные со складом. Это, типа, такое умное версионирование, с быстрым откликом и определением ключевых отличий.
— Ага, но самое интересное в другом. — кивнул Сергей. — В том, что мы с тобой придумали, как быстро сверить бумажку с программой.
— А что? Это важно?
— Безмерно. В нашем проекте по складу.
Оглавление