Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
15 дек 2024, 22:36

Из 1с:Предприятие в Битрикс

Автор Борис Гаркун, 02 сен 2011, 14:38

0 Пользователей и 1 гость просматривают эту тему.

Борис Гаркун

Здравствуйте.

Как можно выгрузить поле Комментарий справочника Номенклатуры 1с на Битрикс-сайт так, чтобы значение поля Комментарий (где забито описание товара) появилось в детальном описании товара на сайте?

Вот текст процедуры,  которой пытался сформировать подхватываемый Битриксом файл импорта данных о товарах. Процедура идёт в составе стандартной обработки ОбменССайтом, я ее немного доработал. Мой код начинается после строки "// мой код". Может укажите, где я ошибся?


Процедура ЗаполнитьСписокЗначенийРеквизитовТовара(СтруктураИзменений, СписокЗначенийCML, Товар, КаталогНаДиске, ВыгруженоКартинок)

Если Товар.НоменклатураСсылка.Родитель <> Справочники.Номенклатура.ПустаяСсылка() Тогда

ИдГруппы = СформироватьИдентификаторТовара(Товар.НоменклатураСсылка.Родитель);
ДобавитьНачалоЭлементаCML(СписокЗначенийCML, "Группы");
ДобавитьУзелCML(СписокЗначенийCML    , "Ид", ИдГруппы);
ДобавитьКонецЭлементаCML(СписокЗначенийCML);

КонецЕсли;

ДобавитьУзелCML(СписокЗначенийCML, "Описание", Товар.НоменклатураСсылка.ДополнительноеОписаниеНоменклатуры);

Если ВыгружатьКартинки Тогда

Если ЗначениеЗаполнено(Товар.НоменклатураСсылка.ОсновноеИзображение) Тогда

Если ВыгружатьТолькоИзменения Тогда

ВыгрузитьДаннуюКартинку = (СтруктураИзменений.Картинки.Найти(Товар.НоменклатураСсылка.ОсновноеИзображение) <> Неопределено);

Иначе
ВыгрузитьДаннуюКартинку = Истина;
КонецЕсли;

Если ВыгрузитьДаннуюКартинку Тогда

СтруктураДанныхКартинки = ВыгрузитьКартинку(Товар.НоменклатураСсылка, КаталогНаДиске);

Если СтруктураДанныхКартинки.Размер <> "0" Тогда

ДобавитьУзелCML(СписокЗначенийCML, "Картинка", СтруктураДанныхКартинки.Адрес);
ВыгруженоКартинок = ВыгруженоКартинок + 1;

КонецЕсли;

КонецЕсли;

Иначе

// картинки нет вообще
ДобавитьНачалоЭлементаCML(СписокЗначенийCML, "Картинка");
ДобавитьКонецЭлементаCML(СписокЗначенийCML);

КонецЕсли;

КонецЕсли;

СписокЗначенийСвойств = Новый СписокЗначений;
Для Каждого СтрокаХарактеристикаСвойство Из Товар.Строки Цикл

Для Каждого СтрокаСвойствоНоменклатуры Из СтрокаХарактеристикаСвойство.Строки Цикл

Если ЗначениеЗаполнено(СтрокаСвойствоНоменклатуры.СвойствоНоменклатуры)
И СписокЗначенийСвойств.НайтиПоЗначению(СтрокаСвойствоНоменклатуры.СвойствоНоменклатуры) = Неопределено Тогда

СписокЗначенийСвойств.Добавить(СтрокаСвойствоНоменклатуры.СвойствоНоменклатуры, Строка(СтрокаСвойствоНоменклатуры.СвойствоНоменклатурыЗначение));

КонецЕсли;

КонецЦикла;

КонецЦикла;

Если СписокЗначенийСвойств.Количество() > 0 Тогда

ДобавитьНачалоЭлементаCML(СписокЗначенийCML, "ЗначенияСвойств");
Для Каждого ЗначениеСвойства Из СписокЗначенийСвойств Цикл

ДобавитьНачалоЭлементаCML(СписокЗначенийCML, "ЗначенияСвойства");
Ид = Строка(ЗначениеСвойства.Значение.УникальныйИдентификатор());
ДобавитьУзелCML(СписокЗначенийCML, "Ид", Ид);
ДобавитьУзелCML(СписокЗначенийCML, "Значение", ЗначениеСвойства.Представление);
ДобавитьКонецЭлементаCML(СписокЗначенийCML);

КонецЦикла;

ДобавитьКонецЭлементаCML(СписокЗначенийCML);

КонецЕсли;

Если Товар.НоменклатураСсылка.СтавкаНДС <> Перечисления.СтавкиНДС.БезНДС Тогда

ДобавитьНачалоЭлементаCML(СписокЗначенийCML, "СтавкиНалогов");
ДобавитьНачалоЭлементаCML(СписокЗначенийCML, "СтавкаНалога");
ДобавитьУзелCML(СписокЗначенийCML, "Наименование", НаименованиеНалога);
ДобавитьУзелCML(СписокЗначенийCML, "Ставка"      , ПолучитьПоСтавкеНДСЗначениеДляВыгрузки(Товар.НоменклатураСсылка.СтавкаНДС));
ДобавитьКонецЭлементаCML(СписокЗначенийCML);
ДобавитьКонецЭлементаCML(СписокЗначенийCML);

КонецЕсли;

ЗаписанЗаголовокВыгрузкиХарактеристик = Ложь;

Если Товар.НоменклатураСсылка.ВестиУчетПоХарактеристикам
И ЗначениеЗаполнено(Товар.ХарактеристикаСсылка) Тогда

Для Каждого СтрокаХарактеристикаСвойство Из Товар.Строки Цикл

Если Не ЗначениеЗаполнено(СтрокаХарактеристикаСвойство.ХарактеристикаЗначениеСвойства)
ИЛИ НЕ ЗначениеЗаполнено(ФорматНаименованияДляCML(СтрокаХарактеристикаСвойство.ХарактеристикаСвойство)) Тогда

Продолжить;

КонецЕсли;

Если НЕ ЗаписанЗаголовокВыгрузкиХарактеристик Тогда

ДобавитьНачалоЭлементаCML(СписокЗначенийCML, "ХарактеристикиТовара");
ЗаписанЗаголовокВыгрузкиХарактеристик = Истина;

КонецЕсли;

ДобавитьНачалоЭлементаCML(СписокЗначенийCML, "ХарактеристикаТовара");
ДобавитьУзелCML(СписокЗначенийCML, "Наименование", ФорматНаименованияДляCML(СтрокаХарактеристикаСвойство.ХарактеристикаСвойство));
ДобавитьУзелCML(СписокЗначенийCML, "Значение"    , СтрокаХарактеристикаСвойство.ХарактеристикаЗначениеСвойства);
ДобавитьКонецЭлементаCML(СписокЗначенийCML);


КонецЦикла;

Если ЗаписанЗаголовокВыгрузкиХарактеристик Тогда
ДобавитьКонецЭлементаCML(СписокЗначенийCML);
КонецЕсли;

КонецЕсли;

// мой код
ДобавитьНачалоЭлементаCML(СписокЗначенийCML, "ХарактеристикаТовара");
ДобавитьУзелCML(СписокЗначенийCML, "Наименование", ФорматНаименованияДляCML("Описание товара"));
ДобавитьУзелCML(СписокЗначенийCML, "Значение"    , Товар.НоменклатураСсылка.Комментарий);
ДобавитьКонецЭлементаCML(СписокЗначенийCML);
//мой код - конец

ДобавитьНачалоЭлементаCML(СписокЗначенийCML, "ЗначенияРеквизитов");

ДобавитьЗначениеРеквизитаВСписок(СписокЗначенийCML, "ВидНоменклатуры", Товар.ВидНоменклатуры);
ДобавитьЗначениеРеквизитаВСписок(СписокЗначенийCML, "ТипНоменклатуры", Товар.ТипНоменклатуры);
ДобавитьЗначениеРеквизитаВСписок(СписокЗначенийCML, "Полное наименование", Товар.НоменклатураСсылка.НаименованиеПолное);

Если ЗначениеЗаполнено(Товар.НоменклатураСсылка.ЕдиницаХраненияОстатков) Тогда
// передадим вес товара
ДобавитьЗначениеРеквизитаВСписок(СписокЗначенийCML, "Вес", мКоэффициентПересчетаВесаТоваровВГраммыДляОбменаССайтом * Товар.НоменклатураСсылка.ЕдиницаХраненияОстатков.Вес);
КонецЕсли;

ДобавитьКонецЭлементаCML(СписокЗначенийCML);

СтатусУдаления = "";
Если Товар.НоменклатураСсылка.ПометкаУдаления
ИЛИ Товар.ХарактеристикаСсылка.ПометкаУдаления Тогда
СтатусУдаления = "Удален";
КонецЕсли;

ДобавитьУзелCML(СписокЗначенийCML, "Статус", СтатусУдаления);

КонецПроцедуры

Борис Гаркун

Странное получилось форматирование. Повтор:

Процедура ЗаполнитьСписокЗначенийРеквизитовТовара(СтруктураИзменений, СписокЗначенийCML, Товар, КаталогНаДиске, ВыгруженоКартинок)
   
   Если Товар.НоменклатураСсылка.Родитель <> Справочники.Номенклатура.ПустаяСсылка() Тогда
      
      ИдГруппы = СформироватьИдентификаторТовара(Товар.НоменклатураСсылка.Родитель);
      ДобавитьНачалоЭлементаCML(СписокЗначенийCML, "Группы");            
      ДобавитьУзелCML(СписокЗначенийCML         , "Ид", ИдГруппы);
      ДобавитьКонецЭлементаCML(СписокЗначенийCML);
      
   КонецЕсли;   
   
   ДобавитьУзелCML(СписокЗначенийCML, "Описание", Товар.НоменклатураСсылка.ДополнительноеОписаниеНоменклатуры);
   
   Если ВыгружатьКартинки Тогда
      
      Если ЗначениеЗаполнено(Товар.НоменклатураСсылка.ОсновноеИзображение) Тогда
      
         Если ВыгружатьТолькоИзменения Тогда
            
            ВыгрузитьДаннуюКартинку = (СтруктураИзменений.Картинки.Найти(Товар.НоменклатураСсылка.ОсновноеИзображение) <> Неопределено);
            
         Иначе
            ВыгрузитьДаннуюКартинку = Истина;
         КонецЕсли;
         
         Если ВыгрузитьДаннуюКартинку Тогда
         
            СтруктураДанныхКартинки = ВыгрузитьКартинку(Товар.НоменклатураСсылка, КаталогНаДиске);
            
            Если СтруктураДанныхКартинки.Размер <> "0" Тогда
               
               ДобавитьУзелCML(СписокЗначенийCML, "Картинка", СтруктураДанныхКартинки.Адрес);
               ВыгруженоКартинок    = ВыгруженоКартинок + 1;
               
            КонецЕсли;   
            
         КонецЕсли;
         
      Иначе
         
         // картинки нет вообще
         ДобавитьНачалоЭлементаCML(СписокЗначенийCML, "Картинка");   
         ДобавитьКонецЭлементаCML(СписокЗначенийCML);
         
      КонецЕсли;
                  
   КонецЕсли;
   
   СписокЗначенийСвойств = Новый СписокЗначений;
   Для Каждого СтрокаХарактеристикаСвойство Из Товар.Строки Цикл
      
      Для Каждого СтрокаСвойствоНоменклатуры Из СтрокаХарактеристикаСвойство.Строки Цикл
         
         Если ЗначениеЗаполнено(СтрокаСвойствоНоменклатуры.СвойствоНоменклатуры)
            И СписокЗначенийСвойств.НайтиПоЗначению(СтрокаСвойствоНоменклатуры.СвойствоНоменклатуры) = Неопределено Тогда
            
            СписокЗначенийСвойств.Добавить(СтрокаСвойствоНоменклатуры.СвойствоНоменклатуры, Строка(СтрокаСвойствоНоменклатуры.СвойствоНоменклатурыЗначение));
            
         КонецЕсли;   
         
      КонецЦикла;      
      
   КонецЦикла;
   
   Если СписокЗначенийСвойств.Количество() > 0 Тогда
      
      ДобавитьНачалоЭлементаCML(СписокЗначенийCML, "ЗначенияСвойств");
      Для Каждого ЗначениеСвойства Из СписокЗначенийСвойств Цикл
         
         ДобавитьНачалоЭлементаCML(СписокЗначенийCML, "ЗначенияСвойства");            
         Ид = Строка(ЗначениеСвойства.Значение.УникальныйИдентификатор());
         ДобавитьУзелCML(СписокЗначенийCML, "Ид", Ид);
         ДобавитьУзелCML(СписокЗначенийCML, "Значение", ЗначениеСвойства.Представление);
         ДобавитьКонецЭлементаCML(СписокЗначенийCML);
         
      КонецЦикла;   
      
      ДобавитьКонецЭлементаCML(СписокЗначенийCML);
      
   КонецЕсли;
   
   Если Товар.НоменклатураСсылка.СтавкаНДС <> Перечисления.СтавкиНДС.БезНДС Тогда
      
      ДобавитьНачалоЭлементаCML(СписокЗначенийCML, "СтавкиНалогов");
      ДобавитьНачалоЭлементаCML(СписокЗначенийCML, "СтавкаНалога");
      ДобавитьУзелCML(СписокЗначенийCML, "Наименование", НаименованиеНалога);
      ДобавитьУзелCML(СписокЗначенийCML, "Ставка"      , ПолучитьПоСтавкеНДСЗначениеДляВыгрузки(Товар.НоменклатураСсылка.СтавкаНДС));
      ДобавитьКонецЭлементаCML(СписокЗначенийCML);
      ДобавитьКонецЭлементаCML(СписокЗначенийCML);
      
   КонецЕсли;   
   
   ЗаписанЗаголовокВыгрузкиХарактеристик = Ложь;
   
   Если Товар.НоменклатураСсылка.ВестиУчетПоХарактеристикам
      И ЗначениеЗаполнено(Товар.ХарактеристикаСсылка) Тогда
               
      Для Каждого СтрокаХарактеристикаСвойство Из Товар.Строки Цикл
         
         Если Не ЗначениеЗаполнено(СтрокаХарактеристикаСвойство.ХарактеристикаЗначениеСвойства)
            ИЛИ НЕ ЗначениеЗаполнено(ФорматНаименованияДляCML(СтрокаХарактеристикаСвойство.ХарактеристикаСвойство)) Тогда
            
            Продолжить;
            
         КонецЕсли;
         
         Если НЕ ЗаписанЗаголовокВыгрузкиХарактеристик Тогда
                  
            ДобавитьНачалоЭлементаCML(СписокЗначенийCML, "ХарактеристикиТовара");
            ЗаписанЗаголовокВыгрузкиХарактеристик = Истина;
            
         КонецЕсли;
         
         ДобавитьНачалоЭлементаCML(СписокЗначенийCML, "ХарактеристикаТовара");
         ДобавитьУзелCML(СписокЗначенийCML, "Наименование", ФорматНаименованияДляCML(СтрокаХарактеристикаСвойство.ХарактеристикаСвойство));
         ДобавитьУзелCML(СписокЗначенийCML, "Значение"    , СтрокаХарактеристикаСвойство.ХарактеристикаЗначениеСвойства);
         ДобавитьКонецЭлементаCML(СписокЗначенийCML);
         
         
      КонецЦикла;
      
      Если ЗаписанЗаголовокВыгрузкиХарактеристик Тогда
         ДобавитьКонецЭлементаCML(СписокЗначенийCML);
      КонецЕсли;
         
   КонецЕсли;
   
   // мой код
    ДобавитьНачалоЭлементаCML(СписокЗначенийCML, "ХарактеристикаТовара");
    ДобавитьУзелCML(СписокЗначенийCML, "Наименование", ФорматНаименованияДляCML("Описание товара"));
    ДобавитьУзелCML(СписокЗначенийCML, "Значение"    , Товар.НоменклатураСсылка.Комментарий);
    ДобавитьКонецЭлементаCML(СписокЗначенийCML);
    //мой код - конец
   
    ДобавитьНачалоЭлементаCML(СписокЗначенийCML, "ЗначенияРеквизитов");
   
   ДобавитьЗначениеРеквизитаВСписок(СписокЗначенийCML, "ВидНоменклатуры", Товар.ВидНоменклатуры);
   ДобавитьЗначениеРеквизитаВСписок(СписокЗначенийCML, "ТипНоменклатуры", Товар.ТипНоменклатуры);
   ДобавитьЗначениеРеквизитаВСписок(СписокЗначенийCML, "Полное наименование", Товар.НоменклатураСсылка.НаименованиеПолное);
   
   Если ЗначениеЗаполнено(Товар.НоменклатураСсылка.ЕдиницаХраненияОстатков) Тогда
      // передадим вес товара
      ДобавитьЗначениеРеквизитаВСписок(СписокЗначенийCML, "Вес", мКоэффициентПересчетаВесаТоваровВГраммыДляОбменаССайтом * Товар.НоменклатураСсылка.ЕдиницаХраненияОстатков.Вес);
   КонецЕсли;   
      
   ДобавитьКонецЭлементаCML(СписокЗначенийCML);
   
   СтатусУдаления = "";
   Если Товар.НоменклатураСсылка.ПометкаУдаления
    ИЛИ Товар.ХарактеристикаСсылка.ПометкаУдаления Тогда
      СтатусУдаления = "Удален";
   КонецЕсли;
   
   ДобавитьУзелCML(СписокЗначенийCML, "Статус", СтатусУдаления);
   
КонецПроцедуры

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск