Орала на мечі. Чи вдалося московії обстрілами підірвати українську оборонку?
12:50 | Економічна правда
З літа московія балістикою та реактивними дронами "виносить" в Україні все: склади, торгові центри і навіть завод сантехніки Cersanit у Звягелі.
Чи дотягнулися її "пазурі" до оборонки? Схоже, що ні.
За січень-серпень 2026 року продажі промисловості зросли на 16%, у порівнянні з аналогічним періодом 2025 року.
Але це середнє, за яким ховаються два різні світи.
"Військові" галузі продали продукції на 458,8 млрд грн, що на 35% більше, ніж роком раніше.
Цьогорічний поштовх частково пояснюється початком отримання оборонними компаніями грошей з частини кредиту ЄС на 90 млрд євро.
Тепер європейці фінансують українську оборонку напряму, чого вони не робили в перші роки великої війни.
ЕП поділила галузі на військові і решту так само, як і в листопаді 2025 року.
З понад 150 галузей, які показує Держстат, відбираємо три десятки, що прямо або опосередковано працюють на оборону: зброя та боєприпаси, електроніка, кабелі, одяг та інші.
Тепер на "військові" галузі припадає 15 копійок з кожної гривні промислових продажів і через зупинку меткомбінатів ця частка, імовірно, до кінця року ще зросте.
Роком раніше було 13 копійок, у 2021-му – лише 6.
Всього від жовтня 2021 року продажі "військових" галузей без сезонних коливань зросли в 3,7 раза.
/* ===== КАРКАС: HTML-блок ЕП на широкому екрані тягнеться на всю сторінку (текст — 770 px); стеля 700 px і центр (рішення редактора 19.10.2026) ===== */
.epchart { max-width:700px; margin:24px auto; color:#333; font-family:"Fira Sans", "Segoe UI", Arial, sans-serif; font-variant-numeric:tabular-nums; }
.epchart * { box-sizing:border-box; }
/* d3.axis ставить групі font-family="sans-serif" — повертаємо Fira Sans (для D3-сцен) */
.epchart svg g, .epchart svg text { font-family:inherit; }
.epchart .chart { min-height:200px; }
.epchart .chart svg { display:block; overflow:visible; }
.epchart .note { font-size:13px; line-height:1.5; color:#666; margin-top:8px; }
.epchart .fail { padding:24px 0; font-size:14px; color:#777; }
/* підказка для D3-сцен (у Plot своя, через tip) */
.epchart .tip { position:fixed; pointer-events:none; background:#fff; border:1px solid #ccc; padding:5px 8px; font-size:13px; opacity:0; z-index:50; }
/* ===== СЦЕНИ: стилі підпису (Plot стилізувати через його опцію style, не зовнішнім CSS — Plot свої стилі ставить пізніше) ===== */
.epchart .ttl { font-size:20px; font-weight:700; line-height:1.3; margin:0 0 4px; }
.epchart .sub { font-size:15px; line-height:1.4; color:#555; margin:0 0 12px; }
«Військові» галузі проти решти промисловості
Продажі промпродукції
У гривнях, жовтень 2021 = 100%.
Без сезонних коливань, середнє за 3 місяці; серпень 2026 — без усереднення.
Джерело: Держстат, обсяг реалізованої промислової продукції; розрахунок ЕП.
(async () => {
// ===== КАРКАС: бібліотеки як модулі (не чіпають чужі window.d3/Plot), версії закріплені, щоб опубліковане не зламалось від оновлення =====
const ROOT = document.getElementById("epchart-vpk-viiskovi-reshta");
const BOX = ROOT.querySelector(".chart");
let d3, Plot;
try {
[d3, Plot] = await Promise.all([
import("https://cdn.jsdelivr.net/npm/d3@7.9.0/+esm"),
import("https://cdn.jsdelivr.net/npm/@observablehq/plot@0.6.17/+esm"),
]);
} catch (e) {
BOX.innerHTML = "Графік не завантажився.
Оновіть сторінку.";
return;
}
const DATA = {"dates":["2021-10","2021-11","2021-12","2022-01","2022-02","2022-03","2022-04","2022-05","2022-06","2022-07","2022-08","2022-09","2022-10","2022-11","2022-12","2023-01","2023-02","2023-03","2023-04","2023-05","2023-06","2023-07","2023-08","2023-09","2023-10","2023-11","2023-12","2024-01","2024-02","2024-03","2024-04","2024-05","2024-06","2024-07","2024-08","2024-09","2024-10","2024-11","2024-12","2025-01","2025-02","2025-03","2025-04","2025-05","2025-06","2025-07","2025-08","2025-09","2025-10","2025-11","2025-12","2026-01","2026-02","2026-03","2026-04","2026-05","2026-06","2026-07","2026-08"],"war":[100.0,100.4,112.5,113.3,96.4,80.6,67.5,74.6,74.7,82.5,86.4,89.7,90.6,94.9,107.1,117.4,129.2,130.2,132.9,138.2,143.5,144.8,142.1,141.4,146.9,148.9,157.0,163.8,173.4,182.8,187.8,192.7,196.7,206.0,213.5,226.2,222.3,231.6,229.8,240.3,249.2,248.2,257.0,254.9,258.1,254.9,260.2,266.8,280.7,286.2,277.7,271.4,289.6,327.1,354.3,364.5,364.7,369.6,374.3],"civil":[100.0,104.2,109.1,106.1,89.5,73.8,65.3,68.3,68.7,70.1,71.5,71.4,68.7,64.7,64.6,67.8,77.5,83.2,86.7,86.0,85.5,86.6,85.5,84.7,84.0,84.7,84.9,83.9,85.2,88.5,90.6,90.1,89.5,89.7,90.4,92.1,94.5,96.1,94.8,94.0,96.9,100.7,103.2,101.0,99.8,97.0,96.9,98.3,99.2,98.4,96.0,98.7,107.5,115.3,118.8,115.8,112.7,109.4,105.0],"article_end":"2025-09"};
const $$ = s => ROOT.querySelectorAll(s);
const pct = (v, d = 1) => (v > 0 ? "+" : v < 0 ? "–" : "") + Math.abs(v).toFixed(d).replace(".", ",") + "%";
// БЕЗПЕКА: будь-який рядок із даних у .html()/innerHTML — лише через esc().
Краще — .text()/textContent,
// у Plot — title/text (вони й так текст).
Дані в DATA вже екранує html_build.py.
const esc = s => String(s).replace(/[&""]/g, c => ({ "&": "&", "": ">", """: """, """: "'" }[c]));
const num = (v, d = 0) => v.toLocaleString("uk-UA", { minimumFractionDigits: d, maximumFractionDigits: d }).replace(/ /g, " ");
const MONTHS = ["січ", "лют", "бер", "квіт", "трав", "черв", "лип", "серп", "вер", "жовт", "лист", "груд"];
const FONT = ""Fira Sans", "Segoe UI", Arial, sans-serif";
const STYLE = { fontFamily: FONT, fontSize: "13px", color: "#333", overflow: "visible", fontVariantNumeric: "tabular-nums" };
// чекаємо шрифт до першого малювання, щоб підписи не міряли запасним шрифтом (не довше 1,5 с)
await Promise.race([document.fonts.load("400 13px "Fira Sans""), new Promise(r => setTimeout(r, 1500))]).catch(() => {});
// ===== СЦЕНИ: підготовка даних =====
// червоний — «військові» галузі, майже чорний — решта промисловості (лінія і її підпис одного кольору)
const RED = "#e8001c", DARK = "#1e1e1e";
const YMIN = 40, YMAX = 420;
const mid = s => { const [y, m] = s.split("-").map(Number); return new Date(y, m - 1, 15); };
const rows = DATA.dates.map((s, i) => ({ date: mid(s), war: DATA.war[i], civil: DATA.civil[i] }));
const last = rows[rows.length - 1];
const xEnd = new Date(last.date.getFullYear(), last.date.getMonth() + 1, 1);
const x0 = new Date(rows[0].date.getFullYear(), rows[0].date.getMonth(), 1);
const p0 = v => num(v, 0) + "%";
// draw(W): малює весь графік під ширину W.
Повертає DOM-вузол (Plot.plot або svg з D3).
// МОБІЛЬНА ВЕРСІЯ ОБОВ"ЯЗКОВА з першої збірки: W < 600 — своя розкладка, а не зменшена копія
// (вищий графік, менше поділок на осях, коротші підписи, панелі в 1–2 колонки, шрифт не дрібніший за 12 px).
function draw(W) {
const mobile = W < 600;
const lab = { x: "date", fontWeight: 700, fontSize: mobile ? 13 : 14, stroke: "white", strokeWidth: 4, textAnchor: "end" };
// при ширині 700 px підписи праворуч з"їли б чверть графіка — ставимо їх над і під кінцем ліній, як на телефоні
const ends = [
// підписи ліній — лише назви, без цифр (редактор, 20.10.2026)
Plot.text([last], { ...lab, y: "war", text: () => "Військові галузі", dy: -14, fill: RED }),
Plot.text([last], { ...lab, y: "civil", text: () => mobile ? "Решта" : "Решта промисловості", dy: 18, fill: DARK }),
];
return Plot.plot({
width: W, height: mobile ? 340 : 390,
marginLeft: 48, marginRight: 14, marginTop: 14, marginBottom: 30,
style: STYLE,
x: { type: "time", label: null, domain: [x0, xEnd], ticks: d3.timeYear.every(1), tickFormat: d => String(d.getFullYear()) },
y: { label: null, domain: [YMIN, YMAX], ticks: mobile ? [100, 200, 300, 400] : [50, 100, 150, 200, 250, 300, 350, 400],
tickFormat: d => d + "%" },
marks: [
Plot.gridY(mobile ? [100, 200, 300, 400] : [50, 100, 150, 200, 250, 300, 350, 400], { stroke: "#dbdbdb", strokeOpacity: 1 }),
// пунктир 100% світліший за лінію решти, бо вона ходить якраз довкола 100
Plot.ruleY([100], { stroke: "#999", strokeWidth: 1, strokeDasharray: "4,3" }),
Plot.lineY(rows, { x: "date", y: "civil", stroke: DARK, strokeWidth: 2.6 }),
Plot.lineY(rows, { x: "date", y: "war", stroke: RED, strokeWidth: 3 }),
Plot.dot([last], { x: "date", y: "civil", r: 4, fill: DARK, stroke: "white", strokeWidth: 1 }),
Plot.dot([last], { x: "date", y: "war", r: 4.5, fill: RED, stroke: "white", strokeWidth: 1 }),
...ends,
],
});
}
// ===== КАРКАС: малювання й перебудова лише при зміні ширини (на телефоні висота скаче від адресного рядка) =====
let lastW = 0, rt;
function build() {
const W = BOX.clientWidth;
if (!W || W === lastW) return;
lastW = W;
BOX.replaceChildren(draw(W));
}
build();
new ResizeObserver(() => { clearTimeout(rt); rt = setTimeout(build, 150); }).observe(BOX);
})();
Найбільше до зростання "військових" галузей додав блок, в який входять літальні апарати (зокрема дрони), військові транспортні засоби та судна.
З 2025 року Держстат не деталізує інформацію по ним, і показує лише разом.
За вісім місяців 2026-го – 133,5 млрд грн, на 89% більше, ніж за аналогічний період 2025-го.
Далі йдуть галузі, які виготовляють деталі й електроніку.
Металообробка, тобто механічна обробка деталей і нанесення покриттів, подвоїла продажі – до 27,5 млрд грн.
Вимірювальні й навігаційні прилади додали 68%, електронні компоненти й плати – 122%, кабелі – 41%.
Блок зі зброєю та боєприпасами виріс на 13% – до 60 млрд грн.
Попит держави на цю продукцію теж росте.
11 жовтня Міноборони повідомило, що Агенція оборонних закупівель у 2026 році законтрактувала на 300% більше безпілотників, ніж торік.
Зростання "військових" галузей ми міряли гривнями, а гривні – ще не штуки.
Наприклад, згадане зростання усієї промисловості на 16% обумовлене інфляцією: у фізичних обсягах за вісім місяців відбулося навіть скорочення на 1%.
Читайте також
Повністю на військових рейках: економіка України працює на оборону
Для "військових" галузей індекс промислового виробництва Держстату, який рахує саме фізичні обсяги, показує, наприклад, не +35%, як у гривні, а лише +4%.
Але і тут без передчасних висновків.
По-перше, продукція сектору стає технологічнішою, а отже, й дорожчою.
По-друге, з"являються нові сегменти ринку, які просто не відображає система обліку держави.
Справжній вибух кількості видно в одному з небагатьох відкритих рядків статистики, пов"язаних із дронами, – радіоапаратурі дистанційного керування (є лише річні дані).
У 2021 році її виготовили 249 штук, у 2024-му – 8,1 тис., а у 2025-му – 332,7 тис., у 41 раз більше, ніж роком раніше.
І ціна тут не роздувала продажі, а навпаки: лише за 2025 рік один пристрій в середньому подешевшав майже в 12 разів, з 60 тис.
до 5,1 тис.
грн.
Скільки в мільярдах оборонки справжнього збільшення виробництва, а скільки – збільшення цін, сказати важко.
Галузь росте надто стрімко і просто на ходу війни.
А статистична секретність в цьому секторі не дає точно оцінити, що там відбувається, – зрештою, так як і задумано.
Україна проти московії
Через не меншу секретність і різну інфляцію порівнювати українську оборонку з російською так само важко.
Долари не полегшують задачу: у середньому за січень–серпень рубль зміцнився з 85 до 77 за долар, а гривня ослабла з 41,6 до 44 грн/дол.
Тому ЕП взяла три великі сектори, де в обох країнах зосереджене військове виробництво.
Це металовироби разом зі зброєю, електроніка та "інший транспорт", куди входять літаки, дрони й військова техніка.
Їхню частку в продажах переробної промисловості ми порахували за даними Росстату і Держстату.
/* ===== КАРКАС: HTML-блок ЕП на широкому екрані тягнеться на всю сторінку (текст — 770 px); стеля 700 px і центр (рішення редактора 19.10.2026) ===== */
.epchart { max-width:700px; margin:24px auto; color:#333; font-family:"Fira Sans", "Segoe UI", Arial, sans-serif; font-variant-numeric:tabular-nums; }
.epchart * { box-sizing:border-box; }
/* d3.axis ставить групі font-family="sans-serif" — повертаємо Fira Sans (для D3-сцен) */
.epchart svg g, .epchart svg text { font-family:inherit; }
.epchart .chart { min-height:200px; }
.epchart .chart svg { display:block; overflow:visible; }
.epchart .note { font-size:13px; line-height:1.5; color:#666; margin-top:8px; }
.epchart .fail { padding:24px 0; font-size:14px; color:#777; }
/* підказка для D3-сцен (у Plot своя, через tip) */
.epchart .tip { position:fixed; pointer-events:none; background:#fff; border:1px solid #ccc; padding:5px 8px; font-size:13px; opacity:0; z-index:50; }
/* ===== СЦЕНИ: стилі підпису (Plot стилізувати через його опцію style, не зовнішнім CSS — Plot свої стилі ставить пізніше) ===== */
.epchart .ttl { font-size:20px; font-weight:700; line-height:1.3; margin:0 0 4px; }
.epchart .sub { font-size:15px; line-height:1.4; color:#555; margin:0 0 12px; }
Частка трьох галузей, Україна і московія
Частка металовиробів (разом зі зброєю), електроніки та «іншого транспорту» (літаки, дрони, військова техніка) у продажах переробної промисловості, сума за останні 12 місяців.
Джерела: Держстат (обсяг реалізованої промислової продукції), Росстат (відвантаження товарів власного виробництва); розрахунок ЕП.
(async () => {
// ===== КАРКАС: бібліотеки як модулі (не чіпають чужі window.d3/Plot), версії закріплені, щоб опубліковане не зламалось від оновлення =====
const ROOT = document.getElementById("epchart-vpk-ua-ru-chastka");
const BOX = ROOT.querySelector(".chart");
let d3, Plot;
try {
[d3, Plot] = await Promise.all([
import("https://cdn.jsdelivr.net/npm/d3@7.9.0/+esm"),
import("https://cdn.jsdelivr.net/npm/@observablehq/plot@0.6.17/+esm"),
]);
} catch (e) {
BOX.innerHTML = "Графік не завантажився.
Оновіть сторінку.";
return;
}
const DATA = {"dates":["2021-12","2022-01","2022-02","2022-03","2022-04","2022-05","2022-06","2022-07","2022-08","2022-09","2022-10","2022-11","2022-12","2023-01","2023-02","2023-03","2023-04","2023-05","2023-06","2023-07","2023-08","2023-09","2023-10","2023-11","2023-12","2024-01","2024-02","2024-03","2024-04","2024-05","2024-06","2024-07","2024-08","2024-09","2024-10","2024-11","2024-12","2025-01","2025-02","2025-03","2025-04","2025-05","2025-06","2025-07","2025-08","2025-09","2025-10","2025-11","2025-12","2026-01","2026-02","2026-03","2026-04","2026-05","2026-06","2026-07","2026-08"],"ua":[5.7,5.7,5.7,5.7,5.8,5.9,5.9,6.0,6.2,6.3,6.5,6.6,6.8,7.0,7.3,7.4,7.6,7.9,8.2,8.4,8.6,8.8,9.0,9.3,9.5,9.6,9.7,10.0,10.2,10.4,10.7,11.0,11.3,11.7,12.0,12.1,12.5,12.8,13.1,13.4,13.5,13.7,13.8,13.8,14.1,14.2,14.4,14.8,14.9,14.9,14.9,15.1,15.6,15.9,16.3,16.6,17.0],"ru":[11.5,11.5,11.3,11.2,11.1,11.1,11.2,11.4,11.5,11.6,11.8,12.1,12.3,12.5,12.9,13.3,13.6,13.8,14.0,14.1,14.2,14.4,14.5,14.7,14.6,14.5,14.6,14.8,14.9,15.0,15.2,15.4,15.5,15.8,16.0,16.0,16.6,16.7,16.8,17.0,17.2,17.4,17.6,17.8,18.2,18.3,18.5,18.6,18.9,19.1,19.3,19.4,19.6,19.8,19.9,20.1,20.1]};
const $$ = s => ROOT.querySelectorAll(s);
const pct = (v, d = 1) => (v > 0 ? "+" : v < 0 ? "–" : "") + Math.abs(v).toFixed(d).replace(".", ",") + "%";
// БЕЗПЕКА: будь-який рядок із даних у .html()/innerHTML — лише через esc().
Краще — .text()/textContent,
// у Plot — title/text (вони й так текст).
Дані в DATA вже екранує html_build.py.
const esc = s => String(s).replace(/[&""]/g, c => ({ "&": "&", "": ">", """: """, """: "'" }[c]));
const num = (v, d = 0) => v.toLocaleString("uk-UA", { minimumFractionDigits: d, maximumFractionDigits: d }).replace(/ /g, " ");
const MONTHS = ["січ", "лют", "бер", "квіт", "трав", "черв", "лип", "серп", "вер", "жовт", "лист", "груд"];
const FONT = ""Fira Sans", "Segoe UI", Arial, sans-serif";
const STYLE = { fontFamily: FONT, fontSize: "13px", color: "#333", overflow: "visible", fontVariantNumeric: "tabular-nums" };
// чекаємо шрифт до першого малювання, щоб підписи не міряли запасним шрифтом (не довше 1,5 с)
await Promise.race([document.fonts.load("400 13px "Fira Sans""), new Promise(r => setTimeout(r, 1500))]).catch(() => {});
// ===== СЦЕНИ: підготовка даних =====
// червоний — Україна, майже чорний — московія (лінія і її підпис одного кольору)
const RED = "#e8001c", DARK = "#1e1e1e";
const YMIN = 0, YMAX = 22, TICKS = [0, 5, 10, 15, 20];
const mid = s => { const [y, m] = s.split("-").map(Number); return new Date(y, m - 1, 15); };
const rows = DATA.dates.map((s, i) => ({ date: mid(s), ua: DATA.ua[i], ru: DATA.ru[i] }));
const first = rows[0], last = rows[rows.length - 1];
const x0 = new Date(first.date.getFullYear(), first.date.getMonth(), 1);
const x1 = new Date(last.date.getFullYear(), last.date.getMonth() + 1, 1);
const p1 = v => num(v, 1) + "%";
// draw(W): малює весь графік під ширину W.
Повертає DOM-вузол (Plot.plot або svg з D3).
// МОБІЛЬНА ВЕРСІЯ ОБОВ"ЯЗКОВА з першої збірки: W < 600 — своя розкладка, а не зменшена копія
// (вищий графік, менше поділок на осях, коротші підписи, панелі в 1–2 колонки, шрифт не дрібніший за 12 px).
function draw(W) {
const mobile = W < 600;
const lab = { x: "date", fontWeight: 700, fontSize: mobile ? 13 : 14, stroke: "white", strokeWidth: 4 };
// обидві лінії ростуть: підпис московії — над кінцем її лінії; України — нижче червоної лінії (під самим кінцем її перетинає лінія)
const ends = mobile
// підписи ліній — лише назви, без цифр (редактор, 20.10.2026)
? [Plot.text([last], { ...lab, y: "ru", text: () => "московія", textAnchor: "end", dy: -14, fill: DARK }),
Plot.text([last], { ...lab, y: d => d.ua - 4.5, text: () => "Україна", textAnchor: "end", fill: RED })]
: [Plot.text([last], { ...lab, y: "ru", text: () => "московія", textAnchor: "start", dx: 10, fill: DARK }),
Plot.text([last], { ...lab, y: "ua", text: () => "Україна", textAnchor: "start", dx: 10, fill: RED })];
const startLab = { x: "date", fontSize: mobile ? 12 : 13, stroke: "white", strokeWidth: 4, textAnchor: "start" };
return Plot.plot({
width: W, height: mobile ? 320 : 370,
marginLeft: 44, marginRight: mobile ? 14 : 130, marginTop: 14, marginBottom: 30,
style: STYLE,
// при ширині 700 px поділки кожні пів року налазили б одна на одну — лише роки
x: { type: "time", label: null, domain: [x0, x1], ticks: d3.timeYear.every(1), tickFormat: d => String(d.getFullYear()) },
y: { label: null, domain: [YMIN, YMAX], ticks: TICKS, tickFormat: d => d + "%" },
marks: [
Plot.gridY(TICKS.slice(1), { stroke: "#dbdbdb", strokeOpacity: 1 }),
Plot.ruleY([0], { stroke: "#121212", strokeWidth: 1 }),
Plot.lineY(rows, { x: "date", y: "ru", stroke: DARK, strokeWidth: 2.6 }),
Plot.lineY(rows, { x: "date", y: "ua", stroke: RED, strokeWidth: 3 }),
Plot.dot([first, last], { x: "date", y: "ru", r: 4, fill: DARK, stroke: "white", strokeWidth: 1 }),
Plot.dot([first, last], { x: "date", y: "ua", r: 4.5, fill: RED, stroke: "white", strokeWidth: 1 }),
// значення на старті (грудень 2021): московія над точкою, Україна під точкою
Plot.text([first], { ...startLab, y: "ru", text: d => p1(d.ru), dy: -14, fill: DARK }),
Plot.text([first], { ...startLab, y: "ua", text: d => p1(d.ua), dy: 16, fill: RED }),
...ends,
],
});
}
// ===== КАРКАС: малювання й перебудова лише при зміні ширини (на телефоні висота скаче від адресного рядка) =====
let lastW = 0, rt;
function build() {
const W = BOX.clientWidth;
if (!W || W === lastW) return;
lastW = W;
BOX.replaceChildren(draw(W));
}
build();
new ResizeObserver(() => { clearTimeout(rt); rt = setTimeout(build, 150); }).observe(BOX);
})();
Частка цих трьох галузей у переробці України поступово наближається до російської: за останній рік розрив скоротився з 4,1 до 3,1 в.п.
В доларах московія продає в 19 разів більше, але роком раніше було у 21 раз.
московіяни вже наближаються до стелі.
Влітку міністр промисловості і торгівлі рф Антон Аліханов попередив, що оборонка як "локомотив" промислового зростання скоро вийде на максимум випуску.
А цивільна промисловість не росте, оцінює наближений до Кремля Центр макроекономічного аналізу і короткострокового прогнозування.
За його даними, у лютому 2026 року випуск галузей без оборонного виробництва був лише на 1,1% вищий за середній рівень 2021-го.
Це найнижче значення з березня 2023 року.
Тож українська оборонка поступово наздоганяє російську за часткою в усій промисловості і є всі шанси, що пережене.

