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