perf(sql): фокус сателлитов, AHR_LIMIT и OTCH9F в v_form2_view (AURORA-1850)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Andrey Epifancev 2026-10-28 23:58:21 +04:00
parent 5709ac09ce
commit b2d0df756a

View File

@ -1125,6 +1125,8 @@ BEGIN
LEFT JOIN agg a ON a.root_id = lt.id
LEFT JOIN v3.form_limit fl
ON fl.template_id = lt.id AND fl.budget_form_id = p_form_id
WHERE p_focus_lines IS NULL
OR lt.id = ANY(v3._limit_template_path_set(p_focus_lines))
ORDER BY lt.sort_order;
RETURN;
END IF;
@ -1135,7 +1137,7 @@ BEGIN
SELECT
'INPUT'::VARCHAR,
0,
ROW_NUMBER() OVER (ORDER BY rd.id) AS sort_order,
sk._rn AS sort_order,
jsonb_build_object(
'id', rd.id,
'line_id', rd.line_id,
@ -1157,11 +1159,17 @@ BEGIN
'total', COALESCE(rd.actual_oct,0)+COALESCE(rd.actual_nov,0)+COALESCE(rd.actual_dec,0)),
'comment', rd.comment
)
FROM v3.rent_detail rd
JOIN v3.budget_line bl ON bl.id = rd.line_id
JOIN v3.vsp v ON v.id = rd.vsp_id
WHERE bl.budget_form_id = p_form_id
ORDER BY rd.id;
FROM (
SELECT rds.id, ROW_NUMBER() OVER (ORDER BY rds.id) AS _rn
FROM v3.rent_detail rds
JOIN v3.budget_line bl ON bl.id = rds.line_id
JOIN v3.vsp vs ON vs.id = rds.vsp_id
WHERE bl.budget_form_id = p_form_id
) sk
JOIN v3.rent_detail rd ON rd.id = sk.id
JOIN v3.vsp v ON v.id = rd.vsp_id
WHERE p_focus_lines IS NULL OR rd.id = ANY(p_focus_lines)
ORDER BY sk._rn;
RETURN;
END IF;
@ -1171,7 +1179,7 @@ BEGIN
SELECT
'INPUT'::VARCHAR,
0,
ROW_NUMBER() OVER (ORDER BY ud.id) AS sort_order,
sk._rn AS sort_order,
jsonb_build_object(
'id', ud.id,
'line_id', ud.line_id,
@ -1193,11 +1201,17 @@ BEGIN
'total', COALESCE(ud.actual_oct,0)+COALESCE(ud.actual_nov,0)+COALESCE(ud.actual_dec,0)),
'comment', ud.comment
)
FROM v3.utility_detail ud
JOIN v3.budget_line bl ON bl.id = ud.line_id
JOIN v3.vsp v ON v.id = ud.vsp_id
WHERE bl.budget_form_id = p_form_id
ORDER BY ud.id;
FROM (
SELECT uds.id, ROW_NUMBER() OVER (ORDER BY uds.id) AS _rn
FROM v3.utility_detail uds
JOIN v3.budget_line bl ON bl.id = uds.line_id
JOIN v3.vsp vs ON vs.id = uds.vsp_id
WHERE bl.budget_form_id = p_form_id
) sk
JOIN v3.utility_detail ud ON ud.id = sk.id
JOIN v3.vsp v ON v.id = ud.vsp_id
WHERE p_focus_lines IS NULL OR ud.id = ANY(p_focus_lines)
ORDER BY sk._rn;
RETURN;
END IF;
@ -1207,7 +1221,7 @@ BEGIN
SELECT
'INPUT'::VARCHAR,
0,
ROW_NUMBER() OVER (ORDER BY sd.id) AS sort_order,
sk._rn AS sort_order,
jsonb_build_object(
'id', sd.id,
'line_id', sd.line_id,
@ -1229,11 +1243,17 @@ BEGIN
'total', COALESCE(sd.actual_oct,0)+COALESCE(sd.actual_nov,0)+COALESCE(sd.actual_dec,0)),
'comment', sd.comment
)
FROM v3.security_detail sd
JOIN v3.budget_line bl ON bl.id = sd.line_id
JOIN v3.vsp v ON v.id = sd.vsp_id
WHERE bl.budget_form_id = p_form_id
ORDER BY sd.id;
FROM (
SELECT sds.id, ROW_NUMBER() OVER (ORDER BY sds.id) AS _rn
FROM v3.security_detail sds
JOIN v3.budget_line bl ON bl.id = sds.line_id
JOIN v3.vsp vs ON vs.id = sds.vsp_id
WHERE bl.budget_form_id = p_form_id
) sk
JOIN v3.security_detail sd ON sd.id = sk.id
JOIN v3.vsp v ON v.id = sd.vsp_id
WHERE p_focus_lines IS NULL OR sd.id = ANY(p_focus_lines)
ORDER BY sk._rn;
RETURN;
END IF;
@ -1275,6 +1295,11 @@ BEGIN
OVER w_prev, 0) AS cum_da_60415
FROM v3.fixed_asset_report far
WHERE far.budget_form_id = p_form_id
AND (p_focus_lines IS NULL OR EXISTS (
SELECT 1 FROM v3.fixed_asset_report ff
WHERE ff.id = ANY(p_focus_lines)
AND ff.expense_item_id IS NOT DISTINCT FROM far.expense_item_id
AND ff.equipment_name IS NOT DISTINCT FROM far.equipment_name))
WINDOW w AS (PARTITION BY far.budget_form_id, far.expense_item_id, far.equipment_name
ORDER BY far.month),
w_prev AS (PARTITION BY far.budget_form_id, far.expense_item_id, far.equipment_name
@ -1292,7 +1317,7 @@ BEGIN
SELECT
'INPUT'::VARCHAR,
0,
ROW_NUMBER() OVER (ORDER BY eff.expense_item_id, eff.month) AS sort_order,
sk._rn AS sort_order,
jsonb_build_object(
'id', eff.id,
'expense_item_id', ei.id,
@ -1332,7 +1357,14 @@ BEGIN
)
FROM eff
JOIN v3.expense_item ei ON ei.id = eff.expense_item_id
ORDER BY eff.expense_item_id, eff.month;
JOIN (
SELECT fs.id,
ROW_NUMBER() OVER (ORDER BY fs.expense_item_id, fs.month, fs.id) AS _rn
FROM v3.fixed_asset_report fs
JOIN v3.expense_item eis ON eis.id = fs.expense_item_id
WHERE fs.budget_form_id = p_form_id
) sk ON sk.id = eff.id
ORDER BY sk._rn;
RETURN;
END IF;