Имеется БУС последней версии редакция "Бизнес", 1C Компл.авт. 1.1, модуль обмена - 6.0.3.4
Логика работы магазина следующая - есть каталог, покупатели создают заказы, количественный учет включен, покупка при отсутствии товара запрещена.
Мы продаем только то, что есть на складе, поэтому такая настройка. Заказы из БУС выгружаются в 1с и все изменения в заказе происходят только в 1с.
Выгрузка оффлайновых заказов в БУС (т.е. те которые изначально создались в 1с - отключена)
Вобщем, все сделано для того, чтобы клиенту предоставить все возможности сделать актуальный заказ на сайте. Но все равно не избежать ситуаций, когда клиент сделал заказ, а потом просит изменить в нем что-то в товарном составе. Короче - сделанные заказы приходится изменять.
Изменения заказа происходят по разным причинам - клиент может отказаться от какого-то товара, попросить добавить новый товар в заказ, на складе пересорт и товарные остатки, выгруженные на сайт, были некорректны. Все изменения в заказе происходят на стороне 1с, менеджером магазина в процессе общения с покупателем по разным каналам связи. После того, как с покупателем все утрясено по составу заказа, хотелось бы ИЗМЕНЕННЫЙ заказ из 1с выгрузить на сайт, чтобы он появился в личном кабинете покупателя и отработали почтовые события.
Но это не всегда получится сделать, потому что
Судя по логу ошибок, при получении модифицированного заказа из 1с, БУС не пишет эти изменения напрямую в заказ, а прогоняет через корзину, потому что текст описания ошибок берется из \bitrix\modules\sale\lang\ru\lib\basket.php :
$MESS["SALE_BASKET_ITEM_WRONG_AVAILABLE_QUANTITY"] = "Ошибка проверки доступного количества товара \"#PRODUCT_NAME#\"";
$MESS["SALE_BASKET_AVAILABLE_FOR_PURCHASE_QUANTITY"] = "Доступное для покупки количество товара \"#PRODUCT_NAME#\": #AVAILABLE_QUANTITY#";
Как я понимаю, на стороне сайта определяется, что за заказ прислала 1с, определяется покупатель и его корзина, и видимо через корзину БУС пытается обновить заказ. А стандартные правила сайта (активность товара и остатки товара в БУСе в данный момент) накладывают ограничения.
Мне надо чтобы при обновлении заказа из 1с, правила по количественному учету, списания в резерв и по активности товара ИГНОРИРОВАЛИСЬ.
Можно ли это сделать через обработчики событий в init.php? Если да, то каких событий? Если с помощью событий нельзя, то через кастомизацию импорта в CSaleOrderLoader?
Подскажите, если не сложно, у меня пока предел в изысканиях.
Логика работы магазина следующая - есть каталог, покупатели создают заказы, количественный учет включен, покупка при отсутствии товара запрещена.
Мы продаем только то, что есть на складе, поэтому такая настройка. Заказы из БУС выгружаются в 1с и все изменения в заказе происходят только в 1с.
Выгрузка оффлайновых заказов в БУС (т.е. те которые изначально создались в 1с - отключена)
Вобщем, все сделано для того, чтобы клиенту предоставить все возможности сделать актуальный заказ на сайте. Но все равно не избежать ситуаций, когда клиент сделал заказ, а потом просит изменить в нем что-то в товарном составе. Короче - сделанные заказы приходится изменять.
Изменения заказа происходят по разным причинам - клиент может отказаться от какого-то товара, попросить добавить новый товар в заказ, на складе пересорт и товарные остатки, выгруженные на сайт, были некорректны. Все изменения в заказе происходят на стороне 1с, менеджером магазина в процессе общения с покупателем по разным каналам связи. После того, как с покупателем все утрясено по составу заказа, хотелось бы ИЗМЕНЕННЫЙ заказ из 1с выгрузить на сайт, чтобы он появился в личном кабинете покупателя и отработали почтовые события.
Но это не всегда получится сделать, потому что
- БУС начинает сверять остатки у себя на сайте, с тем что приходит из 1с в измененном заказе. Если остатков у него не хватает, заказ не обновится, в логе 1с будет ошибка
- Если товар в заказе из 1с на сайте будет НЕАКТИВНЫМ в момент обмена, заказ опять не обновится в БУС, а в логе опять ошибка.
- БУС будет списывать товар в резервы из измененного заказа, а мне не надо менять текущие резервы
Судя по логу ошибок, при получении модифицированного заказа из 1с, БУС не пишет эти изменения напрямую в заказ, а прогоняет через корзину, потому что текст описания ошибок берется из \bitrix\modules\sale\lang\ru\lib\basket.php :
$MESS["SALE_BASKET_ITEM_WRONG_AVAILABLE_QUANTITY"] = "Ошибка проверки доступного количества товара \"#PRODUCT_NAME#\"";
$MESS["SALE_BASKET_AVAILABLE_FOR_PURCHASE_QUANTITY"] = "Доступное для покупки количество товара \"#PRODUCT_NAME#\": #AVAILABLE_QUANTITY#";
Как я понимаю, на стороне сайта определяется, что за заказ прислала 1с, определяется покупатель и его корзина, и видимо через корзину БУС пытается обновить заказ. А стандартные правила сайта (активность товара и остатки товара в БУСе в данный момент) накладывают ограничения.
Мне надо чтобы при обновлении заказа из 1с, правила по количественному учету, списания в резерв и по активности товара ИГНОРИРОВАЛИСЬ.
Можно ли это сделать через обработчики событий в init.php? Если да, то каких событий? Если с помощью событий нельзя, то через кастомизацию импорта в CSaleOrderLoader?
Подскажите, если не сложно, у меня пока предел в изысканиях.