Импорт платежей

 

1.См. Алгоритм разноски

 

2.Обращаем внимание, что вам искать клиентов и счета не надо. Это сделает процедура разноски платежей. Вам надо вносить данные в промежуточные таблицы.

 

3.Алгоритм такой: к вам пришёл файл, вы его загрузили в промежуточную таблицу, запустили процедуру разноски (процедура разноски просматривает промежуточные таблицы и по этим данным ищет клиентов, договора и создаёт платежи, связывая их со счетами).

 

4.Промежуточные таблицы (их две):

payment_files - содержит имя файла, дату его загрузки, и код платёжной системы. 
  Поля для заполнения (обязательные):
	payment_file_id	-- первичный ключ (использовать payment_files_seq.nextval)
	name		-- имя загружаемого файла
	create_dt	-- дата загрузки (использовать sysdate)
	payment_code	-- Код платежной системы (использовать из таблицы payment_codes.payment_code)
 
payment_file_lines - содержит строки загружаемого файла
  Поля для заполнения:
	payment_file_id -- ссылка на payment_files.payment_file_id
        create_dt	-- Дата платежа (выписки)
	reestr_num	-- Номер платежа (выписки)
	oper_dt		-- Дата операции
	summ		-- Сумма
	doc_dt		-- Дата документа (счёта)
	doc_no		-- № документа (счёта)
	client_code	-- Код клиента
	fio		-- Клиент в платёжной системе (информационное поле)
	contract_code	-- Код договора
	contract	-- Договор в платёжной системе (информационное поле)
	inn		-- ИНН клиента
	rs		-- Р/с клиента
	bik		-- БИК клиента
	account_no	-- Номер бухгалтерского счёта
	payment_info	-- Инормация о платеже
	addr		-- Адрес

Не все перечисленные поля являются обязательными для заполнения. Строго говоря, обязательность и смысл полей определяется процедурой разноски. Более того, набор полей может быть в любой момент расширен.

Существует стандартная процедура разноски платежей, но можно написать собственную (и связать её через код платёжной системы). Алгоритм работы стандартной процедуры описан в разделе Алгоритм разноски.

 

5.Пример SQL-вставок в промежуточные таблицы на PL/SQL:

declare
  file_name_	      varchar2(256);
  payment_file_id_    integer;
  payment_code_       char(1);
begin
  file_name_ := 'imp_1c_to_platex_2009_05_12';    -- имя файла

  -- получаем код платёжной системы по имени. Можно и не получать, а знать заранее.
  select payment_code 
    into payment_code_
    from payment_codes
   where name = '1С';   -- если такой нет, то будет ошибка
  
  -- счётчик для первичного ключа таблицы payment_files
  select payment_files_seq.nextval
    into payment_file_id_
    from dual;
  
  -- шапка файла
  insert into payment_files(payment_file_id, name, create_dt, payment_code)
    values (payment_file_id_, file_name_, sysdate, payment_code_);
  
  -- тело файла
  insert into payment_file_lines(
                  payment_file_id, 
                  create_dt, reestr_num, oper_dt, summ, 
                  doc_dt, doc_no, 
                  client_code, fio, contract_code, contract, 
                  inn, rs, payment_info)
    values (payment_file_id_,
            to_date('12.05.2009', 'DD.MM.YYYY'), '1', to_date('12.05.2009', 'DD.MM.YYYY'), 124.86, 
            to_date('30.04.2009', 'DD.MM.YYYY'), '286', 
            '3412', 'Иванов Сергей Игнатьевич', '5341', '№ 1254 от 10.01.2009 г.', 
            '147198327', '428976843', 'Платёж по счёту');

  --insert into payment_file_lines(..
  --insert into payment_file_lines(..
  --insert into payment_file_lines(..              
end;