Добрый день! Надо Хотелось бы узнать как можно програмно добавить торговое предложение (товар по сути) для товара! Евгений Жуков написал что при добавлении, товар (предложение) нужно привязывать к нужному. Но как это реализовать пока не знаю. Кто подскажет?
Евгений Жуков, попробовала добавить Торговое Предложение по вашему коду. Элемент добавляется, но у него "Доступность" стоит "нет". При этом не добавляется наличие товара. Если пересохранить элемент через админку, то "Доступность" меняет статус на "да" и все хорошо работает. Но Торговых Предложений будет очень много, которые должны в автономном режиме загружаться. Подскажите, пожалуйста, как сделать так, чтобы при добавлении торгового предложения, его "Доступность" была "да"?
Евгений Жуков написал: // дальше сохранять цены, количество на складе и т.п.
Евгений скажите а с чем может быть связана такая ситуация: Я заливаю товары с предложениями, предварительно распарсив csv выгрузку c OpenCart (переносим сайт на битрикс), так вот товары и предложения залились всё вродебы хорошо. Но они (торговые предложения) прикрепившись к товару являются недоступными http://joxi.ru/v29Q16GT330KG2 , соответственно при попытке купить этот товар получаю ошибку "Товар не найден" http://joxi.ru/nAyzw4JIYYxdOr . Но если взять отметить все торговые предложения в карточке товара, нажать кнопку "Редактировать отмеченные записи" http://joxi.ru/D2PjZ5dSppDEzr и затем ничего не меняя просто нажать кнопку сохранить, значение колонки "Доступность" изменится на "Да" http://joxi.ru/l2ZvyOxfwwbYq2 , а товар покупается без проблем http://joxi.ru/4Ak3Y4lhyyPLWA .
И ещё одна маленькая странность. Помимо того что созданные предложения недоступны, если зайти в карточку предложения непосредственно из инфоблока торговых предложений, то цены там нет http://joxi.ru/DmBXGOZhwwVXPA , а если открыть родительский товар и перейти на вкладку "Торговые предложения" то все цены на месте http://joxi.ru/82QVa6LSjjQPpA .
Цену я добавлял вот так:
Код
//Устанавливаем цену на торговое предложение
$arFieldsPrice = array(
"PRODUCT_ID" => $newOfferId, //ID-шник только что добавленного ТП
"CATALOG_GROUP_ID" => 1, //Базовая цена (у меня один тип цен)
"PRICE" => ($row['price']==0) ? $arProducts[$row['product_id']]['PRICE'] : $row['price'], //Тут ставим цену из базы или цену родительского товара
"CURRENCY" => "RUB",
);
//Проверяем на ошибки
if(!CPrice::Add($arFieldsPrice)){
echo 'Ошиба добавления цены <br/>';
print_p($arFieldsPrice);
break;
}
В общем я в недоумении =) Думал выдрать что-нибудь полезное (всмысле готового рабочего куска кода) из 1c_exchenge.php но там всё с XML завязано, не подошло, а где ещё подсмотреть я не знаю =(
Евгений Жуков, подскажите, как на OnProductAdd получить цену добавляемого товарного предложения ? Пытаюсь при добавлении товара с определенными опциями, добавить еще один такой же, за исключением одного свойства. Ни один из этих способов у меня не сработал. http://prntscr.com/em9btn Возможно, цена добавляется уже после этого события?
Евгений Жуков, я конечно, спрашиваю о невозможном, но может быть есть такое событие, которое ловит недавно добавленные товары? Может у вас есть мысль, как добавить функционал "Подарочная упаковка" со сменой цены на Малом бизнесе? т.е. без нее одна цена, с упаковкой - чуть дороже. В голову пришло только сделать доп торговое предложение, но автоматически его сгенерировать при добавлении товара несудьба
Возникла необходимость вносить и обновлять товар, получая их со сторонней базы данных. На этапе Добавления элемента вносятся не все его свойства. Массив свойств готовлю согласно синтаксиса указанного в документации для метода CIBlockElement::Add(). Хотя в Примерах использования есть варианты написания, которые синтаксису не соответствуют. Возможно устаревшая информация...
Массив выглядит следующим образом:
md5() преобразует русскоязычное слово, которое возвращается с внешней базы. Полученый хеш строки прописан в битриксе в качестве XML_ID для необходимого элемента свойства.
К примеру, на скриншоте свойство PROP_STATUS (выделено зелёным), Это данные которые поступают в метод Add():
Скрин базы данных, что там тоже есть элемент свойства с правильным XML_ID и это тоже свойство PROP_STATUS:
Конечный результат отсутствует:
Скрин свойства PROP_STATUS:
Пробовал для свойств, вместо XML_ID ставить ID... Результа нет ;( В Пользовательских комментах находил вариации на тему добавлять VALUE, но тоже не помогает)
Наверняка кто-то сталкивался и решал подобную задачу, буду рад если поделитесь информацией;)
Евгений Жуков написал: У вас STATUS свойство типа список. Ищите по XML_ID ID-ник значения свойства и его передавайте.
Отлично! Работает! Я с ночи времени потратил...
Я указывал ID для кода свойства, а вот для значения поставить ID не допёр(( Почему бы в документации не поправить текст
Код
Массив значений свойств, в котором коду свойства ставится в соответствие значение свойства.
Должен быть вида Array("код свойства1"=>"значения свойства1", ....), где "код свойства" - числовой или символьный код свойства, "значения свойства" - одно или массив всех значений свойства (множественное).
Хотя бы указать, что такое "значение свойства", в понимании именно этого метода... Согласен, что я должен был догадаться, что значение может быть ID, XML_ID, VALUE. В таком случае значением может быть всё что в голову взбредёт. И перебирать можно долго А если посмотреть на описание метода CIBlockProperty::Add(), то тут четко сказано: .... "VALUE"=>"значение", "DEF"=>"по умолчанию (Y/N)", "SORT"=>"индекс сортировки"... И это не только тут! Короче значение — это "значение", идентификатор — это "идентификатор"... в моём понимание
Sergey Kruglikov, поставьте IDE какое-нибудь, Eclipse например или PhpStorm, и посмотрите как устроен интересующий вас метод. Если в доках чего-то нет, я смотрю реализацию конкретного метода и сразу становится понятно, что он может, а чего нет. =)
не ставится доступность с первого раза (через админку) - копирую существующий доступный товар - сохраняю его с новым названием - создаю торговые предложения (сохраняю само предложение, а потом товар) - у товара стоит доступность=нет - опять захожу в торговое предложение и снова сохраняю его, а потом товар - тогда уже ставится доступность = да