Задача: Сократить время на ввод операций в 1С Деньги и начать жить.
Проблема: Объем моих операций порядка 150 в месяц. На то, чтобы занести их в базу, необходимо собирать все чеки и практически ежедневно разносить их по статьям.
Решение: В нашем мире, когда космические корабли бороздят большинство операций производятся через банковские карты, а к каждой карте можно подключить СМС оповещение, все операции можно получить из этих СМС. Вопрос только как эти СМС разобрать, решение которого представлено ниже.
Исходные данные: Android (пользователи iPhone - ну уж извините), клиент-серверная установка 1С, сервер Linux (так уж получилось, но это не важно, под виндой так же работает), банковские карты (несколько банков), вклады, наличные (все в двойном размере мои и жены).
Получилось много букв, но надеюсь те, кто пользуются 1С Деньги, могут сэкономить много времени в будущем.
Возможности
- Автоматическая загрузка сообщений в базу (только от указанных отправителей - например 900 от Сбербанка).
- Настраиваемые правила загрузки сообщений, в том числе шаблоны заполнения операций.
- Возможность разбирать сообщения банковских карт разных банков.
- Не затрагивает типовую конфигурацию (только снятие с поддержки).
Хотел выполнить в виде расширения, но пока уровень поддержки типовой конфигурации не позволяет это сделать.
Этап 1. Получение СМС
Т.к. СМС у нас получаются на наших телефонах, то нужно как-то получить их к себе на компьютер и желательно в каком-нибудь удобочитаемом структурированном виде. Вспомнил о существовании программы SMS Backup & Restore. И т.к. она позволяет экспортировать СМС в XML, да ещё и выгружать все это на Google Disk, то не мудрствуя лукаво воспользовался этой программой.
В итоге порядок действий такой:
- Ежедневно по расписанию программа SMS Backup & Restore экспортирует XML файл и выгружает его на Google Disk.
- На компьютере так же установлен Google Disk и он оперативно синхронизирует загруженные на него данные.
- Отлично, теперь файл XML на компьютере. 1С по расписанию (чуть позже пункта 1 выше) загружает полученный файл и формирует на каждое СМС документ Сообщение.
- Затем (пока вручную) документы Сообщение по настроенным правилам преобразуются в документы Операция (см. Этап 2 ниже).
SMS Backup & Restore настроен на телефонах моем и жены. Каждый телефон синхронизируется на мой один Google Disk, но в разные папки.
Этап 2. Разбор СМС
Можете кидаться шапками, но для разбора СМС я использую регулярные выражения. Не вижу здесь принципиально никакого геморроя. СМС не сложные, есть удобные онлайн инструменты для их проверки.
Из СМС можно определить следующее:
- Вид операции (доход, расход, перемещение).
- Нужно ил вообще создавать операцию (реклама, подтверждение кода СМС, отказ операции, сервисные сообщения и прочий мусор).
- Номер карты
- Дату операции
- Сумму операции
- Валюту операции
- Баланс на конец
- Магазин или вид расхода
Отлично, регулярные выражения нам помогли СМС разбить на осмысленные части. Теперь надо полученную информацию преобразовать в документ Операция.
Для Всего этого был создан справочник "Правила загрузки". Оно задает:
- Регулярное выражение для проверки СМС
- Действует для конкретного отправителя (например 900 для Сбербанка)
- Шаблон для создания документа Операция, в случае, если СМС соответствует регулярному выражению
Порядок действий по разбору документов Сообщение следующий:
- Для каждого сообщения перебираются все правила загрузки.
- Первое подходящее правило используем для разбора СМС и создания документа Операция (если не мусорное).
- Сообщение считаем обработанным.
Т.к. основным элементом разбора СМС считается Правило загрузки, хочу рассмотреть его подробнее.
- Для правила можно установить период действия - если дата СМС вышла за этот период правило не рассматривается.
- Правило действует только для конкретного отправителя (соответствует обычно какому-то банку, например 900 - Сбербанк, что-то часто я 900 упоминаю).
- Проверка СМС может осуществляться по регулярному выражению, по подстроке, по началу строки. Последние 2 используются в основном для быстрого определения мусорных сообщений.
- Собственно регулярное выражение (или подстрока) и правее на картинке контрольный пример СМС для проверки.
- Если установлена галочка "Создавать документ", то можно выбрать какой документ 1С Деньги необходимо создать (Доход, Расход, Перемещение и прочие) и заполнить его реквизиты и табличные части (возможно у табличных частей заполнять несколько строк).
- При заполнении реквизитов можно выбрать либо конкретное значение для заполнения, либо написать шаблон выполняемого кода на языке 1С. Шаблонами я пользуюсь в основном для определения Кошелька, Статьи расходов, Статьи доходов, Суммы и Аналитики операции.
Оказалось, что шаблоны выполняемого кода в различных правилах одинаковые, поэтому оформил их в отдельный справочник.
- Для многих операций расхода (например "покупка") правило загрузки одно. И если дату и сумму можно успешно получить, то каждому "магазину" нужно поставить в соответствие некоторую статью из справочника 1С. Для соответствия строк справочникам 1С создал регистр сведений "Аналитика загрузки". Он очень прост: Ключ, Значение, но при этом удобен для заполнения.
При разборе СМС, если встречается неизвестная строка, то она помещается в регистр сведений (поле Ключ), а создаваемая операция скорее всего не проведется. В этом случае необходимо поставить в соответствие ключу нужное значение (справочник статей, кошельки, аналитика операции) и заново разобрать необработанное сообщение.
Ограничения
Все ограничения связаны с тем, что СМС не содержит полной информации о фактической операции. Приведу то, что встретилось у меня:
- Есть операции, в которых написано просто "Оплата", например все операции через Сбербанк Онлайн. В этом случае я ставлю статью "Прочие расходы" и разбираю её позднее отдельно.
- Есть операции, которые проходят в USD, при этом сумма указана в у.е., а рублевой суммы нет. Например оплата картой на AliExpress. Не достаточно информации для заполнения документа "Операция". Здесь есть решение: рублевой суммы нет, но есть баланс на конец. Можно брать эту сумму и сравнивать с балансом на начало операции. В случае корректных остатков разница - это и будет сумма в рублях. Т.к. у меня таких операций мало, я это не использую.
- Особенность, вытекающая из предыдущего пункта: Сбербанк практикует доллары сегодня списать по текущему курсу, а через пару дней скорректировать его по курсу реальной операции. При этом никакой СМС не приходит и обнаружить это можно только отслеживая остатки.
- Иногда приходится давать в долг и получать долги по карте. Эти операции тоже проходят как просто Оплата или Поступление. В итоге не использую документы Долг. =((
- Не контролируется наличка.
Итоги
Я около 3 лет вел 1С Деньги ежедневно собирая и забивая чеки в программу. Потом мне это надоело и я остановился.
Позже, где-то через год я написал это решение и т.к. я не стирал своих СМС, то смог восстановить большую часть всех моих операций.
Сейчас я захожу в 1С Деньги раз в неделю, чтобы разобрать накопившиеся сообщения, которые в большинстве своем разбираются автоматически и не требуют вмешательства. Появляются иногда 2..3 новых магазина. В общем на все про все не более 5 минут. Результат достигнут!
Немного статистики:
- Около 1100 сообщений (5 месяцев)
- Около 50 правил загрузки
- Около 150 "магазинов"
- Всего 6 шаблонов выполняемого кода
Если необходимо, могу поделиться правилами загрузки и шаблонами выполняемого кода.