Загрузка данных
DECLARE
rec_outgoing_order record;
rec_payment record;
v_id_operation INTEGER;
v_successe_list text := '';
v_error_list text := '';
v_web_base text;
v_row_succeses_count integer := 0;
v_row_error_count integer := 0;
v_group integer;
v_agent_id integer;
-- v_total_value integer := 0;
-- v_operation_code text;
v_debit_mnemonics text[];
v_credit_mnemonics text[];
v_array_length integer;
v_transaction_ids integer[];
v_current_debit text;
v_current_credit text;
v_mnemonics_pair record;
v_debit_balances numeric[];
v_available_balance numeric;
v_current_balance numeric;
v_accrual_operation_id integer := null;
v_is_post_payment boolean := false;
v_full_credit_ammount numeric;
v_messing_mnemonics text;
v_proportion numeric;
v_already_used numeric;
v_remaining_amount numeric;
v_is_successe boolean;
v_is_error boolean;
v_pension_calculation_id integer;
v_termination_contract_calculation_id integer;
BEGIN
/******************************************************************************
* Получаем v_agent_id если запущено из интерфейса, p_user_id не NULL
*/-------------------------
select
t.group_recipient_id,
s.web_base,
a.id
INTO v_group, v_web_base, v_agent_id
FROM back_office.history_params_payment_register t
left join tools.settings s on true
left join ourpension.agent a on a.user_id = p_user_id
where is_active = true;
/******************************************************************************
* Получаем v_agent_id если запущено из Crone - роботом
*/
-------------------------
if p_user_id is null then
select a.id INTO v_agent_id from robot.params p
join "security"."USER" u on u.username = p.value
join ourpension.agent a on a.user_id = u.id
where p.name='login';
end if;
RAISE NOTICE 'Получаем платежки';
for rec_outgoing_order in
/******************************************************************************
* Получаем Загруженные и не обработанные или частично обработанные с типом НПО ПДС
*/-------------------------
select o.id as id,
o.number as number,
o.date as date,
o.value as value,
pr.type_register as type_register,
pr.payment_type_id as payment_type_id,
pr.id as payment_register_id,
o.service_type as service_type,
o.payment_register_id as payment_register_id
from back_office.outgoing_order o
left join back_office.outgoing_order_operation oo on oo.outgoing_order_id = o.id
left join back_office.payment_register pr on pr.id = o.payment_register_id
-- left join ourpension.fund_bank_payment_type pt on pt.id = pr.payment_type_id
where o.payment_upload_date is not null and coalesce(oo.value, 0.0) < o.value and o.service_type in ('NPO', 'PDS')
order by o.id
for update of o SKIP LOCKED
loop
-- создать операцию
v_is_successe := false;
v_is_error := false;
for rec_payment in
select p.id as id,
p.accrual_pension_id as accrual_pension_id,
p.accrual_repurchase_id as accrual_repurchase_id,
p.topay as topay,
p.total_topay as total_topay,
/******************************************************************************
* Получаем Тип решения и Код операции - для этого решения
*/
-------------------------
min(coalesce(dpt.group_code, dpt1.group_code)) as decision_group_code ,
min(coalesce(dpt.operation_code, dpt1.operation_code)) as operation_code,
/******************************************************************************
* Получаем Тип счета СПС КИПС ИПС
*/-------------------------
sp.sharer_type as sharer_type,
s.id as sharer_id
from back_office.payment p
left join back_office.accrual_detail ad on ad.id = p.accrual_pension_id
left join back_office.accrual_repurchase_amount_payments_details pd on pd.id = p.accrual_repurchase_id
left join back_office.pension_calculation pc on pc.id = ad.pension_calculation_id
left join back_office.termination_contract_calculation tc on tc.id = pd.termination_contract_calculation_id
left join ourpension.npo_decision_payment_type dpt on dpt.code = pc.npo_decision_payment_type_code
left join ourpension.npo_decision_payment_type dpt1 on dpt1.code = tc.decision_payment_type_code
left JOIN ourpension.sharer s ON s.id = p.sharer_id
left JOIN ourpension.sharer_params sp ON sp.sharer_id = s.id
where p.outgoing_order_number = rec_outgoing_order.number
and p.payment_register_id = rec_outgoing_order.payment_register_id and p.completed is null and p.operation_id is null
group by p.id, p.accrual_pension_id, p.accrual_repurchase_id, p.topay, p.total_topay, sp.sharer_type, s.id
loop
BEGIN
v_messing_mnemonics := '';
v_available_balance := 0;
v_debit_balances := ARRAY[]::numeric[];
v_debit_mnemonics := ARRAY[]::text[];
v_credit_mnemonics := ARRAY[]::text[];
/******************************************************************************
* Код операции для Удержаний - RETENTION
*/
-------------------------
IF rec_outgoing_order.type_register = 'RETENTION' THEN
rec_payment.operation_code := CASE rec_outgoing_order.service_type
WHEN 'NPO' THEN 'NPO_WITHHOLDING_UNDER_WRIT_EXECUTION'
WHEN 'PDS' THEN 'PDS_WITHHOLDING_UNDER_WRIT_EXECUTION'
ELSE NULL
END;
END IF;
/******************************************************************************
* Код операции для НДФЛ - NDFL
*/-------------------------------------------------------------------------------
IF rec_outgoing_order.type_register = 'NDFL' THEN
rec_payment.operation_code := CASE
WHEN rec_outgoing_order.service_type = 'PDS' AND rec_payment.decision_group_code = 'СПВ_ПДС' THEN 'PDS_NDFL_PERIODIC_PAYMENT'
WHEN rec_outgoing_order.service_type = 'PDS' AND rec_payment.decision_group_code = 'ЕВ' THEN 'PDS_NDFL_LUMP_SUM_PAYMENT'
WHEN rec_outgoing_order.service_type = 'PDS' AND rec_payment.decision_group_code = 'ПЖ_ПДС' THEN 'PDS_NDFL_PENSION_PAYMENT'
WHEN rec_outgoing_order.service_type = 'PDS' AND rec_payment.decision_group_code IN ('ВС_ВЗ', 'ВС_ПВ_ПДС', 'ДОП_ПП_ПДС', 'ВС_ПП_ПДС' ) THEN 'PDS_NDFL_REDEMPTION_PAYMENT'
WHEN rec_outgoing_order.service_type = 'PDS' AND rec_payment.decision_group_code IN ('ОЖС') THEN 'PDS_NDFL_REDEMPTION_REDEMPTION_LOSS'
WHEN rec_outgoing_order.service_type = 'NPO' AND rec_payment.decision_group_code IN ('ДОП_ПП_НПО', 'ВС_ПП_НПО', 'ВС_ПВ_НПО', 'ВС_РЖ' ) THEN 'NPO_NDFL_PAYMENT_TERMINATED'
WHEN rec_outgoing_order.service_type = 'NPO' AND rec_payment.decision_group_code IN ('ПЖ_НПО', 'СПВ_НПО', 'ДИ' ) THEN 'NPO_NDFL_NONSTATE_PENSION'
ELSE NULL
END;
END IF;
IF rec_payment.operation_code is NULL THEN
RAISE EXCEPTION 'Не удалось определить тип операции';
END IF;
--v_debit_mnemonics := ARRAY[]::text[];
--v_credit_mnemonics := ARRAY[]::text[];
IF rec_outgoing_order.service_type = 'PDS' THEN
IF rec_outgoing_order.type_register = 'NDFL' THEN
v_credit_mnemonics := ARRAY[NULL]::text[];
v_debit_mnemonics := CASE
WHEN rec_payment.decision_group_code = 'СПВ_ПДС' THEN ARRAY['В НДФЛ ПДС СВ']
WHEN rec_payment.decision_group_code = 'ЕВ' THEN ARRAY['В НДФЛ ПДС ЕВ']
WHEN rec_payment.decision_group_code = 'ПЖ_ПДС' THEN ARRAY['В НДФЛ ПДС ПВ']
WHEN rec_payment.decision_group_code IN (
'ВС_ВЗ' ,
'ВС_ПВ_ПДС' ,
'ВС_ПП_ПДС' ,
'ДОП_ПП_ПДС'
) THEN ARRAY['В НДФЛ ПДС ВС СВ']
WHEN rec_payment.decision_group_code = 'ОЖС' THEN ARRAY['В НДФЛ ПДС ВС ОЖС ПК']
ELSE ARRAY[]::text[]
END;
ELSIF rec_outgoing_order.type_register = 'RETENTION' THEN
v_credit_mnemonics :=ARRAY[NULL]::text[];
v_debit_mnemonics := ARRAY['В ИЛ ПДС'];
ELSE
v_credit_mnemonics := CASE rec_payment.decision_group_code
WHEN 'ЕВ' THEN ARRAY[
'В Р(Е) ПДС СВ',
'В Р(Е) ПДС СВ ИД',
'В Р(Е) ПДС ЕВ',
'В Р(Е) ПДС ЕВ ИД',
'В Р(Е) ПДС СОФ',
'В Р(Е) ПДС СОФ ИД',
'В Р(Е) ПДС СВ_Р',
'В Р(Е) ПДС СВ_РИД'
]
WHEN 'СПВ_ПДС' THEN ARRAY[
'В Р(С) ПДС СВ',
'В Р(С) ПДС СВ ИД',
'В Р(С) ПДС ЕВ',
'В Р(С) ПДС ЕВ ИД',
'В Р(С) ПДС СОФ',
'В Р(С) ПДС СОФ ИД',
'В Р(С) ПДС СВ_Р',
'В Р(С) ПДС СВ_РИД'
]
WHEN 'ПЖ_ПДС' THEN ARRAY[
'В Р(П) ПДС СВ',
'В Р(П) ПДС СВ ИД',
'В Р(П) ПДС ЕВ',
'В Р(П) ПДС ЕВ ИД',
'В Р(П) ПДС СОФ',
'В Р(П) ПДС СОФ ИД',
'В Р(П) ПДС СВ_Р',
'В Р(П) ПДС СВ_РИД'
]
WHEN 'ВС_ВЗ' THEN ARRAY[
'В Р(ВС) ПДС СВ ИД',
'В Р(ВС) ПДС СВ'
]
WHEN 'ВС_ПВ_ПДС' THEN ARRAY[
'В Р(ВС_НПФ) ПДС СВ' ,
'В Р(ВС_НПФ) ПДС СВ ИД',
'В Р(ВС_НПФ) ПДС СВ_Р',
'В Р(ВС_НПФ) ПДС СВ_Р ИД',
'В Р(ВС_НПФ) ПДС ЕВ',
'В Р(ВС_НПФ) ПДС ЕВ ИД',
'В Р(ВС_НПФ) ПДС СОФ',
'В Р(ВС_НПФ) ПДС СОФ ИД'
]
WHEN 'ОЖС' THEN ARRAY[
'В Р(ВС_НПФ) ПДС СВ' ,
'В Р(ВС_НПФ) ПДС СВ ИД',
'В Р(ВС_НПФ) ПДС СВ_Р',
'В Р(ВС_НПФ) ПДС СВ_Р ИД',
'В Р(ВС_НПФ) ПДС ЕВ',
'В Р(ВС_НПФ) ПДС ЕВ ИД',
'В Р(ВС_НПФ) ПДС СОФ',
'В Р(ВС_НПФ) ПДС СОФ ИД'
]
WHEN 'ВС_ПП_ПДС' THEN ARRAY[
'В Р(ПП) ПДС СВ',
'В Р(ПП) ПДС СВ ИД',
'В Р(ПП) ПДС СВ_Р',
'В Р(ПП) ПДС СВ_Р ИД',
'В Р(ПП) ПДС ЕВ',
'В Р(ПП) ПДС ЕВ ИД',
'В Р(ПП) ПДС СОФ',
'В Р(ПП) ПДС СОФ ИД'
]
WHEN 'ДОП_ПП_ПДС' THEN ARRAY[
'В Р(ПП) ПДС СВ',
'В Р(ПП) ПДС СВ ИД',
'В Р(ПП) ПДС СВ_Р',
'В Р(ПП) ПДС СВ_Р ИД',
'В Р(ПП) ПДС ЕВ',
'В Р(ПП) ПДС ЕВ ИД',
'В Р(ПП) ПДС СОФ',
'В Р(ПП) ПДС СОФ ИД'
]
ELSE ARRAY[]::text[]
END; -- CASE
v_debit_mnemonics := CASE rec_payment.decision_group_code
WHEN 'ЕВ' THEN ARRAY[
'НВ Р(ЕВ) ПДС СВ',
'НВ Р(ЕВ) ПДС СВ ИД',
'НВ Р(ЕВ) ПДС ЕВ',
'НВ Р(ЕВ) ПДС ЕВ ИД',
'НВ Р(ЕВ) ПДС СОФ',
'НВ Р(ЕВ) ПДС СОФ ИД',
'НВ Р(ЕВ) ПДС СВ_Р',
'НВ Р(ЕВ) ПДС СВ_РИД'
]
WHEN 'СПВ_ПДС' THEN ARRAY[
'НВ Р(С) ПДС СВ',
'НВ Р(С) ПДС СВ ИД',
'НВ Р(С) ПДС ЕВ',
'НВ Р(С) ПДС ЕВ ИД',
'НВ Р(С) ПДС СОФ',
'НВ Р(С) ПДС СОФ ИД',
'НВ Р(С) ПДС СВ_Р',
'НВ Р(С) ПДС СВ_РИД'
]
WHEN 'ПЖ_ПДС' THEN ARRAY[
'НВ Р(П) ПДС СВ',
'НВ Р(П) ПДС СВ ИД',
'НВ Р(П) ПДС ЕВ',
'НВ Р(П) ПДС ЕВ ИД',
'НВ Р(П) ПДС СОФ',
'НВ Р(П) ПДС СОФ ИД',
'НВ Р(П) ПДС СВ_Р',
'НВ Р(П) ПДС СВ_РИД'
]
WHEN 'ВС_ВЗ' THEN ARRAY[
'НВ Р(ВС) ПДС СВ ИД',
'НВ Р(ВС) ПДС СВ'
]
WHEN 'ВС_ПВ_ПДС' THEN ARRAY[
'НВ Р(ВС_НПФ) ПДС СВ' ,
'НВ Р(ВС_НПФ) ПДС СВ ИД',
'НВ Р(ВС_НПФ) ПДС СВ_Р',
'НВ Р(ВС_НПФ) ПДС СВ_Р ИД',
'НВ Р(ВС_НПФ) ПДС ЕВ',
'НВ Р(ВС_НПФ) ПДС ЕВ ИД',
'НВ Р(ВС_НПФ) ПДС СОФ',
'НВ Р(ВС_НПФ) ПДС СОФ ИД'
]
WHEN 'ОЖС' THEN ARRAY[
'НВ Р(ВС_ОЖС) ПДС СВ' ,
'НВ Р(ВС_ОЖС) ПДС СВ ИД',
'НВ Р(ВС_ОЖС) ПДС СВ_Р',
'НВ Р(ВС_ОЖС) ПДС СВ_Р ИД',
'НВ Р(ВС_ОЖС) ПДС ЕВ',
'НВ Р(ВС_ОЖС) ПДС ЕВ ИД',
'НВ Р(ВС_ОЖС) ПДС СОФ',
'НВ Р(ВВС_ОЖС) ПДС СОФ ИД'
]
WHEN 'ВС_ПП_ПДС' THEN ARRAY[
'НВ Р(ПП) ПДС СВ',
'НВ Р(ПП) ПДС СВ ИД',
'НВ Р(ПП) ПДС СВ_Р',
'НВ Р(ПП) ПДС СВ_Р ИД',
'НВ Р(ПП) ПДС ЕВ',
'НВ Р(ПП) ПДС ЕВ ИД',
'НВ Р(ПП) ПДС СОФ',
'НВ Р(ПП) ПДС СОФ ИД'
]
WHEN 'ДОП_ПП_ПДС' THEN ARRAY[
'НВ Р(ПП) ПДС СВ',
'НВ Р(ПП) ПДС СВ ИД',
'НВ Р(ПП) ПДС СВ_Р',
'НВ Р(ПП) ПДС СВ_Р ИД',
'НВ Р(ПП) ПДС ЕВ',
'НВ Р(ПП) ПДС ЕВ ИД',
'НВ Р(ПП) ПДС СОФ',
'НВ Р(ПП) ПДС СОФ ИД'
]
ELSE ARRAY[]::text[]
END;
END IF; -- В ПДС - NDFL , Удержание, Обычные выплаты
ELSIF rec_outgoing_order.service_type = 'NPO' THEN
IF rec_outgoing_order.type_register = 'NDFL' THEN
v_debit_mnemonics := ARRAY[NULL]::text[];
v_credit_mnemonics := CASE
WHEN rec_payment.decision_group_code IN ('ПЖ_НПО', 'СПВ_НПО', 'ДИ') THEN ARRAY['В НДФЛ']
WHEN rec_payment.decision_group_code IN ('ВС_ПВ_НПО', 'ВС_РЖ', 'ДИ') THEN ARRAY['В НДФЛ ВС']
ELSE ARRAY[]::text[]
END;
ELSIF rec_outgoing_order.type_register = 'RETENTION' THEN
v_debit_mnemonics :=ARRAY[NULL]::text[];
v_credit_mnemonics :=
CASE
WHEN rec_payment.sharer_type is not null and rec_payment.sharer_type = 'IPS' THEN ARRAY['В ИЛ ИПС']
WHEN rec_payment.sharer_type is not null and rec_payment.sharer_type = 'SPS_U' THEN ARRAY['В ИЛ СПС']
WHEN rec_payment.sharer_type is not null and rec_payment.sharer_type = 'KIPS' THEN ARRAY['В ИЛ ИПС ЮЛ']
END;
ELSE -- обычные выплаты
IF rec_payment.decision_group_code IN ('СПВ_НПО', 'ДИ') THEN
v_credit_mnemonics := CASE
WHEN rec_payment.sharer_type IS NOT NULL AND rec_payment.sharer_type = 'SPS_U' THEN ARRAY['В Р(С) СПС', 'В Р(С) СПС ИД']
WHEN rec_payment.sharer_type IS NOT NULL AND rec_payment.sharer_type = 'KIPS' THEN ARRAY['В Р(С) ИПС ЮЛ', 'В Р(С) ИПС ЮЛ ИД']
WHEN rec_payment.sharer_type IS NOT NULL AND rec_payment.sharer_type = 'IPS' THEN ARRAY['В Р(С) ИПС ФЛ', 'В Р(С) ИПС ФЛ ИД']
END;
v_debit_mnemonics := CASE
WHEN rec_payment.sharer_type IS NOT NULL AND rec_payment.sharer_type = 'SPS_U' THEN ARRAY['НВ Р(С) СПС', 'НВ Р(С) СПС ИД']
WHEN rec_payment.sharer_type IS NOT NULL AND rec_payment.sharer_type = 'KIPS' THEN ARRAY['НВ Р(С) ИПС ЮЛ', 'НВ Р(С) ИПС ЮЛ ИД']
WHEN rec_payment.sharer_type IS NOT NULL AND rec_payment.sharer_type = 'IPS' THEN ARRAY['НВ Р(С) ИПС ФЛ', 'НВ Р(С) ИПС ФЛ ИД']
END;
ELSIF rec_payment.decision_group_code = 'ПЖ_НПО' THEN -- Пожизненная
v_credit_mnemonics := CASE
WHEN rec_payment.sharer_type IS NOT NULL AND rec_payment.sharer_type = 'SPS_U' THEN ARRAY['В Р(П) СПС', 'В Р(П) СПС ИД']
WHEN rec_payment.sharer_type IS NOT NULL AND rec_payment.sharer_type = 'KIPS' THEN ARRAY['В Р(П) ИПС ЮЛ', 'В Р(П) ИПС ЮЛ ИД']
WHEN rec_payment.sharer_type IS NOT NULL AND rec_payment.sharer_type = 'IPS' THEN ARRAY['В Р(П) ИПС ФЛ', 'В Р(П) ИПС ФЛ ИД']
END;
v_debit_mnemonics := CASE
WHEN rec_payment.sharer_type IS NOT NULL AND rec_payment.sharer_type = 'SPS_U' THEN ARRAY['НВ Р(П) СПС', 'НВ Р(П) СПС ИД']
WHEN rec_payment.sharer_type IS NOT NULL AND rec_payment.sharer_type = 'KIPS' THEN ARRAY['НВ Р(П) ИПС ЮЛ', 'НВ Р(П) ИПС ЮЛ ИД']
WHEN rec_payment.sharer_type IS NOT NULL AND rec_payment.sharer_type = 'IPS' THEN ARRAY['НВ Р(П) ИПС ФЛ', 'НВ Р(П) ИПС ФЛ ИД']
END;
ELSIF rec_payment.decision_group_code IN ('ВС_РЖ', 'ВС_ПВ_НПО') THEN -- Полное расторжение и перевод в другой фонд
v_credit_mnemonics := CASE
WHEN rec_payment.sharer_type IS NOT NULL AND rec_payment.sharer_type = 'SPS_U' THEN ARRAY['В Р(ВС) СПС', 'В Р(ВС) СПС ИД']
WHEN rec_payment.sharer_type IS NOT NULL AND rec_payment.sharer_type = 'KIPS' THEN ARRAY['В Р(ВС) ИПС ЮЛ', 'В Р(ВС) ИПС ЮЛ ИД']
WHEN rec_payment.sharer_type IS NOT NULL AND rec_payment.sharer_type = 'IPS' THEN ARRAY['В Р(ВС) ИПС ФЛ', 'В Р(ВС) ИПС ФЛ ИД']
END;
v_debit_mnemonics := CASE
WHEN rec_payment.sharer_type IS NOT NULL AND rec_payment.sharer_type = 'SPS_U' THEN ARRAY['НВ Р(ВС) СПС', 'НВ Р(ВС) СПС ИД']
WHEN rec_payment.sharer_type IS NOT NULL AND rec_payment.sharer_type = 'KIPS' THEN ARRAY['НВ Р(ВС) ИПС ЮЛ', 'НВ Р(ВС) ИПС ЮЛ ИД']
WHEN rec_payment.sharer_type IS NOT NULL AND rec_payment.sharer_type = 'IPS' THEN ARRAY['НВ Р(ВС) ИПС ФЛ', 'НВ Р(ВС) ИПС ФЛ ИД']
END;
ELSIF rec_payment.decision_group_code IN ('ВС_ПП_НПО', 'ДОП_ПП_НПО') THEN -- Выплата ПП наследнику
v_credit_mnemonics := CASE
WHEN rec_payment.sharer_type IS NOT NULL AND rec_payment.sharer_type = 'SPS_U' THEN ARRAY['В Р(ПП) СПС', 'В Р(ПП) СПС ИД']
WHEN rec_payment.sharer_type IS NOT NULL AND rec_payment.sharer_type = 'KIPS' THEN ARRAY['В Р(ПП) ИПС ЮЛ', 'В Р(ПП) ИПС ЮЛ ИД']
WHEN rec_payment.sharer_type IS NOT NULL AND rec_payment.sharer_type = 'IPS' THEN ARRAY['В Р(ПП) ИПС ФЛ', 'В Р(ПП) ИПС ФЛ ИД']
END;
v_debit_mnemonics := CASE
WHEN rec_payment.sharer_type IS NOT NULL AND rec_payment.sharer_type = 'SPS_U' THEN ARRAY['НВ Р(ПП) СПС', 'НВ Р(ПП) СПС ИД']
WHEN rec_payment.sharer_type IS NOT NULL AND rec_payment.sharer_type = 'KIPS' THEN ARRAY['НВ Р(ПП) НПО ИПС ЮЛ', 'НВ Р(ПП) НПО ИПС ЮЛ ИД']
WHEN rec_payment.sharer_type IS NOT NULL AND rec_payment.sharer_type = 'IPS' THEN ARRAY['НВ Р(ПП) НПО ИПС ФЛ', 'НВ Р(ПП) НПО ИПС ФЛ ИД']
END;
ELSE
v_credit_mnemonics := ARRAY[]::text[];
v_debit_mnemonics := ARRAY[]::text[];
END IF;
END IF; -- В NPO - NDFL , Удержание, Обычные выплаты
END IF; -- PDS или NPO
-- Проверяем что массивы не пустые и одинаковой длины
v_array_length := array_length(v_debit_mnemonics, 1);
-- RAISE NOTICE 'decision_group_code: %', rec_payment.decision_group_code;
-- RAISE NOTICE 'operation_code: %', rec_payment.operation_code;
-- RAISE NOTICE 'rec_outgoing_order.type_register: %', rec_outgoing_order.type_register;
-- RAISE NOTICE 'rec_payment.id: %', rec_payment.id;
-- RAISE NOTICE 'rec_payment.sharer_type: %', rec_payment.sharer_type;
-- RAISE NOTICE 'rec_outgoing_order.service_type: %', rec_outgoing_order.service_type;
-- RAISE NOTICE 'v_debit_mnemonics: %', v_debit_mnemonics;
-- RAISE NOTICE 'v_credit_mnemonics: %', v_credit_mnemonics;
IF v_debit_mnemonics IS NULL OR v_credit_mnemonics IS NULL THEN
RAISE EXCEPTION 'Один из массивов дебита/кредита не определён';
END IF;
IF v_array_length IS NULL OR v_array_length = 0 OR v_array_length <> array_length(v_credit_mnemonics, 1) THEN
RAISE EXCEPTION 'Не верно определены массивы дебита и кредита';
END IF;
--================== ПОЛУЧАЕМ БАЛАНСЫ и ПРОВЕРЯЕМ================
RAISE NOTICE 'Показы