Каким способом можно изменить валюту сделки в самом продукте Битрикс24?

Как можно автоматизировать перерасчет поля "Ожидаемая сумма" в сделках, опираясь на последний актуальный курс валюты? Необходимо создать агента, который еженочно будет производить данный перерасчет. Какой метод и какой класс в системе Bitrix24 отвечают за эту операцию?
  • 23 августа 2024 г. 12:24
Ответы на вопрос 2
Для изменения валюты сделки в продукте Bitrix24, вы можете перейти на страницу самой сделки, затем нажать на кнопку "Редактировать" и выбрать нужную валюту из выпадающего списка.

Для автоматизации перерасчета поля "Ожидаемая сумма" в сделках на основе последнего актуального курса валюты, можно создать агента в системе Bitrix24. Агент – это PHP-функция, которая выполняется автоматически по расписанию. Для создания агента, необходимо создать файл PHP с необходимым кодом и разместить его в директории /bitrix/php_interface/.

Класс в системе Bitrix24, который отвечает за операции с валютами, называется CCurrencyRates. Этот класс позволяет получать и устанавливать текущие курсы валют, а также проводить операции с валютами.

Пример кода для создания агента, который будет перерасчитывать ожидаемую сумму с учетом последнего курса валюты:

```php
<?php
AddEventHandler("main", "OnEpilog", "UpdateCurrencyAmount");

function UpdateCurrencyAmount() {
    if (CModule::IncludeModule('crm')) {
        $arDeals = CCrmDeal::GetList(array(), array('CHECK_PERMISSIONS' => 'N'))->Fetch();
    
        $currencyId = $arDeals['CURRENCY_ID'];
        
        $currencyRate = CCurrencyRates::GetConvertFactor($currencyId, 'USD');
        
        $dealId = $arDeals['ID'];
        $expectedAmount = $arDeals['OPPORTUNITY'];
        $updatedAmount = $expectedAmount * $currencyRate;
        
        CCrmDeal::Update($dealId, array('OPPORTUNITY' => $updatedAmount));
    }
}
?>
```

Этот код будет выполняться еженочно и автоматически пересчитывать ожидаемую сумму с учетом последнего курса валюты.
Вам нужно получить поля сделки (ID, OPPORTUNITY), посчитать через CCrmAccountingHelper::calculateAccountingData и положить обратно в сделку. 

Хотя скорее всего если вы просто те же поля передадите в пустой update он сам пересчитает все.
Похожие вопросы