В первой публикации «Автоматический импорт банковских выписок в SAP с использованием FEB_FILE_HANDLING» был рассмотрен базовый сценарий применения FEB_FILE_HANDLING для автоматического импорта банковских выписок в XML формате, получаемых через сервисы коммуникации с банками. Именно под такой сценарий FEB_FILE_HANDLING изначально спроектирована.
В данной публикации показывается, как использовать функциональные возможности FEB_FILE_HANDLING для импорта текстовых форматов, специфических для стран, в том числе получаемых из систем «Банк-Клиент» через выгрузку файлов. Под этими форматами имеются в виду форматы выписок странового уровня: формат обмена «Клиент -> 1С» для России и Казахстана (с некоторыми различиями) и типы запросов 400 и 600 национальной системы электронных платежей Республики Беларусь, которые, в отличие от международных форматов MT94x, достаточно информационны и не зависят от особенностей заполнения конкретными банками.
Эти свойства формата «Клиент -> 1С» (для России и Казахстана) и типов запросов 400 и 600 (для Беларуси) делает переход на XML‑форматы и использование сервисов коммуникации с банковскими системами не столь обязательным решением и «горящей» задачей для улучшения процессов обработки банковских выписок, например, повышения оперативности получения информации об остатках и операциях на банковских счетах и ускорения разнесения входящих платежей.
Реальным же ограничением использования данных текстовых форматов для улучшения процессов обработки банковских выписок в SAP является устаревшее промежуточное преобразование через Multicash, рассчитанное на уровень технологий более чем 25-летней давности, до сих пор считающееся единственной возможностью импорта в SAP текстовых форматов выписок, специфических для стран.
Цель данной публикации — показать, как использовать FEB_FILE_HANDLING для единого импорта XML и текстовых форматов банковских выписок без промежуточного преобразования через Multicash, для реализации единой точки входа для выписок любых форматов, как поступающих по каналам прямой коммуникации с банковскими системами, так и выгружаемых из систем «Банк‑клиент».
От традиционного импорта текстовых выписок к единой схеме через FEB_FILE_HANDLING
В традиционной схеме импорта выписок в текстовых форматах используется классическая программа RFEBKA00, которая запускается пользователем для отдельных файлов выписок, загруженных на локальные рабочие станции из систем „Банк‑Клиент“. Причем для текстовых форматов, специфических для страны, используется дополнительное преобразование файлов выписки через формат Multicash.
Функциональные возможности FEB_FILE_HANDLING позволяют преобразовывать файлы выписок в текстовых форматах, специфических для стран, во внутренние структуры SAP. При этом, устраняются и дополнительное преобразование через промежуточный формат Multicash, и ручная обработка выписок через программу RFEBKA00: любые текстовые выписки, так же как XML‑выписки, импортируются в систему автоматическим вызовом RFEBKA00.

В результате, импорт банковских выписок через FEB_FILE_HANDLING становится независимым как от источников получения выписок (напрямую из банковских систем через сервисы коммуникации или через файлы из систем «Банк‑клиент»), так и от их форматов (XML и текстовых). В целевой схеме импорта в единую точку входа включаются все источники выписок и все форматы выписок (выписки из любых источников и в любых форматах).
Чтобы реализовать такую «параллельную» обработку XML и текстовых форматов выписок далее рассматривается последовательность обработки выписки в BAdI FEB_BSIMP_BANK_STATEMENT «Processing of Bank Statements», являющемся «ядром» обработки выписок в FEB_FILE_HANDLING.
Обработка банковских выписок в FEB_FILE_HANDLING: роль BAdI FEB_BSIMP_BANK_STATEMENT
Для обработки файлов выписки FEB_FILE_HANDLING последовательно вызывает:
Методы BAdI FEB_BSIMP_FILE «File processing» для определения формата файла выписки �� возможных проверок и файла до его чтения или обработки;
Методы BAdI FEB_BSIMP_BANK_STATEMENT «Processing of Bank Statements» для преобразования файла выписки во внутренние структуры интерфейса SAP и сохранения преобразованной выписки в буфере выписок, то есть в таблицах FEBxx, без интерпретации и проводок;
Программу RFEBKA00 в режиме автоматической обработки сохраненных в буфере выписок.
Непосредственное преобразование файла выписки выполняется в BAdI FEB_BSIMP_BANK_STATEMENT_X, в котором вызываются стандартные внедрения для обработки форматов XML, MT94x и BAI:
FEB_BSIMP_BANK_STATEMENT_X «Format X (XML and Miscellaneous)»;
FEB_BSIMP_BANK_STATEMENT_BAI «Format BAI (A)»;
FEB_BSIMP_BANK_STATEMENT_MT940 «Format MT940 (I, S, G)».
Поскольку для текстовых форматов, специфических для стран, стандартного внедрения нет, для их обработки используется та же последовательность шагов, что и для XML‑форматов во внедрении FEB_BSIMP_BANK_STATEMENT_X, которая далее и рассматривается.

Во внедрении FEB_BSIMP_BANK_STATEMENT_X последовательно вызываются два метода:
Метод GET_BANK_STATEMENTS анализирует содержимое файла, разделяет его на отдельные выписки и определяет банковскую информацию о счете выписки в системе – БЕ, собственный банк, идентификатор счета и т.д.;
Для получения системной информации о банковской выписке из XML-файла вызывается, в свою очередь, BAdI FIEB_GET_BANK_STMTS_X «Processing of Bank Statements in Format X»;
Метод SAVE_BANK_STATEMENTS преобразует содержимое файла во внутренние структуры интерфейса SAP и сохраняет его в буфере выписок, то есть в таблицах FEBxx, без выполнения интерпретации и проводок;
Для сохранения выписок в буфере используются модули FIEB_SAVE_BANK_STMT (для итоговых выписок в область 0001) и FIEB_SAVE_INTRADAY_STMT (для промежуточных выписок в область 0004).
Именно такая последовательность обработки файлов выписок используется далее для прямого преобразования текстовых файлов, специфических для страны, во внутренние структуры SAP, чтобы сразу достичь двух целей:
исключить дополнительное преобразование через Multicash;
унифицировать обработку банковских выписок в BAdI FEB_BSIMP_BANK_STATEMENT.
Прямое преобразование текстовых форматов выписок в структуры интерфейса через DMEE
Для преобразования текстовых файлов в SAP используется инструмент DMEE, применяемый и для обработки формата Multicash (тип дерева MCSH). Чтобы исключить это промежуточное преобразование, нужно создать и использовать новый тип DMEE-дерева, целевыми структурами которого будут внутренние структуры интерфейса выписок, используемые в BAdI FEB_BSIMP_BANK_STATEMENT.
Создание нового типа дерева в данной публикации не описывается, это несложная задача. Ключевые моменты следующие:
В целевой структуре для позиций используются поля с именами из структуры FEBEP_IF (Структура для интерфейса позиций выписки), а для заголовков — из FEBKO_IF (Структура для интерфейса заголовков выписки);
В структуре преобразования позиций следует предусмотреть отдельное поле для назначения платежа, поскольку в DMEE‑дереве могут быть только две целевых структуры (позиции и заголовки).

В итоге, в DMEE‑дереве целевыми полями приложения становятся поля структур интерфейса FEBEP_IF и FEBKO_IF, что позволяет использовать его в методе SAVE_BANK_STATEMENTS для прямого преобразования текстового файла во внутренние структуры интерфейса.
Единая реализация BAdI FEB_BSIMP_BANK_STATEMENT для параллельной обработки разных форматов
Для поддержки параллельной обработки XML форматов, текстовых T94x / BAI и текстовых форматов, специфических для страны создается пользовательская (custom) реализация BAdI FEB_BSIMP_BANK_STATEMENT. В этой реализации вызываются стандартные методы для форматов XML, MT94x, BAI и пользовательские методы для обработки текстовых форматов, специфических для страны.
Это обеспечивает параллельную обработку различных форматов выписки с единой последовательностью импорта, преобразования и последующей автоматической обработки через RFEBKA00, показанную на следующей схеме (рис. 4).

В методе GET_BANK_STATEMENTS:
Для XML-файлов просто вызывается стандартный метод GET_BANK_STATEMENTS реализации BAdI FIEB_GET_BANK_STMTS_X;
Для текстовых файлов используется пользовательский метод, обозначенный как SPLIT_AND_PARSE_TXT_FILES, который анализирует строки файла, разделяет его на отдельные логические выписки и определяет банковскую информацию о счете выписки в системе – БЕ, собственный банк, идентификатор счета и т.д., аналогично предварительному парсингу XML-файла выписки в BAdI FIEB_GET_BANK_STMTS_X.
Результатом метода GET_BANK_STATEMENTS является преобразование внешних файлов в логические файлы выписки, состоящие из заголовка с информацией о банковском счете в системе и таблицы строк содержимого внешнего файла.
С точки зрения параллельной обработки разных форматов особенностью метода SAVE_BANK_STATEMENTS является то, что он выполняет и преобразование логических файлов выписок во внутренние структуры интерфейса и сохранение этих выписок в буфере данных (таблицах FEB++).
Поэтому единая реализация метода SAVE_BANK_STATEMENTS:
«параллельно» преобразует логические файлы выписок в зависимости от формата:
Для форматов XML последовательно вызываются модули трансформации FIEB_READ_MAPP_X и FIEB_MAPPING_X, также используемые в реализации BAdI FIEB_GET_BANK_STMTS_X;
Для текстовых форматов вызывается пользовательский метод, обозначенный как CALL_DMEE_CONVERT, в котором реализуется вызов стандартного основного модуля конвертации DMEE_PROCESS_INCOMING_FILE_ABA и вызовы методов DMEE обработки входящих файлов PROCESS_INPUT_DME (до модуля конвертации) и PROCESS_OUTPUT_DME (после модуля конвертации).
Результатом метода SAVE_BANK_STATEMENTS является преобразованные выписки в единой внутренней структуре интерфейса (структуры FEBxx_IF), независимо от внешнего формата выписки.
Сохраняет выписки в буфере данных через общий метод, обозначенный как FEB_SAVE_BANK_STATEMENT, для любого формата выписки.
В зависимости от параметров проводки выписки вызываются модуль FIEB_SAVE_BANK_STMT (для импорта итоговых выписок с проводкой в область 0001) и модуль FIEB_SAVE_INTRADAY_STMT (для импорта промежуточных выписок без проводки в область 0004) из стандартного внедрения FEB_BSIMP_BANK_STATEMENT_X.
В результате все форматы выписок преобразовываются в единые структуры интерфейса FEB*IF, аналогично стандартным реализациям BAdI FEB_BSIMP_BANK_STATEMENT для форматов XML, MT94x и BAI, и сохраняются в одних таблицах FEB++ (сохранение выписки в буфере), что позволяет использовать единый последующий процесс автоматической обработки в программе RFEBKA00.
Для построения целевой схемы импорта выписок осталось только вызывать FEB_FILE_HANDLING для файлов выписок, размещенных на локальных станциях.
Программа вызова FEB_FILE_HANDLING для загрузки файлов выписок с локальных станций
Как отмечалось в первой публикации, стандартная функциональность FEB_FILE_HANDLING ориентирована на работу с файлами, уже размещёнными в каталогах сервера приложений SAP. Чтобы сделать FEB_FILE_HANDLING единой точкой импорта и для файлов, получаемых на локальные рабочие станции, разрабатывается простая «надстроечная» программа, вызывающая FEB_FILE_HANDLING для указанного файла выписки.
Такая программа превращает FEB_FILE_HANDLING в действительно единую точку входа импорта выписок — независимо от того, где физически расположен файл: на сервере приложений или на локальной рабочей станции. Для этого «надстроечная» программа загружает файл выписки на сервер приложений и вызывает для него программу FEB_FILE_HANDLING, точнее её локальный метод main, реализующий основной алгоритм обработки выписки.
В качестве параметров можно использовать параметры FEB_FILE_HANDLING, включая логический путь импорта, поэтому базовая реализация такой программы не представляет сложности.
Однако при большом количестве банковских счетов и, соответственно, логических путей имеет смысл усложнить «надстроечную» программу, чтобы логический путь выбирался автоматически на основе информации из файла выписки (по результатам предварительного парсинга файла выписки).
В этом случае на экране выбора для пользователя остаётся только параметр файла выписки: выбор формата и параметров обработки выполняется автоматически. Фактически «программа вызова FEB_FILE_HANDLING» заменяет традиционную RFEBKA00, но на новом уровне автоматизации, когда от пользователя требуется лишь выбрать файл выписки.

Данная «надстроечная» программа может использоваться и для продуктивного ввода выписок, и для тестирования и отладки импорта выписок через сервисы коммуникации с прямым подключением к банковским системам, поскольку собственно импорт выписки в систему выполняется через одну функциональность FEB_FILE_HANDLING с автоматическим вызовом RFEBKA00.
Для упрощения ввода данных в последующих сценариях для импорта выписок используется данная «надстроечная» программа вызова FEB_FILE_HANDLING.
Сценарий 2. Импорт банковской выписки в текстовом формате через FEB_FILE_HANDLING
В этом сценарии загружается «периодическая» выписка в текстовом формате «Клиент -> 1С» за несколько дней. Такой подход удобен для банковских счетов с небольшим количеством операций: вместо частой проверки наличия операций и импорта выписок за каждый день выполняется более редкий, но приемлемый по частоте импорт сразу всех операций по банковскому счету за период. Это может привести к сокращению до 80% трудозатрат по работе с системами «Банк-клиент» для банковским счетов с небольшим количеством операций (по правилу 20 / 80).

1.Импорт банковской выписки с сервера приложений
Транзакция: программа вызова FEB_FILE_HANDLING
На экране выбора программе вызова выбирается только файл выписки.

Опции управления выводом соответствуют классической RFEBKA00; в рамках данного сценария они не рассматриваются. Параметры проводки задаются в настройке Define Posting Parameters, а не на экране выбора.
При запуске программы выполняется импорт файла, автоматическая обработка выписки через RFEBKA00 и, в зависимости от параметров проводки, проводка банковской выписки в учете. По завершении импорта формируется журнал сообщений с результатами загрузки и проводки выписки (ошибки, предупреждения, информация о созданных документах):

2.Просмотр позиций банковской выписки
Транзакция: FEB_FEB_BSPROC / FEBAN
На заключительном шаге сценария проведенные позиции выписки просматриваются в транзакции постобработки FEB_FEB_BSPROC / FEBAN:

На примере «периодической» выписки за несколько дней следует обратить внимание, что дата выписки в заголовке и различные даты в позициях выписки (Дата проводки в банке = Дата документа, Дата валютирования, Дата проводки) заполняются по разным правилам и могут получать разные значения. Установка корректного соответствия этих дат с атрибутами файлов выписок критично для процессов обработки выписок, но выходит за рамки данной публикации.
В заголовке выписки FEBKO также есть даты начала и конца периода выписки, но эти поля носят справочный характер.
Заключение
В этой публикации рассмотрено техническое решение, позволяющее использовать функциональные возможности FEB_FILE_HANDLING для единой обработки банковских выписок как в XML‑форматах, так и в текстовых форматах "Клиент -> 1C" (для России и Беларуси), "тип запроса 400 / 600" (для Беларуси). Текстовые форматы напрямую преобразуются во внутренние структуры FEB*IF без промежуточного преобразования через Multicash, а единая последовательность обработки через FEB_FILE_HANDLING с автоматическим вызовом RFEBKA00 делает импорт выписок независимым от каналов связи с банками и форматов файлов.
Добавление «надстроечной» программы вызова FEB_FILE_HANDLING для файлов выписок с локальных станций позволяет как тестировать и отлаживать импорт выписок через сервисы коммуникации без продуктивного подключения к банковским системам, так и использовать FEB_FILE_HANDLING вместо традиционной программы RFEBKA00 для продуктивной обработки банковских выписок финансовыми подразделениями.
Такая архитектура делает описанное решение по импорту банковских выписок независящим от особенностей взаимодействия с банками для импорта выписок и используемых форматов выписок. Это позволяет осознанно оценивать необходимость миграции на сервисы прямой коммуникации с банковскими системами, поскольку всегда сохраняется альтернатива — использовать более простой импорт файлов из систем «Банк‑Клиент».
При этом для импорта промежуточных (intraday) выписок в течение дня можно использовать любой доступный формат выписки, включая вышеперечисленные текстовые форматы, а не только специальные форматы (camt.052, mt942 и др.), чему будут посвящены следующие публикации.
