Блог Горошко Андрея 1C-Битрикс,Bitrix24 Обновить отгрузку sale.shipment.update

Обновить отгрузку sale.shipment.update

При разработке и поддержке проектов на платформе 1С-Битрикс критически важно использовать современные стандарты D7 API. В этом руководстве мы детально изучим тему «Обновить отгрузку sale.shipment.update», разберем архитектурные особенности и предоставим готовые к интеграции примеры кода.

Обновить отгрузку sale.shipment.update

> Scope: sale
>
> Кто может выполнять метод: администратор

Метод обновляет отгрузку.

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

Название
тип
Описание
id
sale_order_shipment.id
Идентификатор отгрузки
fields
object
Значения полей для обновления отгрузки

Параметр fields

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

Название
тип
Описание
allowDelivery
string
Признак разрешения доставки.
Возможные значения:
— Y – да (доставка разрешена)
— N – нет (доставка не разрешена)
deducted
string
Признак того, является ли отгрузка отгруженной.
Возможные значения:
— Y – да (отгружена)
— N – нет (не отгружена)
deliveryId*
sale_delivery_service
Идентификатор службы доставки
statusId
sale_status
Идентификатор статуса доставки.

Если не передан, то используется статус DN (см. таблицу статусов по умолчанию из документации по sale.status.*)

deliveryDocDate
datetime
Дата документа отгрузки
deliveryDocNum
string
Номер документа отгрузки
trackingNumber
string
Идентификатор отправления
basePriceDelivery
double
Базовая стоимость доставки (без скидок / наценок).

Если передана, то используется и для выставления значения priceDelivery. Переданное значение priceDelivery в этом случае игнорируется.

Если не передана ни basePriceDelivery, ни priceDelivery, то обе цены выставляются в 0

priceDelivery
double
Стоимость доставки.

Если передана и не выставлена basePriceDelivery, то используется и для выставления значения basePriceDelivery.

Если не передана ни basePriceDelivery, ни priceDelivery, то обе цены выставляются в 0

comments
string
Комментарий менеджера
companyId
integer
Идентификатор компании из модуля «Интернет-магазин».

В настоящий момент не используется

responsibleId
user
Идентификатор пользователя ответственного за отгрузку
xmlId
string
Внешний идентификатор отгрузки.

Можно использовать для синхронизации отгрузки с внешней системой

|#

Примеры кода

  • cURL (Webhook)
    curl -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"id":2452,"fields":{"allowDelivery":"N","deducted":"N","deliveryId":3,"statusId":"DD","deliveryDocDate":"2024-02-13T15:05:49","deliveryDocNum":"MyDocumentNumber","trackingNumber":"MyTrackingNumber","basePriceDelivery":1999.99,"comments":"My new comment for manager","responsibleId":1,"xmlId":"myNewXmlId"}}' \
    https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webbhook_here**/sale.shipment.update
  • cURL (OAuth)
    curl -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"id":2452,"fields":{"allowDelivery":"N","deducted":"N","deliveryId":3,"statusId":"DD","deliveryDocDate":"2024-02-13T15:05:49","deliveryDocNum":"MyDocumentNumber","trackingNumber":"MyTrackingNumber","basePriceDelivery":1999.99,"comments":"My new comment for manager","responsibleId":1,"xmlId":"myNewXmlId"},"auth":"**put_access_token_here**"}' \
    https://**put_your_bitrix24_address**/rest/sale.shipment.update
  • JS
    try
    {
    	const response = await $b24.callMethod(
    		'sale.shipment.update', {
    			id: 2452,
    			fields: {
    				allowDelivery: 'N',
    				deducted: 'N',
    				deliveryId: 3,
    				statusId: 'DD',
    				deliveryDocDate: '2024-02-13T15:05:49',
    				deliveryDocNum: 'MyDocumentNumber',
    				trackingNumber: 'MyTrackingNumber',
    				basePriceDelivery: 1999.99,
    				comments: 'My new comment for manager',
    				responsibleId: 1,
    				xmlId: 'myNewXmlId',
    			}
    		}
    	);
    	
    	const result = response.getData().result;
    	console.log(result);
    }
    catch( error )
    {
    	console.error(error.ex);
    }
  • PHP
    try {
        $response = $b24Service
            ->core
            ->call(
                'sale.shipment.update',
                [
                    'id' => 2452,
                    'fields' => [
                        'allowDelivery'      => 'N',
                        'deducted'           => 'N',
                        'deliveryId'         => 3,
                        'statusId'           => 'DD',
                        'deliveryDocDate'    => '2024-02-13T15:05:49',
                        'deliveryDocNum'     => 'MyDocumentNumber',
                        'trackingNumber'     => 'MyTrackingNumber',
                        'basePriceDelivery'  => 1999.99,
                        'comments'           => 'My new comment for manager',
                        'responsibleId'      => 1,
                        'xmlId'              => 'myNewXmlId',
                    ],
                ]
            );
    
        $result = $response
            ->getResponseData()
            ->getResult();
    
        echo 'Success: ' . print_r($result, true);
    
    } catch (Throwable $e) {
        error_log($e->getMessage());
        echo 'Error updating shipment: ' . $e->getMessage();
    }
  • BX24.js
    BX24.callMethod(
        'sale.shipment.update', {
            id: 2452,
            fields: {
                allowDelivery: 'N',
                deducted: 'N',
                deliveryId: 3,
                statusId: 'DD',
                deliveryDocDate: '2024-02-13T15:05:49',
                deliveryDocNum: 'MyDocumentNumber',
                trackingNumber: 'MyTrackingNumber',
                basePriceDelivery: 1999.99,
                comments: 'My new comment for manager',
                responsibleId: 1,
                xmlId: 'myNewXmlId',
            }
        },
        function(result) {
            if (result.error())
                console.error(result.error().ex);
            else
                console.log(result.data());
        }
    );
  • PHP CRest
    require_once('crest.php');

    $result = CRest::call(
        'sale.shipment.update',
        [
            'id' => 2452,
            'fields' => [
                'allowDelivery' => 'N',
                'deducted' => 'N',
                'deliveryId' => 3,
                'statusId' => 'DD',
                'deliveryDocDate' => '2024-02-13T15:05:49',
                'deliveryDocNum' => 'MyDocumentNumber',
                'trackingNumber' => 'MyTrackingNumber',
                'basePriceDelivery' => 1999.99,
                'comments' => 'My new comment for manager',
                'responsibleId' => 1,
                'xmlId' => 'myNewXmlId',
            ]
        ]
    );

    echo '<PRE>';
    print_r($result);
    echo '</PRE>';

Ответ в случае успеха

HTTP-статус: 200

{
   "result":{
      "shipment":{
         "accountNumber":"2068\/19",
         "allowDelivery":"N",
         "basePriceDelivery":1999.99,
         "canceled":"N",
         "comments":"My new comment for manager",
         "companyId":null,
         "currency":"RUB",
         "customPriceDelivery":"N",
         "dateAllowDelivery":"2024-04-12T10:01:23+03:00",
         "dateCanceled":null,
         "dateDeducted":"2024-04-12T10:01:23+03:00",
         "dateInsert":"2024-04-11T14:17:52+03:00",
         "dateMarked":null,
         "dateResponsibleId":"2024-04-12T10:01:23+03:00",
         "deducted":"N",
         "deliveryDocDate":"2024-02-13T14:05:49+03:00",
         "deliveryDocNum":"MyDocumentNumber",
         "deliveryId":3,
         "deliveryName":"Самовывоз",
         "deliveryXmlId":"",
         "discountPrice":0,
         "empAllowDeliveryId":1,
         "empCanceledId":null,
         "empDeductedId":1,
         "empMarkedId":null,
         "empResponsibleId":1,
         "externalDelivery":"N",
         "id":2452,
         "id1c":"",
         "marked":"N",
         "orderId":2068,
         "priceDelivery":1999.99,
         "reasonMarked":"",
         "reasonUndoDeducted":"",
         "responsibleId":1,
         "shipmentItems":[
            
         ],
         "statusId":"DD",
         "statusXmlId":"",
         "system":"N",
         "trackingDescription":"",
         "trackingLastCheck":"",
         "trackingNumber":"MyTrackingNumber",
         "trackingStatus":"",
         "updated1c":"N",
         "version1c":"",
         "xmlId":"myNewXmlId"
      }
   },
   "time":{
      "start":1712928678.417617,
      "finish":1712928679.68092,
      "duration":1.2633028030395508,
      "processing":1.0808379650115967,
      "date_start":"2024-04-12T16:31:18+03:00",
      "date_finish":"2024-04-12T16:31:19+03:00"
   }
}

Возвращаемые данные

Название
тип
Описание
result
object
Корневой элемент ответа
shipment
sale_order_shipment
Объект с информацией об обновленной отгрузке
time
time
Информация о времени выполнения запроса

Обработка ошибок

HTTP-статус: 400

{
   "error":0,
   "error_description":"Required fields: name"
}

Возможные коды ошибок

КодОписание
201140400001Отгрузка не найдена
200040300020Недостаточно прав для обновления отгрузки
BX_INVALID_VALUEЗначение одного из полей не прошло валидацию перед сохранением
100Не указан параметр id
100Не указан или пустой параметр fields
0Не переданы обязательные поля структуры fields
0Другие ошибки (например, фатальные ошибки)
  • [](./index)
  • [](./sale-shipment-add)
  • [](./sale-shipment-get)
  • [](./sale-shipment-list)
  • [](./sale-shipment-delete)
  • [](./sale-shipment-get-fields)

💡 Экспертное мнение и рекомендации

Практические рекомендации:

  • При написании кастомных компонентов для «Обновить отгрузку sale.shipment.update» всегда разделяйте бизнес-логику и представление (шаблон).
  • Используйте отладку SQL-запросов через конструкцию $wpdb->last_query или стандартный трекер Битрикса, чтобы контролировать нагрузку.

Похожая задача в бизнесе?

Помогу автоматизировать процессы и внедрить ИИ

Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.

Related Post

Установить коды доступа для роли landing.role.setAccessCodesУстановить коды доступа для роли landing.role.setAccessCodes

Эффективная интеграция и кастомизация функционала в Битрикс24 часто требует работы на уровне API. Сегодня мы подробно рассмотрим «Установить коды доступа для роли landing.role.setAccessCodes». Вы узнаете экспертные методики работы с landing.role.setAccessCodes

Как использовать метод SDK entity.delete в Битрикс24Как использовать метод SDK entity.delete в Битрикс24

Эффективная интеграция и кастомизация функционала в Битрикс24 часто требует работы на уровне API. Сегодня мы подробно рассмотрим «Как использовать метод SDK entity.delete в Битрикс24». Вы узнаете экспертные методики работы с

Вкладка в детальной карточке элемента CRM CRM_XXX_DETAIL_TAB, CRM_DYNAMIC_XXX…Вкладка в детальной карточке элемента CRM CRM_XXX_DETAIL_TAB, CRM_DYNAMIC_XXX…

Оптимизация производительности и безопасности — залог успешного проекта на 1С-Битрикс. Данный материал посвящен практическому применению «Вкладка в детальной карточке элемента CRM CRM_XXX_DETAIL_TAB, CRM_DYNAMIC_XXX…». Мы подготовили подробный разбор принципов работы и