| Техническое руководство > Импорт платежей > Алгоритм разноски [●] | « пред. | след. » | 
Разноска платежей работает по такому алгоритму:
•Процедура import_payments.process_file перебирает все строки (из таблицы payment_file_lines) по file_id указанного файла. Для каждой строки вызывается import_payments.process_file_line.
•Процедуры import_payments.process_file и import_payments.process_file_line могут быть вызваны из приложения plPos (там это называется "принудительная обработка").
Т.е. на самом верхнем уровне логики разноски платежей над каждой строкой из payment_file_lines работает процедура import_payments.process_file_line.
Эта процедура работает следующим образом:
Смотрится payment_files.payment_code, по этому коду определяется какой процедурой разносить платежи.
payment_code - это код из справочника "Коды платёжных систем" (из таблицы payment_codes).
Важно, чтобы поле payment_codes.p_method содержало либо DEFAULT, либо имя другой процедуры, если дефолтовая не подходит.
Дефолтовая работает так:
•Из payment_file_lines берутся поля: payment_file_lines.INN и payment_file_lines.RS. По ним определяется клиент (client_id).
•По клиенту смотрится его тип (физическое/юридическое лицо).
•Для юридических лиц:
- определяется балансовый счёт документа (далее - БСД) - account_id. Если у клиента БСД ещё нет, то БСД будет создан. Если у клиента несколько БСД, то на этом разноска строки файла прекращается, у файла прописывается соответствующий флаг, дальнейшая разноска этой строки предлагается пользователю;
- ищется подходящий счёт (по клиенту, БСД, дате и сумме). Если счетов несколько, или подходящих нет - то разноска для данной строки прекращается;
- происходит оплата на счёт вызовом процедуры reg_payment (при этом будет создан платёж и сразу связан со счётом);
- reg_payment сохраняет payment_doc_id (здесь: plx_params.l_last_payment_doc_id), этот payment_doc_id прописывается в payment_file_lines для текущей строки и строка считается успешно разнесённой.
•Для физических лиц:
- разноска прекращается и предлагатся всё сделать пользователю.
Если дефолтовая не подходит, можно написать свою на PL/SQL, у неё должен быть такой формат:
| 
procedure XXXXX(
            rowid_ in varchar,
            payment_code_ in varchar2,
            client_id_ in out integer,
            account_id_ in out integer,
            payment_doc_id_ in out integer,
            process_type_ in out varchar2,
            err_msg_ in out varchar2)
 | 
где:
| XXXXX - название процедуры, именно это название указывается в поле payment_codes.p_method. rowid_ - входной параметр, указатель на строку из таблицы payment_file_lines. payment_code_ - код платёжной системы, его нужно указывать при регистрации платежа в биллинговой системе. | 
Следующие поля могут быть уже определены (это если процедура для данной строки payment_file_lines запускается повторно), однако если они не определены, то их необходимо определить (для ручного управления в будущем):
| client_id_ - ссылка на клиента (clients.client_id) account_id_ - ссылка на балансовы счёт (accounts.account_id) payment_doc_id_ - ссылка на зарегестрированный платёж process_type_ - результат выполнения процедуры (см. ниже) err_msg_ - текстовое описание результата выполнения (для пользователя) 
 | 
Зачтёнными или обработанными считаются те записи, у которых поле payment_doc_id is not null. Если запись зачтена, то import_payments.process_file_line пропускает строку.
| 
  Описание поля process_type:
     ' ' - начальное состояние
     'U' - Процедура разноски платежа не определена
     'C' - Клиент не найден
     'A' - Необходимо выбрать БСД для Юр. лица
     'a' - Необходимо выбрать БС для Физ. лица
     'B' - Платежный документ клиента не найден
     'E' - ошибка при регистрации платежа
     'x' - обработано автоматически (payment_doc_id определён)
     'X' - обработано вручную (payment_doc_id определён)
     '.' - помечене как не относящийся к разноске (пропускаем такие)
 | 
=====================================================================================================
В приложении plPos доступен справочник:
Главное меню:
Справочники \ Справочники -> Платежи \ Коды систем платежей.
В этом справочнике можно заводить любые платёжные системы.