Приветствую коллеги, сегодня я вам расскажу о "забавном" поведении всего перечисленного в заголовке.
Итак что мы имеем, обмен товарами с 1с, выгрузка товаров остаток = остаток товаров - резерв, на сайте стоит "Резервирование товаров при оформлении заказа"
До последних обновлений все круто работает, и работало бы если бы Битриксу не взбрело в голову добавить в обмен еще один флаг "Заказ отгружен" и только по этому флагу списывать резерв.
[spoiler]
Флаг этот разумеется в установленном дополнении от Битрикс нет, и когда выпустят новое дополнение с этим флагом никто не знает, цитата из ответов тех. поддержки
Короче все как всегда.
Что мы имеем после обновлений, пример:
например у нас 4 единицы товара, мы оформляем два заказа, имеем на сайте остаток 4, резерв 2 и соответственно 2 еще можно купить, далее шаманство, мы обрабатываем на стороне 1с эти два заказа, по складу 1с остаток 4 резерв 2 на сайт при обмене выгружается остаток 2.
вот она моя прелесть:
у нас на сайте остаток 2, резерв 2 и купить товар нельзя, хотя фактически у нас есть две единицы которые можно продать, пока все логично
обработали заказы, их оплатили, заказы имеют статус "Выполнено", вроде все хорошо резерв должен списаться, а вот нет, Битрикс считает иначе, и добавляет новый флаг, "Заказ отгружен", и без этого флага резерв не списывается, а этот супер флаг не выгружается из 1с.
Такие дела коллеги, не наступайте не те же грабли.
PS: Для клиента решил проблему написанием обработчика сбрасывающий резерв после обмена товарами с 1с, других вариантов не нашел.
UPD: Обработчик для сброса резерва товаров
Внимание коллеги, данный обработчик рассчитан на небольшое количество товаров в каталоге, если товаров большое количество вы можете доработать обработчик Нейман Андрей и разбить его на шаги.
AddMessage2Log использовался для отладки, на рабочих проектах можно выкинуть.
Итак что мы имеем, обмен товарами с 1с, выгрузка товаров остаток = остаток товаров - резерв, на сайте стоит "Резервирование товаров при оформлении заказа"
До последних обновлений все круто работает, и работало бы если бы Битриксу не взбрело в голову добавить в обмен еще один флаг "Заказ отгружен" и только по этому флагу списывать резерв.
[spoiler]
Флаг этот разумеется в установленном дополнении от Битрикс нет, и когда выпустят новое дополнение с этим флагом никто не знает, цитата из ответов тех. поддержки
я: Модулем обмена (дополнением от Битрикс) данный флаг предусмотрен? |
ТП: Нет, в данный момент этот флаг не выгружается |
я: И когда ситуация изменится? |
ТП: Реализация стоит в плане работ, по срокам не смогу сориентировать, они неизвестны. |
Короче все как всегда.
Что мы имеем после обновлений, пример:
например у нас 4 единицы товара, мы оформляем два заказа, имеем на сайте остаток 4, резерв 2 и соответственно 2 еще можно купить, далее шаманство, мы обрабатываем на стороне 1с эти два заказа, по складу 1с остаток 4 резерв 2 на сайт при обмене выгружается остаток 2.
вот она моя прелесть:
у нас на сайте остаток 2, резерв 2 и купить товар нельзя, хотя фактически у нас есть две единицы которые можно продать, пока все логично
обработали заказы, их оплатили, заказы имеют статус "Выполнено", вроде все хорошо резерв должен списаться, а вот нет, Битрикс считает иначе, и добавляет новый флаг, "Заказ отгружен", и без этого флага резерв не списывается, а этот супер флаг не выгружается из 1с.
Такие дела коллеги, не наступайте не те же грабли.
PS: Для клиента решил проблему написанием обработчика сбрасывающий резерв после обмена товарами с 1с, других вариантов не нашел.
UPD: Обработчик для сброса резерва товаров
Внимание коллеги, данный обработчик рассчитан на небольшое количество товаров в каталоге, если товаров большое количество вы можете доработать обработчик Нейман Андрей и разбить его на шаги.
AddEventHandler("catalog", "OnSuccessCatalogImport1C", "DSOnSuccessCatalogImport1C");
function DSOnSuccessCatalogImport1C()
{
if (CModule::IncludeModule("catalog"))
{
$db_res = CCatalogProduct::GetList(array("QUANTITY" => "DESC"), array(">QUANTITY_RESERVED" => 0), false, false);
while ($ar_res = $db_res->Fetch())
{
if(!CCatalogProduct::Update($ar_res["ID"], array("QUANTITY_RESERVED"=>0))){
AddMessage2Log("Ошибка обновления " . $ar_res["ID"]);
}//endif
}//endwhile
}
}
|