Кастомизация сценария выгрузки заказов для 1С — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
Строка 21: Строка 21:
 
<p>Теперь необходимо понять откуда взять нужную нам информацию. Так как мы работаем с объектами, то вся информация содержится в них.<br />
 
<p>Теперь необходимо понять откуда взять нужную нам информацию. Так как мы работаем с объектами, то вся информация содержится в них.<br />
 
   Чтобы просмотреть содержимое объекта в xml-виде, мы можем включить протокол uobject и через него просмотреть содержимое объекта:<br />
 
   Чтобы просмотреть содержимое объекта в xml-виде, мы можем включить протокол uobject и через него просмотреть содержимое объекта:<br />
   (рис)<br />
+
   [[Файл:Xslt.png]]
 
   В рамке отмеченна информация, которую мы будет внедрять в файл импорта заказов.</p>
 
   В рамке отмеченна информация, которую мы будет внедрять в файл импорта заказов.</p>
 
<p>3. В конце файла опишем вызванный шаблон:<br />
 
<p>3. В конце файла опишем вызванный шаблон:<br />

Версия 20:18, 30 октября 2012

Задача: Добавить к сценарию выгрузки заказов для 1С информацию об адресе доставки и её стоимости.
Решение.

Подготовка

1. Открываем папку: xsl/export/
2. Копируем файл ordersCommerceML.xsl и вставляем в папку /custom/ с заменой существующего там файла.
3. Открываем данный файл на редактирование.
4. В самом конце файла сотрем строчку: <xsl:include href="custom/ordersCommerceML.xsl" />

Выводим стоимость доставки

1. Создадим переменную, в которой будет хранится текущий индентификатор объекта.
<xsl:template match="object" mode="order">
...

<xsl:param name="my_order_id" select="@id" />
...
<Документ>


2. Пропишем наш тег, в котором будет выводится информация о стоимости доставки. Для этого, внутри тега вызовим темплейт с mode="delivery_price":
<Курс>1</Курс>

<СтоимостьДоставки><xsl:apply-templates select="//object[@id=$my_order_id]" mode="delivery_price" /></СтоимостьДоставки>
<Сумма><xsl:value-of select="$total_price" /></Сумма>

Теперь необходимо понять откуда взять нужную нам информацию. Так как мы работаем с объектами, то вся информация содержится в них.
Чтобы просмотреть содержимое объекта в xml-виде, мы можем включить протокол uobject и через него просмотреть содержимое объекта:
Xslt.png В рамке отмеченна информация, которую мы будет внедрять в файл импорта заказов.

3. В конце файла опишем вызванный шаблон:
<xsl:template match="object" mode="delivery_price">
Стоимость доставки: <xsl:value-of select="//property[@name='delivery_price']/value" />
</xsl:template>

Выводим информацию об адресе доставки

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

1. Опишем глобальную переменную в самом начале файла:
<xsl:output method="xml" encoding="utf-8"/>
<xsl:variable name="delivery_id" select="//properties/group/property[@name='delivery_address']/value/item/@id"/>

2. Найдем шаблон, по которому выводится информация о контрагенте:
<xsl:template match="object" mode="customer">
<Контрагент>

3. Вызовим наш шаблон:
<xsl:apply-templates select="document(concat('uobject://', $delivery_id))/udata/object" mode="current_address" />

4. Опишем шаблон:
<xsl:template match="object" mode="current_address">
<Адрес>
Страна: <xsl:value-of select="//property[@name='country']/value/item/@name" />,
Индекс: <xsl:value-of select="//property[@name='index']/value" />,
Регион: <xsl:value-of select="//property[@name='region']/value" />,
Город: <xsl:value-of select="//property[@name='city']/value" />,
Улица: <xsl:value-of select="//property[@name='street']/value" />,
Дом: <xsl:value-of select="//property[@name='house']/value" />,
Квартира: <xsl:value-of select="//property[@name='flat']/value" />
</Адрес>
</xsl:template>

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

Примечание 1:
Если при выгрузке заказов Вы получаете сообщение об ошибке разбора данных, то закомментируйте в нашем кастомном файле две строки:
<!-- <xsl:variable name="currency" select="document('udata://emarket/currencySelector/')/udata/items" /> -->
<!-- <xsl:variable name="default-currency" select="$currency/item[@default = 'default']/@codename" /> -->

Примечание 2:
Обратите внимание на то, что заказы, которые Вы хотите выгрузить, разрешены к выгрузке:

Результат выгрузки