Здравствуйте. Есть нестандартная интеграция с 1С.
В 1С есть товары, у них есть свойства. Причем есть ряд свойств, которые в 1С выглядят как чекбоксы, однако при стандартном обмене они приходят так:
Код |
---|
Array
(
[XML_ID] => 7ddfe2d6-197c-11e8-bb03-b499baa68bbf
[NAME] => Аллергические поражения
[PROPERTY_TYPE] => S
[USER_TYPE] =>
[IBLOCK_ID] => 29
[ACTIVE] => Y
[SORT] => 300
[CODE] => ALLERGICHESKIE_PORAZHENIYA
[SEARCHABLE] => N
[FILTRABLE] => N
)
|
Т.е. тип - строка. В самом товаре либо пусто, либо значение Да, если в 1С отмечен чекбокс.
Также в 1С эти свойства не сгруппированы по тематике. И таких свойств более 200. При обмене создается много лишнего, выглядит страшно.
Специалист 1С отказался менять структуру, и теперь пришлось выкручивать все в самом Битриксе.
Задача 1.
Сгруппировать такие свойства (Сделано. Созданы массивы)
Задача 2. Переопределить такие свойства из строки в значение множественного списка группы.
Вот тут начинается самое интересное.
Что пробовал:
В init.php в обработчике OnBeforeIBlockPropertyAdd я проверял имя входящего свойства с массивом и, если совпадало, обнулял $arFields = Array(), чтобы свойство типа Строка не создавалось, вместо этого я создаю Множественный список группы (или проверяю его наличие) и добавляю данное свойство в виде значения этого списка.
И все работает, однако я так и не нашел решения, как передать ID созданного свойства и его значения в сам товар в $arFields['PROPERTIES'] по событию OnBeforeIBlockElementAdd.
Далее я принял решение, что пусть свойства Типа Строка (в 1С чекбоксы) создаются. Я буду вместе с ними создавать или обновлять множественный список, т.е. по факту я убрал обнуление массива $arFields. В OnBeforeIBlockElementAdd я уже проверяю по ID свойства Типа Строка его имя, если оно нужное я в массив $arFields['PROPERTIES'] добавляю массив со множественным списком(группа) и ID значения. Чтобы при создании Элемента у меня в списке были отмечены нужные поля.
Далее я удаляю все ненужные свойства типа Строка(чекбоксы в 1С).
Что это дает? это дает бешеный прирост значений ID к свойствам инфоблока, что на мой взгляд не очень.
Вопрос 1: как мне обойти этот прирост значений ID ? Может все таки есть способ не создавать те свойства типа строки? Как-то может переопределить временную таблицу, или может брать XML_ID свойства строки и передавать в множественный список?
Вопрос 2: в каком порядке вообще идет создание свойств, разделов и элементов после создания временной таблицы? Как я понял, сначала создаются свойства элемента или обновляются, если они уже есть(и магическим образом передается далее ID), далее создаются разделы(и магическим образом передается далее ID), далее уже создается сам элемент, где в массиве ежу есть все нужные ID.