Developing a shoe size chart using 1C-Bitrix

Our company is engaged in the development, support and maintenance of Bitrix and Bitrix24 solutions of any complexity. From simple one-page sites to complex online stores, CRM systems with 1C and telephony integration. The experience of developers is confirmed by certificates from the vendor.
Our competencies:
Development stages
Latest works
  • image_website-b2b-advance_0.png
    B2B ADVANCE company website development
    1175
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Website development for FIXPER company
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Development based on Bitrix, Bitrix24, 1C for the company Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Development based on 1C Enterprise for MIRSANBEL
    747
  • image_crm_dolbimby_434_0.webp
    Website development on CRM Bitrix24 for DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Development based on Bitrix24 for the company TECHNOTORGKOMPLEKS
    976

Developing a Shoe Size Chart for 1C-Bitrix

A shoe size chart is more complex than a clothing one: shoe sizes have three incompatible systems (Russian/European, American men's/women's, British), plus foot length in centimetres as a universal measure. Different manufacturers use different lasts, and the formal conversion "RU 40 = EU 40" is not always correct for a specific brand. This must be accounted for in the architecture.

Differences Between a Shoe Chart and a Clothing Chart

Footwear has one key parameter — foot length in centimetres. Everything else (RU, EU, US M/W, UK) is a notation system that converts from foot length using standard formulas, but with brand-specific adjustments.

Additional complexities:

  • Gender differences: US 8 men's ≠ US 8 women's (difference of ~1.5 EU sizes)
  • Children's footwear is a separate scale (EU 17–35)
  • Some brands (Converse, Vans) have their own conversion nuances
  • Shoe width (B, D, EE) — rare, but found in specialist shops

DB Structure for a Shoe Size Chart

CREATE TABLE b_shoe_size_charts (
    ID          SERIAL PRIMARY KEY,
    NAME        VARCHAR(255) NOT NULL,   -- "Nike men's", "Adidas kids"
    BRAND_ID    INT,
    GENDER      VARCHAR(10),             -- 'male', 'female', 'kids', 'unisex'
    AGE_GROUP   VARCHAR(20),             -- 'adult', 'kids', 'baby'
    ACTIVE      BOOLEAN DEFAULT TRUE
);

CREATE TABLE b_shoe_size_rows (
    ID             SERIAL PRIMARY KEY,
    CHART_ID       INT NOT NULL REFERENCES b_shoe_size_charts(ID),
    FOOT_LENGTH_MM INT NOT NULL,    -- foot length in mm (primary measure)
    SIZE_RU        NUMERIC(4,1),    -- Russian size
    SIZE_EU        NUMERIC(4,1),    -- European size
    SIZE_US_M      NUMERIC(4,1),    -- US men's
    SIZE_US_W      NUMERIC(4,1),    -- US women's
    SIZE_UK        NUMERIC(4,1),    -- British
    SIZE_CM        NUMERIC(4,1),    -- Japanese/Korean (in cm)
    SORT           INT DEFAULT 100
);

Foot length in millimetres — not centimetres — as the base measure, because shoe standards work with 5 mm precision.

Shoe Size Chart Component

The component is similar to the clothing one, but with display-specific features.

Gender selector — if the chart is "unisex", a toggle is needed to show US M or US W:

<div class="size-gender-tabs">
    <button class="active" data-gender="male">Men's (US M)</button>
    <button data-gender="female">Women's (US W)</button>
</div>
document.querySelectorAll('.size-gender-tabs button').forEach(btn => {
    btn.addEventListener('click', function() {
        const gender = this.dataset.gender;
        document.querySelectorAll('.col-us-m').forEach(el => el.hidden = gender !== 'male');
        document.querySelectorAll('.col-us-w').forEach(el => el.hidden = gender !== 'female');
    });
});

Table columns for adult men's footwear:

Foot length (mm) RU EU US UK
245 39 39 6.5 6
250 39.5 39.5 7 6.5
255 40 40 7.5 7

Half-sizes (39.5, 40.5) must be in the chart — many manufacturers use them.

Interactive Lookup by Foot Length

The key difference with footwear: the buyer knows their foot length (or can measure it), but does not always know the size in different systems. Interactive form:

<div class="shoe-size-finder">
    <label>Enter foot length (mm or cm):</label>
    <input type="number" id="foot-length" placeholder="255" min="150" max="340">
    <select id="length-unit">
        <option value="mm">mm</option>
        <option value="cm">cm</option>
    </select>
    <button onclick="findShoeSize()">Find my size</button>
</div>
function findShoeSize() {
    let length = parseInt(document.getElementById('foot-length').value);
    const unit = document.getElementById('length-unit').value;
    if (unit === 'cm') length = Math.round(length * 10);

    // Find the nearest size (foot fits in size + up to 5 mm allowance)
    const sizes = window.shoeSizeData;
    const match = sizes.find(s => length <= s.foot_length_mm + 5 && length > s.foot_length_mm - 5);

    if (match) {
        highlightRow(match.id);
        showResult(`Your size: RU ${match.size_ru} / EU ${match.size_eu}`);
    } else {
        showResult('Size not found in the chart. Please consult a sales assistant.');
    }
}

Foot Measurement Guide

A text guide plus an SVG illustration in a modal window. Standard instructions: stand on a piece of paper, trace the foot outline, measure from heel to the longest toe. This reduces errors when customers measure themselves.

The illustration is made as SVG — not PNG — because SVG scales without quality loss and weighs 3–5 KB versus 30–50 KB for a comparable PNG.

Integration with Trade Offer Selection

In footwear, trade offers (TOs) are sizes. Each TO has a SHOE_SIZE property with a value such as "40", "40.5", "41". This value is matched against chart rows by SIZE_RU or SIZE_EU.

On page load:

  1. If no TO is selected — the full chart is displayed
  2. When a size (TO) is selected — the corresponding row is highlighted
  3. When a chart row is clicked — the corresponding TO is automatically selected
// Click on a chart row
document.querySelectorAll('.size-chart tr[data-size-ru]').forEach(row => {
    row.addEventListener('click', function() {
        const sizeRu = this.dataset.sizeRu;
        // Find and activate the TO button for this size
        const offerBtn = document.querySelector(`[data-size="${sizeRu}"]`);
        if (offerBtn && !offerBtn.disabled) offerBtn.click();
    });
});

Children's Shoe Size Grid

Children's footwear requires a separate chart. EU sizes for children start at 16–17 (newborns) and go up to 35–36 (transitional sizes). Foot length is the key parameter, because a child's foot grows quickly and the correct allowance is essential.

An additional parameter for the children's chart: recommended age (approximate, not a strict rule):

Foot length (mm) EU RU Age (approx.)
115 19 18 12–18 months
125 20 19.5 18–24 months
135 21 20.5 2 years

Timelines

Scope What's included Timeline
Basic chart for 1 gender DB, component, TO integration 3–5 days
Multi-charts (brands, age, gender) + admin panel management 1–2 weeks
+ Lookup by foot length + calculator, measurement guide +2–3 days

A shoe size chart is an investment in reducing returns. In the fashion segment, returning one pair of shoes costs more than creating the chart: courier expenses, repackaging, loss of resale condition. The project pays off within 1–2 months of store operation.