PHP
#bitrix#sale#order#php#d7#payment#shipment#history

Получить историю оплат и отгрузок заказа

Получение истории оплат через PaymentCollection и отгрузок через ShipmentCollection с информацией о датах и статусах.

Как использовать

  1. Скопируйте нужный фрагмент кода.
  2. Вставьте в свой проект и при необходимости измените под задачу.
  3. Проверьте зависимости и окружение (версии, переменные).

Получение полной истории оплат и отгрузок заказа через коллекции D7 API. Используйте в личном кабинете, детальных страницах заказов, отчётах для отображения истории операций.

use Bitrix\Main\Loader;
use Bitrix\Sale\Order;

/**
 * Получить историю оплат заказа
 * @param int $orderId ID заказа
 * @return array Массив оплат с историей
 */
function getOrderPaymentsHistory($orderId) {
    if (!Loader::includeModule('sale')) {
        return [];
    }
    
    $order = Order::load($orderId);
    if (!$order) {
        return [];
    }
    
    $paymentCollection = $order->getPaymentCollection();
    $payments = [];
    
    foreach ($paymentCollection as $payment) {
        $payments[] = [
            'ID' => $payment->getId(),
            'PAID' => $payment->getField('PAID') === 'Y',
            'SUM' => $payment->getField('SUM'),
            'CURRENCY' => $payment->getField('CURRENCY'),
            'PAY_SYSTEM_ID' => $payment->getField('PAY_SYSTEM_ID'),
            'PAY_SYSTEM_NAME' => $payment->getField('PAY_SYSTEM_NAME'),
            'DATE_PAID' => $payment->getField('DATE_PAID'),
            'DATE_BILL' => $payment->getField('DATE_BILL'),
            'PAY_VOUCHER_NUM' => $payment->getField('PAY_VOUCHER_NUM'),
            'PAY_VOUCHER_DATE' => $payment->getField('PAY_VOUCHER_DATE'),
            'COMMENTS' => $payment->getField('COMMENTS')
        ];
    }
    
    return $payments;
}

/**
 * Получить историю отгрузок заказа
 * @param int $orderId ID заказа
 * @return array Массив отгрузок с историей
 */
function getOrderShipmentsHistory($orderId) {
    if (!Loader::includeModule('sale')) {
        return [];
    }
    
    $order = Order::load($orderId);
    if (!$order) {
        return [];
    }
    
    $shipmentCollection = $order->getShipmentCollection();
    $shipments = [];
    
    foreach ($shipmentCollection as $shipment) {
        $shipments[] = [
            'ID' => $shipment->getId(),
            'DEDUCTED' => $shipment->getField('DEDUCTED') === 'Y',
            'ALLOW_DELIVERY' => $shipment->getField('ALLOW_DELIVERY') === 'Y',
            'DELIVERY_ID' => $shipment->getField('DELIVERY_ID'),
            'DELIVERY_NAME' => $shipment->getField('DELIVERY_NAME'),
            'TRACKING_NUMBER' => $shipment->getField('TRACKING_NUMBER'),
            'DATE_DEDUCTED' => $shipment->getField('DATE_DEDUCTED'),
            'DATE_ALLOW_DELIVERY' => $shipment->getField('DATE_ALLOW_DELIVERY'),
            'PRICE_DELIVERY' => $shipment->getField('PRICE_DELIVERY'),
            'CURRENCY' => $shipment->getField('CURRENCY')
        ];
    }
    
    return $shipments;
}

/**
 * Получить полную историю заказа (оплаты + отгрузки)
 * @param int $orderId ID заказа
 * @return array ['payments' => [], 'shipments' => []]
 */
function getOrderFullHistory($orderId) {
    return [
        'payments' => getOrderPaymentsHistory($orderId),
        'shipments' => getOrderShipmentsHistory($orderId)
    ];
}

Usage:

// Получить историю оплат
$payments = getOrderPaymentsHistory(12345);

foreach ($payments as $payment) {
    if ($payment['PAID']) {
        echo 'Оплачено: ' . $payment['SUM'] . ' ' . $payment['CURRENCY'];
        echo 'Дата оплаты: ' . $payment['DATE_PAID'];
        echo 'Способ оплаты: ' . $payment['PAY_SYSTEM_NAME'];
    }
}

// Получить историю отгрузок
$shipments = getOrderShipmentsHistory(12345);

foreach ($shipments as $shipment) {
    if ($shipment['DEDUCTED']) {
        echo 'Отгружено: ' . $shipment['DELIVERY_NAME'];
        echo 'Трек-номер: ' . $shipment['TRACKING_NUMBER'];
        echo 'Дата отгрузки: ' . $shipment['DATE_DEDUCTED'];
    }
}

// Получить полную историю
$history = getOrderFullHistory(12345);

Notes:

⚠️ Коллекции оплат и отгрузок доступны только после загрузки заказа через Order::load(). DATE_PAID заполняется автоматически при оплате через платёжную систему. DATE_DEDUCTED заполняется при отгрузке товара. Для получения истории изменений статусов используйте отдельные таблицы истории или события.