В этой статье будут практические заметки из жизни. Этот кейс закончился буквально в феврале. Работали с ним три года, а я занимался им примерно полтора года.

История вопроса простая. Обычная бухгалтерия, обычные услуги от самозанятых. Мы получаем чеки. Сначала бухгалтерия просто вручную забивала их в документ поступления. Потом скачали обработку с «Инфостарта»: по ссылке от налоговой получаем данные и можем все загрузить. Бухгалтеру жизнь облегчили. Все довольны, все хорошо. Айтишники, вы молодцы.
Все работает через налоговую службу, чек уже не подделать. Бухгалтерия полностью спокойна: если им пришла ссылка и есть ответ от налоговой, значит, все достоверно и правдиво.
Поставили единый почтовый ящик, чтобы все самозанятые кидали ссылки по электронной почте. Обработка работает, люди пользуются, все хорошо.
Рост нагрузки и оптимизация процессов

Но оказалось, что чеков у нас много. И самой большой проблемой было то, что налоговая отвечает не так быстро, как нам хотелось бы. У нас десятки баз и куча чеков.

Бухгалтерия приходит с вопросом: «А можно как-то ускорить?»
А что такое? Работали же, все устраивало.
«Ну да, – говорят, – работали. Но нам понравилось работать с самозанятыми. У нас их теперь много. Мы франшиза, так что организаций у нас тоже много. И как-то четыре с половиной часа тратить на обработку одного месяца не хочется».
Да, действительно проблема. Надо ускоряться. Давайте оптимизировать.
Открываем обработку, смотрим, как она работает. Ее делали коллеги до меня. Видимо, открыли ее в первый раз – тихий ужас.
Обработка была сделана молодым, талантливым 1Сником для своей маленькой бухгалтерии с маленьким количеством самозанятых. Она получает таблицу в Excel. По каждой таблице начинает проверять, где ИНН, где ссылка на чек, где фамилия получателя. И все это – в цикле по каждой строке таблицы.
Дальше смотрим: из почты берутся все заголовки. Сисадмин у нас добрый и щедрый, поэтому заголовки хранятся полгода. Каждый раз обработка забирает полгода, потом перебирает, оставляет только текущую неделю и начинает работать с чеками.
Выясняется, что в одной базе у нас ведется 90% работы. При этом обработка каждый раз не знает, с чем ей приходится работать. По ссылке из налоговой ничего непонятно – просто набор цифр и букв. И только получив данные, можно посмотреть, это чек для нашей организации или для соседней.
Хорошо. Код мы перепишем, почтовый ящик отфильтруем. Но самое главное – это организовать процесс.
Посидели, посовещались с бухгалтерией и решили перестроить процессы. Самозанятые теперь не сами со своего ящика отправляют письма в общий ящик, а отправляют своему директору – тому, кому оказывали услуги. А он уже как грамотный, адекватный человек, у которого от этого зависит часть зарплаты, смотрит, фильтрует, делает нормальную таблицу. И мы получаем нормальные, уже предварительно отфильтрованные данные.
Хорошо. Программу мы отточили, данными занялись.

Смотрим дальше. Письмо может содержать ссылку на чек в теме, можно написать ее в теле письма, можно приложить таблицу. А в таблицу мы можем написать ИНН и уже сразу на входе смотреть, наше это письмо или нет.

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

Результат хороший. За счет оптимизации кода мы с четырех с половиной часов дошли до получаса. А за счет организации процесса и работы пользователей сократили время еще вдвое.
Технический кризис и вынужденное внедрение OCR
И тут через восемь месяцев, в феврале, случается катастрофа. Как всегда, ничего не работает. Часа полтора-два уходит на выяснение: а где у вас не работает? Что именно? Смотрим, что случилось.
Если послать ссылку на чек в налоговую, в конце там «/print», и мы получаем картинку. Оказывается, нигде это не публиковалось, нигде не афишировалось, но если послать в конце «xml», мы получаем xml-файл. Посылаем «json» – получаем json.
Мы этим пользовались, и все работало. А 20 февраля налоговая внезапно отключила этот сервис. У вас остается только картинка.
Срочно ремонтируем, бухгалтерию успокаиваем. Хотя бы что-то из налоговой мы получаем.
С помощью Яндекса удалось подружиться с налоговой и получать свои данные. Но Яндекс за это просит деньги – хотя бы 13 копеек за каждое удачное распознавание. Мы проверили: из тысячи посланных картинок не распозналась только одна.
Ладно. Вроде бы контур настроили. Яндекс высылает нам полный текст, который нашел на чеке. Мы поставили небольшой парсер – и все, получаем все свои нужные данные.
Архитектурная перестройка: 1С как центральный микросервис
Но это все-таки не то. И тут рождается мысль: у налоговой есть микросервис – посылаешь ссылку, получаешь картинку. У Яндекса есть микросервис – посылаешь картинку, получаешь текст. У нас же тоже есть микросервис.
Для своей 1С в свое время, когда выяснилось, что у нас десятки баз, была поставлена еще одна центральная база. Она точно такая же типовая бухгалтерия со своими добавленными мной расширениями, которая просто обслуживает эти базы: раз в пять минут проверяет доступность – работает или не работает. Раз в полчаса проверяет печатные формы и шаблоны документов: все ли у всех одинаково. Если эту центральную базу нагрузить еще одним сервисом, нам будет еще лучше.

Замечательно. У нас есть почтовый ящик, налоговая, Яндекс. Мы добавляем сюда микросервис 1С. И все начинает крутиться.

У нас центральная база. Только она одна обращается в почтовый ящик, получает новые ссылки, смотрит по регистру, обработаны они или нет. Если нет – отправляемся в налоговую, отправляемся в Яндекс, получаем новые данные.
Десяток наших баз, чтобы получить свои новые свежие данные, уже не стучатся куда-то во внешние сервисы. Просто делают запрос в центральную базу: «Нам за такой-то период дайте данные». И все. На всю обработку уходит теперь 5 секунд.

График в результате выглядит вообще фантастически: было четыре с половиной часа, стало 5 секунд. Вот теперь айтишники действительно молодцы.
Философия разработки и практические примеры автоматизации


Мы добились этого благодаря таким идеям: робот должен быть простым. Все, что он делает, может уместиться на один экран: часть с запросом, часть с ответом. Чем проще, тем лучше и тем надежнее оно работает.

1С – это тоже микросервис. И микросервис работает как в облаке, так и в звездчатой системе, или когда все совсем по-простому.


Были написаны расширения. Состав каждого расширения очень маленький, при обновлении релизов его вполне можно контролировать, даже если он пересекается с чем-то типовым. Для отладки нужно совсем немного времени.
На этой идее, что 1С – тоже микросервис, я сделал несколько расширений, которые помогали мне в работе.
Вот, например, сообщение робота по проверке баз: кто-то отвечает, кто-то работает, кто-то не работает. Просто открыл телефон, посмотрел в Telegram. Если что-то не так, сразу можно позвонить сисадмину и сказать: «Alarm, работай».
Как только какая-то работа выполняется тобой в третий раз, надо уже задуматься. Это штампование кода надо ликвидировать. Три – это уже много. Потому что появится четвертое, пятое. И, как я на прошлой работе выяснил, может быть и сотня.
Клоны рулят. Когда любой компонент берешь и заменяешь его соседним, который действует точно так же, потому что сделан из того же шаблона.

Вот сервисные отчеты по состоянию наших баз. Надо проверить, все ли периоды у нас закрыты, можно ли двигаться дальше. Нажал кнопочку – через 10 секунд получил ответ: остались эти три базы. Можно уточнить у бухгалтерии, что случилось и когда будет готово.

Также можно посмотреть, все ли нормально у нас в отделе кадров, у всех ли правильные печатные формы.
Плюс обратите внимание на колонку «Версия». Состав информации по дополнительным обработкам в 1С скудный. Поэтому мы решили, что версия в формате «релиз 1», «версия 2», «подрелиз 35» – это неинформативно. Ставим дату.
Сразу видно: на той неделе мы что-то переделывали, значит, везде должна быть новая дата. Если где-то она отличается, значит, что-то пошло не так, и можно быстро поправить.

Даже по шаблонам печатных форм видно, все ли поставлены или мы где-то что-то пропустили.
*************
Статья написана по итогам доклада (видео), прочитанного на конференции Анализ & Управление в ИТ-проектах.