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

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

*

denis_savin

  • *
  • 12
  • +0/-0
    • Просмотр профиля
Здравствуйте. При интеграции с 1с возникла проблема. Юми товары и опциональные свойства принимает, а обратно при заказе не выдает.
Я начал только что изучать технологию xslt и возник у меня вопрос:
Возмож но ли привести выгрузку заказа в такой вид??
Фрагмент выгрузки который нужен:
<Товары>
<Товар>
<Ид>
08116c75-e231-11e2-9f17-80ee7338def1#08116c84-e231-11e2-9f17-80ee7338def1
</Ид>
<Артикул>МП 140 х 200 х20</Артикул>
<Наименование>Махровая простыня без упаковки 140 х 200 х20</Наименование>
<БазоваяЕдиница Код="796" НаименованиеПолное="Штука" МеждународноеСокращение="PCE"/>
<ХарактеристикиТовара>
<ХарактеристикаТовара>
<Наименование>Размер</Наименование>
<Значение>МП 140 x200 x20</Значение>
</ХарактеристикаТовара>
[color=red]<ХарактеристикаТовара>
<Наименование>Цвет</Наименование>
<Значение>Коралл</Значение>
</ХарактеристикаТовара>
<ХарактеристикаТовара>
<Наименование>Цвет</Наименование>
<Значение>Коралл</Значение>
</ХарактеристикаТовара>[/color]
</ХарактеристикиТовара>
<ЗначенияРеквизитов>
<ЗначениеРеквизита>
<Наименование>ВидНоменклатуры</Наименование>
<Значение>Товар</Значение>
</ЗначениеРеквизита>
<ЗначениеРеквизита>
<Наименование>ТипНоменклатуры</Наименование>
<Значение>Запас</Значение>
</ЗначениеРеквизита>
</ЗначенияРеквизитов>
<ЦенаЗаЕдиницу>0</ЦенаЗаЕдиницу>
<Количество>1</Количество>
<Сумма>0</Сумма>
<Единица>шт</Единица>
<Коэффициент>1</Коэффициент>
</Товар>
Что бы опциональные свойства так же выводились в выгрузке.

*

admin

  • *****
  • 2421
  • +172/-1
    • Просмотр профиля
да, для этого существует файл /xsl/export/custom/ordersCommerceML.xsl

в нем можно перезаписать любой шаблон из файла /xsl/export/ordersCommerceML.xsl

берем из этого файла шаблон
<xsl:template match="object" mode="order-item">
<xsl:param name="good-id" select="properties/group/property[@name='item_link']/value/page/@id" />
<xsl:param name="good" select="document(concat('upage://', $good-id))/udata/page" />
<xsl:param name="item_price" select="properties/group/property[@name='item_price']/value" />
<xsl:param name="item_amount" select="properties/group/property[@name='item_amount']/value" />
<xsl:param name="item_total_price" select="properties/group/property[@name='item_total_price']/value" />
<Товар>
<xsl:choose>
<xsl:when test="not($good)">
<Ид><xsl:value-of select="@id" /></Ид>
</xsl:when>
<xsl:when test="$good//property[@name = '1c_product_id']/value">
<Ид><xsl:value-of select="$good//property[@name = '1c_product_id']/value" /></Ид>
</xsl:when>
<xsl:otherwise>
<Ид><xsl:value-of select="$good-id" /></Ид>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="$good//property[@name = '1c_catalog_id']/value">
<ИдКаталога><xsl:value-of select="$good//property[@name = '1c_catalog_id']/value" /></ИдКаталога>
</xsl:if>

<Наименование><xsl:value-of select="$good/name | @name" /></Наименование>
<БазоваяЕдиница Код="796" НаименованиеПолное="Штука" МеждународноеСокращение="PCE">шт</БазоваяЕдиница>

<ЦенаЗаЕдиницу><xsl:value-of select="$item_price" /></ЦенаЗаЕдиницу>
<Сумма><xsl:value-of select="$item_total_price" /></Сумма>
<Количество><xsl:value-of select="$item_amount" /></Количество>
<Единица>шт</Единица>
<Коэффициент>1</Коэффициент>

<ЗначенияРеквизитов>
<ЗначениеРеквизита>
<Наименование>ВидНоменклатуры</Наименование>
<Значение>Товар</Значение>
</ЗначениеРеквизита>
<ЗначениеРеквизита>
<Наименование>ТипНоменклатуры</Наименование>
<Значение>Товар</Значение>
</ЗначениеРеквизита>
</ЗначенияРеквизитов>
</Товар>
</xsl:template>

переносим его в /xsl/export/custom/ordersCommerceML.xsl и добавляем в нужное место apply-templates, который выводит блок с характеристиками. Сами характеристики есть в объекте "наименование в корзине", то есть в товаре, который лежит в корзине. Доступ к нему можно получить в этом же шаблоне посредством uobject протокола.

P.S. если совсем непонятно куда идти и что писать, пишите, распишу подробнее

*

denis_savin

  • *
  • 12
  • +0/-0
    • Просмотр профиля
а можно поподробней, а то я только недавно начал с xslt знакомиться  :( 

*

admin

  • *****
  • 2421
  • +172/-1
    • Просмотр профиля
Во-первых, читаем  Кастомизация сценария выгрузки заказов для 1С

Во-вторых, в твоем случае, для вывода опционных свойств   заходим в файл /xsl/export/custom/ordersCommerceML.xsl и вставляем там следующие шаблоны
<xsl:template match="object" mode="order-item">
<xsl:param name="good-id" select="properties/group/property[@name='item_link']/value/page/@id" />
<xsl:param name="good" select="document(concat('upage://', $good-id))/udata/page" />
<xsl:param name="item_price" select="properties/group/property[@name='item_price']/value" />
<xsl:param name="item_amount" select="properties/group/property[@name='item_amount']/value" />
<xsl:param name="item_total_price" select="properties/group/property[@name='item_total_price']/value" />

<Товар>
<xsl:choose>
<xsl:when test="not($good)">
<Ид><xsl:value-of select="@id" /></Ид>
</xsl:when>
<xsl:when test="$good//property[@name = '1c_product_id']/value">
<Ид><xsl:value-of select="$good//property[@name = '1c_product_id']/value" /></Ид>
</xsl:when>
<xsl:otherwise>
<Ид><xsl:value-of select="$good-id" /></Ид>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="$good//property[@name = '1c_catalog_id']/value">
<ИдКаталога><xsl:value-of select="$good//property[@name = '1c_catalog_id']/value" /></ИдКаталога>
</xsl:if>

<Наименование><xsl:value-of select="$good/name | @name" /></Наименование>
<БазоваяЕдиница Код="796" НаименованиеПолное="Штука" МеждународноеСокращение="PCE">шт</БазоваяЕдиница>

<ЦенаЗаЕдиницу><xsl:value-of select="$item_price" /></ЦенаЗаЕдиницу>
<Сумма><xsl:value-of select="$item_total_price" /></Сумма>
<Количество><xsl:value-of select="$item_amount" /></Количество>
<Единица>шт</Единица>
<Коэффициент>1</Коэффициент>

<!-- делаем запрос на существование полей типа опционные -->
<xsl:apply-templates select="properties[.//property[@type='optioned']]" mode="order-item-optioned" >
<!-- передаем xml страницы товара, из неё мы будем вытаскивать название опций -->
<xsl:with-param name="good" select="$good" />
</xsl:apply-templates>


<ЗначенияРеквизитов>
<ЗначениеРеквизита>
<Наименование>ВидНоменклатуры</Наименование>
<Значение>Товар</Значение>
</ЗначениеРеквизита>
<ЗначениеРеквизита>
<Наименование>ТипНоменклатуры</Наименование>
<Значение>Товар</Значение>
</ЗначениеРеквизита>
</ЗначенияРеквизитов>
</Товар>
</xsl:template>

<xsl:template match="properties" mode="order-item-optioned">
<xsl:param name="good" />

<ХарактеристикиТовара>
<!-- перебираем все опционные свойства товара в корзине -->
<xsl:apply-templates select=".//property[@type='optioned']/value/option" mode="order-item-optioned" >
<!-- прокидываем xml страницы товара, дальше в следующий вызов -->
<xsl:with-param name="good" select="$good" />
</xsl:apply-templates>
</ХарактеристикиТовара>
</xsl:template>
<xsl:template match="option" mode="order-item-optioned">
<xsl:param name="good" />
<xsl:variable name="option_name" select="@varchar"/>

<ХарактеристикаТовара>
<Наименование><xsl:value-of select="$good//property[@name=$option_name]/title"/></Наименование>
<Значение><xsl:value-of select="object/@name"/></Значение>
</ХарактеристикаТовара>
</xsl:template>

В-третьих, тестировать правильность вывода удобно настроив экспорт заказов в модуле "Обмен данными"

*

denis_savin

  • *
  • 12
  • +0/-0
    • Просмотр профиля
Спасибо огромное, именно то что нужно  :) :D

*

denis_savin

  • *
  • 12
  • +0/-0
    • Просмотр профиля
При тестировании нашел один нюанс, который не очень хорошо сказываеться на выгрузке.
Если пользователь допустил ошибку, и по нечаянности  добавил в корзину два раза один и тот же товар с одной и той же характеристикой(только количество разное). выгрузка почему то дублирует опциональное свойство при выгрузке.
Как от этого избавиться?

пример что получается:
<Товар>
<Ид>c72ffee9-d7d7-11e2-97aa-80ee7338def1</Ид>
<ИдКаталога>436951b5-46c2-4474-89ca-871c7d094326</ИдКаталога>
<Артикул>НС400-0в-13</Артикул>
<Наименование>Ночная сорочка "Габриэль" (Коралловая)</Наименование>
<БазоваяЕдиница Код="796" НаименованиеПолное="Штука" МеждународноеСокращение="PCE">шт</БазоваяЕдиница>
<ХарактеристикиТовара>
<ХарактеристикаТовара>
<Наименование>Размер</Наименование>
<Значение>р.52</Значение>
</ХарактеристикаТовара>
<ХарактеристикаТовара>
<Наименование>Цвет</Наименование>
<Значение>№ 13 (коралловый)</Значение>
</ХарактеристикаТовара>
<ХарактеристикаТовара>
<Наименование>Размер</Наименование>
<Значение>р.52</Значение>
</ХарактеристикаТовара>
<ХарактеристикаТовара>
<Наименование>Цвет</Наименование>
<Значение>№ 13 (коралловый)</Значение>
</ХарактеристикаТовара>
</ХарактеристикиТовара>
<ЦенаЗаЕдиницу>130</ЦенаЗаЕдиницу>
<Сумма>1690</Сумма>
<Количество>13</Количество>
<Единица>шт</Единица>
<Коэффициент>1</Коэффициент>
<ЗначенияРеквизитов>...</ЗначенияРеквизитов>
</Товар>

*

admin

  • *****
  • 2421
  • +172/-1
    • Просмотр профиля
а как выглядит xml заказа, в котором есть такие товары? вышлите xml информаци о заказе, можно посмотреть через uobject://[id_заказа] в адресной строке и приложите здесь.

P.S. система при добавлении одного и того же товара с одной и тойже опцией должна обхединять их в один товар нужного количества. Так что ваша ситуация
Цитировать
пользователь допустил ошибку, и по нечаянности  добавил в корзину два раза один и тот же товар с одной и той же характеристикой(только количество разное)
выглядит как некорректная работа системы... функцию emarket/basket не кастомизировали?

*

denis_savin

  • *
  • 12
  • +0/-0
    • Просмотр профиля
а как выглядит xml заказа, в котором есть такие товары? вышлите xml информаци о заказе, можно посмотреть через uobject://[id_заказа] в адресной строке и приложите здесь.

P.S. система при добавлении одного и того же товара с одной и тойже опцией должна обхединять их в один товар нужного количества. Так что ваша ситуация
Цитировать
пользователь допустил ошибку, и по нечаянности  добавил в корзину два раза один и тот же товар с одной и той же характеристикой(только количество разное)
выглядит как некорректная работа системы... функцию emarket/basket не кастомизировали?

Сейчас специально сделал заказ с ошибкой пользователя. 1й товар добавил как надо(1 нажатием), 2й специально нажал 2 раза(типа забыл что добавил). Опциональные свойства были одинаковые.
Количество второго товара в корзине не изменилась(как была 1 так и осталась). я использую добавление с указанием количества.
ссылка: http://wiki.umisoft.ru/Добавление_товара_в_корзину_с_указанием_Количества
В uobject://5472 все выглядит нормально, а вот в выгрузке в 1с почему то дубляж.(файл тоже приложил)



*

denis_savin

  • *
  • 12
  • +0/-0
    • Просмотр профиля
Вопрос решился. Оказывается в ядре cms был косяк. Программисты из юми все исправили и в следующем обновлении все будет нормально.

*

admin

  • *****
  • 2421
  • +172/-1
    • Просмотр профиля
в какой версии был косяк? и есть ли данные в какой их исправят?

*

denis_savin

  • *
  • 12
  • +0/-0
    • Просмотр профиля
в какой версии был косяк? и есть ли данные в какой их исправят?
Уже исправили. С приходом версии 2.9.6

Модуль Обмен данными:
19169   Устранена проблема дублирования опционных свойств товара при выгрузке в 1С.