Антон Кот
Хроники Здорового костыля

Пролог

Вы когда-нибудь просыпались в три часа ночи от звонка стажёрки, которая спрашивает, куда сыпать тонер в кассовый аппарат? Вы когда-нибудь объясняли бухгалтеру, что «удалить без контроля ссылочной целостности» – это не новая функция Excel, а гарантированный способ стереть компанию из реальности? Вы когда-нибудь угрожали коммерческому директору, что сделаете шрифт во всех отчётах Comic Sans, если она не выйдет из кабинета на пять минут?

Если да – добро пожаловать домой. Эта книга написана для вас.

Если нет – пристегнитесь. Вы сейчас погрузитесь в мир, где слова «Честный знак» вызывают аллергию, а «понедельник» – это не день недели, а диагноз. Мир, где один стажер может за пять минут уничтожить то, что пять лет собирала целая команда. Мир, где главный враг программиста – не баги, а люди с благими намерениями.

Меня зовут Антон. Я ведущий разработчик в аптечной сети «Здоровый костыль». Здесь, в своём кабинете, где пахнет валерьянкой и перегретыми серверами, я каждый день сражаюсь с драконами. Мои драконы – это не мифические чудовища. Они приходят под видом коммерческого директора с «маленькой правочкой», бухгалтера, которая помнит ещё дискеты, и стажера, который «просто хотел как лучше».

Эта книга – хроника одной недели моей жизни. Понедельник, вторник, среда, четверг, пятница, суббота, воскресенье. Семь дней ада, завернутого в корпоративный мессенджер и политых холодным кофе.

Если после прочтения у вас начнёт дёргаться глаз – не волнуйтесь. Это нормально. Это профессиональное.

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

P.S. Кактус на моём подоконнике – единственный свидетель всех моих разговоров с самим собой. Его зовут Кеша. Кеша ни разу не попросил меня настроить принтер. Я подозреваю, что он – идеальный сотрудник.

Знакомство

Главный герой: Антон

Типичный ведущий разработчик. У него дергается глаз при слове «релиз», а в кружке кофе всегда больше кофеина, чем воды. Его главная суперспособность – понимать, что имела в виду бухгалтер тетя Люся, когда сказала: «Оно там само всё пикнуло и пропало».

Аптечная сеть: «Здоровый костыль»

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

Золотой фонд сотрудников:

Элеонора Витальевна – Коммерческий Директор (Главный Босс Уровня).

Женщина-ураган. Считает, что программирование – это «просто нажать на кнопки». Любит приходить в 17:55 с фразой: «Там маленькая правочка, за 5 минут сделаешь?» (правка обычно требует переписывания всей архитектуры обмена).

Тетя Люся – Главбух старой закалки.

Считает 1С порождением сатаны. Хранит все важные данные в Excel, который связан с другими Excel-файлами через магические ссылки на несуществующие сетевые диски. Панически боится обновлений. Если после обновления в интерфейсе кнопка сдвинулась на 2 пикселя вправо – у нее случается микроинсульт и «всё пропало, работа стоит». Любимая фраза «Сделай мне как в семерке было!»

Сеня «Эникей» – Стажер-админ, 1с джун встающий на путь тьмы.

Молодой, дерзкий, знает всё про майнинг и кастомные прошивки, но не может настроить принтер этикеток. Пытается «оптимизировать» работу серверов без ведома Антона, из-за чего база падает в самый разгар переоценки.

Марина – Старший фармацевт в «проблемной» аптеке.

Находится на передовой. У нее всегда очередь из 20 человек, зависший терминал и сканер, который «пикает, но не вводит». Звонит Антону лично на мобильный в 11 вечера, потому что «тут какая-то табличка вылезла на английском, я нажала "Ок", и теперь всё серое». Любимая фраза «Я ничего не трогала, оно само!»

Игорь – Региональный менеджер по закупкам.

Человек-таблица. Требует отчеты такой сложности, что их выполнение вешает сервер на полчаса. Хочет видеть в одном отчете остатки аспирина, прогноз погоды на завтра и индекс счастья покупателей в среднем по городу.

Жанна Аркадьевна – Фармацевт-перфекционист («Мозг в футляре»)

Она знает ФЗ-61 и правила хранения лекарственных средств лучше, чем создатели этих правил. Если в программе поле «Серия» имеет длину 20 символов, а в накладной их 21 – она не будет обрезать, она заставит Антона переписывать структуру базы данных. Ведет бумажную тетрадочку, куда записывает все «глюки» 1С с точностью до секунды. Звонит Антону и начинает разговор так: «Антон, здравствуйте. Вчера в 14:42 при формировании отчета по дефектуре в третьей колонке пятая строка имела отступ на два миллиметра больше, чем в четвертой. Это вносит когнитивный диссонанс в мою работу. Исправьте». Она не кричит, она говорит тихим, вежливым и невыносимо занудным голосом, пока у Антона не начинает течь кровь из ушей.

Виталий – техподдержка эквайрина «Стабильность-Банка»

Человек-скрипт. Его задача – доказать, что банк идеален, а проблема в 1С, в проводах, в фазе Луны или в плохой карме кассира. На любой технический вопрос отвечает: «Пришлите лог-файл в формате .xml за последние три года, мы рассмотрим его в течение 30 рабочих дней». Любимая фраза «На нашей стороне потерь нет».

Анечка – HR-менеджер (в поиске себя и здравого смысла)

Живет в мире розовых пони в сторис, но по иронии судьбы отвечает за прием, увольнение и – самое страшное – графики отпусков в 1С:ЗУП. Она вспоминает о том, что сегодня выходит новый провизор в дежурную аптеку, ровно в тот момент, когда этот провизор уже стоит перед закрытой кассой и не может залогиниться. Прибегает к Антону с глазами-плошками, в которых читается ужас всей вселенной. Сваливает всё на «глюк системы». Если она забыла нажать кнопку «Провести», она искренне верит, что это 1С «съела» документ.

Понедельник

Глава 1. Кофе уже остыл, а я ещё – нет

Утро Антона началось не с кофе. Оно началось со звука, который в ИТ-отделах предвещает апокалипсис – скрежета старого матричного принтера в бухгалтерии, который каким-то чудом дожил до наших дней и теперь дожевывал последнюю надежду на спокойный понедельник.

08:45.

Антон только коснулся задом кресла, когда дверь распахнулась, будто ее вынесли тараном. На пороге стояла Анечка. Ее глаза были размером с пятирублевые монеты, а в руках она комкала документы о приёме на работу.

– Антон! Оно всё пропало! – взвизгнула она, подлетая к столу. – У нас в 12-й аптеке на кассе стоит девочка, новая, Маша… или Даша… В общем, она стоит, люди злые, лекарства не выдаются, а 1С пишет «Пользователь не найден»! Я же всё вносила! Клянусь!

– Анечка, – Антон медленно, как сапер, положил руку на мышку. – Ты кнопку «Записать и закрыть» нажала? Или просто закрыла ноутбук и пошла пить латте?

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

Не успел он открыть конфигуратор, как зазвонил внутренний телефон. На экране высветилось: «Жанна Аркадьевна (Аптека №3)».

– О нет… – прошептал Антон. Он знал: если поднять трубку, следующие три часа его жизни будут вычеркнуты из биографии.

– Алло? – обреченно выдохнул он.

– Антон Игоревич, добрейшего вам утра, если его можно назвать добрым в условиях такой вопиющей технической деградации, – раздался в трубке вкрадчивый, ледяной голос Жанны Аркадьевны. – Вы знаете, я сейчас изучала отчет по остаткам маркированных упаковок «Валидола» и обнаружила, что в печатной форме М-11 шрифт названия препарата на 0.5 пункта меньше, чем того требует ГОСТ от девяносто восьмого года. Это создает недопустимую нагрузку на органы зрения провизора.

– Жанна Аркадьевна, у меня кассир в 12-й аптеке в базу войти не может…

– Антон Игоревич, – голос стал еще тише и опаснее, – кассир – это временно. А стандарты документации – это вечно. Запишите: страница 14, второй абзац снизу… я буду диктовать медленно, чтобы вы успели осознать всю глубину вашей халатности…

В этот момент в кабинет, не стучась, ворвалась Элеонора Витальевна. Она не шла, она неслась на гребне ярости.

– Антон! – заорала она, игнорируя Анечку и телефон. – Опять этот банк «Стабильность»! У нас в центральной аптеке женщина не может оплатить свой, заказанный ранее, дорогостой за 40 тысяч! «Ошибка связи с пин-падом»! Она требует таблетки, ОМОН и мою голову! Звони в банк!

Антон, прижимая трубку плечом к уху (где Жанна Аркадьевна уже перешла к описанию межстрочного интервала), начал судорожно набирать номер техподдержки банка.

– Здравствуйте, вы позвонили в банк «Стабильность», – пропел в трубке жизнерадостный робот. – Ваш звонок сорок восьмой в очереди. Ориентировочное время ожидания… две недели.

– Виталий! Мне нужен Виталий! – прорычал Антон.

Через пять минут (и две порции классической музыки в трубке) ответил Виталий.

– Техподдержка, слушаю.

– Виталий, у нас ошибка с пин-падом, говорит связи нет, в 1С ошибка эквайринга!

– На нашей стороне потерь нет, – меланхолично отозвался Виталий. – Проблема в вашем софте. Проверьте, не жует ли у вас кассир провода.

– Виталий, какие провода?! У вас оборудование отваливается там уже не в первый раз! Замените уже терминал!

– Пришлите лог подключения к терминалу в формате BASE64, упакованный в ZIP, зашифрованный подписью директора и освященный в местном храме. Мы рассмотрим в течение месяца. Всего доброго.

В трубке запищали гудки. Жанна Аркадьевна в это время в другое ухо дошла до обсуждения цвета рамочек в интерфейсе.

09:00.

Прошло всего двадцать минут рабочего дня. Антон посмотрел на кактус, стоящий на подоконнике. Ему показалось, что кактус сочувственно кивнул.

– Так, – Антон встал, взял пустую кружку и посмотрел на Элеонору Витальевну. – Либо вы сейчас все выходите отсюда на пять минут, либо я прямо сейчас пишу обработку, которая удалит все остатки из базы к чертовой матери.

В кабинете на секунду воцарилась тишина.

– И шрифт сделаю Comic Sans, – добавил он, глядя в сторону телефона, где все еще вещала Жанна Аркадьевна.

Глава 2. Сила есть – SQL не нужен

10:15.

Антон только успел выпить глоток обжигающего кофе, когда дверь снова содрогнулась. На этот раз её не вынесли – её открыли с ноги, потому что руки вошедшего были заняты коробками с какими-то платами.

– Антон, знакомься! Это Сеня, наш новый гений коммуникаций и патч-кордов! – провозгласила Элеонора Витальевна, сияя так, будто она лично нашла Атлантиду. – Он такой деятельный, такой активный! Сказал, что наш серверный парк – это «позорное кладбище электроники» и он всё исправит за час!

Сеня, парень с пучком на голове и в футболке с надписью «Error 404: Sleep not found», не глядя на Антона, уже начал выгружать содержимое своих коробок прямо на стол, погребая под ними заявление Анечки.

– Привет, шеф! – бросил Сеня, бешено вращая глазами. – Я тут глянул логи… Ну, как глянул, я их пролистал на скорости x10. У вас там всё тормозит, потому что железо помнит еще инаугурацию Ельцина. Короче, я в деле!

Антон потер переносицу. В голове пульсировала фраза Жанны Аркадьевны про шрифт, но реальность требовала действий.

– Так, деятельный ты наш. У нас на 8-й аптеке, той что на окраине, беда. SQL-сервер глючит. База «отвалилась», кассы стоят, провизоры бьются в истерике. Посмотри удаленно, что там. Скорее всего, служба просто «легла» после скачка напряжения. Просто. Перезапусти. Службу. Понял?

– База? SQL? Понял, шеф! Всё сделаю в лучшем виде, я на курсах «Админ за 24 часа» был лучшим по скоростному кликанью! – Сеня уже вовсю стучал по клавишам, а его мышка летала по коврику со свистом.

Антон отвернулся к своему монитору, пытаясь разгрести завалы в ЗУПе, которые оставила Анечка. Тишину прерывал только подозрительно бодрый шепот Сени: «Так, это что… это нам не надо… о, инсталлятор… о, а давай-ка мы вот так…».

Прошло ровно семь минут.

В кабинет, подобно фурии, ворвался Игорь, менеджер по закупкам. Лицо его было цвета спелой свеклы.

– АНТОН! ТЫ ЧТО ТАМ ТВОРИШЬ?! – заорал он так, что кактус на окне втянул колючки. – Восьмая аптека! Мне звонит директор, говорит, у них со столов всё исчезло! Вообще всё, а монитор написал: «Uninstalling Microsoft SQL Server…».

Антон медленно, очень медленно повернул голову к Сене.

– Сеня… – голос Антона был тихим, как шелест травы на кладбище. – Ты что делаешь?

– А? – Сеня даже не обернулся, он лихорадочно жал «Next» в каком-то окне. – Да там что-то служба не запускалась, писала «Ошибка доступа». Я решил, что конфиг битый. Ну, я и подумал: чего время тратить на ковыряние в мусоре? Проще же снести всё под корень и заново поставить чистенькую! Я вот уже почти удалил… Ой.

– Что «ой»? – Антон уже стоял у него за спиной.

– А там… там база данных была в той же папке, куда я софт ставил? – Сеня наконец-то посмотрел на Антона. В его глазах не было раскаяния, только легкое любопытство исследователя. – Просто оно спросило: «Удалить все связанные данные?», и я нажал «Да», чтобы быстрее было. А что, бэкапов нет?

В этот момент в коридоре послышался топот тяжелых сапог Элеоноры Витальевны. Она явно уже знала, что аптека на окраине превратилась в музей неработающей техники.

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

– Но я же хотел, как лучше! – воскликнул Сеня, – Чистая установка – это же залог стабильности!

Антон сел на пол прямо рядом с системным блоком. Ему вдруг очень захотелось стать фармацевтом. Продавать гематоген, советовать пластырь и никогда, никогда в жизни не знать, что такое «Drop Database».

Глава 3. Великое очищение

10:30.

В кабинете пахло озоном, дешевым освежителем «Горный воздух» из коридора и надвигающимся увольнением. Пока Элеонора Витальевна за дверью объясняла Сене, почему его «активность» сравнима с падением метеорита, в дверях материализовалась тетя Люся.

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

– Антоша, – ласково начала она, поправляя очки на цепочке. – Я тут решила в центральной базе порядок навести. А то ты всё занят, всё бегаешь… А у меня там строчек много лишних было, с какими-то крестиками.

Антон, который в этот момент судорожно пытался нащупать бэкап 8-й аптеки, медленно замер. Его пальцы зависли над клавиатурой.

– Тетя Люся… – голос Антона сорвался на шепот. – Какие строчки? Какие крестики?

– Ну, те, что «помеченные на удаление». Я зашла в меню, нажала «Удалить», а оно мне пишет: «Обнаружены связи, удаление невозможно». Ну я же не глупая, я галочку поставила «Удалять без контроля ссылочной целостности». И оно так быстро-быстро побежало! За три года всё почистило. Теперь база такая легкая, летает!

Антон почувствовал, как мир вокруг начинает пикселизироваться и распадаться на нули и единицы.

«Удалять без контроля ссылочной целостности» в 1С – это как выдернуть фундамент из-под сорокаэтажного дома и надеяться, что он продолжит висеть в воздухе на честном слове.

– Тетя Люся, – Антон повернул к ней монитор, на котором красовался пустой список документов реализации за 2021-2023 годы. – Вы понимаете, что вы сейчас стерли историю компании? У нас теперь по документам нет ни закупок, ни продаж, ни прибыли. Мы теперь – благотворительный фонд «Чистый лист».

– Ой, да ладно тебе, – отмахнулась она. – У меня всё в Excel записано! Я сейчас принесу флешку.

В этот момент ожил селектор. Голос Элеоноры Витальевны, усиленный яростью и динамиками, разнесся по всему офису:

– АНТОН! Жанна Аркадьевна звонит на вторую линию! Она говорит, что раз базы всё равно нет, она подготовила список из пятисот улучшений, которые мы ДОЛЖНЫ внести в новую базу, пока ты её заново установишь! Она начнет диктовать через три… две… одну…

Глава 4. Миллионы из ниоткуда

11:00.

Дверь в кабинет распахнулась как врата рая, на пороге стояла Элеонора Витальевна. Её лицо выражало гамму чувств: от священного ужаса до экстаза человека, выигравшего в лотерею, в которую он даже не играл.

– Антон! Бросай всё! – взвизгнула она, размахивая планшетом. – Свершилось! Банк «Стабильность» проснулся!

– Что, транзакции прошли? – Антон выключил фен. В ушах всё еще стоял гул, а в левом наушнике Жанна Аркадьевна как раз переходила к критике цветовой схемы «Такси» в 1С.

– «Прошли»?! Да они там, видимо, коллективно сошли с ума! Помнишь ту бабушку, у которой зависли сорок тысяч за курс таблеток? Так вот, Виталий из техподдержки, видимо, нажал кнопку «Повторить» сорок восемь раз! И не только ей!

Антон медленно поднялся с колен.

– Элеонора Витальевна, вы хотите сказать…

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

В коридоре послышался топот. Это бежала тетя Люся, размахивая распечаткой банковской выписки.

– Элеонора! Антон! У нас в выписке какой-то сюрреализм! Платежи дублируются каждые тридцать секунд! У меня 1С: Бухгалтерия захлебнулась, она не понимает, куда столько авансов вешать! У нас по отчетам теперь каждая вторая бабушка в районе – оптовый закупщик элитных шприцов и мази Вишневского!

– Это же прекрасно! – Элеонора Витальевна уже явно видела себя на обложке Forbes «Аптечный магнат года». – Антон, не смей ничего исправлять! Скажи Виталию, что мы согласны на такие «ошибки».

– Элеонора Витальевна, – Антон почувствовал, как седеет еще один волосок у него на виске. – Вы понимаете, что это глюк шлюза? Как только они заметят, они отзовут платежи. А если мы их потратим – это 159-я статья, мошенничество в особо крупном. И крайним буду я, потому что «программист не настроил фильтр дублей».

– Ой, зануда! – отмахнулась директриса. – Ты лучше скажи, почему у меня в телефоне баланс растет, а на 8-й аптеке до сих пор всё лежит?

Антон посмотрел на Сеню, который в углу пытался понять, почему после его «чистки» SQL-сервера монитор в аптеке показывает только мультики про Свинку Пеппу.

В этот момент зазвонил телефон. На экране – Виталий из банка.

– Антон? – голос Виталия был подозрительно бодрым, на заднем фоне слышались крики и звук разбивающейся посуды. – Слушай, тут такое дело… У нас скрипт зациклился. Мы вам там случайно немного лишнего отправили. Ты это… не мог бы ты в своей 1С нажать «Отмена всех транзакций за утро»? А то у нас тут председатель правления уже за валидолом потянулся.

Антон усмехнулся.

– Виталий, дорогой. На нашей стороне потерь нет. Проблема в вашем ПО. Пришлите лог-файл в формате .xml за последние три года, мы рассмотрим его в течение месяца…

– Антон, не до шуток! – взмолился Виталий. – Если мы не вернем деньги через час, я пойду работать дворником в твою аптеку!

– О, – Антон оживился. – У нас как раз вакансия в 8-й. Там сейчас Сеня работает, вам будет о чем поговорить.

Глава 5. Бумеранг

11:15.

Антон стоял посреди кабинета, в трубке Виталий из банка «Стабильность» уже перешел от вежливых просьб к стадии «я сейчас приеду и сам нажму Delete на твоем сервере».

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

– Антон, побойся бога! – взмолился Виталий. – У нас в системе из-за этого дубля вылетело всё ядро. Если мы не откатим транзакции до обеда, ЦБ отзовет лицензию, а меня сошлют настраивать банкоматы в тундру!

– Виталя, выдохни, – спокойно сказал Антон. – Не суетись. На нашей стороне, конечно, потерь нет, но я сегодня добрый. Расслабься, сейчас набросаю обработку, вычленим твои «подарки» и вернем в целости и сохранности. Только с тебя потом простава – нормальный кофе в зернах, а не тот растворимый гудрон, что вы нам на прошлый Новый год дарили.

– Да я тебе плантацию в Колумбии куплю! – выдохнул Виталий. – Только жми на кнопки быстрее!

– Работаем, – бросил Антон и отключился.

Он быстро набросал обработку на коленке. Код лился легко, как песня, но тут в дверях появилась Анечка. Она выглядела подозрительно радостной.

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

Антон выдохнул и медленно закрыл глаза.

Глава 6. Тонер преткновения

12:00.

В этот момент дверь в кабинет вынесла Элеонора Витальевна. Вид у неё был такой, будто у неё только что отобрали последний шанс на бессмертие.

– АНТОН! КАТАСТРОФА! – взревела она. – 5-я аптека! Центральная! У них ПАНИКА! Продажи стоят! Клиенты уходят к конкурентам! Жанна Аркадьевна лично звонила – сказала, что наступил технический дефолт!

Антон мгновенно перешел в режим боевой готовности. Мысли закрутились: «Так, 5-я аптека… Это же наш флагман. Неужели база рухнула? Или фискальный накопитель сгорел? Или обрыв магистрального кабеля?»

– Что случилось?! – Антон уже тянулся к консоли удаленного доступа. – База не открывается? Чеки не бьются?

– ХУЖЕ! – Элеонора Витальевна едва не плакала. – У них КОНЧИЛСЯ ТОНЕР В ПРИНТЕРЕ! Они не могут ничего напечатать! Жанна Аркадьевна говорит, что работать в таких условиях – это всё равно что оперировать ржавой вилкой! НЕМЕДЛЕННО ИСПРАВЬ!

Антон медленно опустил руки. Взгляд его стал стеклянным.

– Тонер?.. – переспросил он. – В принтере? Вы серьезно?

– А ты думал, мы тут в игрушки играем?! – рявкнула директриса. – Там очередь из десяти бабушек! Иди и делай!

Антон повернулся к Сене, который как раз пытался засунуть флешку в разъем не той стороной.

– Сеня, – голос Антона был полон зловещего спокойствия. – Бросай сервер. Твой звездный час настал. Полевое крещение.

– О, круто! – подпрыгнул Сеня. – Что делать? Хакерская атака? Подмена IP-адресов?

– Почти. Тебе нужно совершить героический марш-бросок в 5-ю аптеку и заменить картридж. И помни: там Жанна Аркадьевна. Если ты не поклонишься ей трижды перед тем, как открыть крышку принтера – ты оттуда не вернешься.

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

– Антон! Тут такое дело… мне вышло какие-то окошко где было написано, что требуется какое-то обновление и кнопка «Обновить всё». А после того как я её нажала, там вылезла такая красивая картинка с черепом и костями… Это же значит, что обновление прошло успешно, да?

Антон посмотрел на свой монитор. Сеть медленно уходила в небытие.

Глава 7. Тайная комната внутри ККТ

12:45.

Антон только-только вошел в транс, вычищая дубли оплат Виталика, как его телефон зозвонил на столе, вибрируя так сильно, что едва не сбросил кактус Кешу на пол. На экране светилось: «СЕНЯ».

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

– Шеф… тут это… – голос Сени дрожал, в нем слышались нотки экзистенциального кризиса и далекое, зловещее шипение Жанны Аркадьевны. – Тут аномалия. Матрица дала сбой.

– Что случилось? Бумага застряла?

– Нет, бумага идет! – Сеня перешел на сдавленный шепот. – Она вылетает из кассы, нож её аккуратно отрезает, всё по фэншую. Но она… она девственно чистая, Антон! Белая, как снег в Альпах! Я уже три чека пробил – пустота. Жанна Аркадьевна смотрит на меня так, будто я съел её любимый справочник Видаля.

Антон замер.

– И в чем проблема, по-твоему?

– Так в том и дело! – воскликнул Сеня. – Я всё осмотрел. Разобрал эту чертову коробку наполовину. Но я в упор не вижу, куда тут засыпать тонер! Тут нет ни фотобарабана, ни лазера, ни магнитного вала. Тут вообще места под порошок нет! Я у Жанны спросил, где у них запасы тонера для кассы, а она ответила, что «мои интеллектуальные способности стремятся к абсолютному нулю». Шеф, где у ККТ заправочный люк?!

Антон медленно закрыл глаза и приложил ладонь к лицу.

– Сеня… скажи мне, ты какой стороной рулон вставил?

– В смысле «какой»? Круглой! Она же круглая! Я её туда впихнул, она крутится…

– Сеня, послушай меня внимательно, – Антон старался говорить максимально доходчиво, как ребенку. – В кассовом аппарате нет тонера. Там термопечать. Головка просто жжет бумагу.

– Жжет? – голос Сени стал подозрительным. – В смысле жжет? Она что, лазером стреляет?

– Нет, Сеня. На бумаге есть специальный слой. Ты вставил рулон «наизнанку». Ты печатаешь по обратной стороне, где нет термочувствительного слоя. Переверни рулон, гений цифровой трансформации.

В трубке повисла долгая, тяжелая тишина. Было слышно, как на заднем плане Жанна Аркадьевна громко произносит:

– …и эти люди еще пытаются рассуждать о блокчейне, не зная физики на уровне пятого класса!

– Ой… – наконец выдавил Сеня. – Слышу, зашуршало. О! Полез текст! «ООО Здоровый Костыль… Кассир: Жанна…». Заработало! Шеф, ты маг!

– Я не маг, Сеня, я просто читал инструкцию, – вздохнул Антон. – Возвращайся давай. У нас тут Анечка «обновила» систему, и теперь у меня на мониторе вместо 1С – приглашение в онлайн-казино на португальском языке.

– Понял, лечу! – радостно крикнул Сеня. – Кстати, Жанна Аркадьевна просила передать, что у чека «недостаточно благородный оттенок черного». Ты не знаешь, где в настройках драйвера подкрутить контрастность до уровня «Глубокая полночь»?

– Вешай трубку, Сеня. Просто вешай трубку.

Глава 8. Испанский стыд на португальском языке

13:00.

Антон сидел перед монитором, судорожно вбивая в командную строку коды очистки реестра. Благодаря «обновлению» Анечки, её рабочий стол превратился в филиал Лас-Вегаса. По экрану летали золотые монеты, мигали неоновые вывески «BÔNUS DE BOAS-VINDAS!» и периодически выпрыгивали окна с анимацией, которую никак нельзя было назвать «учебно-методическим пособием по фармакологии».

– Да закройся ты, проклятая рулетка! – рычал Антон, пытаясь поймать мышкой крошечный крестик, который при наведении убегал в другой угол экрана.

В этот самый момент дверь в кабинет Анечки открылась с характерным скрипом, который издавала только обувь тети Люси. Она зашла в кабинет с пачкой актов сверки, напевая какой-то мотивчик из советских кинофильмов.

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

Она подошла к столу и замолчала. Мотивчик оборвался на полуслове.

На 27-дюймовом мониторе в этот момент, победно звеня фанфарами, развернулось на весь экран окно с надписью: «VOCÊ GANHOU! MULHERES QUENTES ESTÃO ESPERANDO POR VOCÊ!». И ладно бы только надпись – картинка на заднем плане не оставляла никаких сомнений в том, что именно «ждут» эти дамы.

Антон замер. Его рука на мышке одеревенела.

– Антоша… – голос тети Люси стал тонким и вибрирующим, как натянутая струна. – Это что же… это вот чем ты занимаешься, пока у нас 8-я аптека на листочках торгует?

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

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

– Да какой вертеп! – Антон в отчаянии просто выдернул шнур питания из монитора. Экран погас, но в тишине кабинета из колонок всё еще доносилось ритмичное: «Jackpot! Jackpot! Ooooh, sim!».

– И звук не выключается… – прошептала тетя Люся, пятясь к двери. – Порочный ты человек, Антон. А с виду такой серьезный, в очках… Пойду Элеоноре Витальевне скажу, чтобы она тебе доступ к интернету по талонам выдавала. А то ведь так и до тюрьмы недалеко!

– Тетя Люся, постойте! Это скрипт-вымогатель! – крикнул он ей вслед, но дверь уже захлопнулась.

Через секунду в коридоре послышался её возмущенный голос: «Элеонора! Элеонора Витальевна! Срочно зайдите, там у него… непотребство! В прямом эфире из Лиссабона!».

Антон уронил голову на стол. В этот момент в кабинет зашел сияющий Сеня с пустым картриджем в руках.

– Шеф, я вернулся! Жанна Аркадьевна сказала, что я «примитивный исполнитель», но зато теперь принтер печатает так четко, что на чеках видны даже водяные знаки… Ой, а чего ты в темноте сидишь? И почему у тебя из колонок португальская попса орет?

– Сеня, – глухо произнес Антон, не поднимая головы. – У тебя есть пять минут, чтобы снести систему, переустановить всё и доказать всем, что я не игроман. Иначе твое следующее задание будет – инвентаризация склада клизм вручную.