Калькулятор стоимости печати

Параметры заказа

Результат расчёта

Введите параметры заказа и нажмите «Рассчитать»

Бумага (листы SRA3 — 320×450 мм)

НазваниеПлотностьЦена за лист

Плёнки для ламинирования

НазваниеЦена за рулонДлинаЦена за метр

Настройки стоимости

'; return; } var paper = null; for (var i = 0; i < D.papers.length; i++) { if (D.papers[i].id === pid) { paper = D.papers[i]; break; } } if (!paper) { outEl.style.display = 'none'; empEl.style.display = ''; empEl.innerHTML = '
Бумага не найдена. Добавьте её в админ-панели
'; return; } var film = null; if (lam > 0) { if (!fid) { outEl.style.display = 'none'; empEl.style.display = ''; empEl.innerHTML = '
Выберите плёнку для ламинирования
'; return; } for (var j = 0; j < D.films.length; j++) { if (D.films[j].id === fid) { film = D.films[j]; break; } } if (!film) { outEl.style.display = 'none'; empEl.style.display = ''; empEl.innerHTML = '
Плёнка не найдена. Добавьте её в админ-панели
'; return; } } /* card with bleed */ var bcw = cw + BLEED * 2; var bch = ch + BLEED * 2; /* try both orientations on SRA3 */ var c1 = Math.floor(SRA3_W / bcw); var r1 = Math.floor(SRA3_H / bch); var t1 = c1 * r1; var c2 = Math.floor(SRA3_W / bch); var r2 = Math.floor(SRA3_H / bcw); var t2 = c2 * r2; var cols, rows, cps, fcw, fch; if (t1 >= t2) { cols = c1; rows = r1; cps = t1; fcw = bcw; fch = bch; } else { cols = c2; rows = r2; cps = t2; fcw = bch; fch = bcw; } if (cps === 0) { outEl.style.display = 'none'; empEl.style.display = ''; empEl.innerHTML = '
Карточка не помещается на лист SRA3. Попробуйте уменьшить размер
'; return; } var sheets = Math.ceil(qty / cps); var st = D.st; /* paper cost */ var paperCost = sheets * paper.price; /* print cost with linear discount */ var fullClick = st.click * sides; var minClick = st.cmin * sides; var dvol = Math.max(st.dvol, 1); var curClick; if (sheets <= 1) { curClick = fullClick; } else if (sheets >= dvol) { curClick = minClick; } else { curClick = fullClick - (fullClick - minClick) * ((sheets - 1) / (dvol - 1)); } var printCost = curClick * sheets; /* lamination */ var lamCost = 0; var filmPPM = 0; var filmMeters = 0; if (lam > 0 && film) { filmPPM = film.rl > 0 ? film.cpr / film.rl : 0; filmMeters = st.fusage / 100; lamCost = filmPPM * filmMeters * sheets * lam; } /* cutting */ var cutLenMM = (cols + 1) * rows * fch + (rows + 1) * cols * fcw; var cutMeters = cutLenMM * sheets / 1000; var cutCost = cutMeters * st.cut; /* scoring */ var scoreCost = 0; var scoreMeters = 0; if (doScore) { scoreMeters = cps * fcw * sheets / 1000; scoreCost = scoreMeters * st.score; } /* pre/post press */ var preCost = sheets * st.pre; var postCost = qty * st.post; /* total */ var total = paperCost + printCost + lamCost + cutCost + scoreCost + preCost + postCost; var perCard = qty > 0 ? total / qty : 0; var discPct = fullClick > 0 ? Math.round((1 - curClick / fullClick) * 100) : 0; /* render */ empEl.style.display = 'none'; outEl.style.display = ''; var parts = []; /* summary row */ parts.push('
'); parts.push('
' + cps + '
Карточек на листе
'); parts.push('
' + sheets + '
Листов SRA3
'); parts.push('
' + fcw + '×' + fch + '
Размер с вылетом, мм
'); parts.push('
'); /* breakdown */ parts.push('
Детализация стоимости
'); /* paper */ parts.push('
'); parts.push('
📄 Бумага
'); parts.push('
' + sheets + ' листов × ' + fmt(paper.price) + ' ₽
'); parts.push('
' + fmt(paperCost) + ' ₽
'); /* print */ var printLabel = sides === 1 ? 'Односторонняя' : 'Двусторонняя'; var printDetail = sheets + ' листов × ' + fmt(curClick) + ' ₽'; if (discPct > 0) { printDetail += ' −' + discPct + '%'; } parts.push('
'); parts.push('
🖨️ Печать (' + printLabel + ')
'); parts.push('
' + printDetail + '
'); parts.push('
' + fmt(printCost) + ' ₽
'); /* lamination */ if (lam > 0 && film) { var lamLabel = lam === 1 ? 'Одностороннее' : 'Двустороннее'; parts.push('
'); parts.push('
🎞️ Ламинирование (' + lamLabel + ')
'); parts.push('
' + esc(film.name) + ' — ' + fmt(filmMeters) + ' м/л × ' + sheets + ' л × ' + lam + ' ст.
'); parts.push('
' + fmt(lamCost) + ' ₽
'); } /* cutting */ parts.push('
'); parts.push('
✂️ Резка плоттером
'); parts.push('
' + fmt(cutMeters) + ' пог. м × ' + fmt(st.cut) + ' ₽/м
'); parts.push('
' + fmt(cutCost) + ' ₽
'); /* scoring */ if (doScore) { parts.push('
'); parts.push('
📐 Биговка
'); parts.push('
' + fmt(scoreMeters) + ' пог. м × ' + fmt(st.score) + ' ₽/м
'); parts.push('
' + fmt(scoreCost) + ' ₽
'); } /* pre-press */ if (preCost > 0) { parts.push('
'); parts.push('
⚙️ Допечатка
'); parts.push('
' + sheets + ' листов × ' + fmt(st.pre) + ' ₽
'); parts.push('
' + fmt(preCost) + ' ₽
'); } /* post-press */ if (postCost > 0) { parts.push('
'); parts.push('
🔧 Постпечатка
'); parts.push('
' + qty + ' шт × ' + fmt(st.post) + ' ₽
'); parts.push('
' + fmt(postCost) + ' ₽
'); } parts.push('
'); /* total box */ parts.push('
'); parts.push('
ИТОГО тираж'); parts.push('' + fmt(total) + ' ₽
'); parts.push('
Стоимость одной карточки'); parts.push('' + fmt(perCard) + ' ₽
'); if (discPct > 0) { parts.push('
Скидка за тираж: −' + discPct + '%
'); } parts.push('
'); outEl.innerHTML = parts.join('\n'); } /* ---- boot ---- */ function boot() { loadData(); /* tab clicks */ var tabsContainer = el('hp-tabs'); if (tabsContainer) { tabsContainer.addEventListener('click', function(e) { var btn = e.target; if (btn.hasAttribute('data-v')) { switchView(btn.getAttribute('data-v')); } }); } /* calc view */ el('c-lam').addEventListener('change', function() { el('c-film-row').style.display = this.value > 0 ? '' : 'none'; }); el('c-go').addEventListener('click', doCalc); /* admin view */ el('a-padd').addEventListener('click', addPaper); el('a-fadd').addEventListener('click', addFilm); el('a-ssave').addEventListener('click', saveSettings); /* delete delegation */ el('a-ptb').addEventListener('click', function(e) { var btn = e.target; if (btn.hasAttribute('data-act')) { delItem(btn.getAttribute('data-act'), btn.getAttribute('data-id')); } }); el('a-ftb').addEventListener('click', function(e) { var btn = e.target; if (btn.hasAttribute('data-act')) { delItem(btn.getAttribute('data-act'), btn.getAttribute('data-id')); } }); /* initial render */ populateSelects(); renderPaperTable(); renderFilmTable(); loadSettings(); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', boot); } else { boot(); } })();