Здравствуйте. Есть нестандартная интеграция с 1С.
В 1С есть товары, у них есть свойства. Причем есть ряд свойств, которые в 1С выглядят как чекбоксы, однако при стандартном обмене они приходят так:
[CODE]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
)
[/CODE]
Т.е. тип - строка. В самом товаре либо пусто, либо значение Да, если в 1С отмечен чекбокс.
Также в 1С эти свойства не сгруппированы по тематике. И таких свойств более 200. При обмене создается много лишнего, выглядит страшно.
Специалист 1С отказался менять структуру, и теперь пришлось выкручивать все в самом Битриксе.
Задача 1.
Сгруппировать такие свойства (Сделано. Созданы массивы)
Задача 2. Переопределить такие свойства из строки в значение множественного списка группы.
Вот тут начинается самое интересное.
Что пробовал:
В init.php в обработчике [B]OnBeforeIBlockPropertyAdd [/B]я проверял имя входящего свойства с массивом и, если совпадало, обнулял [B]$arFields = [/B][B]Array()[/B], чтобы свойство типа Строка не создавалось, вместо этого я создаю Множественный список группы (или проверяю его наличие) и добавляю данное свойство в виде значения этого списка.
И все работает, однако я так и не нашел решения, как передать ID созданного свойства и его значения в сам товар в [B]$arFields['PROPERTIES'] [/B]по событию [B]OnBeforeIBlockElementAdd.[/B]
Далее я принял решение, что пусть свойства Типа Строка (в 1С чекбоксы) создаются. Я буду вместе с ними создавать или обновлять множественный список, т.е. по факту я убрал обнуление массива [B]$arFields. [/B]В [B]OnBeforeIBlockElementAdd [/B]я уже проверяю по [B]ID [/B]свойства Типа Строка его имя, если оно нужное я в массив [B]$arFields['PROPERTIES'][/B] добавляю массив со множественным списком(группа) и [B]ID [/B]значения. Чтобы при создании Элемента у меня в списке были отмечены нужные поля.
Далее я удаляю все ненужные свойства типа Строка(чекбоксы в 1С).
Что это дает? это дает бешеный [B]прирост значений ID[/B] к свойствам инфоблока, что на мой взгляд не очень.
Вопрос 1: как мне обойти этот [B]прирост значений ID [/B]? Может все таки есть способ не создавать те свойства типа строки? Как-то может переопределить временную таблицу, или может брать XML_ID свойства строки и передавать в множественный список?
Вопрос 2: в каком порядке вообще идет создание свойств, разделов и элементов после создания временной таблицы? Как я понял, сначала создаются свойства элемента или обновляются, если они уже есть(и магическим образом передается далее ID), далее создаются разделы(и магическим образом передается далее ID), далее уже создается сам элемент, где в массиве ежу есть все нужные ID.