Сохранение типов полей из 1С

Материал из Umicms

Перейти к: навигация, поиск

  Если для конфигурации «Управление торговлей» вы не используете extended-pack, то необходимо написать кастомный xsl шаблон импорта, чтобы типы полей в 1С (Выпадающий список, строка, число, дата) сохранились в системе UMI.CMS при импорте данных. Если говорить более точно, речь идет о том, чтобы в модуле «Шаблоны данных», у каждого созданного типа данных (1С:Телефон, 1С:Ноутбук и т.п.) поля Свойств товара имели не Строковый тип, а необходимый вам тип, такой же как был в 1С. Для данной задачи, в файле xsl/import/custom/commerceML2.xsl , в корневом элементе <stylesheet> переназначим шаблон "ЗначенияСвойств/ЗначенияСвойства", который находится в файле xsl/import/commerceML2.xsl. В итоге у нас должен получиться 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="data-type">
    <!-- Возможные варианты типов полей: relation, float, boolean, date-->
      <xsl:choose>
        <xsl:when test="$property/Наименование = 'Производитель'">relation</xsl:when>
        <xsl:when test="$property/Наименование = 'Вид товара'">relation</xsl:when>
        <xsl:when test="$property/Наименование = 'Канал сбыта'">relation</xsl:when>
        <xsl:otherwise>string</xsl:otherwise>
      </xsl:choose>
  </xsl:param>
    <xsl:if test="$property">
      <property name="{$property/Наименование}" title="{$property/Наименование}" type="{$data-type}" visible="visible" is-public="1" 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'">
              <item name="{Значение}" />
            </xsl:when>
            <xsl:otherwise>
              <xsl:value-of select="Значение" />
            </xsl:otherwise>
          </xsl:choose>
        </value>
      </property>
   </xsl:if>
 </xsl:template>
 
</xsl:stylesheet>

Суть в том, что необходимо в первом блоке <choose>, вручную указать типы полей, сопоставляя Название поля из 1С с одним из Типов полей: relation, float, boolean, date. Если для какого-либо поля из вкладки Свойства (в 1С) не будет указано соответствие, то поле будет создано с типом Строка (string).