Свойство для переключателя SKU
-
НЕ МОЖЕТ БЫТЬ МНОЖЕСТВЕННЫМ!!
Свойство для переключателя SKU
На очередном проекте (каталог 16к позиций + предложения + картинки) столкнулся с невозможностью выгрузки каталога на сайт. Навовсе. Долго-долго шкрябает, что-то выгружает, но завершить не может. Читать далее
1. Добавить в схему возможность выгрузки значений множественного свойства.
2. Указать, что свойство множественное в классификаторе
1 2 3 4 5 6 7 8 |
XDTOСвойство = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOСвойствоТип); XDTOСвойство.Ид = XMLСтрока(ТекСвойство.Идентификатор); XDTOСвойство.НомерВерсии = Б_ОбщиеПроцедурыИФункцииОбменаССайтом.ПолучитьВерсиюОбъекта(ПараметрыОбмена, ТекСвойство.ВерсияДанных, "Свойств"); XDTOСвойство.ПометкаУдаления = XMLСтрока(ТекСвойство.ПометкаУдаления); XDTOСвойство.Наименование = Лев(ТекСвойство.СвойствоНаименование, 250); //mike(b) множественные XDTOСвойство.Множественное = КастомныеПроцедурыСервер.ЭтоМножественноеСвойство(ТекСвойство.СвойствоНоменклатуры); //mike(е) множественные |
3. Выгрузить свойства как множественные
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
ВыборкаСвойств = Выборка.Выбрать(); XDTOЗначенияСвойств = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЗначенияСвойствТип); Пока ВыборкаСвойств.Следующий() Цикл Если НЕ КастомныеПроцедурыСервер.ЭтоМножественноеСвойство(ВыборкаСвойств.ИдентификаторСвойства) Тогда //Штатный механизм XDTOЗначенияСвойства = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЗначенияСвойстваТип); XDTOЗначенияСвойства.Ид = XMLСтрока(ВыборкаСвойств.ИдентификаторСвойства); XDTOЗначенияСвойства.Значение.Добавить(XMLСтрока(ВыборкаСвойств.ИдентификаторЗначения)); XDTOЗначенияСвойств.ЗначенияСвойства.Добавить(XDTOЗначенияСвойства); иначе //mike (b) Выгрузка множественного свойства XDTOЗначенияСвойства = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЗначенияСвойстваТип); XDTOЗначенияСвойства.Ид = XMLСтрока(ВыборкаСвойств.ИдентификаторСвойства); ЗначенияЭлемента = КастомныеПроцедурыСервер.ПолучитьСписокЗначенийМножественногоСвойства(ВыборкаНоменклатуры.Номенклатура,ВыборкаСвойств.ИдентификаторСвойства); Для каждого Значение из ЗначенияЭлемента Цикл ЗначениеСвойства = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЗначенияСвойстваТип.Свойства.Получить("ЗначениеСвойства").Тип); ЗначениеСвойства.Значение = XMLСтрока(Значение); XDTOЗначенияСвойства.ЗначениеСвойства.Добавить(ЗначениеСвойства); КонецЦикла; XDTOЗначенияСвойств.ЗначенияСвойства.Добавить(XDTOЗначенияСвойства); КонецЕсли; КонецЦикла; Владелец.ЗначенияСвойств = XDTOЗначенияСвойств; |
Все вполне очевидно. Хотя, пришлось слегка покопаться в исходниках.
Здесь используем событие OnSuccessCatalogImport1C модуля catalog. В данном случае, нужно было почистить мусор после импорта порции кривых данных из 1С.
Событие вызывается после импорта каждого файла *.xml, полученного от 1С. Имя файла передается во второй параметр обработчика события. Событие удобно использовать, например, для поиска пустых цен у торговых предложений. OnPriceUpdate – в данном случае использовать не получилось, т.к. цена не нулевая, а отсутствующая, и в файле не передается, и, соответственно, событий не генерирует (это по логике – не проверял).
Для проверки функциональности обработчика в работе использовал следующий код.
//Создаем описание события
$evt = new \Bitrix\Main\Event('catalog', 'OnSuccessCatalogImport1C');
//Получаем экземпляр менеджера событий
$man = \Bitrix\Main\EventManager::getInstance();
//Отправляем...
$man->send($evt);
В продолжение Bitrix. Синхронизация заказов возращает html.
Выяснил, что отключить вывод html вместо xml можно отключив галку :
Или отключив админские права у пользователя из под которого идет обмен, т.к.:
$bDesignMode = $GLOBALS[“APPLICATION”]->GetShowIncludeAreas() && is_object($GLOBALS[“USER”]) && $GLOBALS[“USER”]->IsAdmin();
Нифига не очевидно, но как то так.
После импорта скидок на сайт (bitrix), необходимо обновить кэш связанной информации для отображения новых цен/скидок в публичке.
CCatalogDiscount::ClearDiscountCache(array(
'PRODUCT' => true,
'SECTIONS' => true,
'PROPERTIES' => true
));
С галкой (см. картинку) нужно обращаться с осторожностью. Читать далее
Для того, чтобы способ доставки приземлялся в заказе куда нужно, а именно сюда…
Нужно установить в настройке обмена (в настройке документа заказ клиента) соответствие поля способ доставки свойству документа по наименованию так…
“Тип данных” = “Из дополнительных свойств документа (по Наименованию)”
“Значение” = “Способ доставки” – вбиваем ручками.
При подстановке значения при импорте заказа, система уидит что тип поля = ПеречислениеСсылка.СпособыДоставки и будет сопоставлять значение по представлению.
Соответственно наименование службы доставки (по идее) должно соответствовать представлению значения перечисления.
Пока в состоянии предположения. Проверяю.