В общем, друзья. Проблема решена. Не слушайте "Битрикс разработчиков" в этой теме, проблема решается в самом битриксе.
AddEventHandler("sale", "OnCheckCollateDocuments", "CustomChangeCheckType");
function CustomChangeCheckType($entities)
{
foreach ($entities as $entity) {
if ($entity instanceof \Bitrix\Sale\Payment) {
$order = $entity->getCollection()->getOrder();
if ($entity->isPaid())
{
$related = [];
foreach ($entity->getCollection() as $payment)
{
if ($payment->getId() != $entity->getId())
{
$related[\Bitrix\Sale\Cashbox\Check::PAYMENT_TYPE_ADVANCE][] = $payment;
}
}
foreach ($order->getShipmentCollection() as $shipment)
{
if (!$shipment->isSystem())
{
$related[\Bitrix\Sale\Cashbox\Check::SHIPMENT_TYPE_NONE][] = $shipment;
}
}
return new \Bitrix\Main\EventResult(
\Bitrix\Main\EventResult::SUCCESS,
[['TYPE' => \Bitrix\Sale\Cashbox\FullPrepaymentCheck::getType(), 'ENTITIES' => [$entity], 'RELATED_ENTITIES' => $related]]
);
}
}
}
return new \Bitrix\Main\EventResult(
\Bitrix\Main\EventResult::ERROR,
[]
);
}
Это нужно писать в init.php
Я не битрикс разработчик, от увиденного кода битрикса мне стало плохо, все через одно место, как и код выше.