<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:base="https://www.pandoraburo.ru/" xml:lang="ru">
  <id>https://www.pandoraburo.ru/zmeevik-utochnenie</id>
  <link href="https://www.pandoraburo.ru/zmeevik-utochnenie.xml" rel="self"/>
  <title>Змеевик уточнение</title>
  <subtitle type="html">
&lt;html lang="ru"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1"&gt;
&lt;title&gt;Калькулятор змеевиков ПРО — Арсенал-Деталь&lt;/title&gt;
&lt;style&gt;
  :root {
    --bg:    #0a0a0a;
    --bg2:   #111111;
    --line:  #d4af37;
    --gold:  #d4af37;
    --goldB: #f0d060;
    --red:   #e74c3c;
    --green: #2ecc71;
  }
  * { box-sizing: border-box; margin: 0; padding: 0; }
  body {
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif;
    background: var(--bg);
    color: var(--gold);
    line-height: 1.5;
    padding: 20px 14px;
  }
  .wrap { max-width: 1400px; margin: 0 auto; }

  .ticker-block {
    display: flex; align-items: stretch; background: var(--bg);
    border: 1px solid var(--line); border-radius: 8px; overflow: hidden;
    margin-bottom: 14px; height: 44px;
  }
  .ticker-label {
    background: var(--gold); color: #0a0a0a; font-weight: 800; font-size: 12px;
    letter-spacing: 1.5px; padding: 0 16px; display: flex; align-items: center; white-space: nowrap;
  }
  .ticker-viewport { flex: 1; overflow: hidden; position: relative; }
  .ticker-track {
    display: inline-flex; align-items: center; height: 100%; white-space: nowrap;
    animation: tickerScroll 40s linear infinite; padding-left: 20px;
  }
  .ticker-item { color: var(--gold); font-size: 13px; padding: 0 10px; letter-spacing: .3px; }
  .ticker-item b { color: var(--goldB); font-weight: 700; }
  .ticker-dot { color: var(--gold); font-size: 10px; }
  @keyframes tickerScroll { 0% { transform: translateX(0); } 100% { transform: translateX(-50%); } }

  header {
    background: var(--bg); border: 1px solid var(--line); border-radius: 12px;
    padding: 30px 25px; text-align: center; margin-bottom: 14px;
  }
  .banner-line {
    display: inline-block; background: var(--gold); color: #0a0a0a;
    font-size: 11px; font-weight: 800; letter-spacing: 2px; padding: 4px 14px;
    border-radius: 999px; margin-bottom: 14px;
  }
  header h1 {
    margin: 0 0 12px 0; font-size: 28px; color: var(--gold);
    text-transform: uppercase; letter-spacing: 3px; font-weight: 800;
  }
  header p { margin: 0; color: var(--gold); font-size: 15px; opacity: .9; }

  .calc-block {
    background: var(--bg); border: 1px solid var(--line); border-radius: 12px;
    padding: 20px; margin-bottom: 14px;
  }
  .calc-title {
    color: var(--gold); font-size: 12px; font-weight: 800; letter-spacing: 2px;
    text-transform: uppercase; padding-bottom: 12px; margin-bottom: 16px;
    border-bottom: 1px solid var(--line); text-align: center;
  }

  .field { display: flex; flex-direction: column; gap: 6px; margin-bottom: 14px; }
  .field label {
    font-size: 11px; font-weight: 700; color: var(--gold);
    text-transform: uppercase; letter-spacing: 1px; opacity: .8;
  }
  .field input, .field select {
    padding: 12px 14px; border: 1px solid var(--line); border-radius: 9px;
    font-size: 14px; background: var(--bg); color: var(--gold);
    outline: none; transition: .15s; font-family: inherit; font-variant-numeric: tabular-nums;
  }
  .field input:focus, .field select:focus {
    border-color: var(--goldB); box-shadow: 0 0 0 3px rgba(212,175,55,.2);
  }
  .field-row { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 10px; }
  @media (max-width: 800px) { .field-row { grid-template-columns: 1fr; } }

  .reference-block {
    background: linear-gradient(135deg, rgba(212,175,55,.15) 0%, rgba(10,10,10,1) 100%);
    border: 2px solid var(--gold); border-radius: 12px;
    padding: 18px; margin-bottom: 16px;
  }
  .reference-title {
    color: var(--goldB); font-size: 13px; font-weight: 800;
    text-transform: uppercase; letter-spacing: 1.5px;
    margin-bottom: 12px; text-align: center;
  }
  .reference-grid {
    display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px;
  }
  @media (max-width: 700px) { .reference-grid { grid-template-columns: 1fr; } }
  .ref-item {
    background: rgba(0,0,0,.4); border: 1px solid rgba(212,175,55,.4);
    border-radius: 8px; padding: 12px; text-align: center;
  }
  .ref-label { font-size: 10px; color: var(--gold); opacity: .7; margin-bottom: 4px; }
  .ref-value { font-size: 16px; font-weight: 800; color: var(--goldB); }
  .ref-value.profit { color: var(--green); }

  .auto-calc {
    background: rgba(212,175,55,.08); border: 1px dashed var(--gold);
    border-radius: 9px; padding: 12px 14px; margin-bottom: 14px;
    display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px;
  }
  @media (max-width: 700px) { .auto-calc { grid-template-columns: 1fr; } }
  .auto-item { text-align: center; }
  .auto-label { font-size: 10px; color: var(--gold); opacity: .7; text-transform: uppercase; font-weight: 700; }
  .auto-value { font-size: 18px; font-weight: 800; color: var(--goldB); font-variant-numeric: tabular-nums; }

  .result-block {
    background: var(--bg); border: 1px solid var(--line); border-radius: 12px;
    padding: 20px; margin-bottom: 14px;
  }
  .result-main {
    text-align: center; padding: 16px 0 20px;
    border-bottom: 1px solid rgba(212,175,55,.3); margin-bottom: 16px;
  }
  .result-main-label {
    font-size: 11px; font-weight: 800; letter-spacing: 2px;
    text-transform: uppercase; color: var(--gold); opacity: .8; margin-bottom: 8px;
  }
  .result-main-value {
    font-size: 48px; font-weight: 800; color: var(--goldB);
    line-height: 1; font-variant-numeric: tabular-nums; margin-bottom: 6px;
  }
  .result-main-unit { font-size: 16px; color: var(--gold); opacity: .8; }
  .result-main-note { font-size: 12px; color: var(--gold); opacity: .7; margin-top: 8px; }

  .result-grid {
    display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin-bottom: 16px;
  }
  @media (max-width: 900px) { .result-grid { grid-template-columns: repeat(2, 1fr); } }
  @media (max-width: 500px) { .result-grid { grid-template-columns: 1fr; } }
  .result-item {
    background: #0a0a0a; border: 1px solid rgba(212,175,55,.3);
    border-radius: 9px; padding: 12px; text-align: center;
  }
  .result-label {
    font-size: 10px; font-weight: 700; letter-spacing: 1px;
    text-transform: uppercase; color: var(--gold); opacity: .7; margin-bottom: 6px;
  }
  .result-value {
    font-size: 18px; font-weight: 800; color: var(--goldB);
    line-height: 1.1; font-variant-numeric: tabular-nums;
  }
  .result-value.small { font-size: 15px; }
  .result-value.profit { color: var(--green); }

  .actions { display: flex; gap: 10px; flex-wrap: wrap; }
  .promo-btn {
    display: inline-flex; align-items: center; justify-content: center; gap: 6px;
    padding: 12px 16px; border-radius: 9px; border: 1px solid var(--gold);
    background: transparent; color: var(--gold); font-size: 13px; font-weight: 700;
    cursor: pointer; transition: .15s; font-family: inherit; letter-spacing: .3px; flex: 1; min-width: 140px;
  }
  .promo-btn:hover { background: var(--gold); color: #0a0a0a; }
  .promo-btn.primary { background: var(--gold); color: #0a0a0a; }
  .promo-btn.primary:hover { background: var(--goldB); }

  .pricing-info {
    background: rgba(46, 204, 113, 0.08);
    border: 1px solid var(--green);
    border-radius: 10px;
    padding: 14px 18px;
    margin-top: 14px;
    text-align: center;
  }
  .pricing-info-title {
    font-size: 12px; font-weight: 800; color: var(--green);
    text-transform: uppercase; letter-spacing: 1px; margin-bottom: 8px;
  }
  .pricing-info-text {
    font-size: 13px; color: var(--gold); opacity: .85; line-height: 1.6;
  }
  .pricing-info-text b { color: var(--goldB); }

  ::-webkit-scrollbar { width: 14px; height: 14px; }
  ::-webkit-scrollbar-track { background: #050505; border: 1px solid #2a2210; border-radius: 9px; }
  ::-webkit-scrollbar-thumb {
    background: linear-gradient(180deg, #ffd700 0%, #ff8c00 50%, #ffd700 100%);
    border: 1px solid #ffd700; border-radius: 9px;
    box-shadow: 0 0 10px rgba(255,215,0,.6);
  }

  @media print {
    body { background: #fff; color: #000; padding: 0; }
    .ticker-block, .promo-btn { display: none !important; }
    .calc-block, .result-block { background: #fff !important; border: 1px solid #999 !important; }
    .field input, .field select { background: #fff !important; color: #000 !important; border-color: #999 !important; }
    .result-main-value, .result-value { color: #000 !important; }
  }
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div class="wrap"&gt;

  &lt;div class="ticker-block"&gt;
    &lt;div class="ticker-label"&gt;ПРО-РАСЧЁТ&lt;/div&gt;
    &lt;div class="ticker-viewport"&gt;
      &lt;div class="ticker-track"&gt;
        &lt;span class="ticker-item"&gt;Референс: труба 10×2мм, Ø100мм, 7.32м — &lt;b&gt;~24,000 ₽ себестоимость&lt;/b&gt;&lt;/span&gt;
        &lt;span class="ticker-dot"&gt;◆&lt;/span&gt;
        &lt;span class="ticker-item"&gt;Итоговая цена с коэфф. 4.5: &lt;b&gt;~108,000 ₽&lt;/b&gt;&lt;/span&gt;
        &lt;span class="ticker-dot"&gt;◆&lt;/span&gt;
        &lt;span class="ticker-item"&gt;Нержавейка 12Х18Н10Т — &lt;b&gt;от 380 ₽/кг&lt;/b&gt;&lt;/span&gt;
        &lt;span class="ticker-dot"&gt;◆&lt;/span&gt;
        &lt;span class="ticker-item"&gt;Гибка с дорном · Гидравлические испытания&lt;/span&gt;
        &lt;span class="ticker-dot"&gt;◆&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;header&gt;
    &lt;div class="banner-line"&gt;КАЛЬКУЛЯТОР ПРО&lt;/div&gt;
    &lt;h1&gt;Гнутые спиральные змеевики&lt;/h1&gt;
    &lt;p&gt;Расчёт на основе реальных чертежей · Пропорциональное масштабирование · Коэффициент 4.5&lt;/p&gt;
  &lt;/header&gt;

  &lt;div class="calc-block"&gt;
    &lt;div class="calc-title"&gt;Референсный образец (чертеж 19.02.35.533)&lt;/div&gt;
    &lt;div class="reference-block"&gt;
      &lt;div class="reference-title"&gt;? Параметры из вашего чертежа&lt;/div&gt;
      &lt;div class="reference-grid"&gt;
        &lt;div class="ref-item"&gt;
          &lt;div class="ref-label"&gt;Труба&lt;/div&gt;
          &lt;div class="ref-value"&gt;10×2 мм&lt;/div&gt;
        &lt;/div&gt;
        &lt;div class="ref-item"&gt;
          &lt;div class="ref-label"&gt;Материал&lt;/div&gt;
          &lt;div class="ref-value"&gt;12Х18Н12Т&lt;/div&gt;
        &lt;/div&gt;
        &lt;div class="ref-item"&gt;
          &lt;div class="ref-label"&gt;Диаметр змеевика&lt;/div&gt;
          &lt;div class="ref-value"&gt;Ø100 мм&lt;/div&gt;
        &lt;/div&gt;
        &lt;div class="ref-item"&gt;
          &lt;div class="ref-label"&gt;Длина развертки&lt;/div&gt;
          &lt;div class="ref-value"&gt;7322 мм (7.32 м)&lt;/div&gt;
        &lt;/div&gt;
        &lt;div class="ref-item"&gt;
          &lt;div class="ref-label"&gt;Масса изделия&lt;/div&gt;
          &lt;div class="ref-value"&gt;2.9 кг&lt;/div&gt;
        &lt;/div&gt;
        &lt;div class="ref-item"&gt;
          &lt;div class="ref-label"&gt;Базовая себестоимость&lt;/div&gt;
          &lt;div class="ref-value"&gt;~24,000 ₽&lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="calc-title"&gt;Параметры нового змеевика&lt;/div&gt;

    &lt;div class="field"&gt;
      &lt;label&gt;Материал трубы&lt;/label&gt;
      &lt;select id="material"&gt;
        &lt;option value="st20"&gt;Сталь 20 (углеродистая) · ~95 ₽/кг&lt;/option&gt;
        &lt;option value="09g2s"&gt;Сталь 09Г2С (низколегированная) · ~105 ₽/кг&lt;/option&gt;
        &lt;option value="12x18" selected="selected"&gt;Нержавейка 12Х18Н10Т (12Х18Н12Т) · ~380 ₽/кг&lt;/option&gt;
        &lt;option value="08x18"&gt;Нержавейка 08Х18Н10 · ~360 ₽/кг&lt;/option&gt;
      &lt;/select&gt;
    &lt;/div&gt;

    &lt;div class="field-row"&gt;
      &lt;div class="field"&gt;
        &lt;label&gt;Наружный диаметр трубы (d), мм&lt;/label&gt;
        &lt;input type="number" id="pipeD" value="10" min="6" max="219" step="1" /&gt;
      &lt;/div&gt;
      &lt;div class="field"&gt;
        &lt;label&gt;Толщина стенки (s), мм&lt;/label&gt;
        &lt;input type="number" id="pipeS" value="2" min="0.5" max="16" step="0.1" /&gt;
      &lt;/div&gt;
      &lt;div class="field"&gt;
        &lt;label&gt;Диаметр змеевика (D), мм&lt;/label&gt;
        &lt;input type="number" id="coilD" value="100" min="20" max="2000" step="1" /&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="field-row"&gt;
      &lt;div class="field"&gt;
        &lt;label&gt;Количество витков (N)&lt;/label&gt;
        &lt;input type="number" id="turns" value="23" min="1" max="1000" step="1" /&gt;
      &lt;/div&gt;
      &lt;div class="field"&gt;
        &lt;label&gt;Шаг между витками (P), мм&lt;/label&gt;
        &lt;input type="number" id="pitch" value="0" min="0" max="500" step="1" /&gt;
      &lt;/div&gt;
      &lt;div class="field"&gt;
        &lt;label&gt;Количество, шт&lt;/label&gt;
        &lt;input type="number" id="qty" value="1" min="1" max="1000" step="1" /&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="auto-calc"&gt;
      &lt;div class="auto-item"&gt;
        &lt;div class="auto-label"&gt;Длина трубы&lt;/div&gt;
        &lt;div class="auto-value" id="autoLength"&gt;0 м&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="auto-item"&gt;
        &lt;div class="auto-label"&gt;Вес одного змеевика&lt;/div&gt;
        &lt;div class="auto-value" id="autoWeight"&gt;0 кг&lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="auto-item"&gt;
        &lt;div class="auto-label"&gt;Коэфф. сложности&lt;/div&gt;
        &lt;div class="auto-value" id="autoComplexity"&gt;1.0×&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div class="result-block"&gt;
    &lt;div class="calc-title"&gt;Результат расчёта&lt;/div&gt;

    &lt;div class="result-main"&gt;
      &lt;div class="result-main-label"&gt;Цена за 1 змеевик (с НДС 20%)&lt;/div&gt;
      &lt;div class="result-main-value" id="rPrice"&gt;0&lt;/div&gt;
      &lt;div class="result-main-unit"&gt;рублей&lt;/div&gt;
      &lt;div class="result-main-note" id="rNote"&gt;—&lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="result-grid"&gt;
      &lt;div class="result-item"&gt;&lt;div class="result-label"&gt;Стоимость металла&lt;/div&gt;&lt;div class="result-value small" id="rMatCost"&gt;0 ₽&lt;/div&gt;&lt;/div&gt;
      &lt;div class="result-item"&gt;&lt;div class="result-label"&gt;Стоимость работ&lt;/div&gt;&lt;div class="result-value small" id="rBendCost"&gt;0 ₽&lt;/div&gt;&lt;/div&gt;
      &lt;div class="result-item"&gt;&lt;div class="result-label"&gt;Полная себестоимость&lt;/div&gt;&lt;div class="result-value small" id="rCost"&gt;0 ₽&lt;/div&gt;&lt;/div&gt;
      &lt;div class="result-item"&gt;&lt;div class="result-label"&gt;Прибыль предприятия&lt;/div&gt;&lt;div class="result-value small profit" id="rProfit"&gt;0 ₽&lt;/div&gt;&lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="pricing-info"&gt;
      &lt;div class="pricing-info-title"&gt;? Принцип расчёта (Коэффициент 4.5)&lt;/div&gt;
      &lt;div class="pricing-info-text"&gt;
        &lt;b&gt;Пропорциональное масштабирование от референса:&lt;/b&gt;&lt;br /&gt;
        Базовая себестоимость референса: &lt;b&gt;~24,000 ₽&lt;/b&gt; (труба 10×2мм, Ø100мм, 7.32м)&lt;br /&gt;
        &lt;br /&gt;
        Калькулятор автоматически масштабирует цену пропорционально:&lt;br /&gt;
        • Длине трубы и весу металла&lt;br /&gt;
        • Сложности гибки (отношение D/d)&lt;br /&gt;
        • Итоговая цена умножается на &lt;b&gt;коэффициент 4.5&lt;/b&gt;, что включает все накладные расходы, риск, логистику и целевую рентабельность.
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="actions"&gt;
      &lt;button class="promo-btn primary" onclick="downloadCSV()"&gt;⬇ CSV&lt;/button&gt;
      &lt;button class="promo-btn primary" onclick="downloadExcel()"&gt;⬇ Excel&lt;/button&gt;
      &lt;button class="promo-btn" onclick="window.print()"&gt;? Печать&lt;/button&gt;
      &lt;button class="promo-btn" onclick="resetAll()"&gt;✕ Сброс&lt;/button&gt;
    &lt;/div&gt;
  &lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;
/* ==================== ДАННЫЕ ==================== */
const MATERIALS = [
  {key:'st20',   name:'Сталь 20',               price:95,  density:7850},
  {key:'09g2s',  name:'Сталь 09Г2С',            price:105, density:7850},
  {key:'12x18',  name:'Нержавейка 12Х18Н10Т',   price:380, density:7900},
  {key:'08x18',  name:'Нержавейка 08Х18Н10',    price:360, density:7900}
];

/* ==================== РЕФЕРЕНС И КОЭФФИЦИЕНТЫ ==================== */
const REFERENCE = {
  pipeD: 10,        // диаметр трубы
  pipeS: 2,         // толщина стенки
  coilD: 100,       // диаметр змеевика
  length: 7.32,     // длина развертки, м
  weight: 2.9,      // вес, кг
  costPrice: 24000  // базовая себестоимость из вашего примера
};

// НОВЫЙ КОЭФФИЦИЕНТ НАЦЕНКИ (по вашему требованию)
const MARKUP_COEFFICIENT = 4.5; 

/* ==================== УТИЛИТЫ ==================== */
const fmt = n =&gt; (n === null || n === undefined || isNaN(n)) ? '0' : n.toLocaleString('ru-RU', {maximumFractionDigits: 0});
const fmt2 = n =&gt; (n === null || n === undefined || isNaN(n)) ? '0' : n.toLocaleString('ru-RU', {maximumFractionDigits: 2});
const num = id =&gt; { const el = document.getElementById(id); if (!el) return 0; const v = parseFloat(el.value); return isNaN(v) ? 0 : v; };
const getMaterial = key =&gt; MATERIALS.find(m =&gt; m.key === key) || MATERIALS[0];

/* ==================== РАСЧЁТ ==================== */
function calculate() {
  const mat = getMaterial(document.getElementById('material').value);
  const d = num('pipeD');
  const s = num('pipeS');
  const D_coil = num('coilD');
  const N = num('turns');
  const P = num('pitch');
  const qty = Math.max(1, num('qty'));

  if (d &lt;= 0 || s &lt;= 0 || D_coil &lt;= 0 || N &lt;= 0) {
    document.getElementById('rPrice').textContent = '0';
    return;
  }

  // 1. Геометрия
  const D_mean = D_coil - d; // Средний диаметр навивки
  const L_turn = Math.sqrt(Math.pow(Math.PI * D_mean, 2) + Math.pow(P, 2));
  const L_total_m = (L_turn * N) / 1000;

  // 2. Вес
  const weight_per_m = 0.02466 * s * (d - s);
  const total_weight = L_total_m * weight_per_m;

  // 3. Расчёт через пропорцию от референса
  // Базовая цена за метр из референса (24000 / 7.32 = 3278 ₽/м)
  const refPricePerMeter = REFERENCE.costPrice / REFERENCE.length; 
  
  // Коэффициент сложности (отношение диаметров)
  const ratio_new = D_coil / d;
  
  let complexityCoeff = 1.0;
  if (ratio_new &lt; 8) complexityCoeff = 2.5;       // Очень сложная гибка (нужен дорн, высокий брак)
  else if (ratio_new &lt; 10) complexityCoeff = 1.8;  // Сложная
  else if (ratio_new &lt; 15) complexityCoeff = 1.3;  // Средняя
  else if (ratio_new &lt; 20) complexityCoeff = 1.1;  // Легкая
  
  // Корректировка на толщину стенки (толще = сложнее гнуть без гофра)
  const thicknessCoeff = (s / d) &gt; 0.15 ? 1.4 : (s / d) &gt; 0.1 ? 1.2 : 1.0;
  
  // Корректировка на материал (относительно базовой нержавейки 380 р/кг)
  const materialCoeff = mat.price / 380; 
  
  // Итоговая себестоимость
  const baseCost = L_total_m * refPricePerMeter * complexityCoeff * thicknessCoeff * materialCoeff;
  
  // Цена продажи с наценкой (коэффициент 4.5)
  const salePrice = baseCost * MARKUP_COEFFICIENT;
  
  // Прибыль
  const profit = salePrice - baseCost;

  // 4. Вывод
  document.getElementById('autoLength').textContent = fmt2(L_total_m) + ' м';
  document.getElementById('autoWeight').textContent = fmt2(total_weight) + ' кг';
  document.getElementById('autoComplexity').textContent = (complexityCoeff * thicknessCoeff).toFixed(1) + '×';
  
  document.getElementById('rPrice').textContent = fmt(salePrice);
  document.getElementById('rMatCost').textContent = fmt(total_weight * mat.price) + ' ₽';
  document.getElementById('rBendCost').textContent = fmt(baseCost - (total_weight * mat.price)) + ' ₽';
  document.getElementById('rCost').textContent = fmt(baseCost) + ' ₽';
  document.getElementById('rProfit').textContent = fmt(profit) + ' ₽';
  
  const marginPercent = ((profit / baseCost) * 100).toFixed(0);
  document.getElementById('rNote').textContent = 
    `Наценка ${marginPercent}% (коэфф. ${MARKUP_COEFFICIENT}) · Материал: ${mat.name}`;

  state.result = {
    material: mat.name, pipeD: d, pipeS: s, coilD: D_coil, turns: N, pitch: P,
    length: L_total_m, weight: total_weight, cost: baseCost, price: salePrice, profit: profit, qty: qty
  };
}

/* ==================== СОБЫТИЯ ==================== */
document.getElementById('material').addEventListener('change', calculate);
['pipeD', 'pipeS', 'coilD', 'turns', 'pitch', 'qty'].forEach(id =&gt; {
  document.getElementById(id).addEventListener('input', calculate);
});

/* ==================== СБРОС ==================== */
function resetAll() {
  document.getElementById('material').value = '12x18';
  document.getElementById('pipeD').value = 10;
  document.getElementById('pipeS').value = 2;
  document.getElementById('coilD').value = 100;
  document.getElementById('turns').value = 23; // ~7.32м при шаге 0
  document.getElementById('pitch').value = 0;
  document.getElementById('qty').value = 1;
  calculate();
}

/* ==================== ЭКСПОРТ ==================== */
function downloadBlob(blob, filename) {
  const url = URL.createObjectURL(blob);
  const a = document.createElement('a');
  a.href = url; a.download = filename;
  document.body.appendChild(a); a.click(); a.remove();
  setTimeout(() =&gt; URL.revokeObjectURL(url), 500);
}
function today() { const d = new Date(), p = n =&gt; String(n).padStart(2,'0'); return `${d.getFullYear()}-${p(d.getMonth()+1)}-${p(d.getDate())}`; }

function downloadCSV() {
  if (!state.result) return;
  const r = state.result;
  const header = ['Параметр','Значение'];
  const body = [
    ['Материал', r.material],
    ['Диаметр трубы', r.pipeD + ' мм'],
    ['Толщина стенки', r.pipeS + ' мм'],
    ['Диаметр змеевика', r.coilD + ' мм'],
    ['Количество витков', r.turns],
    ['Длина развертки', r.length.toFixed(2) + ' м'],
    ['Вес 1 шт', r.weight.toFixed(2) + ' кг'],
    ['Количество', r.qty + ' шт'],
    ['Себестоимость 1 шт', Math.round(r.cost) + ' ₽'],
    ['Цена продажи 1 шт (с НДС)', Math.round(r.price) + ' ₽'],
    ['Прибыль с 1 шт', Math.round(r.profit) + ' ₽'],
    ['Итого на партию', Math.round(r.price * r.qty) + ' ₽']
  ];
  const esc = v =&gt; `"${String(v).replace(/"/g,'""')}"`;
  const csv = [header, ...body].map(row =&gt; row.map(esc).join(';')).join('\r\n');
  downloadBlob(new Blob(['\uFEFF' + csv], {type:'text/csv;charset=utf-8;'}), 'zmevik_pro_' + today() + '.csv');
}

function downloadExcel() {
  if (!state.result) return;
  const r = state.result;
  const header = ['Параметр','Значение'];
  const body = [
    ['Материал', r.material], ['Диаметр трубы', r.pipeD + ' мм'],
    ['Толщина стенки', r.pipeS + ' мм'], ['Диаметр змеевика', r.coilD + ' мм'],
    ['Количество витков', r.turns], ['Длина развертки', r.length.toFixed(2) + ' м'],
    ['Вес 1 шт', r.weight.toFixed(2) + ' кг'], ['Количество', r.qty + ' шт'],
    ['Себестоимость 1 шт', Math.round(r.cost) + ' ₽'],
    ['Цена продажи 1 шт (с НДС)', Math.round(r.price) + ' ₽'],
    ['Прибыль с 1 шт', Math.round(r.profit) + ' ₽'],
    ['Итого на партию', Math.round(r.price * r.qty) + ' ₽']
  ];
  const esc = v =&gt; String(v ?? '').replace(/&amp;/g,'&amp;amp;').replace(/&lt;/g,'&amp;lt;').replace(/&gt;/g,'&amp;gt;');
  const table = `&lt;table border="1" cellspacing="0" cellpadding="4"&gt;
    &lt;thead style="background:#000;color:#ffd700;"&gt;&lt;tr&gt;${header.map(h=&gt;`&lt;th&gt;${esc(h)}&lt;/th&gt;`).join('')}&lt;/tr&gt;&lt;/thead&gt;
    &lt;tbody&gt;${body.map(row=&gt;`&lt;tr&gt;${row.map(c=&gt;`&lt;td&gt;${esc(c)}&lt;/td&gt;`).join('')}&lt;/tr&gt;`).join('')}&lt;/tbody&gt;&lt;/table&gt;`;
  const html = `&lt;html xmlns:x="urn:schemas-microsoft-com:office:excel"&gt;&lt;head&gt;&lt;meta charset="UTF-8"&gt;
    &lt;style&gt;td,th{font-family:Arial;font-size:12px;}&lt;/style&gt;&lt;/head&gt;
    &lt;body&gt;&lt;h2&gt;Расчёт змеевика ПРО — ${today()}&lt;/h2&gt;
    &lt;p&gt;ООО «Арсенал-Деталь» · 8 (992) 017-49-73&lt;/p&gt;
    &lt;p&gt;&lt;b&gt;Референс:&lt;/b&gt; чертеж 19.02.35.533 (труба 10×2, Ø100, 7.32м) → база ~24,000₽&lt;/p&gt;
    &lt;p&gt;&lt;b&gt;Применяемый коэффициент наценки:&lt;/b&gt; 4.5 (включает все накладные, логистику и прибыль)&lt;/p&gt;
    ${table}
    &lt;p&gt;&lt;i&gt;Расчёт является предварительным. Точная стоимость зависит от объёма партии и требований к овальности.&lt;/i&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;`;
  downloadBlob(new Blob(['\uFEFF' + html], {type:'application/vnd.ms-excel;charset=utf-8;'}), 'zmevik_pro_' + today() + '.xls');
}

/* ==================== СТАРТ ==================== */
let state = { result: null };
calculate();
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</subtitle>
  <updated>2026-10-12T05:31:23Z</updated>
  <logo>https://pandoraburo.ru/ssl/u/pic/07/26436cc3c611f19d9efcd8c4a10874/-/0c723f71762611f1b3964aaba1665535.jpg</logo>
  <author>
    <name>1592962</name>
    <uri>https://www.pandoraburo.ru/</uri>
  </author>
</feed>
