Изменить счет crm.invoice.update

Выберите инструмент для разработки с AI-агентом:

  • используйте Битрикс24 Вайбкод, чтобы создать приложение для Битрикс24 по описанию задачи без знания языков программирования. Агент напишет код и разместит приложение на сервере без ручной настройки хостинга
  • используйте MCP-сервер, чтобы разрабатывать интеграцию через REST API в своем проекте. Агент будет обращаться к официальной REST-документации

Scope: crm

Кто может выполнять метод: любой пользователь

DEPRECATED

Развитие метода остановлено. Используйте Универсальные методы для счетов.

Метод обновляет существующий счет.

Параметры метода

Обязательные параметры отмечены *

Название
тип

Описание

id
integer

Идентификатор счета

fields
array

Значения полей для обновления счета.

Чтобы узнать требуемый формат полей, выполните метод crm.invoice.fields и посмотрите формат пришедших значений этих полей

Примеры кода

curl -X POST \
        -H "Content-Type: application/json" \
        -H "Accept: application/json" \
        -d '{"id": "**put_invoice_id_here**", "fields": {"DATE_BILL": "**put_date_here**", "USER_DESCRIPTION": "Комментарий для клиента (обновленный).", "PRODUCT_ROWS": [{"ID": "**put_row_id_here**", "PRODUCT_ID": 703, "QUANTITY": 4, "PRICE": 779.60}]}}' \
        https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/crm.invoice.update
        
curl -X POST \
        -H "Content-Type: application/json" \
        -H "Accept: application/json" \
        -d '{"id": "**put_invoice_id_here**", "fields": {"DATE_BILL": "**put_date_here**", "USER_DESCRIPTION": "Комментарий для клиента (обновленный).", "PRODUCT_ROWS": [{"ID": "**put_row_id_here**", "PRODUCT_ID": 703, "QUANTITY": 4, "PRICE": 779.60}]}, "auth": "**put_access_token_here**"}' \
        https://**put_your_bitrix24_address**/rest/crm.invoice.update
        
try
        {
        	const current = new Date();
        	const date2str = function(d)
        	{
        		return d.getFullYear() + '-' + paddatepart(1 + d.getMonth()) + '-' + paddatepart(d.getDate()) + 'T' + paddatepart(d.getHours()) + ':' + paddatepart(d.getMinutes()) + ':' + paddatepart(d.getSeconds()) + '+03:00';
        	};
        	const paddatepart = function(part)
        	{
        		return part >= 10 ? part.toString() : '0' + part.toString();
        	};
        	const id = prompt("Введите ID");
        	
        	const response = await $b24.callMethod('crm.invoice.get', {"id": id});
        	const result = response.getData().result;
        	
        	if(result.error())
        	{
        		console.error(result.error());
        	}
        	else
        	{
        		const fields = clone(result.data());
        		const n = fields['PRODUCT_ROWS'].length;
        		let productUpdated = false;
        		
        		fields["DATE_BILL"] = date2str(current);
        		fields["USER_DESCRIPTION"] = "Комментарий для клиента (обновленный).";
        		
        		for (let i in fields['PRODUCT_ROWS'])
        		{
        			if (fields['PRODUCT_ROWS'][i]["PRODUCT_ID"] == 703)
        			{
        				const rowId = fields['PRODUCT_ROWS'][i]["ID"];
        				fields['PRODUCT_ROWS'][i] = {
        					"ID": rowId, "PRODUCT_ID": 703, "QUANTITY": 4, "PRICE": 779.60
        				};
        				productUpdated = true;
        				break;
        			}
        		}
        		
        		if (!productUpdated && n > 0)
        		{
        			fields['PRODUCT_ROWS'][n] = {
        				"ID": 0, "PRODUCT_ID": 703, "QUANTITY": 5, "PRICE": 779.60
        			};
        		}
        		
        		const updateResponse = await $b24.callMethod('crm.invoice.update', {"id": id, "fields": fields});
        		const updateResult = updateResponse.getData().result;
        		
        		console.info("Обновлен счет с ID " + updateResult);
        	}
        }
        catch(error)
        {
        	console.error(error);
        }
        
        function clone(src)
        {
        	let dst;
        	if (src instanceof Object)
        	{
        		dst = {};
        		for (let i in src)
        		{
        			if (src[i] instanceof Object)
        				dst[i] = clone(src[i]);
        			else
        				dst[i] = src[i];
        		}
        	}
        	else dst = src;
        	return dst;
        }
        
try {
            $current = new DateTime();
            $date2str = function($d) {
                return $d->format('Y-m-d\TH:i:sP');
            };
            $id = readline("Введите ID");
        
            $response = $b24Service
                ->core
                ->call(
                    'crm.invoice.get',
                    ["id" => $id]
                );
        
            $result = $response
                ->getResponseData()
                ->getResult();
        
            if ($result->error()) {
                error_log($result->error());
                echo 'Error getting invoice: ' . $result->error();
            } else {
                $fields = clone($result->data());
                $n = count($fields['PRODUCT_ROWS']);
                $productUpdated = false;
        
                $fields["DATE_BILL"] = $date2str($current);
                $fields["USER_DESCRIPTION"] = "Комментарий для клиента (обновленный).";
        
                foreach ($fields['PRODUCT_ROWS'] as $key => $row) {
                    if ($row["PRODUCT_ID"] == 703) {
                        $rowId = $row["ID"];
                        $fields['PRODUCT_ROWS'][$key] = [
                            "ID"         => $rowId,
                            "PRODUCT_ID" => 703,
                            "QUANTITY"   => 4,
                            "PRICE"      => 779.60
                        ];
                        $productUpdated = true;
                        break;
                    }
                }
        
                if (!$productUpdated && $n > 0) {
                    $fields['PRODUCT_ROWS'][$n] = [
                        "ID"         => 0,
                        "PRODUCT_ID" => 703,
                        "QUANTITY"   => 5,
                        "PRICE"      => 779.60
                    ];
                }
        
                $responseUpdate = $b24Service
                    ->core
                    ->call(
                        'crm.invoice.update',
                        ["id" => $id, "fields" => $fields]
                    );
        
                $resultUpdate = $responseUpdate
                    ->getResponseData()
                    ->getResult();
        
                if ($resultUpdate->error()) {
                    error_log($resultUpdate->error());
                    echo 'Error updating invoice: ' . $resultUpdate->error();
                } else {
                    echo 'Invoice updated with ID: ' . $resultUpdate->data();
                }
            }
        } catch (Throwable $e) {
            error_log($e->getMessage());
            echo 'Error: ' . $e->getMessage();
        }
        
// Добавление или обновление товара в счете.
        var current = new Date();
        var date2str = function(d)
        {
            return d.getFullYear() + '-' + paddatepart(1 + d.getMonth()) + '-' + paddatepart(d.getDate()) + 'T' + paddatepart(d.getHours()) + ':' + paddatepart(d.getMinutes()) + ':' + paddatepart(d.getSeconds()) + '+03:00';
        };
        var paddatepart = function(part)
        {
            return part >= 10 ? part.toString() : '0' + part.toString();
        };
        var id = prompt("Введите ID");
        BX24.callMethod('crm.invoice.get', {"id": id}, addProduct);
        function addProduct(result)
        {
            if(result.error())
                console.error(result.error());
            else
            {
                var fields = clone(result.data());
                var n = fields['PRODUCT_ROWS'].length;
                var productUpdated = false;
                // Изменение поля "Дата выставления"
                fields["DATE_BILL"] = date2str(current);
                // Изменение поля "Комментарий (отобразится в счете)"
                fields["USER_DESCRIPTION"] = "Комментарий для клиента (обновленный).";
                // Если товар с ID 703 есть в счете, то обновляем его поля.
                // Если товара с ID 703 в счете нет, то добавляем его в счет.
                // Если используется НДС, то читается что цена его включает, а сам признак включения НДС в цену будет
                // взят из каталога.
                for (var i in fields['PRODUCT_ROWS'])
                {
                    if (fields['PRODUCT_ROWS'][i]["PRODUCT_ID"] == 703)
                    {
                        var rowId = fields['PRODUCT_ROWS'][i]["ID"]
                        fields['PRODUCT_ROWS'][i] = {
                            "ID": rowId, "PRODUCT_ID": 703, "QUANTITY": 4, "PRICE": 779.60
                        };
                        productUpdated = true;
                        break;
                    }
                }
                if (!productUpdated && n > 0)
                {
                    fields['PRODUCT_ROWS'][n] = {
                        "ID": 0, "PRODUCT_ID": 703, "QUANTITY": 5, "PRICE": 779.60
                    };
                }
                BX24.callMethod('crm.invoice.update', {"id": id, "fields": fields},
                    function(result)
                    {
                        if(result.error())
                            console.error(result.error());
                        else
                        {
                            console.info("Обновлен счет с ID " + result.data());
                        }
                    }
                );
            }
        }
        function clone(src)
        {
            var dst;
            if (src instanceof Object)
            {
                dst = {};
                for (var i in src)
                {
                    if (src[i] instanceof Object)
                        dst[i] = clone(src[i]);
                    else
                        dst[i] = src[i];
                }
            }
            else dst = src;
            return dst;
        }
        
require_once('crest.php');
        
        $id = $_REQUEST['id']; // Assuming ID is passed as a request parameter
        
        $current = new DateTime();
        $date2str = function($d) {
            return $d->format('Y-m-d\TH:i:s+03:00');
        };
        
        $fields = CRest::call(
            'crm.invoice.get',
            ['id' => $id]
        )['result'];
        
        $n = count($fields['PRODUCT_ROWS']);
        $productUpdated = false;
        $fields["DATE_BILL"] = $date2str($current);
        $fields["USER_DESCRIPTION"] = "Комментарий для клиента (обновленный).";
        
        foreach ($fields['PRODUCT_ROWS'] as $i => $row) {
            if ($row["PRODUCT_ID"] == 703) {
                $fields['PRODUCT_ROWS'][$i] = [
                    "ID" => $row["ID"], "PRODUCT_ID" => 703, "QUANTITY" => 4, "PRICE" => 779.60
                ];
                $productUpdated = true;
                break;
            }
        }
        
        if (!$productUpdated && $n > 0) {
            $fields['PRODUCT_ROWS'][$n] = [
                "ID" => 0, "PRODUCT_ID" => 703, "QUANTITY" => 5, "PRICE" => 779.60
            ];
        }
        
        $result = CRest::call(
            'crm.invoice.update',
            ["id" => $id, "fields" => $fields]
        );
        
        echo '<PRE>';
        print_r($result);
        echo '</PRE>';