Здравствуйте. При интеграции с 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</Коэффициент>
</Товар>
Что бы опциональные свойства так же выводились в выгрузке.
да, для этого существует файл /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. если совсем непонятно куда идти и что писать, пишите, распишу подробнее
Во-первых, читаем Кастомизация сценария выгрузки заказов для 1С (http://wiki.umisoft.ru/%D0%9A%D0%B0%D1%81%D1%82%D0%BE%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D1%81%D1%86%D0%B5%D0%BD%D0%B0%D1%80%D0%B8%D1%8F_%D0%B2%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8_%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D0%BE%D0%B2_%D0%B4%D0%BB%D1%8F_1%D0%A1)
Во-вторых, в твоем случае, для вывода опционных свойств заходим в файл /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>
В-третьих, тестировать правильность вывода удобно настроив экспорт заказов в модуле "Обмен данными"
При тестировании нашел один нюанс, который не очень хорошо сказываеться на выгрузке.
Если пользователь допустил ошибку, и по нечаянности добавил в корзину два раза один и тот же товар с одной и той же характеристикой(только количество разное). выгрузка почему то дублирует опциональное свойство при выгрузке.
Как от этого избавиться?
пример что получается:
<Товар>
<Ид>c72ffee9-d7d7-11e2-97aa-80ee7338def1</Ид>
<ИдКаталога>436951b5-46c2-4474-89ca-871c7d094326</ИдКаталога>
<Артикул>НС400-0в-13</Артикул>
<Наименование>Ночная сорочка "Габриэль" (Коралловая)</Наименование>
<БазоваяЕдиница Код="796" НаименованиеПолное="Штука" МеждународноеСокращение="PCE">шт</БазоваяЕдиница>
<ХарактеристикиТовара>
<ХарактеристикаТовара>
<Наименование>Размер</Наименование>
<Значение>р.52</Значение>
</ХарактеристикаТовара>
<ХарактеристикаТовара>
<Наименование>Цвет</Наименование>
<Значение>№ 13 (коралловый)</Значение>
</ХарактеристикаТовара>
<ХарактеристикаТовара>
<Наименование>Размер</Наименование>
<Значение>р.52</Значение>
</ХарактеристикаТовара>
<ХарактеристикаТовара>
<Наименование>Цвет</Наименование>
<Значение>№ 13 (коралловый)</Значение>
</ХарактеристикаТовара>
</ХарактеристикиТовара>
<ЦенаЗаЕдиницу>130</ЦенаЗаЕдиницу>
<Сумма>1690</Сумма>
<Количество>13</Количество>
<Единица>шт</Единица>
<Коэффициент>1</Коэффициент>
<ЗначенияРеквизитов>...</ЗначенияРеквизитов>
</Товар>