PHPackages                             b24/devtools - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. b24/devtools

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

b24/devtools
============

101PHP

Since Jun 1Pushed 11mo ago1 watchersCompare

[ Source](https://github.com/kim1ne/B24-Devtools)[ Packagist](https://packagist.org/packages/b24/devtools)[ RSS](/packages/b24-devtools/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

Библиотека инструментов для Bitrix24 PHP 8.1+
=============================================

[](#библиотека-инструментов-для-bitrix24-php-81)

- [Установка](https://github.com/kim1ne/B24-Devtools?tab=readme-ov-file#%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0)
- [Подключение](https://github.com/kim1ne/B24-Devtools?tab=readme-ov-file#%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5)
- [Регистрация библиотеки как Модуль в системе Bitrix](https://github.com/kim1ne/B24-Devtools/tree/main?tab=readme-ov-file#%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F-%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B8-%D0%BA%D0%B0%D0%BA-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C-%D0%B2-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B5-bitrix)
- [Смарт-процессы](https://github.com/kim1ne/B24-Devtools?tab=readme-ov-file#%D0%A1%D0%BC%D0%B0%D1%80%D1%82-%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D1%8B)
    - [Подмена сервис контейнера](https://github.com/kim1ne/B24-Devtools?tab=readme-ov-file#%D0%9F%D0%BE%D0%B4%D0%BC%D0%B5%D0%BD%D0%B0-%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81-%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80%D0%B0)
    - [Пример фабрики](https://github.com/kim1ne/B24-Devtools?tab=readme-ov-file#%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80-%D1%84%D0%B0%D0%B1%D1%80%D0%B8%D0%BA%D0%B8)
    - [Обработчик события на Добавление элемента](https://github.com/kim1ne/B24-Devtools?tab=readme-ov-file#%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA-%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F-%D0%BD%D0%B0-%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0)
- [Работа с денежными полями](https://github.com/kim1ne/B24-Devtools?tab=readme-ov-file#%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81-%D0%B4%D0%B5%D0%BD%D0%B5%D0%B6%D0%BD%D1%8B%D0%BC%D0%B8-%D0%BF%D0%BE%D0%BB%D1%8F%D0%BC%D0%B8)
- [Пользовательские поля](https://github.com/kim1ne/B24-Devtools/tree/main?tab=readme-ov-file#%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D0%B5-%D0%BF%D0%BE%D0%BB%D1%8F)
    - [UserFieldService](https://github.com/kim1ne/B24-Devtools/tree/main?tab=readme-ov-file#userfieldservice)
    - [UserField](https://github.com/kim1ne/B24-Devtools/tree/main?tab=readme-ov-file#userfield)
    - [EnumCollection](https://github.com/kim1ne/B24-Devtools/tree/main?tab=readme-ov-file#enumcollection)
    - [Enum](https://github.com/kim1ne/B24-Devtools/tree/main?tab=readme-ov-file#enum)

Установка
=========

[](#установка)

```
composer require b24/devtools
```

Подключение
===========

[](#подключение)

Для использования инструментов необходимо подключить автозагрузчик Composer. Пример подключения:

```
local/php_interface/init.php
```

```
require $_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php';
```

Регистрация библиотеки как Модуль в системе Bitrix
==================================================

[](#регистрация-библиотеки-как-модуль-в-системе-bitrix)

С помощью этого можно регистрировать свои контроллеры не создавая модуль. В init.php добавить:

```
new \B24\Devtools\Application\Application(
    new \B24\Devtools\Application\Configuration([
        'controllers' => [
            'namespaces' => [
                '\\Some\\Namespace' => 'custom'
            ]
        ]
    ])
);

// ИЛИ
new \B24\Devtools\Application\Application(
    (new \B24\Devtools\Application\Configuration())
        ->setController('\\Some\\Namespace', 'custom')
        ->setController(...)
);

\CModule::IncludeModule('b24.devtools'); // Вернёт true
```

Из js будет доступна отправка запроса в контроллер:

```
BX.ajax.runAction('b24:devtools.custom.ControllerName.actionName')
```

[Контроллеры в битрикс](https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=6436&LESSON_PATH=3913.3516.5062.3750.6436&ysclid=m3bybd65q2512401672)

Смарт-процессы
==============

[](#смарт-процессы)

### Подмена сервис контейнера

[](#подмена-сервис-контейнера)

Пример использования:

```
use Module\Helpers\Crm\Replacement\Container;

new Container([
    'TEST' => FactoryTest::class
]);
```

Аргументом в конструктор передаётся массив, где ключом CODE смарт-процесса, значением неймспейс его фабрики. Позволяет вызывать события ДО и ПОСЛЕ на элементе смарт-процесса.

### Пример фабрики

[](#пример-фабрики)

```
use Bitrix\Crm\Item;
use Bitrix\Crm\Service;
use Bitrix\Crm\Service\Context;
use Bitrix\Crm\Service\Operation;

class FactoryTest extends Service\Factory\Dynamic
{
    public function getAddOperation(Item $item, Context $context = null): Operation\Add
    {
        $operation = parent::getAddOperation($item, $context);

        $operation->addAction(
            Operation::ACTION_BEFORE_SAVE,
            new AddHandler()
        );

        return $operation;
    }
}
```

### Обработчик события на Добавление элемента

[](#обработчик-события-на-добавление-элемента)

```
use Bitrix\Crm\Service\Operation;
use Bitrix\Main\Result;

class AddHandler extends Operation\Action
{
    public function process(\Bitrix\Crm\Item $item): Result
    {
        $result = new Result();
        $result->addError(new \Bitrix\Main\Error('Ошибка 1'))
        $result->addError(new \Bitrix\Main\Error('Ошибка 2'))
        return $result;
    }
}
```

[![image](https://private-user-images.githubusercontent.com/111231185/321371497-ab98b075-780c-40d9-89f1-bb310c08b61e.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzU3NTgyMTAsIm5iZiI6MTc3NTc1NzkxMCwicGF0aCI6Ii8xMTEyMzExODUvMzIxMzcxNDk3LWFiOThiMDc1LTc4MGMtNDBkOS04OWYxLWJiMzEwYzA4YjYxZS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwNDA5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDQwOVQxODA1MTBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1hNjIxMmM1NjM2NjhiMzRlOTZmNjc5NGNjYjA3MjViOTAwY2I5OTI5NDcyNjZhODRhNDRjN2FmZDgyZjcyNjc3JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.QWLS71AIB6968Cpy6h4w-xvN94udnl3qH8YWKpQO10o)](https://private-user-images.githubusercontent.com/111231185/321371497-ab98b075-780c-40d9-89f1-bb310c08b61e.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzU3NTgyMTAsIm5iZiI6MTc3NTc1NzkxMCwicGF0aCI6Ii8xMTEyMzExODUvMzIxMzcxNDk3LWFiOThiMDc1LTc4MGMtNDBkOS04OWYxLWJiMzEwYzA4YjYxZS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwNDA5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDQwOVQxODA1MTBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1hNjIxMmM1NjM2NjhiMzRlOTZmNjc5NGNjYjA3MjViOTAwY2I5OTI5NDcyNjZhODRhNDRjN2FmZDgyZjcyNjc3JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.QWLS71AIB6968Cpy6h4w-xvN94udnl3qH8YWKpQO10o)

Работа с денежными полями
=========================

[](#работа-с-денежными-полями)

```
$moneyField = '155|USD';
$rateUsdToRub = 93.22;

// либо $money = new \B24\Devtools\Data\MoneyField(155, 'USD');
$money = \B24\Devtools\Data\MoneyField::parse($moneyField)
    ->math(function (&$price) use ($rateUsdToRub) {
        $price = $price * $rateUsdToRub;
    })
    ->setCurrency('RUB')
    ->round(2);

echo (string) $money; // 14449.1|RUB
```

Пользовательские поля
=====================

[](#пользовательские-поля)

Упрощённая работа с пользовательскими полями. Получение EntityId для какой то сущности, получение информации о пользоватеском поле, получение Enum спискового поля.

### EntityName

[](#entityname)

```
use B24\Devtools\UserField\EntityName;

$entityId = EntityName::byHlBlockId($hlBlockId);
$entityId = EntityName::byEntityTypeId(\CCrmOwnerType::Deal);
$entityId = EntityName::byHlBlockName($hlBlockName);
$entityId = EntityName::bySmartProcessName($smartProcessName);
$entityId = EntityName::bySmartProcessCode($smartProcessCode);
```

### UserFieldService

[](#userfieldservice)

```
$service = \B24\Devtools\UserField\UserFieldService::getInstance();

 /**
 * @var \B24\Devtools\UserField\UserField $field
 */
$field = $service->getField($entityId, $fieldName);
$field = $service->getFieldByHlBlockId($hlBlockId, $fieldName);
$field = $service->getFieldByEntityTypeId($entityTypeId, $fieldName);
$field = $service->getFieldByHlBlockName($hlBlockName, $fieldName);
$field = $service->getFieldBySmartProcessCode($smartProcessCode, $fieldName);
$field = $service->getFieldBySmartProcessName($smartProcessName, $fieldName);
```

### UserField

[](#userfield)

```
use B24\Devtools\UserField\UserFieldService;

$service = UserFieldService::getInstance();
$field = $service->getField($entityId, $fieldName);

$field->entityId;
$field->fieldCode;
$field->id;
$field->isMandatory;
$field->isMultiple;
$field->settings;
$field->userTypeId;
$field->xmlId;
$field->getEnums();
$field->getLang();
$field->isBooleanType();
$field->isEnumType();
$field->isFileType();
// .....
```

### EnumCollection

[](#enumcollection)

```
use B24\Devtools\UserField\UserFieldService;

$service = UserFieldService::getInstance();
$field = $service->getField($entityId, $fieldName);

$enumsCollection = $field->getEnums();

$enums = $enumsCollection->get();
$enum = $enumsCollection->findByValue($value);
$enum = $enumsCollection->findByXmlId($xmlId);
$enumDefault = $enumsCollection->findDefault();
```

### Enum

[](#enum)

```
use B24\Devtools\UserField\Enum;
use B24\Devtools\UserField\UserFieldService;

$service = UserFieldService::getInstance();
$field = $service->getField($entityId, $fieldName);
$enum = $field->getEnums()->findDefault();
$enum->xmlId;
$enum->id;
$enum->isDefault;
$enum->userFieldId;
$enum->value;

$enum = Enum::get($entityId, $fieldName, $xmlId);
$enum = Enum::getByEntityTypeId($entityTypeId, $fieldName, $xmlId);
$enum = Enum::getByHlBlockId($hlBlockId, $fieldName, $xmlId);
$enum = Enum::getByHlBlockName($hlBlockName, $fieldName, $xmlId);
$enum = Enum::getBySmartProcessCode($smartProcessCode, $fieldName, $xmlId);
$enum = Enum::getBySmartProcessName($smartProcessName, $fieldName, $xmlId);
```

Инфоблоки
=========

[](#инфоблоки)

Упрощённая работа с инфоблоками. Чтобы использовать методы generateByCode(), generateById() должен быть задан символьный код API и он должен совпадать с обычным символьным кодом.

### Iblock

[](#iblock)

```
use B24\Devtools\Data\Iblock;

$code = Iblock::getCodeById($iblockId);
$iblockId = Iblock::getIdByCode($iblockCode);

$iblock = Iblock::generateByCode($iblockCode);
// ИЛИ
$iblock = Iblock::generateById($iblockId);

$iblock->getIblockId();
$iblock->getTableProperties();
$iblock->getPropertyIdByName('PROPERTY_NAME')

$res = $iblock->getListWithProperties(
    properties: ['PROPERTY_NAME'],
    select: $select,
    filter: $filter,
    order: $order,
    limit: $limit,
    offset: $offset,
    runtime: $runtime
)
```

###  Health Score

16

—

LowBetter than 5% of packages

Maintenance38

Infrequent updates — may be unmaintained

Popularity3

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity14

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/5994f47078df908351e43136f67ea6a8369eeca0945a8d8d500863a36c26b65b?d=identicon)[kim1ne](/maintainers/kim1ne)

---

Top Contributors

[![kim1ne](https://avatars.githubusercontent.com/u/111231185?v=4)](https://github.com/kim1ne "kim1ne (35 commits)")

### Embed Badge

![Health badge](/badges/b24-devtools/health.svg)

```
[![Health](https://phpackages.com/badges/b24-devtools/health.svg)](https://phpackages.com/packages/b24-devtools)
```

###  Alternatives

[corneltek/assetkit

High performance asset manager.

531.4k3](/packages/corneltek-assetkit)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
