Bitrix D7
PHP разработка

Работа со свойством Битрикс D7 типа “Деньги”

Как обновить свойство товара типа «Деньги» в Bitrix через D7 API: получение свойства по коду, установка точности и сохранение значения.

Киселев Александр
Киселев Александр
Разработчик SiteVisor.Cloud1 авг 2023· 3 мин
Читать автора

Для обновления значения свойства типа "Деньги" (Money) у товара в "1С: Битрикс" (Bitrix) с использованием D7 (Data Access Layer) API, вы можете воспользоваться соответствующими методами ORM (Object-Relational Mapping). Вам нужно найти свойство товара по его коду (или ID), а затем обновить его значение.Предположим, что у вас есть свойство типа "Деньги" с кодом "PRICE" (код может отличаться в вашем случае). Вот пример обновления значения этого свойства у товара:

<?php
require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');

use Bitrix\Catalog\Model\Product;
use Bitrix\Main\Loader;

// Проверяем, что модуль инфоблоков загружен
if (!Loader::includeModule('catalog')) {
    die('Модуль "catalog" не установлен');
}

$productId = 123; // ID товара, у которого нужно обновить значение свойства "PRICE"
$propertyCode = "PRICE"; // Код свойства типа "Деньги"

try {
    // Получаем объект товара по его ID
    $product = Product::getById($productId);

    if ($product) {
        // Получаем свойство товара по его коду (можно использовать также ID свойства)
        $property = $product->getPropertyByCode($propertyCode);

        if ($property) {
            // Обновляем значение свойства типа "Деньги"
            $newPriceValue = 100.50; // Новое значение цены (тип double/float)
            $property->setUserTypeSettings(array('PRECISION' => 2)); // Устанавливаем точность значения (2 знака после запятой)
            $property->setValue($newPriceValue);
            $product->save();

            echo "Значение свойства \"{$propertyCode}\" успешно обновлено для товара с ID {$productId}.";
        } else {
            echo "Свойство с кодом \"{$propertyCode}\" не найдено у товара с ID {$productId}.";
        }
    } else {
        echo "Товар с ID {$productId} не найден.";
    }
} catch (Exception $e) {
    echo "Ошибка: " . $e->getMessage();
}
?>

Обратите внимание, что в данном примере мы используем метод getPropertyByCode() для получения объекта свойства товара по его коду. Затем мы используем метод setValue() для установки нового значения свойства типа "Деньги". Метод setUserTypeSettings() используется для установки точности значения (количество знаков после запятой) для свойства типа "Деньги".Убедитесь, что у пользователя, под которым выполняется данный код, есть права на редактирование свойств товаров в каталоге.Это пример для D7 API. Если у вас другая версия Битрикса или требуется использование другого API, обратитесь к документации, соответствующей вашей версии, для получения более подробной информации.

Просмотров: 2034

Комментарии (3)

Ю
Юлия9 июл 2026

а зачем вообще через getPropertyByCode дергать, если проще сразу через CIBlockElement::SetPropertyValuesEx пройтись? Или тут принципиально именно D7 нужен из-за транзакций?

s
seo_kot16 янв 2026

setUserTypeSettings у меня не сработал на существующем свойстве - PRECISION просто игнорировался, значение сохранялось с округлением до целого. Полез в базу, оказалось точность нужно было выставлять один раз в настройках самого свойства инфоблока, а не дергать в рантайме каждый раз. Так что этот кусок кода скорее для наглядности, в проде так себе решение.

А
Андрей15 июн 2025

подскажите, а Product::getById точно из Bitrix\Catalog\Model\Product берётся? у меня на 22 модуле такого класса вообще нет, есть только CCatalogProduct старый. может версии сборки разные

Похожие материалы

Проверьте это на своём сайте

Бесплатные инструменты SiteVisor разбирают индексацию, robots.txt, редиректы и микроразметку — без регистрации и настройки.