Как организовать автоматическую загрузку банковских выписок из почтового ящика в 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе автоматизации казначейства или бухгалтерского учета часто возникает задача автоматического сбора банковских выписок, которые приходят на электронную почту. Основная сложность заключается не в самом чтении почты, а в правильной организации процесса: как не обрабатывать одно и то же письмо дважды, если мы не хотим удалять его с сервера? Рассмотрим основные подходы к решению этой задачи, проанализируем возможности протоколов и разберем программную реализацию в среде 1С:Предприятие.

Ограничения протокола POP3 и почему он неудобен для маркировки

Протокол POP3 (Post Office Protocol version 3) изначально проектировался по принципу «забрал почту — удалил с сервера». Несмотря на то что современные почтовые клиенты (и объект ИнтернетПочта в 1С) позволяют скачивать письма без удаления, у этого протокола есть критическое ограничение: он не передает и не хранит состояние письма «прочитано» или «обработано» на сервере. Для сервера POP3 каждое обращение — это просто запрос списка доступных файлов.

Если мы вынуждены использовать POP3, то единственный надежный способ не дублировать загрузку выписок — это ведение собственного реестра в базе 1С. Разберем этот алгоритм:

  1. При получении письма мы считываем его уникальный идентификатор (UID), который присваивается сервером. В 1С это свойство Идентификатор объекта ИнтернетПочтовоеСообщение.
  2. Создаем в конфигурации Регистр сведений (например, «ОбработанныеПисьма») с одним измерением «Идентификатор» (строка).
  3. Перед загрузкой вложения проверяем, есть ли такой идентификатор в нашем регистре.
  4. Если идентификатор найден — пропускаем письмо. Если нет — загружаем выписку и записываем ID в регистр.

Однако такой подход требует лишних действий в базе данных 1С и не синхронизируется, если почту смотрит кто-то еще через браузер или другой клиент. Поэтому более правильным решением является использование протокола IMAP.

Переход на IMAP: управление состоянием писем на сервере

Протокол IMAP (Internet Message Access Protocol) гораздо мощнее. Он позволяет работать с письмами непосредственно на сервере: создавать папки, перемещать сообщения и, самое главное, управлять флагами состояния. Для нашей задачи критически важен флаг Seen (Прочитано).

Рассмотрим пример кода, который позволяет получить только новые (непрочитанные) письма. Это исключает необходимость хранить лишние данные в 1С и позволяет серверу самому «фильтровать» контент.


// Настройка параметров отбора
ПараметрыОтбораЗаголовков = Новый Структура;
ПараметрыОтбораЗаголовков.Вставить("Seen", Ложь); // Выбираем только непрочитанные

// Получаем заголовки писем, соответствующих фильтру
Заголовки = Почта.ПолучитьЗаголовки(ПараметрыОтбораЗаголовков);

Если Заголовки.Количество() > 0 Тогда
    МассивСообщений = Почта.Выбрать(Ложь, Заголовки, Истина); // Истина — помечать прочитанными
    
    Для Каждого Сообщение Из МассивСообщений Цикл
        // Проанализируем тему и вложения
        Для Каждого Вложение Из Сообщение.Вложения Цикл
            // Логика обработки файла выписки
            Сообщить("Обработка файла: " + Вложение.Имя);
        КонецЦикла;
    КонецЦикла;
КонецЕсли;

В данном примере метод Выбрать с третьим параметром Истина автоматически установит флаг «Прочитано» на сервере сразу после загрузки сообщения. При следующем сеансе связи 1С эти письма уже не увидит, так как они не пройдут фильтр "Seen", Ложь.

Организация процесса через перемещение в папки

Для еще большей надежности и удобства администрирования (чтобы администратор или бухгалтер мог зайти в ящик и увидеть, что обработано, а что — нет) рекомендуется использовать перемещение писем. Вы можете создать на почтовом сервере папку «Обработано» или «1С_Выписки».

Алгоритм работы в 1С будет выглядеть так:

  1. Подключаемся к папке «INBOX» (Входящие).
  2. Загружаем письма.
  3. После успешной обработки выписки вызываем метод ПереместитьСообщение.

Это «золотой стандарт» автоматизации почты: во входящих всегда пусто или находятся только новые файлы, а все архивы лежат в соответствующих папках на сервере.

Важные нюансы безопасности: Google Gmail и OAuth2

Проанализируем современную ситуацию с безопасностью. Если вы используете Gmail (как автор вопроса), то обычного логина и пароля будет недостаточно. Google блокирует подключения от «менее надежных приложений».

Вариант 1: Пароли приложений. В настройках аккаунта Google нужно включить двухфакторную аутентификацию, а затем создать «Пароль приложения». Именно этот сгенерированный код (16 знаков) нужно вставлять в поле Пароль объекта ИнтернетПочтовыйПрофиль в 1С.

Вариант 2: OAuth2. В современных версиях платформы 1С реализована поддержка OAuth2. Это требует регистрации приложения в консоли Google Cloud, получения Client ID и Client Secret. Для конфигураций на базе БСП (Библиотека стандартных подсистем) настройка выполняется в справочнике «Учетные записи электронной почты» выбором способа аутентификации «OAuth 2.0».

Обработка вложений и оптимизация загрузки

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

  1. Проверка типов: Обязательно проверяйте расширение файла во вложении.
    
    Если Найти(Вложение.Имя, ".zip") > 0 Тогда
        // Распаковываем с помощью ЧтениеZipФайла
    КонецЕсли;
    
  2. Фоновые задания: Никогда не выполняйте получение почты в основном потоке клиента. Используйте РегламентныеЗадания. Это позволит системе работать стабильно, даже если почтовый сервер временно недоступен или письмо содержит тяжелое вложение.
  3. Тайм-ауты: Установите свойство ВремяОжиданияСервера в профиле не менее 60 секунд. Банковские выписки могут быть объемными, и стандартных 30 секунд может не хватить для загрузки по медленным каналам связи.

Подводя итог, можно сказать: использование устаревшего POP3 для задач маркировки сообщений неоправданно усложняет код. Переход на IMAP в сочетании с паролями приложений (для Gmail) и механизмом перемещения писем — это наиболее профессиональное и отказоустойчивое решение для 1С-программиста.

← На главную