Print Shop Website Development on 1C-Bitrix
Printing shop operates at production and service intersection: customer expects accurate cost calculation, quality control before print run, and transparent order tracking. Website on 1C-Bitrix covers all three needs — online calculator with non-linear pricing, preflight file check module, and order status system with notifications. Bitrix integrates with 1C:Polygraphia for production cycle sync.
Product Catalog
Printing products in "Catalog" info block with sections: business cards, brochures, leaflets, catalogs, packaging, POS materials, wide-format printing. Each element contains:
- Product Description — with usage examples and finished product photos
- Available Formats — multiple-list property (A3, A4, A5, A6, eurosize, custom)
- Paper Types — binding to "Paper" Highload (coated, offset, design, cardboard — with density)
- Post-Press Processing — multiple list: lamination (matte/gloss), UV varnish, embossing, die-cutting, scoring, folding
- Minimum Run — numeric
- Technical Mackeup Requirements — HTML block with spec: resolution, color space, bleeds
Mackeup Upload with Preflight Check
Customer uploads mackeup via form on detail page. Accepted: PDF, AI, EPS, TIFF. Size limit — 200 MB (via upload_max_filesize, post_max_size, and field settings).
Post-upload, file passes auto preflight check via PHP ImageMagick wrapper (identify, convert):
- Resolution — DPI check (minimum 300 for offset, 150 for wide-format)
- Color Space — CMYK for print; if RGB — client warning
- Document Size — match with selected product format (±3 mm bleeds tolerance)
-
Transparency Check — for PDF via
pdfinfo(Poppler)
Check result saved to order properties, displayed to client: green — mackeup meets requirements, yellow — warnings (RGB, low res), red — critical (unsupported, corrupted).
PDF preview generated via ImageMagick convert → JPEG, shown to client for visual verification.
Order Tracking
Order goes through production statuses in sale module (bitrix:sale.personal.order.detail component):
- Accepted — order placed, awaiting mackeup check
- Mackeup Checked — preflight passed, queued for production
- In Print — on printing equipment
- Post-Press Processing — lamination, scoring, die-cutting
- Ready for Pickup — on finished goods warehouse
- Shipped — passed to courier or picked by client
Status change triggers OnSaleStatusOrder handler, sending SMS via service (SMS.ru) and email via mail events. Client sees status in personal cabinet — visual progress bar with current stage highlight.
1C:Polygraphia Integration
Exchange via catalog module and custom handler:
- Bitrix to 1C: new orders exported as customer orders with nomenclature binding
-
1C to Bitrix: production statuses update via REST-calls; status change calls
CSaleOrder::Update() - Nomenclature: product reference syncs from 1C with current tariffs
Exchange every 15 minutes for statuses, daily for nomenclature and tariffs.
Deep-Dive: Print Product Calculator with Non-Linear Pricing
Print calculator — most technically complex element. Unlike linear "price × quantity", printing cost depends on multiple non-linear parameters: 100 business cards may cost 5 rubles each, 1000 — already 1.5 per unit. Adding lamination increases cost non-proportionally, stepwise. Paper price depends on density non-linearly.
Data Model
Pricing stored in interconnected Highload blocks:
HlPaper (paper):
| Field | Type | Example |
|---|---|---|
| UF_NAME | string | Coated Gloss |
| UF_DENSITY | number | 300 |
| UF_PRICE_PER_KG | number | 85 |
| UF_SHEET_WEIGHT | number (float) | Sheet weight grams |
| UF_FORMAT | list | SRA3, SRA2, 620×940 |
HlPrintRun (run tariffs):
| Field | Type | Example |
|---|---|---|
| UF_PRODUCT_TYPE | binding | Business Cards |
| UF_RUN_FROM | number | 100 |
| UF_RUN_TO | number | 499 |
| UF_COLORS | list | 4+0, 4+4, 1+0, 1+1 |
| UF_SETUP_COST | number | Setup cost |
| UF_PRINT_COST_PER_SHEET | number (float) | Print cost per sheet |
HlPostpress (post-press):
| Field | Type | Example |
|---|---|---|
| UF_TYPE | list | Matte Lamination |
| UF_SETUP_COST | number | 800 |
| UF_COST_PER_UNIT | number (float) | 0.45 |
| UF_MIN_RUN | number | 100 |
| UF_DISCOUNT_THRESHOLD | number | 1000 |
| UF_DISCOUNT_PERCENT | number | 15 |
Calculation Formula
Total cost comprises:
-
Paper Cost = print sheets × sheet weight × price per kg / 1000. Print sheet quantity from run considering imposition: how many items fit on sheet (depends on item and paper format). Adds technology margin: 3% for runs to 500, 2% for 500–5000, 1.5% above 5000.
-
Print Cost = setup + (print sheets × cost per sheet). Setup — fixed equipment setup, run-independent. Cost per sheet drops stepwise: determined by HlPrintRun row per run range.
-
Post-Press = setup + (units × cost per unit). If run exceeds
UF_DISCOUNT_THRESHOLD, applyUF_DISCOUNT_PERCENTdiscount. -
Total = paper + print + post-press sum.
Backend Implementation
AJAX handler (/ajax/calc_print.php) receives: product type, format, run, colors, paper type, density, post-press array. Each formula component queries respective Highload via ORM DataManager. Intermediate results cached in $_SESSION for detail display.
Response contains JSON: paper cost, print cost (setup highlighted), each post-press operation cost, total, unit price. Client sees transparent cost structure.
Interface
Calculator embedded in each product detail page. Parameter selection triggers real-time recalc via AJAX with debounce (300ms after last change). Visually on desktop sticky sidebar, on mobile bottom sheet.
Development Stages
| Stage | Work | Timeline |
|---|---|---|
| Analysis | Tariff matrix collection, calculation formulas, calculator TZ | 2 weeks |
| Design | Highload structure, prototypes, calculator UX | 1.5 weeks |
| Design | Catalog, calculator, personal cabinet mockups | 2 weeks |
| Backend | Info blocks, Highload references, calculator logic | 4 weeks |
| Preflight Module | ImageMagick integration, mackeup check handler | 1 week |
| Frontend | Markup, interactive calculator, responsive | 2 weeks |
| 1C Integration | Exchange setup, status/nomenclature sync | 1.5 weeks |
| Testing | Formula check, load testing, UAT | 1.5 weeks |
| Launch | Deploy, catalog population, monitoring | 1 week |







