Developing Custom Admin Pages in 1C-Bitrix

We often encounter scenarios where the standard admin section of 1C-Bitrix doesn't cover specific business processes. Manual stock synchronization from an external system, bulk price updates via formula, integration settings management — these require custom admin pages. Developing directly in `/bit

Our competencies:

Frequently Asked Questions

Latest works

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1415
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Website development for FIXPER company
    995
  • 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
    733
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Development based on 1C Enterprise for MIRSANBEL
    863
  • image_crm_dolbimby_434_0.webp
    Website development on CRM Bitrix24 for DOLBIMBY
    772
  • image_crm_technotorgcomplex_453_0.webp
    Development based on Bitrix24 for the company TECHNOTORGKOMPLEKS
    1134

We often encounter scenarios where the standard admin section of 1C-Bitrix doesn't cover specific business processes. Manual stock synchronization from an external system, bulk price updates via formula, integration settings management — these require custom admin pages. Developing directly in /bitrix/admin/ is not advisable — platform updates will overwrite changes. The correct path is /local/. Over 5+ years, we have developed more than 50 custom admin interfaces for Bitrix, from simple forms to multi-page analytics dashboards. This article covers the technical details of creating such pages. Custom admin pages allow implementing any functionality not available in the standard package.

Approach Advantages Disadvantages When to use
/local/admin/ Simple, quick start Limited interface Simple pages with one table
/local/components/ Flexibility, reuse, caching More complex, requires component model knowledge Complex interfaces with AJAX, access rights

How to Place and Structure Custom Admin Pages?

Placement in /local/admin/ — Developing Custom Admin Pages

Place custom page files in /local/admin/. Bitrix automatically includes this path when searching for admin pages. The page becomes accessible at /bitrix/admin/my_page.php if the file is at /local/admin/my_page.php. Alternatively, create the page as a component in /local/components/ and include it via a wrapper. This is the preferred approach for complex interfaces.

Structure of a Minimal Admin Page

<?php // /local/admin/my_custom_page.php require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_admin_before.php'); // Check permissions $APPLICATION->SetTitle('My Page'); if (!$USER->IsAdmin() && !$USER->CanDoOperation('edit_php')) { $APPLICATION->AuthForm('Access denied'); } require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_admin_after.php'); // Page content ?> <div class="adm-content-wrap"> <!-- Interface HTML --> </div> <?php require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/epilog_admin.php'); 

Three required includes form the correct wrapper: header, navigation, and footer of the admin section. Without them, the page will open without styling.

Using Bitrix Admin Helpers

Bitrix provides a set of classes for building standard admin UI elements. Using these classes gives a native look and saves layout effort. Consider CAdminList and CAdminForm.

use Bitrix\Main\UI\Filter\Options as FilterOptions; // CAdminList — table with sorting, pagination, and filter $oList = new CAdminList('my_list_id'); $lAdmin->AddHeaders([ ['id' => 'ID', 'content' => 'ID', 'sort' => 'ID'], ['id' => 'NAME', 'content' => 'Name', 'sort' => 'NAME'], ['id' => 'DATE', 'content' => 'Date'], ]); while ($row = $rsData->Fetch()) { $oRow = &$oList->AddRow('ID_' . $row['ID'], $row); $oRow->AddActions([ ['TEXT' => 'Edit', 'ONCLICK' => "jsUtils.Redirect([], 'my_edit.php?ID=" . $row['ID'] . "')], ['TEXT' => 'Delete', 'ACTION' => $oList->ActionDoGroup($row['ID'], 'delete')], ]); } $oList->DisplayList(); // CAdminForm — edit form with tabs $oTabControl = new CAdminTabControl('tabControl', [ ['DIV' => 'tab1', 'TAB' => 'Main', 'ICON' => 'main_user_edit'], ['DIV' => 'tab2', 'TAB' => 'Additional'], ]); $oTabControl->Begin(); $oTabControl->BeginNextTab(); // first tab fields $oTabControl->BeginNextTab(); // second tab fields $oTabControl->Buttons(['btnSave' => true, 'btnApply' => true, 'btnCancel' => true]); $oTabControl->End(); 

How to Add a Page to the Menu and Set Up Permissions?

Adding to Menu

The page must be accessible from the menu, not just via direct URL. Register via event handler in /local/php_interface/init.php:

AddEventHandler('main', 'OnBuildGlobalMenu', function(&$globalMenu, &$moduleMenu) { $moduleMenu[] = [ 'parent_menu' => 'global_menu_services', 'sort' => 500, 'text' => 'Synchronization', 'title' => 'Manage synchronization with external system', 'url' => 'my_custom_page.php', 'icon' => 'main_menu_tasks', 'page_icon' => 'main_page_icon', 'more_url' => ['my_custom_page.php', 'my_custom_edit.php'], ]; }); 

The more_url parameter is needed to keep the menu item active when navigating to related pages.

Access Rights

Custom pages must check permissions themselves. Options:

  • Check $USER->IsAdmin() — only for pages accessible exclusively to admins
  • Check $USER->CanDoOperation('operation_name') — for granular control
  • Check module right: CModule::IncludeModule('main') && $USER->GetRights('mymodule') >= 'W'

According to official 1C-Bitrix documentation, if a page should be accessible to a specific group, it's better to create a custom module with rights registration via RegisterModuleDependences.

Working with Data: D7 ORM vs Old API

For custom pages, we recommend using D7 ORM (\Bitrix\Main\ORM). If data is stored in custom tables, create an entity class:

namespace Local\MyModule; use Bitrix\Main\ORM\Data\DataManager; use Bitrix\Main\ORM\Fields; class MyEntityTable extends DataManager { public static function getTableName(): string { return 'my_custom_table'; } public static function getMap(): array { return [ new Fields\IntegerField('ID', ['primary' => true, 'autocomplete' => true]), new Fields\StringField('NAME', ['required' => true]), new Fields\DatetimeField('CREATED_AT'), ]; } } 

Then MyEntityTable::getList(), ::add(), ::update(), ::delete() work via the standard ORM.

How to Handle Forms and AJAX?

Bitrix admin pages traditionally use POST forms with CSRF token (bitrix_sessid_post()). For AJAX requests:

// Check session token if (!check_bitrix_sessid()) { die(json_encode(['error' => 'Invalid session'])); } // In JS (using BX.ajax) BX.ajax.runAction('local:my.action', { data: { param: value }, sessid: BX.bitrix_sessid() }); 

For modern AJAX interfaces, use \Bitrix\Main\Engine\Controller with routing via /.action.php — this is the D7 approach recommended for new developments.

Timeline and Scope

Task Type Timeline
Simple CRUD page 1–2 days
Multi-page section with filters and AJAX 3–5 days
Full-featured module with rights and events 1–2 weeks

The work includes:

  • Audit of current architecture and TOR approval
  • Prototype development in /local/admin/ or /local/components/
  • Logic implementation using D7 ORM
  • Menu integration and access rights configuration
  • Testing on staging and refinements
  • Source code and documentation handover
  • 30-day warranty support
Step-by-step guide to creating a custom page
  1. Define requirements: what data, what interface, whether permissions are needed.
  2. Create file in /local/admin/ or register a component.
  3. Include prolog and epilog for correct wrapper.
  4. Implement logic using CAdminList/CAdminForm or D7 ORM.
  5. Add menu item via OnBuildGlobalMenu.
  6. Configure access rights check.
  7. Test on staging and hand over to client.

Typical Tasks for Custom Pages

  • Synchronization control panel with 1C or external APIs (manual trigger, operation log)
  • Bulk product editing by non-standard criteria
  • Analytics dashboard based on data from multiple modules
  • Integration settings management (API keys, webhooks, field mapping)
  • Content migration tools between environments

Why Choose Us?

Our team has 5+ years of Bitrix development experience and has completed over 50 projects customizing the admin panel. We guarantee compatibility with the latest platform versions, provide full documentation, and offer post-delivery support. Contact us for a consultation or order turnkey development — we will assess your project within one day. Save time on manual data processing and get transparent project cost — that's what you receive.