Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”

Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - hs_sergey

Страницы: [1]
1
Во вложении находится измененный шаблон импорта commerceML2.xsl

Что удалось сделать:

- Создан тип данных -  справочник "Варианты характеристик колготок"
- Задан единый тип товара -  "1C: Колготки" (до этого пыталось на каждую группу создать свой тип товара)
- В этом типе товара определено опционное свойство "Характеристики", которое должно ссылаться на этот справочник
- Предложения с характеристиками товара парсятся теперь два раза:
1. формируется секция <objects>, в которой происходит наполнение справочника "Варианты характеристик колготок"
2. формируется секция <pages>, в которую в опционные свойства должны записываться ссылки на созданные объекты справочника.

Что не получилось:

- справочник "Варианты характеристик колготок" формируется не в разделе "Справочники", а в корневом разделе "Шаблоны данных", хотя в описании типа указано:

            <type id="charakteristics-kinds" title="Варианты характеристик колготок" parent-id="{root-guides-type}" guide="guide">

- опционное поле у товара формируется со ссылкой не на справочник "Варианты характеристик колготок", а на какой-то другой справочник "Справочник для поля "Характеристики"" (?), который видимо создается как-то автоматически, хотя в описании опционного поля явно прописано:

                        <field name="charakteristics" title="Характеристики" visible="visible" guide-id="charakteristics-kinds">
                            <type name="Составное" data-type="optioned"  multiple="multiple" />
                        </field>

Соответственно при добавлении товаров, хотя сами характеристики и добавляются в справочник, в самих товарах поле "Характеристики" оказывается не заполненным...

Поэтому если возможно помогите разобраться в следующих вопросах:
1. Как сформировать справочник справочник в разделе данных "Справочники", а не в корневом разделе "Шаблоны данных"?
2. Как заставить создаваться опционное поле со ссылкой на мой справочник, а не на какой-то Справочник для поля "Характеристики"?

то, что в товарах оказывается незаполненным поле, может быть следствием пункта 2.

2
Это не так, ID разные, хотя и кажется что похожие. 1С присылает характеристики товара в виде

			<Предложение>
<Ид>ab54bc85-df9b-11e1-82b1-001e8cd2c7e0#ab54bc86-df9b-11e1-82b1-001e8cd2c7e0</Ид>

Где до # идет id товара (под этим id) товары идут в import.xml, а после # идет id характеристики.  Они хоть внешне похожие, но значения у них разные, если присмотреться....

Создание объектов я победил, добавив секцию <types> :

	<!-- Предложения -->
<xsl:template match="ПакетПредложений">
<meta>
<source-name>commerceML2</source-name>
</meta>
<types>
<!-- описание типа для справочника вариантов характеристик колготок -->
<type id="charakteristics-kinds" title="Варианты характеристик колготок" parent-id="1" guide="guide">
<fieldgroups>
<group name="varianty_harakteristik_kolgotok">
<field name="color" title="Цвет" field-type-id="3" >
          <type id="3" name="Строка" data-type="string"/>
        </field>
...
</group>
</fieldgroups>
</type>
</types>
<objects>
<xsl:apply-templates select="Предложения/Предложение"  mode="objects"/>
..

и соответственно указав тип charakteristics-kinds при создании объекта:

	<xsl:template match="Предложения/Предложение"  mode="objects">
<object id="{substring-after(Ид,'#')}" name="{Наименование}" type-id="charakteristics-kinds">
<properties>

а также при задании опционного свойства

					<property name="Характеристики" type="optioned" is-public="1" visible="visible" allow-runtime-add="1">
<type data-type="optioned" />
<title>Характеристики</title>
<value>
<option int="{Количество}" float="{Цены/Цена/ЦенаЗаЕдиницу}">
<object id="{substring-after(Ид,'#')}" name="{Наименование}" type-id="charakteristics-kinds" />
</option>
</value>
</property>


Что происходит теперь: справочник "Варианты характеристик колготок" создается, данные туда добавляются. В типе данных для товара создается поле "Характеристики". Но оно оказывается пустым :( мало того, у него не задан даже тип данных (когда смотришь редактирование поля, в выпадающем списке "тип данных" ничего не выбрано). Единственное что там выбрано - это справочник "Варианты характеристик колготок". Получается, что где-то есть ошибка в задании property товара? Не пойму в чем дело, по синтаксису все похоже как в примере...

3
Вынес создание объектов до страниц, теперь другая ошибка)

Вот как было сделано:
	<!-- Предложения -->
<xsl:template match="ПакетПредложений">
<meta>
<source-name>commerceML2</source-name>
</meta>
<objects>
<xsl:apply-templates select="Предложения/Предложение"  mode="objects"/>
</objects>
<pages>
<xsl:apply-templates select="Предложения/Предложение"  mode="items"/>
</pages>
</xsl:template>

<!-- описание объектов справочников -->

<xsl:template match="Предложения/Предложение"  mode="objects">
<object id="{substring-after(Ид,'#')}" name="{Наименование}" type-id="288">
<properties>
                <group name="varianty_harakteristik_kolgotok">
                 <xsl:apply-templates select="ХарактеристикиТовара/ХарактеристикаТовара[Наименование = 'Колготки цвета']" mode="color" />
                 <xsl:apply-templates select="ХарактеристикиТовара/ХарактеристикаТовара[Наименование = 'Модель']" mode="model" />
                 <xsl:apply-templates select="ХарактеристикиТовара/ХарактеристикаТовара[Наименование = 'Размер']" mode="size" />
                 <xsl:apply-templates select="ХарактеристикиТовара/ХарактеристикаТовара[Наименование = 'Бренд']" mode="brand" />
                 <xsl:apply-templates select="ХарактеристикиТовара/ХарактеристикаТовара[Наименование = 'Плотность']" mode="density" />
</group>
</properties>
</object>
</xsl:template>

<xsl:template match="ХарактеристикиТовара/ХарактеристикаТовара" mode="color" >
<property name="color" type="string"  is-public="1" visible="visible">
<title><xsl:value-of select="Наименование" /></title>
<value><xsl:value-of select="Значение" /></value>
</property>
</xsl:template>

....

<!-- описание страниц, ссылающихся на эти объекты -->

<xsl:template match="Предложения/Предложение" mode="items">
<page id="{substring-before(Ид,'#')}" update-only="1">
<properties>
<group name="optioned_properties" title="Опционные свойства">
<property name="Характеристики" type="optioned" multiple="multiple" is-public="1" visible="visible" allow-runtime-add="1">
<type data-type="optioned" />
<title>Характеристики</title>
<value>
<option int="{Количество}" float="{Цены/Цена/ЦенаЗаЕдиницу}">
<object id="{substring-after(Ид,'#')}" name="{Наименование}" type-id="288" />
</option>
</value>
</property>
</group>
</properties>
</page>
</xsl:template>


То есть в начале задаются объекты, а затем уже товары ссылаются на эти объекты.

В преобразованном в UmiDump XML-нике тоже вроде все красиво:

  <objects>
    <object id="ab54bcb0-df9b-11e1-82b1-001e8cd2c7e0" name="Trasparenze Sophie (Trasparenze Sophie  Cina (синий) 1)" type-id="288">
      <properties>
        <group name="varianty_harakteristik_kolgotok">
          <property name="color" type="string" is-public="1" visible="visible">
            <title>Колготки цвета</title>
            <value><![CDATA[ Cina (синий)]]></value>
          </property>
...

      </properties>
    </object>

...

  </objects>
  <pages>
    <page id="ab54bcaf-df9b-11e1-82b1-001e8cd2c7e0" update-only="1">
      <properties>
        <group name="optioned_properties" title="Опционные свойства">
          <property name="Характеристики" type="optioned" multiple="multiple" is-public="1" visible="visible" allow-runtime-add="1">
            <type data-type="optioned"/>
            <title>Характеристики</title>
            <value>
              <option int="7" float="650.00">
                <object id="ab54bcb0-df9b-11e1-82b1-001e8cd2c7e0" name="Trasparenze Sophie (Trasparenze Sophie  Cina (синий) 1)" type-id="288"/>
              </option>
            </value>
          </property>
        </group>
      </properties>
    </page>

...

Но теперь импорт выдает ошибки вида:

невозможно импортировать объект "Conte Prisrige12 (Conte Prestige12 Bronz (оттенок загара) 2)" (#ab54bc86-df9b-11e1-82b1-001e8cd2c7e0): невозможно определить тип данных #288

288 - это созданный предварительно мной справочник "Варианты характеристик", тип с таким id есть. Почему система не может его найти?

4
Мммм спасибо за наводку... сейчас попробую таким образом вынести создание объектов справочников до описания страниц...

5
А как я их пропишу, если я их узнаю только во время импорта товаров? Или как-то можно парсить один и тот же XML импорта дважды, и сначала выцепить из товаров все характеристики в справочник и запомнить его id, а затем добавлять товары, используя уже сформированный справочник?

6
Пробовал это. Но там проблема в том, что когда делаешь экспорт данных, справочники выгружаются отдельно в тег <object>, а в опционных свойствах товара дальше идет ссылка на этот объект по его id. Но когда импортируешь товары, у тебя нет заранее сформированных справочников, объекты в них заносятся по ходу импорта товара, то есть id объекта не известен.

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

Я разрабатываю интернет-магазин на базе UMI-CMS и мне необходимо настроить
интеграцию сайта с 1С Управление торговлей 11. Согласно техническому
заданию товары должны быть заданы в 1С и затем выгружаться на сайт. Я
проанализировал XML-файлы, которые отдает 1С, добавил в шаблон импорта
custom/commerceML2.xsl инструкции для заполнения свойств товара (так как
структура XML, что отдает УТ11 немного отличается от примера в
files/filesToImport/CML2.0/import.xml), но столкнулся со следующей
проблемой:

У нас товар задан как свойствами, так и характеристиками, от которых
зависит цена. Однако в систему UMI-CMS импортируются свойства товара, но
не импортируются характеристики. В документации сказано, что в текущей
версии UMI характеристики не импортируются, однако в дальнейшем они
будут использованы для создания опционных свойств товара. А мне
необходимо использовать их для создания опционных свойств товара уже
сейчас. В XML файле, что приходит с 1С, характеристики выглядят
следующим образом:

            <Предложение>

<Ид>ab54bc85-df9b-11e1-82b1-001e8cd2c7e0#ab54bc87-df9b-11e1-82b1-001e8cd2c7e0</Ид>
                <Наименование>Conte Prisrige12 (Conte Prestige12 Bronz
(оттенок загара) 3)</Наименование>
                <ХарактеристикиТовара>
                    <ХарактеристикаТовара>
                        <Наименование>Колготки цвета</Наименование>
                        <Значение>Bronz (оттенок загара)</Значение>
                    </ХарактеристикаТовара>
                    <ХарактеристикаТовара>
                        <Наименование>Модель</Наименование>
                        <Значение>Prestige12</Значение>
                    </ХарактеристикаТовара>
                    <ХарактеристикаТовара>
                        <Наименование>Размер</Наименование>
                        <Значение>3</Значение>
                    </ХарактеристикаТовара>
                    <ХарактеристикаТовара>
                        <Наименование>Бренд</Наименование>
                        <Значение>Conte</Значение>
                    </ХарактеристикаТовара>
                    <ХарактеристикаТовара>
                        <Наименование>Плотность</Наименование>
                        <Значение>12</Значение>
                    </ХарактеристикаТовара>
                </ХарактеристикиТовара>
                <Цены>
                    <Цена>
                        <Представление>250 RUB за шт</Представление>

<ИдТипаЦены>24b66d81-d18f-11e1-9436-001e8cd2c7e0</ИдТипаЦены>
                        <ЦенаЗаЕдиницу>250.00</ЦенаЗаЕдиницу>
                        <Валюта>RUB</Валюта>
                        <Единица>шт</Единица>
                        <Коэффициент>1</Коэффициент>
                    </Цена>
                </Цены>
                <Количество>5</Количество>
            </Предложение>


Я добавляю в шаблон импорта следующие инструкции:

    <xsl:template match="Предложения/Предложение">
        <page id="{substring-before(Ид,'#')}" update-only="1">
            <properties>
                <group name="optioned_properties" title="Опционные
свойства">
                    <property name="Характеристики" type="optioned"
multiple="multiple" is-public="1" visible="visible" allow-runtime-add="1">
                        <type data-type="optioned" />
                        <title>Характеристики</title>
                            <value>
                                <option int="{Количество}"
float="{Цены/Цена/ЦенаЗаЕдиницу}">
                                    <object name="{Наименование}"
data-type="relation" allow-runtime-add="1">
                                        <properties>
                                            <xsl:apply-templates
select="ХарактеристикиТовара/ХарактеристикаТовара" />
                                        </properties>
                                    </object>
                                </option>
                            </value>
                    </property>
                </group>
            </properties>
        </page>
    </xsl:template>

    <xsl:template match="ХарактеристикиТовара/ХарактеристикаТовара">
        <properties>
            <property name="{Наименование}" type="string"  is-public="1"
visible="visible" allow-runtime-add="1">
                <type data-type="string" />
                <title><xsl:value-of select="Наименование" /></title>
                <value><xsl:value-of select="Значение" /></value>
            </property>
        </properties>
    </xsl:template>

В результате опционное свойство создается, но оно не задано, справочник
для поля Характеристики создается, но он оказывается пустым, сами
характеристики никуда не добавляются. Кто может помочь или подсказать с
шаблоном
импорта, чтобы на сайт могли импортироваться опционные свойства товара?
Или где мне можно посмотреть пример добавления опционных свойств?

Страницы: [1]