UMIhelp
Разработка сайта на UMI.CMS => Настройка системы и модулей => Тема начата: greencactus от 29 Января 2014, 15:31:43
-
Настроена выгрузка товаров из 1С Управление торговлей 11
1С, как ей и положено формирует файлs:
import.xml
offerts.xml
и папку import_files с подпапками для картинок.
Всё это чудесным образом загружается на хостинг, UMI подхватывает файлы, создаёт объекты каталога и правильно (согласно структуре в 1С) раскладывает их по разделам.
Всё замечательно, картинки подтягиваются, описания из 1С то же, цена встаёт.
Возникла задача:
На странице объекта каталога, рядом с описанием товара вывести дополнительные свойства товара из 1С.
В 1С эти свойства созданы с помощью универсальной технологии 1С, как ни удивительно: "Дополнительные реквизиты"
Некоторые из них строковые, некоторые числа, а некоторые в виде справочников.
Ситуация:
1С эти свойства по умолчанию в файл import.xml выгружает, Пример:
сначала ввиде свойства:
<Свойство>
<Ид>767facd3-dfcd-11e2-9a0c-8c89a5a63c34</Ид>
<Наименование>Обложка</Наименование>
<ТипЗначений>Справочник</ТипЗначений>
<ВариантыЗначений>
<Справочник>
<ИдЗначения>55d886b4-e27b-11e2-9a0c-8c89a5a63c34</ИдЗначения>
<Значение>Твердая</Значение>
</Справочник>
<Справочник>
<ИдЗначения>55d886b5-e27b-11e2-9a0c-8c89a5a63c34</ИдЗначения>
<Значение>Мягкая</Значение>
</Справочник>
<Справочник>
<ИдЗначения>55d886b6-e27b-11e2-9a0c-8c89a5a63c34</ИдЗначения>
<Значение>Интегрированная</Значение>
</Справочник>
<Справочник>
<ИдЗначения>78676edf-e3a5-11e2-9a0c-8c89a5a63c34</ИдЗначения>
<Значение>Картонный бокс</Значение>
</Справочник>
</ВариантыЗначений>
</Свойство>
Затем для каждого товара:
<ЗначенияСвойства>
<Ид>767facd3-dfcd-11e2-9a0c-8c89a5a63c34</Ид>
<Значение>55d886b4-e27b-11e2-9a0c-8c89a5a63c34</Значение>
</ЗначенияСвойства>
UMI всё это подхватывает, но все реквизиты из 1С подключает как тип "Строка" и в итоге на странице я вижу:
Переводчик - c9f7c5eb-e6c1-11e2-8e62-8c89a5a63c34
Год - 2 012
Обложка - 55d886b4-e27b-11e2-9a0c-8c89a5a63c34
Т.е. доп. своства с типами строковыми и числовыми выводятся в виде строк (это вполне приемлемо), а вот доп. свойства "Справочники" в себе содержат только строку с Id элемента в 1С.
Пробовал удалять тип данных (например Обложка) из шаблона данных, а затем проводить импорт, эффект тот же, создается строковый тип "Обложка". Пробовал вручную создать справочник "Обложка" привязать его как выпадающий список к полю "Обложка" в специфических свойствах рздела, в результате, после импорта, справочник Обложка просто пустой, нет ни одного элемента.
Подскажите какую настройку импорта я упустил? Почему не создаются и не заполняются справочники, и все значения доп. реквизитов сохраняются в виде строк?
-
Посмотрите свой файл(/xsl/import/commerceML2.xsl), который обрабатывает 1с xml файл.
В нем возможно идет работа с другими узлами. 1С в зависимости от свежести версии, отдает разные варианты формата файла при выгрузке. Возможно, у вас более свежий вариант чем тот, на который рассчитан ваш файл (/xsl/import/commerceML2.xsl), который обрабатывает 1с выгрузку.
Уделите особое внимание блоку, начинающегося с
<xsl:template match="ЗначенияСвойств/ЗначенияСвойства">
в нем есть проверка типа поля и соответствующие действия.
-
Немножко влезу со своими 5 копейками. А если я работаю с tpl , смогу ли я нормально интегрировать 1с и импортировать материалы на сайт? И не будет ли правильнее переходить мне на XSLT? (много решений видел именно на XSLT) (потому что я там вообще 0, а вот в tpl более менее, ну, как мне кажется). Слышал, что на XSLT намного удобнее работать с UMI.
-
xslt даст больше гибкости при создании шаблона, но tpl имеет низкий порог входа, чем хорош для начинающих. Хотя в xslt нет ничего сложного и моя личная позиция... только xslt.
Если говорить о настройке импорта, то там сейчас без xslt сложновато.
Если заинтересуетесь xslt, попробуйте посмотреть запись вебинара для начинающих (http://www.youtube.com/watch?v=9II1zao9qD4), может она вам поможет быстро разобраться что это и стоит ли этим заниматься.
-
Спасибо! На выходных обязательно гляну.
-
Написал запрос в службу поддержки Umi после проведённой работы получен следующий результат.
После обновления 1С, а именно начаная с версии Управление торговлей 11.1.2.28 изменилась структура файла выгружаемая из 1С.
Справочники не создаются, так как приведенный xml не совсем соответствует стандарту.
xml файлы сначала обрабатываются xsl шаблоном, путь до него /xsl/import/commerceML2.xsl.
Там тип свойства подхватывается следующей конструкцией:
<xsl:template match="ЗначенияСвойств/ЗначенияСвойства">
<xsl:param name="property" select="key('property', Ид)" />
<xsl:param name="value-id" select="string(ИдЗначения)" />
<xsl:param name="data-type">
<xsl:choose>
<xsl:when test="$property/ТипыЗначений/ТипЗначений/Тип = 'Число'">float</xsl:when>
<xsl:when test="$property/ТипыЗначений/ТипЗначений/Тип = 'Булево'">boolean</xsl:when>
<xsl:when test="$property/ТипыЗначений/ТипЗначений/Тип = 'Дата'">date</xsl:when>
<xsl:when test="$property/ТипыЗначений/ТипЗначений/Тип = 'Справочник'">relation</xsl:when>
<xsl:otherwise>string</xsl:otherwise>
</xsl:choose>
</xsl:param>
Рассчитана эта конструкция на xml документ, в котором тип имеет следующую структуру:
<ТипыЗначений>
<ТипЗначений>
<Тип>Справочник</Тип>
<Описание>Справочник ссылка: Значения свойств объектов</Описание>
<ВариантыЗначений>
<ВариантЗначения>
<Ид>14ed8b24-55bd-11d9-848a-00112f43529a</Ид>
<Значение>АОЗТ Алекс</Значение>
</ВариантЗначения>
<ВариантЗначения>
</ВариантыЗначений>
</ТипЗначений>
</ТипыЗначений>
А у вас в документе задано:
<ТипЗначений>Справочник</ТипЗначений>
Такой документ не может нормально распарсится и отрабатывает блок по-умолчанию (выделил красным).
Для решения проблемы Вам нужно кастомизировать xsl шаблон импорта данных, это можно сделать в файле /xsl/import/custom/commerceML2.xsl.
-
Текст, который необходимо вставить в файл /xsl/import/custom/commerceML2.xsl:
"
<?xml version="1.0" encoding="UTF-8"?>
<!--
TODO: // Write here your own templates
-->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:php="http://php.net/xsl"
xmlns:udt="http://umi-cms.ru/2007/UData/templates"
extension-element-prefixes="php"
exclude-result-prefixes="xsl php udt">
<xsl:template match="ЗначенияСвойств/ЗначенияСвойства">
<xsl:param name="property" select="key('property', Ид)" />
<xsl:param name="value-id">
<xsl:choose>
<xsl:when test="ИдЗначения"><xsl:value-of select="string(ИдЗначения)"/></xsl:when>
<xsl:when test="Значение"><xsl:value-of select="string(Значение)"/></xsl:when>
<xsl:otherwise>string</xsl:otherwise>
</xsl:choose>
</xsl:param>
<xsl:param name="property_name">
<xsl:choose>
<xsl:when test="$property/Имя"><xsl:value-of select="$property/Имя"/></xsl:when>
<xsl:otherwise><xsl:value-of select="$property/Наименование"/></xsl:otherwise>
</xsl:choose>
</xsl:param>
<xsl:param name="data-type">
<xsl:choose>
<xsl:when test="$property/ТипыЗначений/ТипЗначений/Тип">
<xsl:choose>
<xsl:when test="$property/ТипыЗначений/ТипЗначений/Тип = 'Число'">float</xsl:when>
<xsl:when test="$property/ТипыЗначений/ТипЗначений/Тип = 'Булево'">boolean</xsl:when>
<xsl:when test="$property/ТипыЗначений/ТипЗначений/Тип = 'Дата'">date</xsl:when>
<xsl:when test="$property/ТипыЗначений/ТипЗначений/Тип = 'Справочник'">relation</xsl:when>
<xsl:otherwise>string</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="$property/ТипЗначений = 'Число'">float</xsl:when>
<xsl:when test="$property/ТипЗначений = 'Булево'">boolean</xsl:when>
<xsl:when test="$property/ТипЗначений = 'Дата'">date</xsl:when>
<xsl:when test="$property/ТипЗначений = 'Справочник'">relation</xsl:when>
<xsl:otherwise>string</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:param>
<xsl:if test="$property">
<property name="{$property_name}" title="{$property/Наименование}" type="{$data-type}" is-public="1" visible="visible" allow-runtime-add="1">
<type data-type="{$data-type}" />
<title><xsl:value-of select="$property/Наименование"/></title>
<value>
<xsl:choose>
<xsl:when test="$data-type = 'relation'">
<xsl:choose>
<xsl:when test="$property/ТипыЗначений/ТипЗначений/ВариантыЗначений/ВариантЗначения[Ид = $value-id]">
<xsl:apply-templates select="$property/ТипыЗначений/ТипЗначений/ВариантыЗначений/ВариантЗначения[Ид = $value-id]" mode="relation-value" />
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="$property/ВариантыЗначений/Справочник[ИдЗначения = $value-id]" mode="relation-value" />
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise><xsl:value-of select="Значение" /></xsl:otherwise>
</xsl:choose>
</value>
</property>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
"
-
Решил задачу сотрудник службы заботы UMI Артём - спасибо ему огромное!
-
Решил задачу сотрудник службы заботы UMI Артём - спасибо ему огромное!
Вы воспользуйтесь "Связью с зимним" (http://www.umi-cms.ru/support/#say_good )сна сайте UMI для передачи благодарности. Ему будет очень приятно ;)
-
Уже =)
"
Спасибо за трижды положительный отзыв о работе специалиста Службы Заботы Артёма. Решение проблем и ответы на вопросы, связанные с использованием UMI.CMS, являются нашей главной задачей, и мы всегда рады помочь!
"