Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Создание опционных свойств товара при выгрузке из 1С

Автор hs_sergeyРаздел Разработка модулей

Ответов: 16
Просмотров: 9528
Последний ответ 29 Марта 2013, 16:54:08
от Rodogor
Связанные справочники для фильтрации

Автор fAcknetРаздел Настройка системы и модулей

Ответов: 15
Просмотров: 5944
Последний ответ 29 Октября 2011, 14:59:11
от fAcknet

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

*

greencactus

  • *
  • 7
  • +1/-0
    • Просмотр профиля
Настроена выгрузка товаров из 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С.

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

Подскажите какую настройку импорта я упустил? Почему не создаются и не заполняются справочники, и все значения доп. реквизитов сохраняются в виде строк?

*

admin

  • *****
  • 2421
  • +172/-1
    • Просмотр профиля
Посмотрите свой файл(/xsl/import/commerceML2.xsl), который обрабатывает 1с xml файл.

В нем возможно идет работа с другими узлами. 1С  в зависимости от свежести версии, отдает разные варианты формата файла при выгрузке. Возможно, у вас более свежий вариант чем тот, на который рассчитан ваш файл (/xsl/import/commerceML2.xsl), который обрабатывает 1с выгрузку.

Уделите особое внимание блоку, начинающегося с
<xsl:template match="ЗначенияСвойств/ЗначенияСвойства">
в нем есть проверка типа поля и соответствующие действия.

*

Seweryss

  • **
  • 60
  • +0/-0
    • Просмотр профиля
Немножко влезу со своими 5 копейками. А если я работаю с tpl , смогу ли я нормально интегрировать 1с и импортировать материалы на сайт? И не будет ли правильнее переходить мне на XSLT? (много решений видел именно на XSLT) (потому что я там вообще 0, а вот в tpl более менее, ну, как мне кажется). Слышал, что на XSLT намного удобнее работать с UMI.

*

admin

  • *****
  • 2421
  • +172/-1
    • Просмотр профиля
xslt даст больше гибкости при создании шаблона, но tpl имеет низкий порог входа, чем хорош для начинающих. Хотя в xslt нет ничего сложного и моя личная позиция... только xslt.

Если говорить о настройке импорта, то там сейчас без xslt сложновато.

Если заинтересуетесь xslt, попробуйте посмотреть запись вебинара для начинающих, может она вам поможет быстро разобраться что это и стоит ли этим заниматься.
« Последнее редактирование: 23 Марта 2014, 18:37:37 от admin »

*

Seweryss

  • **
  • 60
  • +0/-0
    • Просмотр профиля
Спасибо! На выходных обязательно гляну.

*

greencactus

  • *
  • 7
  • +1/-0
    • Просмотр профиля
Re:1с - не заполняются справочники при выгрузке
« Ответ #5 : 14 Февраля 2014, 13:18:13 »
Написал запрос в службу поддержки 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.

*

greencactus

  • *
  • 7
  • +1/-0
    • Просмотр профиля
Re:1с - не заполняются справочники при выгрузке
« Ответ #6 : 14 Февраля 2014, 13:21:06 »
Текст, который необходимо вставить в файл /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>


"

*

greencactus

  • *
  • 7
  • +1/-0
    • Просмотр профиля
Re:1с - не заполняются справочники при выгрузк
« Ответ #7 : 14 Февраля 2014, 13:22:37 »
Решил задачу сотрудник службы заботы UMI Артём - спасибо ему огромное!
« Последнее редактирование: 14 Февраля 2014, 13:25:20 от greencactus »

*

NOIRMAN

  • *****
  • 101
  • +16/-1
    • Просмотр профиля
Re:1с - не заполняются справочники при выгрузк
« Ответ #8 : 14 Февраля 2014, 18:24:14 »
Решил задачу сотрудник службы заботы UMI Артём - спасибо ему огромное!
Вы воспользуйтесь "Связью с зимним" (http://www.umi-cms.ru/support/#say_good )сна сайте UMI для передачи благодарности. Ему будет очень приятно ;)

*

greencactus

  • *
  • 7
  • +1/-0
    • Просмотр профиля
Re:1с - не заполняются справочники при выгрузке
« Ответ #9 : 14 Февраля 2014, 18:50:42 »
Уже =)

"
Спасибо за трижды положительный отзыв о работе специалиста Службы Заботы Артёма. Решение проблем и ответы на вопросы, связанные с использованием UMI.CMS, являются нашей главной задачей, и мы всегда рады помочь!
"