Проще, чем кажется. Глава 15. Волшебный штрихкод

Рустам подошел к Стасу, передал ему пачку бумаг – грязных, в масле, с помятыми уголками и какими-то пометками.

— Что за макулатура? – спросил Сергей, заглядывая через плечо Рустама.

— Сам ты макулатура. – обиделся Рустам. – Накладная это, на сборку.

— А нам ты ее зачем принес? – спросил Сергей.

— Да вон… — махнул рукой Рустам. – Даша опять чего-то намудрила, надо разбираться.

— Чего я намудрила, чё ты гонишь? – Даша была родом из деревни, что было видно невооруженным взглядом. Да она и не скрывала. – Мне сказали, я сделала!

— Кто тебе что сказал? – удивился Сергей. – Что тут вообще происходит?

— Да они документ меняют в системе, а потом Рустам вой поднимает. – ответил за всех Стас. – Обычно ничего страшного – позиции там местами передвинут, или одну строку на две разобьют.

— Нафига? – недоуменно спросил Сергей.

— Надо, чё ты. – с вызовом сказала Даша. – Я чего сделаю, если там минуса прут?

— Где какие минуса?

— В оборотке, где еще. Одна позиция, а лежит на разных счетах. Вот и разбиваю – немного отсюда, немного оттуда.

— Ну, это нормально. – кивнул Сергей. – А Рустам чего тогда докопался?

— Я не докопался, а задолбался! – сказал Рустам. – Мне дают в понедельник эту бумажку, с двумя сотнями позиций, я иду собирать. А во вторник захожу, а Даша говорит – возьми новую бумажку, там мы немного поменяли. Печатает – мать честная, а там уже двести пятьдесят позиций!

— Ну, она только что объяснила. – кивнул Сергей. – Разбивает позиции на несколько строк. Общее количество и позиции остаются без изменения.

— А я-то почем знаю, с изменениями или нет? – возмутился Рустам. – Наменяют чего-то, а мы потом виноваты, не то положили, не туда утащили.

— Даша, а давай запретим тебе документы менять? – прищурился Сергей. – Чтобы Рустаму спокойнее было.

— Щас! – Даша сделала руки в боки. – Я тебе запрещу! Меня главбух сожрет!

— Я сам тебя сожру! – с доброй улыбкой сказал Рустам.

— Ну-ну, обещаешь только. – с улыбкой ответила Даша.

— Так, друзья, валите отсюда, воркуйте под забором. – тоже улыбнулся Сергей.

— Ну щас, разберемся, и пойдем. – ответил Рустам.

— Все нормально. – Стас, все это время ковырявшийся в системе, повернулся к коллегам. – Я проверил. Работай дальше.

— А как ты проверил? – нахмурился Сергей.

— А у меня тут инструментик есть. – с гордостью заявил Стас. – Он старые версии документа достает, и сверяет с текущей. Я там строчки сворачиваю – ну, чтобы убрать все эти разбиения – и общие количества проверяю. На, Рустам, забирай.

— О, спасибо, Стасяндра! – заулыбался Рустам, взял бумажки и пошел к выходу. Даша направилась следом.

— И что, нормально это, по-твоему? – спросил Сергей, когда парочка закрыла за собой дверь.

— Что именно? – нахмурился Стас.

— Чтобы люди к тебе бегали за этой сверкой?

— А какие варианты есть? – немного обиженно ответил Стас. – Я сначала их самих заставлял сверять, но это адская работа, сам посуди – у нас, обычно, бумажки длинные, на несколько листов, потому что позиций много за раз перемещают, для сборки одной единицы оборудования.

— Ну да, это точно не вариант… — кивнул Сергей.

— Ну вот, и я так подумал. Потом думаю – о, есть же версии! Пусть версии сравниваются! Ну и написал этот инструментик, простенький. Только…

— Только что?

— Ну…Не всегда он помогает.

— Почему?

— Во-первых, не всегда я на месте есть. Во-вторых, версий бывает очень много, и тогда хрен поймешь, какую с какой сравнивать. Да еще и непонятно, с какой именно версии они распечатали – т.е., что считать оригиналом.

— Может, на бумажке выводить какую-то информацию об оригинале и версии? Ну, типа, распечатано второго октября в двенадцать часов.

— Я думал об этом, но не стал пока делать. Это ж какой геморрой – надо во все виды бумажек эту фигню выводить.

— Почему? – недоумевал Сергей.

— Ну как… На перемещение – одна форма бумажки, на отгрузку – другая, на передачу в производство – третья, и так далее. Некоторые бумажки еще и унифицированные, в смысле по государственному стандарту печатаются, там нельзя всякую фигню выводить, типа даты распечатки.

— А, ну да… И что?

— Что-то, не знаю я. – пожал плечами Стас. – Вот так и мучаемся.

— Не, так не годится… — задумчиво сказал Сергей. – Надо что-то придумать…

— Да пробовали мы, разные варианты. – чуть повысил тон Стас. – Еще до тебя пробовали. Терминалы сбора данных, например.

— Во, кстати, отличная ведь идея! – подхватил Сергей. – Никаких бумажек, и связь с системой прямая. Сделал бухгалтер документ – он сразу у кладовщика появился!

— Не, неудобно и дорого. – покачал головой Стас.

— Почему? Давай объясняй.

— Во-первых, дорого. – начал Стас. – Сам посуди. Обычный ТСД, с маленьким экранчиком – не годится, хотя он и не дорогой.

— Почему не годится?

— Ну ты попробуй сам с таким экранчиком пособирать две сотни позиций. – улыбнулся Стас. – ТСД для другого нужен – для розницы, там. Здесь он реально только мешать и бесить будет. Другое дело – планшет.

— Ну вот, заработала мысль! – снова подхватил Сергей.

— Заработала и отработала. – улыбнулся Стас. – Это реально дорого, потому что планшет нужен защищенный. Мы брали один, на пробу – бешеных денег стоит.

— Нафига защищенный? – нахмурился Сергей. – У нас же обычные условия, не жарко, не мокро.

— Ну как… Мокро. Видел, в каком состоянии бумажки?

— Грязные.

— Да. Потому что у нас, повторюсь, не розница. Детали без упаковки, зато – в смазке. Руки постоянно грязные.

— Перчатки может выдать?

— В перчатках планшетом пользоваться не получится, ты чего? – улыбнулся Стас. – Да и все равно промокают они, от масла, или чем там детали смазывают… Не годится, короче. Да и неудобно.

— Чего неудобно?

— С планшетом неудобно. На бумажке же как: взял позицию, положил в ящик – ручкой галочку поставил. Взял меньше – поставил количество, ручкой опять же. Бумажек можно с собой несколько таскать. Одну – в один карман, другую – в другой. Не надо ничего искать там в компьютере, листать, материться. Собираешь один заказ, принесли другой, более срочный – убрал бумажку в карман, и спокойно пошел дальше. Опять же, бумажку удобно в ящик с деталями положить.

— Это зачем?

— Ну как… Один кладовщик собирал, смена закончилась, выходит вторая. Подходит кладовщик к ящику, берет бумажку, и доделывает – собирает то, что осталось. Бумажку – хоть в зубы бери, хоть…

— Я понял. – нахмурился Сергей.

— Ну вот…

— А ты откуда так все детально знаешь, про бумажки? – вдруг осенило Сергея.

— Так я с ними сколько провозился тогда. – сказал Стас. – Прям сам пробовал эти ящики собирать. Вот и понимаю теперь, что у них там и как.

— Ладно, ну делать-то что-то надо? Допустим, оставляем бумажки. Как сверить бумажку и систему?

— Распознавать, наверное, надо…

— Не, это вообще дебилизм. – покачал головой Сергей. – Во-первых, бумажек несколько, на одну накладную. Во-вторых, формат разный – ты сам говорил. Тут на полгода работы хватит, чтобы их распознать, да еще потом и сопоставлять.

— Ну да… — задумчиво сказал Стас.

— Какие еще варианты есть?

— Может, нам унифицировать бумажки? – вдруг сказал Стас. – Ну, для внутреннего пользования.

— В смысле? Как? Разве можно заменить типовую форму, принятую в каком-нибудь законе?

— Нет, ты не понял. Смотри сам. Вот у него сейчас какая накладная была? – спросил Сергей.

— На перемещение вроде…

— Типовая форма?

— Ну да, какая-то типовая.

— И что с ней потом будет? Когда перемещение свершится?

— В бухгалтерию сдаст, на хранение, наверное.

— В таком виде? Грязную, помятую?

— Нет, наверное… А как тогда?

— Я думаю, они ее перепечатают, и он ее подпишет. Там же есть подпись?

— Да, отправитель и получатель.

— Ну вот, оба и подпишут. – кивнул Сергей. – А раз ее перепечатают, то нафига в первый раз была типовая форма? Тем более, что она содержит ненужную информацию, а нужной – не содержит.

— Кстати, да… — как будто что-то вспомнил Стас. – Они жаловались тогда, еще конфликт был, когда пометки свои ручкой ставили на накладной для отгрузки. Бухгалтерия возмущалась, потом менеджеры – ну, что клиентам такое свинство отправляют. Тогда вроде и решили перепечатывать сызнова. Ну и там места не было для этих пометок, на полях только.

— Ну! Я и говорю! – Сергей начал воодушевляться. – Давай сделаем универсальную бумажку! Они ведь чем отличаются? Складские операции в смысле. Надо что-то взять и куда-от отнести, правильно?

— Ну, так… — кивнул Стас.

— Или со склада на склад, или – со склада в цех, или – со склада в автомобиль, или – наоборот, когда приход.

— А комплектация?

— А что комплектация? – удивился Сергей. – А, да… Там же из четырех деталек собирают одну?

— Да.

— Ну ладно, будет одна бумажка немного от других отличаться. Везде будет одна таблица товаров, а для комплектации – другая. А главное – мы там ничего лишнего выводить не будем, и место для пометок им оставим!

— Кстати, может, тогда и номер версии вывести? – вспомнил Стас. – Ну, чтобы сверять-то…

— Точно! Молодец, Стас! – заулыбался Сергей.

— Стараюсь! – гордо ответил Стас.

— Единственное… — по лицу Сергея мелькнула тень.

— Ну что опять… — скис Стас.

— Версии я не люблю, им нельзя доверять…

— Почему? – уныло спросил Стас.

— Мы их чистим периодически.

— А, да… — сокрушенно покивал головой Стас. – Они ж места много занимают…

— Да и тяжеловатый способ какой-то получается. – Сергей задумчиво вертел в руках смартфон. – Версии-то сравнивать. Надо что-то попроще выбрать…

— Какой-то бы другой признак, идентификатор найти…

— Типа штрихкода? – с надеждой спросил Стас.

— Ну да, типа штрихкода… Ну, чтобы…Как объяснить-то…

— Да я понял.

— Что ты понял?

— Чтобы этот штрихкод, или какой-то другой идентификатор, однозначно определял эту бумажку.

— Не, ты не понял. – покачал головой Сергей. – Однозначно определить бумажку может ее номер, тут и штрихкод не нужен. Вот ты когда вручную сверял, какую информацию использовал? То есть, что именно проверял?

— Так… Дату документа проверял – ну, чтобы день тот же самый был, а внутри дня пусть двигают, как хотят…

— Так, еще что? – заинтересовался Сергей.

— Еще отправителя и получателя…

— Да, это понятно, дальше что?

— Номенклатуру и количество, после свертки таблицы. Ну, чтобы дублирующихся строк не было.

— Ну вот. Считаем. – Сергей стал загибать пальцы. – Дата, отправитель, получатель, таблица с номенклатурой и количеством. Это – суть документа, его ключевые поля. Остальное, с точки зрения складского учета – чушь.

— Это ты про что?

— Там полно полей еще, особенно в отгрузке. Договоры всякие, счета учета, комментарии, заказы и т.д. – вся аналитика, нужная для управленческого, бухгалтерского учета, CRM и т.д. С точки зрения склада все это – чушь.

— А, понял, понял. – немного пристыженно закивал Стас.

— Так вот, как-то бы вот все эти поля, нужные нам идентифицировать, понимаешь? Ну, чтобы по какому-то признаку, что ли, раз! – и проверить состав документа. Вот этот, наш, складской состав. Понимаешь?

— Да, понимаю. Только не понимаю, как это сделать. – покачал головой Стас. – С версией я понимаю. Я там, в принципе, то же самое и делаю. А как такую информацию на бумажке хранить? Ты же этого хочешь? Хранить на бумажке, сверять с программой?

— Да. Может, все-таки штрихкод?

— Штрихкод документа?

— Ну да… Хотя… Нет. – замотал головой Сергей. – Не подойдет штрихкод. Он же сам по себе живет, и никакой полезной информации в себе не содержит.

— Почему? Как? – удивился Стас.

— Ну ты просто присваиваешь документам штрихкоды, по порядку, и все. Один документ – один штрихкод. Меняешь документ – штрихкод не меняется. Это, как длинный номер, или второй номер, не знаю… Просто пригодный для сканирования. Пикаешь, программа ищет его, и определяет, какой документ отсканировали. Все.

— Ну ты мне рассказывай… — махнул рукой Стас. – Я с розницей несколько раз работал, будет он мне про штрихкоды рассказывать…

— Ну давай, просвети меня, умник. – ухмыльнулся Сергей.

— Ща, докурим и сдадим. – с улыбкой произнес Стас фразу из старого анекдота про студентов. – Слышал про плушки?

— Плушки? Я очень любить русский язык и много говорить на он?

— Ой деревня… Ты фрукты в супермаркете покупаешь?

— Ну да, конечно.

— Тебя никогда не удивляло, что на кассе твои бананы нормально пробиваются, с определением веса, цены и т.д.? Заметь, по штрихкоду.

— Да, а что тут… Погоди… — задумался Сергей. – Они что, хранят эти штрихкоды? После каждого взвешивания запоминают результат в базе? И потом по штрихкоду ищут мой результат взвешивания?

— Ну, я говорю, деревня. Шибко умная. – засмеялся Стас. – Там все намного проще. Вся информация, необходимая для продажи, содержится в самом штрихкоде.

— То есть как? – удивился Сергей.

— То есть так. Деталей я не помню, примерно расскажу. Там плушка, то есть PLU – это то ли три, то ли четыре цифры, они однозначно идентифицируют товар.

— Да, что-то припоминаю такое… — пробормотал Сергей. Потом вдруг стал картинно кричать. – Галя! Какой плу на яблоко роял гала?

— Ну да, оно и есть. – кивнул Стас. – Это где весов в зале нет, там кассир должен плушку знать, потому что сам взвешивает. Но там и штрихкод, как таковой, не возникает.

— Про плушку понял, дальше что? – заинтересованно спросил Сергей.

— Дальше вес и цена, вроде, но это уже не суть. – махнул рукой Стас. – Я ж тебе к тому рассказал, что в штрихкод можно засовывать любую информацию, особенно в сто двадцать восьмой.

— Какой?

— Ну они же разные есть, штрихкоды-то. Блин, какой ты тупой, а? – улыбнулся Стас.

— Давай рассказывай. – не стал отвлекаться Сергей.

— Короче, есть разные виды, или типы, не знаю как называется эта классификация. Наиболее распространенный – EAN13, ты его видишь чаще всего. Но, если тебе надо много информации в штрихкод запихать, то лучше подходит Code128 – там даже буквы писать можно, и они кодируются, и раскодируются, и читаются любым сканером современным.

— Буквы? – округлил глаза Сергей. – Серьезно?

— Ну.

— Блин, это ж кайф! – улыбался Сергей. – Тогда все на свои места встает! Мы можем весь состав документа – ну, те поля, что я перечислил – загнать в одну длинную строку, как в стек, и закодировать в штрихкод! А потом – быстро сверять!

— Ну, не знаю…Представь, двести позиций, по каждой надо, хотя бы, код номенклатуры, количество… Очень длинная строка получится. Такую и сканер может не взять, обычный. Широкий какой-то нужен, я не знаю…

— И что, как быть-то? – скис Сергей. – Давай, умник, гений штрихкодирования, подсказывай.

— Ее бы как-то заархивировать, что ли, не знаю…

— Погоди… — в голову Сергея пришла какая-то мысль. – Точно, хорошо что ты про архиватор заговорил! Контрольную сумму надо вычислять!

— Чего?

— Да не тупи, Стас. – улыбнулся Сергей. – Ну, контрольная сумма, по длинной строке. Она там по разным алгоритмам вычисляется, это не важно. Важно, что она – короткая, понимаешь?

— Нет.

— Ну строка – длинная, хоть километр, а контрольная сумма – короткая, всегда короткая. И она всегда однозначно идентифицирует эту строку! Точнее, не саму строку, а нам это и не надо. Она скажет главное – изменился документ или нет!

— Начинаю понимать… — задумчиво сказал Стас. – Ты будешь вычислять контрольную сумму документа, сохранять ее, а при печати – выводить в виде штрихкода прямо на бумажку?

— Да!

— А дальше?

— А дальше они к тебе придут со своими бумажками грязномазыми, а ты сканером пик! – и говоришь – все, валите, ничего не изменилось. Система сама сходит, поищет эту контрольную сумму, и если нашла – значит, все хорошо. А если не нашла – значит, документ поменялся. Тогда подойдет твой тяжелый алгоритм, с версиями.

— О, точно! – поддержал Стас. – Тогда мы просто к информации о версии добавим контрольную сумму! Блин, кайф! Тогда, даже если документ поменялся, я однозначно определю версию, из которой была печать!

— Ну. Тогда и бегать к тебе им не надо, в общем-то… Дашь ей сканер, дешманский какой-нибудь, и пусть себе пикает. Или даже Рустаму дашь сканер, жалко что ли.

— Клево, слушай… — мечтательно сказал Стас. – Прям решение классное, мне нравится. Главное – не будет реагировать на изменения, не связанные со складом. Это, типа, такое умное версионирование, с быстрым откликом и определением ключевых отличий.

— Ага, но самое интересное в другом. – кивнул Сергей. – В том, что мы с тобой придумали, как быстро сверить бумажку с программой.

— А что? Это важно?

— Безмерно. В нашем проекте по складу.