Добрый день! Подскажите как можно выгружать только те товары в яндекс маркет, которые есть в наличии? Пробовал способ описанный тут, не помогает. Все равно все товары выгружаются. Содержимое файла run.php тут, я так понимаю, в нём надо что-то отредактировать? Версия 1С-Битрикс: Управление сайтом 14.0.15.
Так же столкнулся с проблемой выгрузки каталога в яндекс.маркет. Покупать готовые решения и модули принципиально не хочу, так как считаю, что такие функции должны быть включены в стандартную редакцию Битрикса. Править ядро тоже не будем, дабы не терять лицензию.
Многим известно, что Яндекс не пропускает товары с торговыми предложениями. Причина одна - Каждому товарному предложению должна соответствовать отдельная страница сайта. В битриксе есть настройки, в типах инфоблоков, якобы позволяющие отображать урлы самих SKU, но это увы не работает, по крайней мере стандартными методами без правки ядра. Соответственно если хотим попасть в ЯМ, то выгружать мы должны только сам товар, а не его SKU. В моем случае товар мебель, например офисное кресло модель№1, имеет 5 вариантов исполнения (цвет). Стандартный функционал выгрузки в яндекс маркет, генерит YML как с простыми товарами, так и с SKU, причем в последнем случае у всех товарных предложений одна страница, и цена там может отображаться не та, в общем проверку не пройдем 100%.
Самый простой выход и Задача номер раз - это не выгружать SKU, Это довольно просто - в настройках ИБ - добавляем новое свойство для Торговых предложений, например Я.Маркет - число или чекбокс, по умолчанию 0 В настройках дополнительных параметров экспорта - отбор по этому свойству, равно =1. Так как по умолчанию у всех SKU это свойство = 0, в YML они не попадают.
Переходим в Настройки-Настройки продукта-Настройки модулей-Торговый каталог Значения параметров товаров по умолчанию так как товаров много и каждому делать персональные настройки смысла нет.
Включить количественный учет
пусто
Разрешить покупку при отсутствии товара
пусто
при таких настройках у нас генерируются в прайс все товары. но тут возникает проблема у всех available="true" даже у товаров с доступным количеством 0 это логично так как у нас не включен количественный учет. для яндекса это означает, что товар можно приехать купить в магазин либо заказать с доставкой в течение 2 дней. Если включить количественный учет, то у товаров с доступным количеством более 0 будет available="true" , а у товаров с нулем будет available="false" available="false" для яндекса - это статус под заказ с доставкой от 3 дней до 2 месяцев. В моем случае, все товары из наличия доставляются в течение 3 дней, поэтому всем нужно прописать false, но на сайте хочется показать клиенту, что товары есть и даже отобразить остатки. Поэтому мы ставим всем товарам количество =0, а SKU - фактическое количество
Тут возникает еще одна проблема, если товар без SKU и его количество = 0, либо товар содержит SKU, но у всех количество = 0, то на странице товара пропадает кнопка корзины, что так же является нарушением и проверка яндекса не пропускает такой магазин. Логично проставить в настройках Разрешить покупку при отсутствии товара. Но после этого в YML у всех товаров снова available="true" Суть дилеммы в том что для битрикса available="false" означает, что товара нет и возможно не будет, и сделать заказ на сайте невозможно, для яндекса available="false" - означает что товар можно заказать, но привезут его не быстро, в лучшем случае за 3 дня.
Проблему могли бы решить разработчики, настроив для SKU отдельные страницы, но они этого не делают, хотя с этим вопросом к ним не раз обращались. Я решил проблему настроив скрипт под свои нужды, так называемый custom скрипта yandex_run.php 1) Создадим свой скрипт экспорта. Для этого возьмем из /bitrix/modules/catalog/load/ два файла: yandex_run.php и yandex_setup.php 2) Скопируем их в/bitrix/php_interface/include/catalog_export/ и переименуем, например new, главное сохранить окончание _run.php, в нашем случае получится так: new_run.php и new_setup.php 3) После этого в админке битрикса появится новый скрипт экспорта Далее потребуются минимальные знания php, главное понимать логику процесса, с помощью поисковиков вы найдете что нужно поменять в скрипте, чтобы заработало как вам надо. Приведу свой пример. Мне необходимо, чтобы в YML у всех товаров было available="false", при этом на сайте отображалось количество товара и количество его SKU Чтобы на сайте можно было заказывать товар с количеством =0
1. Открываем в режиме правки php файл /bitrix/php_interface/include/catalog_export/new_run.php 2. Ищем слово available и первое что нам попадается это строка $arAcc['CATALOG_AVAILABLE'] = 'Y'; Это значение э напрямую влияет на свойство available в нашем YML, за это свойство отвечает переменная $str_AVAILABLE = ' available="'.('Y' == $arAcc['CATALOG_AVAILABLE'] ? 'true' : 'false').'"'; которая подставляет true если Y, и false если N Мы просто находим и меняем все строки $arAcc['CATALOG_AVAILABLE'] = 'Y'; на $arAcc['CATALOG_AVAILABLE'] = 'N'; Далее скрипт проверяет на условия количества, вклчен ли кол.учет, разрешена ли покупка нулевого количества и все равно ставит N, но меня это уже не волнует. проблема решена.
Надеюсь я кому-нибудь помог данным постом. Все удачи
Андрей, по какой-то причине данный метод не работает и товары с количеством "0" попадают в выгрузку. Возможно, что это из-за того что нет товарных предложений?
Если у Вас наличие ведется отдельным свойством или просто нужна фильтрация при выгрузке, например по "снятым с продажи" товарам или еще каким-либо свойствам, то находите в вашем скрипте выгрузки custom_run.php (скопированном заранее в /bitrix/php_interface/include/catalog_export/)