8 800 500-47-11
8 800 500-47-11
Отдел продаж
База знаний
  • Все решения
  • Интернет-магазины
    • Аспро: Премьер
    • Аспро: Лайтшоп
    • Аспро: Максимум
    • Аспро: Шины и диски 2.0
    • Аспро: Next
    • Аспро: Оптимус
    • Аспро: Шины и диски, интернет-магазин
    • Аспро: Маркет
    • Аспро: Интернет-магазин
    • Аспро: Крутой шоп
  • Корпоративные сайты
    • Аспро: Приорити 2.0
    • Аспро: Корпоративный сайт 3.0
    • Аспро: Корпоративный сайт 2.0
    • Аспро: Стройка 2.0
    • Аспро: Инжиниринг
    • Аспро: Металл
    • Аспро: Digital 2.0
    • Аспро: Детский сад и образовательный центр
    • Аспро: Курорт 2.0
    • Аспро: Ландшафт 2.0
    • Аспро: Автосервис
    • Аспро: Медицинский центр 3.0
    • Аспро: Ландшафт
    • Аспро: Медицинский центр 2.0
    • Аспро: Курорт
    • Аспро: Стройка
    • Аспро: Сайт медицинского центра
    • Аспро: Корпорация
    • Аспро: Корпоративный сайт
    • Аспро: Корпоративный сайт современной компании
    • Аспро: Приорити
    • Аспро: Digital
  • Модули
    • Аспро: Привязка ответственного
    • Аспро: Шинный калькулятор
    • Аспро: Кредитный калькулятор
    • Аспро: Универсальный импорт
  • 1С-Битрикс
    • Общее

Не получается выгрузить бренды из 1С

ID статьи: 63 , создана 04 мая 2016
Актуально для:
В решениях «Аспро: Маркет» и «Аспро: Крутой шоп» бренды не импортируются автоматически при выгрузке из 1С, так как являются свойством-привязкой к элементу инфоблока. Благодаря этому пользователи могут привязывать к брендам элементы других инфоблоков – например, соответствующие товары, которые пользователь будет видеть на странице конкретного производителя.

Решение

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

Важно! Инструкция предназначена для пользователей с уровнем знания PHP не ниже среднего. Если вы не владеете достаточными для этого знаниями и навыками, стоит заказать индивидуальную доработку решения. Статья в том числе актуальна для сайтов, обновленных до версии PHP 8.1.

Если вы хотите, чтобы бренды выгружались из 1С и автоматически синхронизировались с системой, необходимо отредактировать файл init.php, который находится в папке /bitrix/php_interface. Если файл отсутствует, создайте его и загрузите в указанную папку, а затем отредактируйте содержимое файла, прописав в нем фрагмент кода. Этот код позволит синхронизировать свойство загружаемого из 1С со свойством BRAND у решения.

Внимание! При проведении работ с настройками инфоблока запрещается удалять служебное свойство BRAND. В противном случае корректная работа функционала будет нарушена.  

brand

Если выгрузка из 1С производится в новый инфоблок, необходимо создать это свойство вручную, сохранив соответствующие настройки (см. скриншот выше). После создания свойства перейдите в его настройки, чтобы привязать свойство BRAND к нужному инфоблоку.

Настройка инфоблока

Настоятельно рекомендуем вносить изменения через ftp и ни в коем случае не создавать файл init.php в структуре сайта инструментами 1С-Битрикс. Некорректный ввод или кастомизация кода приведет к полной потере работоспособности сайта. Прежде чем кастомизировать решение, обязательно проведите резервное копирование.

Пример кода:

    
<?php

// поместить этот скрипт в init.php


AddEventHandler("iblock", "OnAfterIBlockElementAdd", array("aspro_import", "FillTheBrands"));

AddEventHandler("iblock", "OnAfterIBlockElementUpdate", array("aspro_import", "FillTheBrands"));

class aspro_import

{

    static function FillTheBrands($arFields)

    {

        $arCatalogID = array(29); // ID инфоблока каталога

        $numBrandsID = 157; // ID инфоблока брендов Аспро

        $oldBrandsCode = 'BREND'; // символьный код свойства брендов, откуда будет взято название для создания нового бренда


        if (in_array($arFields['IBLOCK_ID'], $arCatalogID)) {

            $arItem = CIBlockElement::GetList(false, array('IBLOCK_ID' => $arFields['IBLOCK_ID'], 'ID' => $arFields['ID']), false, false, array('ID', 'PROPERTY_' . $oldBrandsCode))->fetch();

            if ($arItem['PROPERTY_' . $oldBrandsCode . '_VALUE']) {

                $arBrand = CIBlockElement::GetList(false, array('IBLOCK_ID' => $numBrandsID, 'NAME' => $arItem['PROPERTY_' . $oldBrandsCode . '_VALUE']))->fetch();

                if ($arBrand) {

                    CIBlockElement::SetPropertyValuesEx($arFields['ID'], false, array('BRAND' => $arBrand['ID']));

                } else {

                    $el = new CIBlockElement;

                    $arParams = array("replace_space" => "-", "replace_other" => "-");

                    $id = $el->Add(array(

                        'ACTIVE' => 'Y',

                        'NAME' => $arItem['PROPERTY_' . $oldBrandsCode . '_VALUE'],

                        'IBLOCK_ID' => $numBrandsID,

                        'CODE' => Cutil::translit($arItem['PROPERTY_' . $oldBrandsCode . '_VALUE'], "ru", $arParams)

                    ));

                    if ($id) {

                        CIBlockElement::SetPropertyValuesEx($arFields['ID'], false, array('BRAND' => $id));

                    } else {

                        echo $el->LAST_ERROR;

                    }

                }

            }

        }

    }

}

   
В коде необходимо задать значения 3-м переменным:

Что изменить в коде?

  • значение ID инфоблока каталога (переменная $arCatalogID) — соответствует ID инфоблока каталога вашего магазина. Узнать значение ID можно, к примеру, в настройках инфоблока каталога 

    ID каталога

  • Значение ID инфоблока брендов Аспро (переменная $numBrandsID). Значение ID инфоблока указан в соответствующих настройках в инфоблоке контента

    ID бренды

  • Символьный код свойства брендов (переменная $oldBrandsCode). Перейдите в список свойств инфоблока и найдите нужное свойство, выгруженное из 1С, которое соответствует значению брендов. В нашем случае значение символьного кода — BREND, у вас может быть другое. Скопируйте его. Также обратите внимание на тип свойства — нужно выбрать вариант «Строка».

    Свойство бренды


Внимание! Для корректной работы сайта проверьте, заключен ли ваш код в специальные теги — в самом начале кода файла и в самом конце.

Выглядеть должно так:
Специальные теги
При выгрузке вы можете столкнуться с ошибкой «Элемент с таким символьным кодом уже существует». Скорее всего, у вас в 1С есть бренды, отличающиеся только специальным символом или регистром. У них генерируется одинаковый символьный код, и возникает ошибка. Устранить ее можно двумя способами: скорректировать название бренда или изменить метод транслитерации под свой проект. Во втором способе вам поможет документация 1С-Битрикс.


Алексей Стоян
16.10.2024 15:32:11
Здравствуйте!
Возможно пригодиться тем кто использует выгрузку товаров в инфоблок "Товарный каталог CRM" через модуль "Коннектор к Битрикс24".

Выгрузка брендов работает после подмены Идентификаторов объектов в 1С.
Подразумевается что у вас уже настроен обмен товарами.

Что бы бренды при выгрузке привязывались к товарам, требуется:
1. На стороне Битрикс заполнить информацию о брендах.
(необходимо для получения ID)
2. На стороне 1С в справочнике Номенклатура создать Дополнительное сведение с Типом значения - Дополнительное значение.
Заполнить Значения наименованиями брендов.
(сопоставлением с брендами происходить не по наименование. Поэтому наименования могут отличаться)
3. Внести измени в любую Номенклатуру с указанием|выбором Бренда в Дополнительных сведениях.
4. Запустить обмен между 1С и Битрикс (делаем для присвоения идентификаторов брендам заведенным в 1С)
5. В 1С открываем Значение (наш бренд) Дополнительного сведения и открываем вкладку Идентификаторы Битрикс24
Открываем Значение свойства товара.
Заменяем записанный Идентификатор на ID бренда из инфоблока Бренды.
Записать и Закрыть.
Никита Лошин
17.10.2024 09:15:12

Алексей, здравствуйте!

Благодарим за активность в комментариях. У вас получилось подробная инструкция. Думаем, что она поможет пользователям в будущем.

Желаем хорошего дня!

Родитель
Иван
04.06.2024 14:14:02
Здравствуйте!

а есть решения для выгрузки товаров с брендами из CSV?
Владислав Мещеряков
06.06.2024 15:33:46

Иван, добрый день! Благодарим за комментарий.

Рекомендуем для получения ответа на вопрос написать в техническую поддержку:
https://aspro.ru/support/


Будем ждать вашу заявку. До свидания!
Родитель
Семён
03.01.2024 14:43:05
Здравствуйте, все сделал по инструкции, версия php 8.2.
Справочник Брендов заполнился производителями из 1С и отображается в пункте меню Бренды в полном объеме.
А вот у товаров заполняется только на один товар от любого Бренда/Производителя, то есть только один Товар одного Бренда/Производителя, в остальных товарах Бренд не заполняется, о чем и сообщается при выгрузке, что такой значение уже есть на сервере.
Пробовал менять id Каталога Товаров на Торговые предложения - не помогло.
То есть, проблема не в том что указана в статье, что есть похожие Бренды и из надо по разному транслитерировать, а в том, что остальным, кроме одного/первого товарам не записыват значение Бренд.
Владислав Мещеряков
12.01.2024 14:22:19

Семен, здравствуйте!

Понимаем, что не всегда получается решить проблему самостоятельно. В базе знаний мы стараемся дать общий вариант исправления неполадок, но каждый сайт индивидуален, так как может бесконечно дорабатываться.

Для устранения ошибки советуем обратиться в техподдержку:

https://aspro.ru/support/

Специалисты проанализируют ваш сайт и найдут индивидуальное решение.

Ждем вашу заявку. Желаем успехов вашему бизнесу!

Родитель
Татнет Про
21.02.2023 23:23:52
Коллеги, дабы окончательно раскрыть эту тему предлагаю записать видео инструкцию. Уверен она откинет большую часть вопросов.
Владислав Мещеряков
28.02.2023 16:06:11
Здравствуйте! Благодарим за интересное пожелание. Подумаем над вашим предложением по съемке видеоинструкции и обсудим с коллегами. Хорошего дня!
Родитель
ЮЛИЯ ЗЕМЦОВА
11.03.2023 23:18:28
Поддерживаю! отличная идея!
Родитель
Шамиль
30.01.2023 12:50:33
По инструкции сделал. Сначала не получалось. Но со временем нашел косяк.
В коде нужно из строчки "static function FillTheBrands( $arFields ){" убрать слово "static". И тогда всё нормально заработает.

Также НЕ НУЖНО выполнять это: "Также обратите внимание на тип свойства – нужно выбрать вариант «Строка».

У меня из 1с бренды летят списком. В случае если поставить "строка", то при выгрузке создастся новое свойство бренд с символьным кодом типа BREND_1.

То есть всё работает даже если из 1С тип свойства "список".
Владислав Мещеряков
02.02.2023 12:20:17

Здравствуйте, Шамиль! Благодарим за замечание.

Отметим, что ваши инструкции применимы, если сайт не обновлен до версии PHP 8.1. Вариант в статье как раз относится к этой версии. Добавили об этом в примечании.

Спасибо за вашу активность. Хорошего дня!

Родитель
Показать еще