Setting up hidden prices (price on request) in 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

Setting Up Hidden Prices (Price on Request) in 1C-Bitrix

Wholesale customer enters catalog, sees retail price and leaves — thinking it's expensive. Or competitor monitors prices via scraper. Hiding prices with "Get price" button solves both: B2B customer leaves request, scraper gets empty field instead of number.

Price Hiding Architecture

In 1C-Bitrix, product price stored in b_catalog_price table and bound to price type (b_catalog_group). Hide price at several levels:

Component template level. Simplest variant — in template.php of catalog.element component check condition and output button instead of price. Conditions: user group, infoblock property HIDE_PRICE, presence of certain price type.

Price type level. Create separate price type "On Request" in Store → Settings → Price Types. For products with hidden price, don't assign retail price. Component catalog.element on CCatalogProduct::GetOptimalPrice() call doesn't find available price — you handle this case in template.

Infoblock property level. Add PRICE_ON_REQUEST property type "List" (Yes/No). In component template check property value and replace price block with request form.

Implementation of "Get Price" Button

Button should open form with minimum fields: name, phone/email, auto-filled product SKU. Implementation variants:

  • bitrix:form.result.new component — standard web form. Pass product ID and name to GET parameters. In form template — hidden fields with product data.
  • Popup via BX.SidePanel — opens iframe with form. Faster for user, doesn't leave page.
  • AJAX request to custom endpoint in /local/ajax/ — minimal form without reload.

Request should go to CRM (if Bitrix24) or email to manager. For CRM use crm.lead.add via REST API or OnAfterResultAdd web form event with lead creation handler.

Hiding Prices by User Groups

For B2B scenario: authorized dealers see price, guests — request button. Check via $USER->GetUserGroupArray() in component template. Or via price type access rights — in price type settings set which user groups have access. Method CCatalogGroup::GetGroupsList() returns allowed groups.

Scenario Approach Setup Time
Hide for all, "Get price" button Infoblock property + template rework 2–4 hours
Hide for guests, show for dealers Price type rights + group check 4–6 hours
Bulk management (1000+ products) Property + CSV/1C import 1–2 days