Установить остатки товара на складе из доступных остатков.

Просмотров: 8198

Задача, заполнить остатки товаров, в 1С-Битрикс, из параметра "Доступное количество".

Для этого достаточно воспользоваться методами CIBlockElement::GetList и CCatalogStoreProduct::Add


CModule::IncludeModule('iblock');
Cmodule::IncludeModule('catalog');
$addProps = CIBlockElement::GetList(
        Array("ID" => "ASC"),
        Array("IBLOCK_ID" => 7),
        false,
        false,
        Array(
            'ID',
            'CATALOG_QUANTITY',
        )
);
while ($ar_fields = $addProps->Fetch()) {
    $arFields = Array(
        "PRODUCT_ID" => $ar_fields['ID'],
        "STORE_ID" => 1,
        "AMOUNT" => (int)$ar_fields['CATALOG_QUANTITY']
    );
    $ID = CCatalogStoreProduct::UpdateFromForm($arFields);
}

Пояснения:

  • Подключили модули инфоблока и каталога
  • С помощью CIBlockElement::GetList - получили ID и количество доступного товара из инфоблока ID-7
  • В цикле, прошлись по всем элементам и обновили количества остатка на складе с ID=1, методом CCatalogStoreProduct::UpdateFromForm
Артём 26.08.2022
как сделать что бы при обновлении остатка (доступного) перезаписывалось по данному коду остаток на складе
Михаил Базаров 27.08.2022
Цитата
Артём написал:
как сделать что бы при обновлении остатка (доступного) перезаписывалось по данному коду остаток на складе

Можно сделать обработчик события с OnAfterIBlockElementUpdate
В init.php
Код
AddEventHandler("iblock", "OnAfterIBlockElementUpdate", Array("UpdateAmounts", "OnAfterIBlockElementUpdateHandler"));
class UpdateAmounts
{
    function OnAfterIBlockElementUpdateHandler(&$arFields)
    {
       Получаем товар по его arFields['ID'] и делаем с ним что хотим
    }
}


Если не критична скорость обновления, можно повесить этот скрипт на cron что бы отрабатывал с каким-то периодом.