@TheDrumkilla

Как запретить изменение типа свойства при выгрузке из 1С?

Приветствую. У товаров на сайте есть множество свойств, некоторые из них нужно выводить в умном фильтре в качестве ползунка с диапазоном "от" и "до" Как известно по умолчанию в битриксе так выводятся только свойства с типом "число". Из 1с же как правило свойства выгружаются типом "список" что по понятным причинам мне не подходит. При помощи 1с-программиста удалось заставить 1с передавать некоторые свойства типом "строка", ну по крайней мере на сайт они приходят в таком виде. Если сменить тип свойства на число, то получаем желаемый функционал в виде пресловутых ползунков.

Проблема: после повторной выгрузки свойство вновь переключается на строку, и приходится руками прокликивать все свойства и переставлять их тип.

Вопрос: Возможно ли "заблокировать" тип для определенных свойств? Какие события для этого можно использовать? Или может есть возможность заставить 1С отдавать свойства с уже нужным типом?

Буду благодарен за помощь.
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
@anton99zel
29а класс средней школы №7
1С отдает xml файл, где всё строки (нет чисел)
У свойства бывают следующие возможные значения: S - строка, N - число, F - файл, L - список, E - привязка к элементам, G - привязка к группам.
--
Этот API-код меняет тип Строка на Число:
<?
require_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/include/prolog_before.php");
CModule::IncludeModule("iblock");

$arFields = Array(
  "PROPERTY_TYPE" => "N", //ставим N если нужно число
  "IBLOCK_ID" => 2 //номер инфоблока
  );

$ibp = new CIBlockProperty;
if(!$ibp->Update(7, $arFields)) // где 7 это номер свойства (ID) в инфоблоке
    echo $ibp->LAST_ERROR; //выведем ошибку если ничего не получилось
?>


По сути, после выгрузки вы можете запустить этот код и нужное свойство поменяет тип.
spoiler
PS: Хотя, почему меняется тип свойства - не понятно. Не должно быть так.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
askunash
@askunash
Тренер Битрикс
Если вас не устраивает импорт из 1С есть 3 варианта (по возрастанию сложности):
1. Привести в соответствие данные в 1С.
2. Привязаться к событию OnBeforeCatalogImport1C и переопределить/перезаписать данные.
3. Кастомить компоненты обмена - есть стандартный скрипт обмена, его адрес в настройках магазина в админке, проследите пару шагов подключаемых файлов - там все компоненты подключаемые.
Всё.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы