Задать вопрос
@borisevstratov

Почему не ставится флаг оплаты заказа при использовании API D7?

Столкнулся с проблемой при создании оплат к заказу через D7.
Иногда при создании оплат (оплат может быть несколько), полностью покрывающих сумму заказа, автоматически не проставляется флаг оплаты заказа.

Фрагмент кода привожу ниже:
<?
$order = Sale\Order::loadByAccountNumber(1000);
$paymentCollection = $order->getPaymentCollection();

$paySystemService = PaySystem\Manager::getObjectById(1);

// цикл для каждой из импортированных оплат
foreach ($importOrderPayments as $importOrderPayment)
{
    $paymentExists = find_payment($importOrderPayment['Document']) // определяется существование оплаты: возвращается id оплаты, либо false если оплаты нет
    if ($paymentExists === false) // оплаты не существует — создаём
    {
        $payment = $paymentCollection->createItem();
        $payment->setFields([
            'PAY_SYSTEM_ID' => $paySystemService->getField("PAY_SYSTEM_ID"),
            'PAY_SYSTEM_NAME' => $paySystemService->getField("NAME"),
            'DATE_PAID' => \Bitrix\Main\Type\DateTime::createFromTimestamp($importOrderPayment['Date']),
            'SUM' => $importOrderPayment['FullPrice'],
            'PAY_VOUCHER_NUM' => $importOrderPayment['Document'],
            'PAY_VOUCHER_DATE' => \Bitrix\Main\Type\DateTime::createFromTimestamp($importOrderPayment['Date']),
            'COMMENTS' => $importOrderPayment['Comments'],
            'PAID' => 'Y',
            'COMPANY_ID' => 1,
            'UPDATED_1C' => 'Y'
        ]);
    }
    else // оплата существует - обновим
    {
        $payment = $paymentCollection->getItemById($paymentExists);
        $payment->setFieldNoDemand('SUM', $importOrderPayment['FullPrice']);
        $payment->setFields([
            'PAY_SYSTEM_ID' => $paySystemService->getField("PAY_SYSTEM_ID"),
            'PAY_SYSTEM_NAME' => $paySystemService->getField("NAME"),
            'DATE_PAID' => \Bitrix\Main\Type\DateTime::createFromTimestamp($importOrderPayment['Date']),
            'PAY_VOUCHER_NUM' => $importOrderPayment['Document'],
            'PAY_VOUCHER_DATE' => \Bitrix\Main\Type\DateTime::createFromTimestamp($importOrderPayment['Date']),
            'COMMENTS' => $importOrderPayment['Comments'],
            'PAID' => 'Y',
            'COMPANY_ID' => 1,
            'UPDATED_1C' => 'Y'
        ]);
    }
}

$order->save();
?>


Также читал форум Битрикса с похожей проблемой, но ответа так и не нашёл:
https://dev.1c-bitrix.ru/support/forum/forum6/topi...
  • Вопрос задан
  • 676 просмотров
Подписаться 2 Средний 4 комментария
Пригласить эксперта
Ответы на вопрос 1
@RuComMarket
Битрикс FullStack разработчик
попробуй так
$payment->setPaid("Y");
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы