Запретить изменения описаний товаров при выгрузке из 1С УТ на сайт

Запретить изменения описаний товаров при выгрузке из 1С УТ на сайт
Просмотров: 2687 | Комментариев: 22

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

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

Но при обмене, данные добавленные на сайте затираются- так как 1С "видет", что у товара нет описания (в ее базе), а на сайте есть- и подчищает товар

Что бы этого не происходило, можно воспользоваться событиями OnBeforeIBlockElementUpdate и OnBeforeIBlockElementAdd. Просто добавляем в файл /bitrix/php_intarface/init.php (если файла нет-то создаем его)

<?
AddEventHandler("iblock", "OnBeforeIBlockElementUpdate","DoNotUpdate");
function DoNotUpdate(&$arFields)
{
    if ($_REQUEST['mode']=='import')
    {
        unset($arFields['PREVIEW_PICTURE']);
        unset($arFields['DETAIL_PICTURE']);
        unset($arFields['PREVIEW_TEXT']);
        unset($arFields['DETAIL_TEXT']);
    }
}
AddEventHandler("iblock", "OnBeforeIBlockElementAdd","DoNotAdd");
function DoNotAdd(&$arFields)
{
    if ($_REQUEST['mode']=='import')
    {
        unset($arFields['PREVIEW_PICTURE']);
        unset($arFields['DETAIL_PICTURE']);
        unset($arFields['PREVIEW_TEXT']);
        unset($arFields['DETAIL_TEXT']);
    }
}
?>

В данном случае, мы запретили изменение и добавление: Картинка анонса, Детальная картинка, Текст анонса, детальный текст. Добавляя строки можно запретить любое поле товара

Например: unset($arFields['NAME']); - не даст изменяться названию товара

Санжарбек Азизов
Добрый день! мне необходимо настроит обмен заказами между 1С и сайтом на битрикс. Есть xml файл с заказами из 1С. Из документации понял что его нужно загружать, но не понял куда. Подскажите в какой инфоблок нужно импортировать xml файлы с заказами? Заранее спасибо
Михаил Базаров
Цитата
Санжарбек Азизов написал:
Добрый день! мне необходимо настроит обмен заказами между 1С и сайтом на битрикс. Есть xml файл с заказами из 1С. Из документации понял что его нужно загружать, но не понял куда. Подскажите в какой инфоблок нужно импортировать xml файлы с заказами? Заранее спасибо
Не надо его в инфоблок. Просто включите обмен заказами, предварительно выгрузив контрагентов- как пользователей. На стороне сайта проверьте настройки обмена



И запустите обмен заказами. Все, больше ни чего делать надо, 1С ка сама создаст заказы на сайте и сопоставит с полльзователями.
Анастасия Гергет
а можно запретить перезаписывать свойство привязка к товару?
Олег Колчугин
Здравствуйте, Михаил.
Заметка очень помогла.
В данный момент например у нас такая ситуация, создали в 1С новый товар, добавили ему фотографию, выполнили выгрузку в режиме изменений, товар на сайте появился, но без фото. Можно в вашем коде условие поставить, если на сайте товар без фото то при обмене мы ему цепляем картинку из 1С, если таковая приходит при обмене, а то при вашем коде получается сейчас, что картинки из 1С не цепляются к товарам?
Надеюсь понятно объяснил. Спасибо.
Alex Nevi
Олег Колчугин, эм, закомментить? ;)
Код
///unset($arFields['PREVIEW_PICTURE']);  
//unset($arFields['DETAIL_PICTURE']);
UkRA
а можно запретить перезаписывать свойство привязка к товару?
Михаил Базаров
Цитата
UkRA написал:
а можно запретить перезаписывать свойство привязка к товару?
1C такое и не умеет передавать. Во всяком случае штатно
Михаил Базаров
Цитата
Олег Колчугин написал:
Здравствуйте, Михаил.
Заметка очень помогла.
В данный момент например у нас такая ситуация, создали в 1С новый товар, добавили ему фотографию, выполнили выгрузку в режиме изменений, товар на сайте появился, но без фото. Можно в вашем коде условие поставить, если на сайте товар без фото то при обмене мы ему цепляем картинку из 1С, если таковая приходит при обмене, а то при вашем коде получается сейчас, что картинки из 1С не цепляются к товарам?
Надеюсь понятно объяснил. Спасибо.
Ну да, просто удалите строки. Получится
Код
<? 
AddEventHandler("iblock", "OnBeforeIBlockElementUpdate","DoNotUpdate"); 
function DoNotUpdate(&$arFields) 
{ 
    if ($_REQUEST['mode']=='import') 
    { 
        unset($arFields['PREVIEW_TEXT']); 
        unset($arFields['DETAIL_TEXT']); 
    } 
} 
AddEventHandler("iblock", "OnBeforeIBlockElementAdd","DoNotAdd"); 
function DoNotAdd(&$arFields) 
{ 
    if ($_REQUEST['mode']=='import') 
    { 
        unset($arFields['PREVIEW_TEXT']); 
        unset($arFields['DETAIL_TEXT']); 
    } 
} 
?>
Виктор Роголев
Так это получается, если я правильно понял, можно запретить 1с перемещать весь товар под свою структуру каталога? Просто  пытаюсь реализовать на сайте каталог отличимый от 1с, в модуле обмена настроек нет, по этому решил попробовать выгрузить как есть, раскидать как нужно, но оно всё откатывается при обмене
Михаил Базаров
Цитата
Виктор Роголев написал:
Так это получается, если я правильно понял, можно запретить 1с перемещать весь товар под свою структуру каталога? Просто  пытаюсь реализовать на сайте каталог отличимый от 1с, в модуле обмена настроек нет, по этому решил попробовать выгрузить как есть, раскидать как нужно, но оно всё откатывается при обмене
Тут сложнее. На одном из проектов, сделал так что бы структура каталогов вообще не выгружалась, а товары обновлялись по XML-ID.
Новые товара попадали в деактивированный раздел "Рассортировать"

Но это сложность. Лучше поставте модуль обмена от Битрикс, там можно пересортировывать структуру как угодно, чисто для обмена.
Gmp
Интересно, а запретить обновлять названия и адреса складов можно таким методом?
denis86
Михаил добрый день,
Подскажите, а как сделать, чтобы не слетали свойства товара  при выгрузке из 1с? У  нас  есть свойство с типом список, постоянно слетает при обмене.
Михаил Базаров
Цитата
denis86 написал:
Михаил добрый день,
Подскажите, а как сделать, чтобы не слетали свойства товара  при выгрузке из 1с? У  нас  есть свойство с типом список, постоянно слетает при обмене.
unset($arFields['PROPERTY_КОД_СВОЙСТВА']);
или
unset($arFields['PROPERTY_КОД_СВОЙСТВА_VALUE']);

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

Чирканите сюда, как сработало.  :)  
denis86
Цитата
Михаил Базаров пишет:
Цитата
denis86 написал:
Михаил добрый день,
Подскажите, а как сделать, чтобы не слетали свойства товара при выгрузке из 1с? У нас есть свойство с типом список, постоянно слетает при обмене.
unset($arFields['PROPERTY_КОД_СВОЙСТВА']);
или
unset($arFields['PROPERTY_КОД_СВОЙСТВА_VALUE']);

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

Чирканите сюда, как сработало.
К сожалению не сработало
Михаил Базаров
Цитата
denis86 написал:
Цитата

Чирканите сюда, как сработало.
К сожалению не сработало
Тогда без PROPERTY_

Но это все, методы околонаучного тыка) Пока попробовать не где, что бы точно сказать
Barmi
Можно совет? Эта доработка прекрасно работает, фото и описания теперь не удаляются. Но есть мелкая проблема -  описания товаров  переключаются в режим текст, а у меня они в визуальном режиме сделаны и получается мусор. Вот так.
вот такой мусор получается... не красиво
Можно ли как-то запретить в битриксе или в в инит добавить строчку переключение  с визуального режима редактирования? Да, я нуб.  
weboff
Спасибо. Нужно было запретить 1с менять признак активности товара. Чтобы была возможность скрыть определенные товары с сайта.

Прописал в function DoNotUpdate(&$arFields) значение  
Код
unset($arFields['ACTIVE']); 
 
и все заработало.
Barmi
Цитата
Barmi пишет:
Можно совет? Эта доработка прекрасно работает, фото и описания теперь не удаляются. Но есть мелкая проблема - описания товаров переключаются в режим текст, а у меня они в визуальном режиме сделаны и получается мусор. Вот так.
вот такой мусор получается... не красиво
Можно ли как-то запретить в битриксе или в в инит добавить строчку переключение с визуального режима редактирования? Да, я нуб.
Нашел простейшее решение своей проблемы.
В поле текстового описания в 1С вставляется любой форматированный кусок текста, и описания из базы остаются нормально отформатированными :-) Например

<p>
    Самый современный игровой компьютер

этого достаточно чтобы не слетало на текстовый редактор.  
logins.zavgsg@gmail.com
"Добрый день!

Не могу запретить удаление дополнительных картинок. Видимо потому, что это множественное поле. Всё отрабатывает, кроме доп. картинок.

<?
AddEventHandler("iblock", "OnBeforeIBlockElementUpdate","DoNotUpdate");
function DoNotUpdate(&$arFields)
{
   if ($_REQUEST['mode']=='import')
   {
       unset($arFields['PREVIEW_PICTURE']); // фото анонс
       unset($arFields['DETAIL_PICTURE']); // фото подробно
       unset($arFields['MORE_PHOTO']); // Картинки (дополнительные фото)
       unset($arFields['PREVIEW_TEXT']); // Описание для анонса
       unset($arFields['PREVIEW_TEXT_TYPE']); // Тип Описание для анонса
       unset($arFields['DETAIL_TEXT']); // Детальное описание
       unset($arFields['DETAIL_TEXT_TYPE']); // Тип Детальное описание
   }
}
logins.zavgsg@gmail.com
Сергей, <br/>, <br/>

Добрый день!

Не могу запретить удаление дополнительных картинок. Видимо потому, что это множественное поле. Всё отрабатывает, кроме доп. картинок.

<?
AddEventHandler("iblock", "OnBeforeIBlockElementUpdate","DoNotUpdate");
function DoNotUpdate(&$arFields)
{
  if ($_REQUEST['mode']=='import')
  {
      unset($arFields['PREVIEW_PICTURE']); // фото анонс
      unset($arFields['DETAIL_PICTURE']); // фото подробно
      unset($arFields['MORE_PHOTO']); // Картинки (дополнительные фото)
      unset($arFields['PREVIEW_TEXT']); // Описание для анонса
      unset($arFields['PREVIEW_TEXT_TYPE']); // Тип Описание для анонса
      unset($arFields['DETAIL_TEXT']); // Детальное описание
      unset($arFields['DETAIL_TEXT_TYPE']); // Тип Детальное описание
  }
}
Страницы: 1 2 След.