Перейти к содержимому
Учи.Онлайн Выбрать школу
Статья

Python для финансиста: выгрузки из 1С и банка, сверки и модель без ручного Excel

Финансисту Python нужен для повторяющейся работы с выгрузками: скрипт читает банковскую выписку и оборотно-сальдовые ведомости из 1С, сопоставляет поступления с выставленными счетами, собирает план-факт из десятков файлов, подтягивает курсы Банка России и прогоняет сценарии модели. Для этого достаточно базового синтаксиса, библиотеки pandas, умения разбирать текстовые форматы обмена и привычки считать деньги в типе Decimal. Каждый результат проверяется контрольными суммами. Excel при этом остаётся там, где модель читает и правит руководитель.

Автор: редакция Учи.ОнлайнОтветственный редактор: Дмитрий Игнатьев
Содержание
Иллюстрация к статье: Python для финансиста: выгрузки из 1С и банка, сверки и модель без ручного Excel

Первая задача, ради которой финансист обычно открывает Python, — закрытие месяца. Нужно взять выписки по трём расчётным счетам, найти для каждого поступления счёт покупателя, отложить частичные оплаты и свести всё в таблицу дебиторской задолженности. Руками это день работы с ВПР и фильтрами каждый месяц. Скрипт делает те же шаги за минуту и записывает, какие платежи не нашли пары.

Где Python экономит время, а где лучше остаться в Excel

Python выигрывает, когда источников много, а правила обработки одинаковые. Типичные случаи: собрать отчёт о движении денежных средств по десяти юрлицам, сверить взаиморасчёты с контрагентом, пересчитать валютную выручку по курсу на дату операции, построить план-факт, где факт приходит из 1С, а план — из файла экономистов. Сюда же относится оценка риска проекта методом Монте-Карло: библиотека NumPy прогоняет десять тысяч сочетаний цены, объёма и сроков и показывает, в какой доле случаев NPV уходит в минус.

Остаться в Excel разумно, если модель разовая, данных немного, а файл после вас будет править финансовый директор: формулы он прочитает, код — вряд ли. Если автоматизация должна жить внутри книги и запускаться кнопкой, ближе VBA. Если бюджет ведёт вся команда одновременно, нужны общие таблицы. Этим инструментам и общему маршруту освоения Python на сайте посвящены отдельные статьи, здесь речь о финансовых данных: форматы, деньги, сверки.

Банковская выписка в формате 1С: не таблица, а список реквизитов

Чаще всего выписка приходит файлом kl_to_1c.txt, который банк-клиент готовит для загрузки в 1С. pd.read_csv здесь не поможет: это не таблица. По описанию стандарта обмена «1С:Предприятие — Клиент банка» на сайте 1С:ИТС файл текстовый, каждая строка имеет вид «Идентификатор=Значение», пробелы перед знаком равенства и после него не допускаются, а данные разбиты на секции, которые открываются и закрываются строками заранее заданного вида. Кодировка настраивается при выгрузке и бывает DOS, Windows или UTF.

Отсюда три вывода. Кодировку читают из заголовка файла: значение DOS означает кодовую страницу cp866, и открытый как cp1251 файл превратится в набор знаков. Суммы в таких файлах записываются через точку, даты — в виде ДД.ММ.ГГГГ: так выглядят примеры в руководстве по обмену «iBank 2» с 1С, где строка «Сумма=12354.00» соседствует с «Дата=10.09.2015». И главное: в секции расчётного счёта банк передаёт начальный остаток, суммы поступлений и списаний и конечный остаток. Это готовая контрольная сумма, которую стоит проверять до любой обработки:

from decimal import Decimal

def read_statement(path):
    raw = open(path, "rb").read()
    enc = "cp866" if b"=DOS" in raw[:300] else "cp1251"
    docs, acc, cur = [], {}, None
    for line in raw.decode(enc).splitlines():
        key, _, val = line.partition("=")
        if key == "СекцияДокумент":
            cur = {"Вид": val}
        elif key == "КонецДокумента":
            docs.append(cur); cur = None
        elif cur is not None:
            cur[key] = val
        elif key in ("НачальныйОстаток", "ВсегоПоступило", "ВсегоСписано", "КонечныйОстаток"):
            acc[key] = Decimal(val)
    assert acc["НачальныйОстаток"] + acc["ВсегоПоступило"] - acc["ВсегоСписано"] == acc["КонечныйОстаток"]
    return docs, acc

Если проверка не проходит, файл обрезан или в выгрузку попал не весь период — это лучше узнать до сверки, а не когда дебиторка не сойдётся с балансом.

Учебный пример: сверка поступлений со счетами

Ситуация учебная. За сентябрь по расчётному счёту пришло 412 платежей от покупателей. Из 1С выгружен реестр выставленных счетов в Excel: номер, дата, ИНН покупателя, сумма. Нужно найти счёт для каждого платежа и разложить результат на три листа: оплачено полностью, частично, пара не найдена.

Сопоставлять по наименованию контрагента нельзя: «ООО „Ромашка“» и «Ромашка ООО» для программы разные строки. Надёжный ключ — ИНН плательщика плюс номер счёта, который скрипт достаёт из назначения платежа регулярным выражением вроде r"сч(?:[её]т[ау]?)?\D{0,5}(\d+)". ИНН и номера счетов читаются как текст (dtype=str), иначе ведущие нули пропадут. Платежи, где номер не нашёлся, сопоставляются по ИНН и точной сумме, а всё остальное уходит на лист ручной проверки.

Проверка строится на равенствах. Число строк на трёх листах вместе равно числу платежей покупателей в выписке. Сумма трёх листов равна строке «ВсегоПоступило» за вычетом прочих поступлений: возвратов от поставщиков, процентов банка, займов. Если равенство нарушено, скрипт останавливается, а не сохраняет красивый, но неверный файл.

Деньги в Decimal, а не во float

Обычные дробные числа Python хранит в двоичном виде, и большинство десятичных дробей представить точно не может. В документации функции round приведён пример: round(2.675, 2) даёт 2,67, а не 2,68. Сложите десять раз по 0,1 — получится 0,9999999999999999. В акте сверки такая копейка стоит часа поисков.

Модуль decimal хранит числа в десятичном виде. Создавать их нужно из строки: Decimal("2.675"), а не Decimal(2.675), иначе в объект перейдёт та же двоичная погрешность с полусотней знаков после запятой. Округление до копеек делается методом quantize(Decimal("0.01")), и здесь есть подвох: по умолчанию контекст округляет «к чётному» (ROUND_HALF_EVEN), так что 2,665 превращается в 2,66. Если в учётной политике принято арифметическое округление, режим ROUND_HALF_UP нужно указать явно. В таблицах pandas деньги удобно хранить в копейках целыми числами, а в Decimal переводить на выходе.

Та же внимательность нужна при загрузке курсов. Ежедневный XML Банка России отдаёт значения с запятой и с номиналом: на 1 октября 2026 года курс иены записан как 53,1038 рубля за 100 иен, а в поле VunitRate — 0,531038 за одну. Кто берёт Value и забывает про Nominal, завышает валютную выручку в сто раз.

Ноутбук Jupyter или скрипт

Jupyter удобен, чтобы разобраться в новой выгрузке: посмотреть строки, найти странные значения, опробовать правило сопоставления. Ежемесячный отчёт лучше перенести в файл .py, который запускается одной командой с параметром периода и всегда выполняется сверху вниз. Исходные выгрузки руками не правятся: исправления живут в коде. Результат сохраняется в Excel через to_excel, и руководитель получает привычный файл.

С чего начать и в каком порядке осваивать

Порядок ведёт от того, что можно проверить глазами, к тому, что работает без вашего участия: сначала вы читаете данные, потом связываете их и лишь затем доверяете скрипту отчёт для руководства.

  1. Базовый синтаксис: переменные, списки, словари, циклы, функции — на примерах с суммами и датами.
  2. Чтение файлов: CSV и Excel из 1С, текстовая выписка в формате обмена, кодировки.
  3. pandas: фильтры, группировка, объединение таблиц, сводная таблица по статьям.
  4. Decimal и проверки: контрольные суммы, assert, сообщения об ошибках.
  5. Внешние данные: курсы ЦБ по API, загрузка за период.
  6. Сценарии и Монте-Карло на NumPy для модели, которая уже работает в Excel.

Пройти эти шаги внутри большой финансовой программы можно на онлайн-курсе Mini-MBA «Цифровой финансовый директор» SF Education: блок Python занимает 53 урока, 18 практических заданий и около 40 часов, отдельно идёт модуль по работе с API на 17,5 часа, а среди результатов названа автоматизация отчётности скриптами. Темы уроков Python не раскрыты, их стоит уточнить у школы. Вся программа длится 12 месяцев.

Открыть курс «Mini-MBA»

Упражнения и типичные ошибки

Возьмите свою выписку за прошлый месяц, обезличьте её и разберите функцией из примера выше. Затем внесите в копию три ошибки: удалите один документ, поменяйте сумму на копейку, продублируйте платёж — и убедитесь, что скрипт ловит каждую. Потом повторите скриптом прошлый план-факт и сравните с утверждённой версией до рубля.

Новички чаще всего складывают суммы во float, читают даты без dayfirst=True (и 03.04 становится 4 марта), сопоставляют контрагентов по названию вместо ИНН, правят исходный файл вручную перед запуском и хранят пароль от банковского API в тексте скрипта.

Если после первых скриптов потянет в анализ данных, нужна программа шире финансов. На онлайн-курсе Skillbox «Data-аналитик + ИИ» Python изучают вместе с Excel и SQL в модуле Data Analyst Junior: работа с файлами, API и базами данных, очистка таблиц, отчёты, витрины данных. Финансовых кейсов среди проектов нет, зато есть витрина данных на Python и SQL; срок — 12 месяцев.

Открыть курс «Профессия Data-аналитик»

Как навык влияет на доход

Отдельной надбавки «за Python» у финансистов в открытых данных нет. В статье hh Карьеры о финансовом аналитике от 25 августа 2025 года приведены вилки по России на 2025 год: 52–60 тыс. ₽ в месяц для специалиста с опытом до двух лет, 90–100 тыс. ₽ при опыте два-четыре года и 180–200 тыс. ₽ для опытных. Методика в статье не раскрыта, данные по регионам не приведены, а Python назван одним из вариантов наравне с SQL, а не обязательным требованием.

Влияние навыка видно по задачам: кто закрывает сверку за час вместо дня, успевает анализировать отклонения и чаще получает работу уровня аналитика или финансового контролёра. Чтобы оценить рынок самостоятельно, сравните на сайте вакансий медианы для своей должности в своём регионе с упоминанием Python и без него: это предложения работодателей, обычно до вычета НДФЛ.

Как выбрать обучение

Если финансовая база уже есть, ищите программу, где Python применяют к отчётности и выгрузкам. Спросите, на каких данных идут задания, разбирают ли форматы российских систем, учат ли проверять результат контрольными суммами и кто смотрит код.

Тем, кому нужен документ о переподготовке и недорогой самостоятельный формат, подойдёт профессиональная переподготовка НЦПО «Аналитик данных»: 256 часов дистанционно, финансисты и экономисты названы среди целевой аудитории, а Python изучают в модуле «Программирование на Python и R» на 36 часов. Темы модуля не раскрыты, проекты на реальных данных не упомянуты, нужен диплом СПО или вуза — детали уточните у школы.

Открыть курс

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

Сравнить школы по цене, практике и поддержке наставника можно в рейтинге онлайн-школ с обучением финансовому моделированию. Он посвящён моделированию в целом, а не Python, поэтому программы с блоком программирования придётся отбирать по описанию.