Updating the 1C-Bitrix kernel version

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

1C-Bitrix Core Version Update

Bitrix core updates break websites more often than admitted. Not because the core is bad, but because most custom code is written violating the principle "don't touch the core": edits in bitrix/modules/, direct calls to deprecated functions, dependence on internal component structure. Updates expose this debt.

What Exactly Gets Updated

The Bitrix core is the /bitrix/ directory on the server. When updating via built-in mechanism (/bitrix/admin/update_system_partner.php), the system:

  1. Downloads update package from Bitrix servers
  2. Unpacks in /bitrix/updates/
  3. Executes update PHP scripts that change the database and filesystem
  4. Replaces core and module files

Your code in local/ is untouched. Your templates in local/templates/—untouched. Files in /bitrix/—replaced.

What Breaks After Update

Direct core file edits. bitrix/modules/catalog/install/components/bitrix/catalog.element/templates/.default/template.php—manually edited. After update—overwritten with original. Anything inside /bitrix/ that was changed—lost.

Deprecated functions. Every few versions Bitrix deprecates functions and eventually removes them. Calling CIBlockElement::GetList() with wrong parameters in version 22.x may behave differently than in 18.x. Calling a removed method—Fatal Error.

Module API changes. The sale module was significantly reworked in versions 17.x and later: old API (CSaleOrder::Add) coexists with new (Bitrix\Sale\Order), but edge-case behavior may differ.

Custom Marketplace modules. If module developer hasn't updated it for new core version—after update the module may not work.

Correct Update Order

Step 1: Staging. Production site copy on test server. Update done only here. Without staging, updating production is Russian roulette.

# Minimal staging environment checklist:
- Full site file copy
- Database dump
- Identical PHP version
- External integrations disabled (don't send customer emails, don't sync with 1C)

Step 2: Custom code audit. Before update, check:

  • Any edits inside /bitrix/ (via git diff if repository exists, or find /bitrix -newer /bitrix/bitrix_version.php -type f)
  • Are deprecated functions called (grep codebase for local/)
  • Are Marketplace modules compatible with target version—check module page in store

Step 3: Staging update. Run update via admin panel or console tool /bitrix/bin/console update. On large sites, console update is preferable—no PHP execution time limit.

Step 4: Testing. Go through critical scenarios: homepage, catalog, product card, cart, checkout, personal account, admin interface. Check PHP error log for new errors.

Step 5: Production update. After successful staging test. In maintenance mode (503 page) during update. After—check error log again.

Special Considerations for Multi-Major-Version Updates

If lag is 2+ years—can't update straight to latest. Path: 18.x → 20.x → 22.x → current. Each intermediate step—separate testing. Can't skip intermediate versions: database update scripts execute sequentially.

Timeframes

Situation Timeframe
Regular update (lag up to 3 months) 1-2 days
Update after 6-12 months downtime 3-5 days
Update with 1.5-2 year lag 1-2 weeks
Update with 3+ year lag + custom code 2-4 weeks

Main variable—volume of custom code needing adaptation. Site on standard components with code in local/ updates easier than site with core edits and five-year-old custom modules.