<?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/g-305-gidropressovoe-oborudovanie</id>
  <link href="https://www.pandoraburo.ru/g-305-gidropressovoe-oborudovanie.xml" rel="self"/>
  <title>Г-305 Гидропрессовое оборудование</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.0"&gt;
&lt;title&gt;Г305 / Г305М · Прайс + Запрос + Счёт&lt;/title&gt;
&lt;style&gt;
  :root{--gold:#FFD700;--gold-light:#FFE55C;--bg:#0a0a0a;--muted:#9a8040;--border:rgba(212,175,55,.35);--green:#7dff7d;--red:#ff8a7a;--cyan:#6ee8e4;}
  *{box-sizing:border-box;margin:0;padding:0}
  body{background:#050505;color:#e8e8e8;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Arial,sans-serif;padding:20px 14px;line-height:1.5;}
  .wrap{max-width:1900px;margin:0 auto}

  .header{background:radial-gradient(120% 120% at 20% 0%,rgba(255,215,0,.25),transparent 55%),linear-gradient(135deg,#1a1408,#0a0a0a);border:2px solid var(--gold);border-radius:14px;padding:28px 24px;text-align:center;margin-bottom:16px;box-shadow:0 0 40px rgba(255,215,0,.25),0 6px 22px rgba(0,0,0,.6);}
  .tag{display:inline-block;background:var(--gold);color:#0a0a0a;font-size:10px;font-weight:800;letter-spacing:2px;padding:4px 14px;border-radius:999px;margin-bottom:14px;box-shadow:0 0 16px rgba(255,215,0,.7);}
  .header h1{font-size:28px;font-weight:900;letter-spacing:3px;color:var(--gold);text-transform:uppercase;margin-bottom:12px;text-shadow:0 0 10px rgba(255,215,0,.95),0 0 25px rgba(255,199,0,.8),0 0 45px rgba(255,170,0,.6);animation:goldPulse 3s ease-in-out infinite;}
  @keyframes goldPulse{0%,100%{text-shadow:0 0 10px rgba(255,215,0,.95),0 0 25px rgba(255,199,0,.8),0 0 45px rgba(255,170,0,.6);}50%{text-shadow:0 0 15px rgba(255,215,0,1),0 0 35px rgba(255,199,0,.95),0 0 60px rgba(255,170,0,.8);}}
  .line{width:80px;height:3px;background:var(--gold);margin:0 auto 12px;border-radius:2px;box-shadow:0 0 15px var(--gold);}
  .header p{color:var(--gold-light);font-size:14px;opacity:.95;}

  /* СТАТИСТИКА */
  .stats{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;margin-bottom:16px;}
  @media(max-width:1200px){.stats{grid-template-columns:repeat(3,1fr);}}
  @media(max-width:600px){.stats{grid-template-columns:repeat(2,1fr);}}
  .stat{background:var(--bg);border:1px solid var(--gold);border-radius:12px;padding:14px;text-align:center;}
  .lbl{font-size:10px;font-weight:700;letter-spacing:1px;text-transform:uppercase;color:var(--gold);opacity:.7;margin-bottom:6px;}
  .val{font-size:18px;font-weight:800;color:var(--gold-light);line-height:1.1;}
  .val.green{color:var(--green);}
  .val.red{color:var(--red);}
  .val.sm{font-size:14px;}

  /* ТУЛБАР */
  .toolbar{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px;}
  .btn{display:inline-flex;align-items:center;gap:6px;padding:10px 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;}
  .btn:hover{background:var(--gold);color:#0a0a0a;}
  .btn.primary{background:var(--gold);color:#0a0a0a;}
  .btn.green{background:linear-gradient(135deg,#7dff7d,#3aa03a);color:#0a0a0a;border-color:#7dff7d;}
  .btn.cyan{background:linear-gradient(135deg,#6ee8e4,#3aa0a0);color:#0a0a0a;border-color:#6ee8e4;font-weight:900;}
  .btn.red{background:transparent;color:var(--red);border-color:var(--red);}
  .btn.red:hover{background:var(--red);color:#0a0a0a;}

  /* ФИЛЬТР */
  .filter{background:var(--bg);border:1px solid var(--gold);border-radius:14px;padding:16px;margin-bottom:16px;}
  .filter-row{display:grid;grid-template-columns:2fr auto auto;gap:12px;align-items:center;}
  @media(max-width:700px){.filter-row{grid-template-columns:1fr;}}
  .search{width:100%;padding:12px 14px;border:1px solid var(--gold);border-radius:9px;font-size:14px;background:#0a0a0a;color:var(--gold-light);outline:none;font-family:inherit;font-weight:600;}
  .search::placeholder{color:rgba(212,175,55,.4);}
  .counter{color:var(--gold);font-size:13px;white-space:nowrap;padding:12px 14px;border:1px solid var(--gold);border-radius:9px;background:#0a0a0a;font-weight:700;}
  .cat-select{padding:12px 14px;border:1px solid var(--gold);border-radius:9px;background:#0a0a0a;color:var(--gold-light);font-size:13px;font-family:inherit;outline:none;cursor:pointer;font-weight:700;}

  /* ТАБЛИЦА */
  .table-block{background:var(--bg);border:1px solid var(--gold);border-radius:14px;padding:20px;margin-bottom:16px;}
  .block-title{color:var(--gold);font-size:12px;font-weight:800;letter-spacing:2px;text-align:center;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid var(--border);text-transform:uppercase;text-shadow:0 0 12px rgba(255,215,0,.6);}
  .table-wrap{overflow:auto;max-height:70vh;border-radius:8px;border:1px solid var(--gold);}
  table{width:100%;table-layout:auto;border-collapse:collapse;background:#0a0a0a;font-size:13px;}
  th,td{padding:8px 6px;text-align:left;border-bottom:1px solid rgba(212,175,55,.2);vertical-align:middle;color:var(--gold);background:transparent;white-space:nowrap;}
  th{position:sticky;top:0;z-index:2;background:#0a0a0a;color:var(--gold);font-weight:800;text-transform:uppercase;font-size:10px;letter-spacing:1px;border-bottom:1px solid var(--gold);cursor:pointer;user-select:none;}
  th:hover{background:#1a1408;}
  th.sortable::after{content:' ⇅';opacity:.5;margin-left:4px;font-size:9px;}
  th.asc::after{content:' ▲';opacity:1;color:var(--gold-light);}
  th.desc::after{content:' ▼';opacity:1;color:var(--gold-light);}
  th.num,td.num{text-align:right;font-variant-numeric:tabular-nums;}
  tbody tr{transition:background .15s;}
  tbody tr:hover{background:#1a1408;}
  td.article{font-family:'Courier New',monospace;font-size:12px;color:var(--gold-light);}
  td b{color:#fff;}
  td.margin-pos{color:var(--green);font-weight:800;}
  td.margin-neg{color:var(--red);font-weight:800;}
  input.cell{
    width:100%;padding:5px 6px;border:1px solid var(--border);border-radius:6px;
    background:#0a0a0a;color:var(--gold-light);
    font-size:12px;font-weight:700;text-align:right;
    font-family:inherit;outline:none;font-variant-numeric:tabular-nums;
  }
  input.cell:focus{border-color:var(--gold);box-shadow:0 0 0 3px rgba(255,215,0,.2);}
  input.cell.filled-supp{border-color:rgba(110,232,228,.6);color:var(--cyan);}
  input.cell.filled-our{border-color:rgba(125,255,125,.6);color:var(--green);}
  input.cell.empty{border-color:rgba(255,138,122,.35);}
  input.qty{width:60px;padding:5px 4px;border:1px solid var(--border);border-radius:6px;background:#0a0a0a;color:var(--gold-light);font-size:12px;font-weight:700;text-align:center;font-family:inherit;outline:none;}
  .badge{display:inline-block;padding:2px 6px;border-radius:10px;font-size:9px;font-weight:800;text-transform:uppercase;background:rgba(212,175,55,.15);color:var(--gold-light);border:1px solid rgba(212,175,55,.5);white-space:nowrap;}

  /* КАЛЬКУЛЯТОР РЕМОНТА */
  .repair-block{background:linear-gradient(135deg,rgba(110,232,228,.08),rgba(10,10,10,.95));border:3px solid var(--cyan);border-radius:16px;padding:22px;margin-bottom:16px;position:relative;box-shadow:0 0 30px rgba(110,232,228,.2);}
  .repair-block::before{content:'? КАЛЬКУЛЯТОР РЕМОНТА НАСОСА ?';position:absolute;top:-14px;left:50%;transform:translateX(-50%);background:#0a0a0a;color:var(--cyan);padding:4px 22px;border:2px solid var(--cyan);border-radius:999px;font-size:12px;font-weight:900;letter-spacing:3px;text-shadow:0 0 15px rgba(110,232,228,1);white-space:nowrap;}
  .repair-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:16px;}
  @media(max-width:900px){.repair-grid{grid-template-columns:repeat(2,1fr);}}
  @media(max-width:500px){.repair-grid{grid-template-columns:1fr;}}
  .repair-check{display:flex;align-items:center;gap:8px;padding:10px 12px;background:rgba(0,0,0,.5);border:1px solid var(--cyan);border-radius:8px;cursor:pointer;font-size:13px;font-weight:600;color:var(--cyan);transition:.15s;}
  .repair-check:hover{background:rgba(110,232,228,.1);}
  .repair-check input{width:16px;height:16px;accent-color:var(--cyan);cursor:pointer;}
  .repair-total{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;padding-top:14px;border-top:2px solid var(--cyan);}
  @media(max-width:900px){.repair-total{grid-template-columns:repeat(2,1fr);}}
  .repair-stat{background:rgba(0,0,0,.5);border:1px solid var(--cyan);border-radius:10px;padding:12px;text-align:center;}
  .repair-stat .lbl{color:var(--cyan);font-size:10px;font-weight:800;letter-spacing:1.2px;text-transform:uppercase;margin-bottom:6px;}
  .repair-stat .val{font-size:20px;font-weight:900;color:var(--cyan);}

  /* МОДАЛЬНОЕ ОКНО */
  .modal{position:fixed;inset:0;background:rgba(0,0,0,.85);z-index:1000;display:none;align-items:center;justify-content:center;padding:20px;backdrop-filter:blur(4px);}
  .modal.active{display:flex;}
  .modal-content{background:#0a0a0a;border:3px solid var(--gold);border-radius:16px;max-width:900px;width:100%;max-height:90vh;overflow:auto;padding:26px;box-shadow:0 0 60px rgba(255,215,0,.4);}
  .modal-title{color:var(--gold);font-size:20px;font-weight:900;text-transform:uppercase;letter-spacing:2px;margin-bottom:16px;text-align:center;text-shadow:0 0 15px rgba(255,215,0,.7);}
  .modal-body{color:#e8e8e8;font-size:13px;line-height:1.6;}
  .modal-body pre{background:#050505;border:1px solid var(--border);border-radius:8px;padding:16px;white-space:pre-wrap;font-family:'Courier New',monospace;font-size:12px;color:var(--cyan);max-height:400px;overflow:auto;}
  .modal-actions{display:flex;gap:10px;justify-content:center;margin-top:16px;flex-wrap:wrap;}

  .footnote{display:flex;flex-wrap:wrap;gap:20px;margin-top:14px;padding-top:12px;border-top:1px solid var(--gold);}
  .fn{color:var(--gold);font-size:12px;position:relative;padding-left:14px;opacity:.9;}
  .fn::before{content:"◆";position:absolute;left:0;color:var(--gold);font-size:8px;top:4px;}

  .wrap ::-webkit-scrollbar{width:14px;height:14px;}
  .wrap ::-webkit-scrollbar-track{background:#050505;border:1px solid #2a2210;border-radius:9px;}
  .wrap ::-webkit-scrollbar-thumb{background:linear-gradient(180deg,#FFE55C,#FFD700,#FF8C00);border-radius:9px;border:1px solid #FFD700;}

  @media print{body{background:#fff;color:#000;padding:0;}.header{background:#000 !important;color:#FFD700 !important;-webkit-print-color-adjust:exact;print-color-adjust:exact;}.header h1{color:#FFD700 !important;}.tag{background:#FFD700 !important;color:#000 !important;}.line{background:#FFD700 !important;}.stats,.table-block,.repair-block{background:#fff !important;border-color:#666 !important;}.toolbar,.filter,.modal{display:none !important;}.stat,.repair-stat{background:#fff !important;border-color:#999 !important;}.lbl,.repair-stat .lbl{color:#000 !important;}.val,.repair-stat .val{color:#000 !important;}.block-title{color:#000 !important;}th{background:#000 !important;color:#FFD700 !important;-webkit-print-color-adjust:exact;print-color-adjust:exact;}td{color:#000 !important;border-color:#ccc !important;}input{background:#fff !important;color:#000 !important;border-color:#ccc !important;}}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div class="wrap"&gt;

  &lt;div class="header"&gt;
    &lt;div class="tag"&gt;ВНУТРЕННИЙ ПРАЙС · НАСОС Г305 / Г305М&lt;/div&gt;
    &lt;h1&gt;Насос Г305 / Г305М · Прайс + Запрос + Счёт&lt;/h1&gt;
    &lt;div class="line"&gt;&lt;/div&gt;
    &lt;p&gt;Цена поставщика · Наша цена · Маржа · Калькулятор ремонта · Запросы · Счета&lt;/p&gt;
  &lt;/div&gt;

  
  &lt;div class="stats"&gt;
    &lt;div class="stat"&gt;&lt;div class="lbl"&gt;Всего позиций&lt;/div&gt;&lt;div class="val" id="statTotal"&gt;—&lt;/div&gt;&lt;/div&gt;
    &lt;div class="stat"&gt;&lt;div class="lbl"&gt;С ценой поставщика&lt;/div&gt;&lt;div class="val" id="statSupp"&gt;—&lt;/div&gt;&lt;/div&gt;
    &lt;div class="stat"&gt;&lt;div class="lbl"&gt;С нашей ценой&lt;/div&gt;&lt;div class="val green" id="statOur"&gt;—&lt;/div&gt;&lt;/div&gt;
    &lt;div class="stat"&gt;&lt;div class="lbl"&gt;Сумма закупки&lt;/div&gt;&lt;div class="val sm" id="statSumSupp"&gt;—&lt;/div&gt;&lt;/div&gt;
    &lt;div class="stat"&gt;&lt;div class="lbl"&gt;Сумма продажи&lt;/div&gt;&lt;div class="val sm green" id="statSumOur"&gt;—&lt;/div&gt;&lt;/div&gt;
    &lt;div class="stat"&gt;&lt;div class="lbl"&gt;Общая маржа&lt;/div&gt;&lt;div class="val green" id="statMargin"&gt;—&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;

  
  &lt;div class="toolbar"&gt;
    &lt;button class="btn cyan" onclick="openRequestModal()"&gt;? Сформировать запрос&lt;/button&gt;
    &lt;button class="btn green" onclick="openInvoiceModal()"&gt;? Сформировать счёт&lt;/button&gt;
    &lt;button class="btn primary" onclick="dlCSV()"&gt;⬇ CSV&lt;/button&gt;
    &lt;button class="btn primary" onclick="dlExcel()"&gt;⬇ Excel&lt;/button&gt;
    &lt;button class="btn" onclick="saveLocal()"&gt;? Сохранить&lt;/button&gt;
    &lt;button class="btn" onclick="loadLocal()"&gt;? Загрузить&lt;/button&gt;
    &lt;button class="btn" onclick="window.print()"&gt;? Печать&lt;/button&gt;
    &lt;button class="btn red" onclick="resetAll()"&gt;✕ Сброс&lt;/button&gt;
  &lt;/div&gt;

  
  &lt;div class="repair-block"&gt;
    &lt;div style="color:#6ee8e4;font-size:13px;text-align:center;margin-bottom:16px;font-weight:600"&gt;
      Отметьте детали, которые нужно заменить в насосе — увидите стоимость комплекта для ремонта
    &lt;/div&gt;
    &lt;div class="repair-grid"&gt;
      &lt;label class="repair-check"&gt;&lt;input type="checkbox" class="repair-cb" data-cat="Плунжеры" onchange="calcRepair()" /&gt; ? Плунжеры (3 шт)&lt;/label&gt;
      &lt;label class="repair-check"&gt;&lt;input type="checkbox" class="repair-cb" data-cat="Клапаны" onchange="calcRepair()" /&gt; ⚙️ Клапаны&lt;/label&gt;
      &lt;label class="repair-check"&gt;&lt;input type="checkbox" class="repair-cb" data-cat="Сёдла" onchange="calcRepair()" /&gt; ? Сёдла (3 шт)&lt;/label&gt;
      &lt;label class="repair-check"&gt;&lt;input type="checkbox" class="repair-cb" data-cat="Вкладыши" onchange="calcRepair()" /&gt; ? Вкладыши&lt;/label&gt;
      &lt;label class="repair-check"&gt;&lt;input type="checkbox" class="repair-cb" data-cat="Клапанная коробка" onchange="calcRepair()" /&gt; ? Клапанная коробка&lt;/label&gt;
      &lt;label class="repair-check"&gt;&lt;input type="checkbox" class="repair-cb" data-cat="Коленвал" onchange="calcRepair()" /&gt; ? Коленвал&lt;/label&gt;
      &lt;label class="repair-check"&gt;&lt;input type="checkbox" class="repair-cb" data-cat="Корпусные" onchange="calcRepair()" /&gt; ? Корпусные (шатун, ползун)&lt;/label&gt;
      &lt;label class="repair-check"&gt;&lt;input type="checkbox" class="repair-cb" data-cat="Уплотнения" onchange="calcRepair()" /&gt; ? Уплотнения&lt;/label&gt;
    &lt;/div&gt;
    &lt;div class="repair-total"&gt;
      &lt;div class="repair-stat"&gt;&lt;div class="lbl"&gt;Позиций в ремонте&lt;/div&gt;&lt;div class="val" id="repPositions"&gt;0&lt;/div&gt;&lt;/div&gt;
      &lt;div class="repair-stat"&gt;&lt;div class="lbl"&gt;Сумма закупки&lt;/div&gt;&lt;div class="val" id="repCost"&gt;0 ₽&lt;/div&gt;&lt;/div&gt;
      &lt;div class="repair-stat"&gt;&lt;div class="lbl"&gt;Сумма продажи&lt;/div&gt;&lt;div class="val" id="repSale"&gt;0 ₽&lt;/div&gt;&lt;/div&gt;
      &lt;div class="repair-stat"&gt;&lt;div class="lbl"&gt;? Маржа ремонта&lt;/div&gt;&lt;div class="val" id="repMargin"&gt;0 ₽&lt;/div&gt;&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  
  &lt;div class="filter"&gt;
    &lt;div class="filter-row"&gt;
      &lt;input class="search" type="text" id="search" placeholder="? Поиск: № · чертёж · наименование · материал…" /&gt;
      &lt;div class="counter" id="counter"&gt;Найдено: 0&lt;/div&gt;
      &lt;select class="cat-select" id="fCat" onchange="render()"&gt;&lt;option value="all"&gt;Все категории&lt;/option&gt;&lt;/select&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  
  &lt;div class="table-block"&gt;
    &lt;div class="block-title"&gt;Сводная таблица · 33 позиции&lt;/div&gt;
    &lt;div class="table-wrap"&gt;
      &lt;table id="tbl"&gt;
        &lt;thead&gt;
          &lt;tr&gt;
            &lt;th class="num sortable" data-key="num"&gt;№&lt;/th&gt;
            &lt;th class="sortable" data-key="cat"&gt;Категория&lt;/th&gt;
            &lt;th class="sortable" data-key="article"&gt;Чертёж&lt;/th&gt;
            &lt;th class="sortable" data-key="name"&gt;Наименование&lt;/th&gt;
            &lt;th class="sortable" data-key="material"&gt;Материал&lt;/th&gt;
            &lt;th class="num sortable" data-key="qty"&gt;Кол-во&lt;/th&gt;
            &lt;th class="num"&gt;Цена поставщика, ₽&lt;/th&gt;
            &lt;th class="num"&gt;Наша цена, ₽&lt;/th&gt;
            &lt;th class="num sortable" data-key="margin"&gt;Маржа, ₽&lt;/th&gt;
            &lt;th class="num sortable" data-key="marginPct"&gt;Маржа, %&lt;/th&gt;
            &lt;th&gt;Примечание&lt;/th&gt;
          &lt;/tr&gt;
        &lt;/thead&gt;
        &lt;tbody id="tbody"&gt;&lt;/tbody&gt;
      &lt;/table&gt;
    &lt;/div&gt;
    &lt;div class="footnote"&gt;
      &lt;div class="fn"&gt;Цена поставщика — закупка (голубой цвет)&lt;/div&gt;
      &lt;div class="fn"&gt;Наша цена — продажа (зелёный цвет)&lt;/div&gt;
      &lt;div class="fn"&gt;Маржа считается автоматически&lt;/div&gt;
      &lt;div class="fn"&gt;Кнопка «Сохранить» — данные в браузере&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;

&lt;/div&gt;


&lt;div class="modal" id="modal"&gt;
  &lt;div class="modal-content"&gt;
    &lt;div class="modal-title" id="modalTitle"&gt;Запрос&lt;/div&gt;
    &lt;div class="modal-body" id="modalBody"&gt;&lt;/div&gt;
    &lt;div class="modal-actions"&gt;
      &lt;button class="btn primary" onclick="copyModal()"&gt;? Скопировать&lt;/button&gt;
      &lt;button class="btn" onclick="closeModal()"&gt;✕ Закрыть&lt;/button&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
/* ==================== ДАННЫЕ ==================== */
var data=[
{num:1,cat:'Плунжеры',article:'Г305М.310.417',name:'Плунжер (ионно-азотированный)',material:'38Х2МЮА',qty:3,note:'Ваше КП (Арсенал-Деталь)'},
{num:2,cat:'Плунжеры',article:'Г305А-020-426А',name:'Плунжер',material:'38Х2МЮА',qty:3,note:'Тендер КрАМЗ (50 шт)'},
{num:3,cat:'Плунжеры',article:'Г305',name:'Плунжер',material:'38Х2МЮА',qty:3,note:'КМЗ «Горняк»'},

{num:4,cat:'Коленвал',article:'Г305-02-423',name:'Коленвал',material:'40Х',qty:1,note:'ПО «Техно-М»'},
{num:5,cat:'Коленвал',article:'Г305М (А)',name:'Коленвал в сборе',material:'—',qty:1,note:'ПО «Техно-М»'},

{num:6,cat:'Клапанная коробка',article:'Г305М310.438',name:'Клапанная коробка',material:'20Х13',qty:1,note:'Тендер (Киров)'},
{num:7,cat:'Клапанная коробка',article:'Г305А-020-401',name:'Корпус клапанной коробки',material:'30Х13',qty:1,note:'КП ООО «ЮжуралТехТорг»'},
{num:8,cat:'Клапанная коробка',article:'Г305А-181-401',name:'Корпус клапанной группы',material:'—',qty:1,note:'Тендер КрАМЗ (12 шт)'},

{num:9,cat:'Клапаны',article:'Г305А-182-001СБ',name:'Клапан обратный',material:'—',qty:3,note:'Ваше КП (Арсенал-Деталь)'},
{num:10,cat:'Клапаны',article:'Г305 (А, М)',name:'Клапан обратный',material:'—',qty:3,note:'ПО «Техно-М»'},
{num:11,cat:'Клапаны',article:'Г305 (А, М)',name:'Клапан охолостительный',material:'—',qty:3,note:'ПО «Техно-М»'},
{num:12,cat:'Клапаны',article:'Г305М.310.420',name:'Клапан',material:'—',qty:6,note:'Ваше КП (Арсенал-Деталь)'},

{num:13,cat:'Вкладыши',article:'Г305М.12150 СБ',name:'Вкладыши (комплект)',material:'Баббит',qty:1,note:'КП ООО «ЮжуралТехТорг»'},
{num:14,cat:'Вкладыши',article:'—',name:'Вкладыши бабитовые',material:'Баббит',qty:6,note:'Ваш список'},
{num:15,cat:'Вкладыши',article:'Г305',name:'Вкладыши',material:'Ст.20',qty:6,note:'ПО «Техно-М»'},

{num:16,cat:'Корпусные',article:'Г305М (А)',name:'Станина',material:'—',qty:1,note:'ПО «Техно-М»'},
{num:17,cat:'Корпусные',article:'Г305-02-13',name:'Шатун в сборе',material:'—',qty:3,note:'Тендер КрАМЗ'},
{num:18,cat:'Корпусные',article:'Г305М.121',name:'Шатун',material:'Ст.35',qty:3,note:'ПО «Техно-М»'},
{num:19,cat:'Корпусные',article:'Г305.12040',name:'Ползун',material:'Ст.35',qty:3,note:'Тендер КрАМЗ'},
{num:20,cat:'Корпусные',article:'Г305',name:'Ползун (с текст. прокладкой)',material:'Ст.35',qty:3,note:'ПО «Техно-М»'},

{num:21,cat:'Сёдла',article:'Г305.310.403',name:'Седло верхнее',material:'—',qty:3,note:'ООО «ДетальЭкспресс»'},
{num:22,cat:'Сёдла',article:'Г305.310.410',name:'Седло нижнее',material:'—',qty:3,note:'Ваш список'},
{num:23,cat:'Сёдла',article:'Г305А-182-403',name:'Седло клапана',material:'—',qty:3,note:'Тендер КрАМЗ (30 шт)'},

{num:24,cat:'Уплотнения',article:'—',name:'Манжеты (комплект)',material:'—',qty:1,note:'ПО «Техно-М»'},

{num:25,cat:'Прочие',article:'Г305-02-405',name:'Палец шатунный',material:'—',qty:3,note:'Тендер КрАМЗ'},
{num:26,cat:'Прочие',article:'Г305-02-010',name:'Планка',material:'—',qty:2,note:'Тендер КрАМЗ'},
{num:27,cat:'Прочие',article:'Г305-02-009',name:'Планка',material:'—',qty:2,note:'Тендер КрАМЗ'},
{num:28,cat:'Прочие',article:'СТП44-2-01-82СБ',name:'Гидропереключатель',material:'—',qty:1,note:'Счёт ООО «ЮжуралТехТорг»'},
{num:29,cat:'Прочие',article:'Г305А-181-420',name:'Втулка',material:'—',qty:10,note:'Тендер КрАМЗ (10 шт)'},
{num:30,cat:'Прочие',article:'Г305А-181-421',name:'Кольцо',material:'—',qty:20,note:'Тендер КрАМЗ (20 шт)'},
{num:31,cat:'Прочие',article:'Г305М.310.423',name:'Проставка',material:'—',qty:24,note:'Тендер КрАМЗ (24 шт)'},

{num:32,cat:'Насос в сборе',article:'Г305М',name:'Насос Г305М (новый)',material:'—',qty:1,note:'Ваше КП (Арсенал-Деталь)'},
{num:33,cat:'Насос в сборе',article:'Г305',name:'Насос Г305',material:'—',qty:1,note:'Уточняется'}
];

/* Предзаполненные цены (поставщик / наша) */
var pricesSupp={
  1:45200, 9:405000, 12:15700, 13:220000, 7:1750000, 28:445000, 32:8512000
};
var pricesOur={};
var state={search:'',cat:'all',sort:{key:'num',dir:1}};
var repairCats={};

function fmt(n){return Math.round(n).toLocaleString('ru-RU');}

/* ==================== РАСЧЁТ ==================== */
function calcMargins(r){
  var supp=pricesSupp[r.num]||0;
  var our=pricesOur[r.num]||0;
  var margin=(supp&gt;0&amp;&amp;our&gt;0)?our-supp:0;
  var marginPct=(supp&gt;0&amp;&amp;our&gt;0)?((our-supp)/supp*100):0;
  return {supp:supp, our:our, margin:margin, marginPct:marginPct};
}

/* ==================== ФИЛЬТРАЦИЯ ==================== */
function getFiltered(){
  var rows=data.slice();
  if(state.cat!=='all') rows=rows.filter(function(r){return r.cat===state.cat;});
  if(state.search){
    var q=state.search.trim().toLowerCase();
    rows=rows.filter(function(r){
      return String(r.num).indexOf(q)!==-1 ||
             (r.article||'').toLowerCase().indexOf(q)!==-1 ||
             (r.name||'').toLowerCase().indexOf(q)!==-1 ||
             (r.material||'').toLowerCase().indexOf(q)!==-1;
    });
  }
  if(state.sort.key){
    var k=state.sort.key,d=state.sort.dir;
    rows.sort(function(a,b){
      var va,vb;
      if(k==='margin'||k==='marginPct'){
        va=calcMargins(a)[k];vb=calcMargins(b)[k];
      } else {
        va=a[k];vb=b[k];
      }
      if(typeof va==='number'&amp;&amp;typeof vb==='number') return (va-vb)*d;
      return String(va).localeCompare(String(vb),'ru')*d;
    });
  }
  return rows;
}

/* ==================== СТАТИСТИКА ==================== */
function updateStats(){
  document.getElementById('statTotal').textContent=data.length;
  var filledSupp=0,filledOur=0,sumSupp=0,sumOur=0,marginSum=0;
  data.forEach(function(r){
    var m=calcMargins(r);
    if(m.supp&gt;0) filledSupp++;
    if(m.our&gt;0) filledOur++;
    sumSupp+=m.supp*r.qty;
    sumOur+=m.our*r.qty;
    marginSum+=(m.our-m.supp)*r.qty;
  });
  document.getElementById('statSupp').textContent=filledSupp;
  document.getElementById('statOur').textContent=filledOur;
  document.getElementById('statSumSupp').textContent=sumSupp&gt;0?fmt(sumSupp)+' ₽':'—';
  document.getElementById('statSumOur').textContent=sumOur&gt;0?fmt(sumOur)+' ₽':'—';
  document.getElementById('statMargin').textContent=marginSum!==0?fmt(marginSum)+' ₽':'—';
}

/* ==================== РЕНДЕР ==================== */
function render(){
  var rows=getFiltered();
  var tbody=document.getElementById('tbody');
  tbody.innerHTML='';
  if(!rows.length){
    tbody.innerHTML='&lt;tr&gt;&lt;td colspan="11" style="text-align:center;padding:40px;opacity:.6"&gt;Ничего не найдено&lt;/td&gt;&lt;/tr&gt;';
    document.getElementById('counter').textContent='Найдено: 0';
    updateStats();calcRepair();return;
  }
  rows.forEach(function(r){
    var m=calcMargins(r);
    var suppCls=pricesSupp[r.num]&gt;0?'filled-supp':'empty';
    var ourCls=pricesOur[r.num]&gt;0?'filled-our':'empty';
    var marginCls=m.margin&gt;0?'margin-pos':(m.margin&lt;0?'margin-neg':'');
    var tr=document.createElement('tr');
    tr.innerHTML=
      '&lt;td class="num"&gt;'+r.num+'&lt;/td&gt;'+
      '&lt;td&gt;&lt;span class="badge"&gt;'+r.cat+'&lt;/span&gt;&lt;/td&gt;'+
      '&lt;td class="article"&gt;'+r.article+'&lt;/td&gt;'+
      '&lt;td&gt;&lt;b&gt;'+r.name+'&lt;/b&gt;&lt;/td&gt;'+
      '&lt;td&gt;'+r.material+'&lt;/td&gt;'+
      '&lt;td class="num"&gt;'+r.qty+'&lt;/td&gt;'+
      '&lt;td&gt;&lt;input type="number" class="cell '+suppCls+'" data-num="'+r.num+'" data-field="supp" value="'+(pricesSupp[r.num]||'')+'" placeholder="—" min="0" step="100"&gt;&lt;/td&gt;'+
      '&lt;td&gt;&lt;input type="number" class="cell '+ourCls+'" data-num="'+r.num+'" data-field="our" value="'+(pricesOur[r.num]||'')+'" placeholder="—" min="0" step="100"&gt;&lt;/td&gt;'+
      '&lt;td class="num '+marginCls+'"&gt;'+(m.margin!==0?fmt(m.margin):'—')+'&lt;/td&gt;'+
      '&lt;td class="num '+marginCls+'"&gt;'+(m.marginPct!==0?Math.round(m.marginPct)+'%':'—')+'&lt;/td&gt;'+
      '&lt;td style="font-size:11px;color:#9a8040"&gt;'+r.note+'&lt;/td&gt;';
    tbody.appendChild(tr);
  });
  document.getElementById('counter').textContent='Найдено: '+rows.length;
  updateStats();
  calcRepair();
  bindInputs();
}

function bindInputs(){
  document.querySelectorAll('input.cell').forEach(function(inp){
    inp.addEventListener('input',function(){
      var n=parseInt(this.dataset.num,10);
      var f=this.dataset.field;
      var v=parseFloat(this.value);
      var obj=f==='supp'?pricesSupp:pricesOur;
      if(isNaN(v)||v&lt;=0){
        delete obj[n];
        this.classList.remove('filled-supp','filled-our');
        this.classList.add('empty');
      } else {
        obj[n]=v;
        this.classList.remove('empty');
        this.classList.add(f==='supp'?'filled-supp':'filled-our');
      }
      updateStats();calcRepair();updateRowMargin(n);
    });
  });
}

function updateRowMargin(n){
  var r=data.find(function(x){return x.num===n;});
  if(!r) return;
  var m=calcMargins(r);
  var rows=document.querySelectorAll('#tbody tr');
  rows.forEach(function(tr){
    var firstCell=tr.querySelector('td');
    if(!firstCell) return;
    if(parseInt(firstCell.textContent,10)===n){
      var cells=tr.querySelectorAll('td');
      var mc=cells[8],mp=cells[9];
      mc.textContent=m.margin!==0?fmt(m.margin):'—';
      mp.textContent=m.marginPct!==0?Math.round(m.marginPct)+'%':'—';
      mc.className='num '+(m.margin&gt;0?'margin-pos':(m.margin&lt;0?'margin-neg':''));
      mp.className='num '+(m.margin&gt;0?'margin-pos':(m.margin&lt;0?'margin-neg':''));
    }
  });
}

/* ==================== КАТЕГОРИИ ==================== */
function renderCatSelect(){
  var cats=[],seen={};
  data.forEach(function(r){
    if(!seen[r.cat]){seen[r.cat]=1;cats.push(r.cat);}
  });
  cats.sort();
  var sel=document.getElementById('fCat');
  sel.innerHTML='&lt;option value="all"&gt;Все категории&lt;/option&gt;'+cats.map(function(c){
    return '&lt;option value="'+c+'"'+(state.cat===c?' selected':'')+'&gt;'+c+'&lt;/option&gt;';
  }).join('');
}

/* ==================== КАЛЬКУЛЯТОР РЕМОНТА ==================== */
function calcRepair(){
  var checkedCats={};
  document.querySelectorAll('.repair-cb:checked').forEach(function(cb){
    checkedCats[cb.dataset.cat]=1;
  });
  var posCount=0,sumCost=0,sumSale=0,sumMargin=0;
  data.forEach(function(r){
    if(!checkedCats[r.cat]) return;
    posCount++;
    var m=calcMargins(r);
    sumCost+=m.supp*r.qty;
    sumSale+=m.our*r.qty;
    sumMargin+=(m.our-m.supp)*r.qty;
  });
  document.getElementById('repPositions').textContent=posCount;
  document.getElementById('repCost').textContent=sumCost&gt;0?fmt(sumCost)+' ₽':'0 ₽';
  document.getElementById('repSale').textContent=sumSale&gt;0?fmt(sumSale)+' ₽':'0 ₽';
  document.getElementById('repMargin').textContent=sumMargin!==0?fmt(sumMargin)+' ₽':'0 ₽';
}

/* ==================== МОДАЛЬНЫЕ ОКНА ==================== */
function openModal(title,body){
  document.getElementById('modalTitle').textContent=title;
  document.getElementById('modalBody').innerHTML='&lt;pre&gt;'+body+'&lt;/pre&gt;';
  document.getElementById('modal').classList.add('active');
}
function closeModal(){
  document.getElementById('modal').classList.remove('active');
}
function copyModal(){
  var txt=document.querySelector('#modalBody pre').textContent;
  if(navigator.clipboard&amp;&amp;navigator.clipboard.writeText){
    navigator.clipboard.writeText(txt).then(function(){alert('Скопировано!');});
  } else {
    alert('Не удалось скопировать');
  }
}

/* ==================== ЗАПРОС ПРОИЗВОДИТЕЛЮ ==================== */
function openRequestModal(){
  var rows=data.slice();
  var text='Добрый день!\n\n'+
    'ООО «Арсенал-Деталь» (г. Екатеринбург) занимается поставками и изготовлением запчастей для гидропрессового оборудования.\n\n'+
    'Ранее мы уже работали с вами по ряду позиций для насоса Г305 / Г305М. Сейчас клиенты снова запрашивают эти детали — просим дать актуальные цены, наличие (или срок изготовления) и состояние (новое / восстановленное).\n\n'+
    'Прошу также указать:\n'+
    '• Условия оплаты (предоплата / отсрочка)\n'+
    '• Срок изготовления или отгрузки\n'+
    '• Условия доставки в Екатеринбург\n'+
    '• Гарантию на изделия\n\n'+
    'Перечень позиций:\n\n'+
    '№  |  Чертёж  |  Наименование  |  Материал  |  Кол-во\n'+
    '─────────────────────────────────────────────────────\n';
  rows.forEach(function(r){
    text+=(r.num+'  |  '+r.article+'  |  '+r.name+'  |  '+r.material+'  |  '+r.qty+'\n');
  });
  text+='\nПрошу указать цены и сроки по каждой позиции.\n\n'+
    'С уважением,\n'+
    'ООО «Арсенал-Деталь»\n'+
    'Тел: 8 902 873-36-90\n'+
    'E-mail: arsenal-detal@list.ru';
  openModal('? ЗАПРОС ПРОИЗВОДИТЕЛЮ',text);
}

/* ==================== СЧЁТ КЛИЕНТУ ==================== */
function openInvoiceModal(){
  var rows=data.filter(function(r){return pricesOur[r.num]&gt;0;});
  if(!rows.length){alert('Сначала заполните «Нашу цену» хотя бы по одной позиции.');return;}
  var text='КОММЕРЧЕСКОЕ ПРЕДЛОЖЕНИЕ\n'+
    'ООО «Арсенал-Деталь» · 8 902 873-36-90\n'+
    'Дата: '+new Date().toLocaleDateString('ru-RU')+'\n\n'+
    'Насос Г305 / Г305М — запасные части\n\n'+
    '№  |  Чертёж  |  Наименование  |  Цена, ₽  |  Кол-во  |  Сумма, ₽\n'+
    '──────────────────────────────────────────────────────────\n';
  var total=0;
  rows.forEach(function(r){
    var sum=pricesOur[r.num]*r.qty;
    total+=sum;
    text+=(r.num+'  |  '+r.article+'  |  '+r.name+'  |  '+fmt(pricesOur[r.num])+'  |  '+r.qty+'  |  '+fmt(sum)+'\n');
  });
  text+='\n═══════════════════════════════════════════════════════════\n';
  text+='ИТОГО: '+fmt(total)+' ₽ (с НДС 22%)\n';
  text+='═══════════════════════════════════════════════════════════\n\n';
  text+='Условия оплаты: 50% предоплата, 50% по факту готовности.\n'+
    'Срок изготовления: уточняется.\n'+
    'Доставка: ТК до терминала.\n\n'+
    'Менеджер: Ольга · 8 902 873-36-90';
  openModal('? СЧЁТ КЛИЕНТУ',text);
}

/* ==================== СОХРАНЕНИЕ ==================== */
function saveLocal(){
  try{
    localStorage.setItem('g305_supp',JSON.stringify(pricesSupp));
    localStorage.setItem('g305_our',JSON.stringify(pricesOur));
    alert('Сохранено: '+Object.keys(pricesSupp).length+' закупка, '+Object.keys(pricesOur).length+' продажа.');
  }catch(e){alert('Ошибка: '+e.message);}
}

function loadLocal(){
  try{
    var s=localStorage.getItem('g305_supp');
    var o=localStorage.getItem('g305_our');
    if(!s&amp;&amp;!o){alert('Нет сохранённых данных.');return;}
    if(s) pricesSupp=JSON.parse(s);
    if(o) pricesOur=JSON.parse(o);
    render();
    alert('Загружено.');
  }catch(e){alert('Ошибка: '+e.message);}
}

function resetAll(){
  if(!confirm('Сбросить все цены?')) return;
  pricesSupp={1:45200,9:405000,12:15700,13:220000,7:1750000,28:445000,32:8512000};
  pricesOur={};
  render();
}

/* ==================== ЭКСПОРТ ==================== */
function dlCSV(){
  var rows=getFiltered();
  var header=['№','Категория','Чертёж','Наименование','Материал','Кол-во','Цена поставщика,₽','Наша цена,₽','Маржа,₽','Маржа,%','Примечание'];
  var body=rows.map(function(r){
    var m=calcMargins(r);
    return [r.num,r.cat,r.article,r.name,r.material,r.qty,
            m.supp||'',m.our||'',m.margin||'',m.marginPct?Math.round(m.marginPct):'',r.note];
  });
  var esc=function(v){return '"'+String(v==null?'':v).replace(/"/g,'""')+'"';};
  var csv=[header].concat(body).map(function(r){return r.map(esc).join(';');}).join('\r\n');
  dlBlob(new Blob(['\uFEFF'+csv],{type:'text/csv;charset=utf-8;'}),'G305_prices_'+today()+'.csv');
}

function dlExcel(){
  var rows=getFiltered();
  var header=['№','Категория','Чертёж','Наименование','Материал','Кол-во','Цена поставщика,₽','Наша цена,₽','Маржа,₽','Маржа,%','Примечание'];
  var body=rows.map(function(r){
    var m=calcMargins(r);
    return [r.num,r.cat,r.article,r.name,r.material,r.qty,
            m.supp||'',m.our||'',m.margin||'',m.marginPct?Math.round(m.marginPct):'',r.note];
  });
  var esc=function(v){return String(v==null?'':v).replace(/&amp;/g,'&amp;amp;').replace(/&lt;/g,'&amp;lt;').replace(/&gt;/g,'&amp;gt;');};
  var table='&lt;table border="1" cellspacing="0" cellpadding="4"&gt;&lt;thead style="background:#000;color:#FFD700;"&gt;&lt;tr&gt;'+header.map(function(h){return '&lt;th&gt;'+esc(h)+'&lt;/th&gt;';}).join('')+'&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;'+body.map(function(r){return '&lt;tr&gt;'+r.map(function(c){return '&lt;td&gt;'+esc(c)+'&lt;/td&gt;';}).join('')+'&lt;/tr&gt;';}).join('')+'&lt;/tbody&gt;&lt;/table&gt;';
  var 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;Прайс — Г305/Г305М · '+today()+'&lt;/h2&gt;'+table+'&lt;p&gt;&lt;i&gt;ООО «Арсенал Деталь» · 8 902 873-36-90&lt;/i&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;';
  dlBlob(new Blob(['\uFEFF'+html],{type:'application/vnd.ms-excel;charset=utf-8;'}),'G305_prices_'+today()+'.xls');
}

function dlBlob(blob,filename){
  var url=URL.createObjectURL(blob);
  var a=document.createElement('a');
  a.href=url;a.download=filename;
  document.body.appendChild(a);a.click();a.remove();
  setTimeout(function(){URL.revokeObjectURL(url);},500);
}

function today(){
  var d=new Date(),p=function(n){return String(n).padStart(2,'0');};
  return d.getFullYear()+'-'+p(d.getMonth()+1)+'-'+p(d.getDate());
}

/* ==================== СОБЫТИЯ ==================== */
document.addEventListener('DOMContentLoaded',function(){
  document.getElementById('search').addEventListener('input',function(e){state.search=e.target.value;render();});
  document.getElementById('fCat').addEventListener('change',function(e){state.cat=e.target.value;render();});
  document.querySelectorAll('#tbl th.sortable').forEach(function(th){
    th.addEventListener('click',function(){
      var k=th.dataset.key;
      if(state.sort.key===k) state.sort.dir*=-1;
      else state.sort={key:k,dir:-1};
      render();
    });
  });
  document.getElementById('modal').addEventListener('click',function(e){
    if(e.target===this) closeModal();
  });
  renderCatSelect();
  render();
});
&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>
