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

Материал из Umicms
Перейти к:навигация, поиск
(Новая страница: «<p><b>Задача:</b> Добавить к сценарию выгрузки заказов для 1С информацию об адресе доставки и е…»)
 
 
(не показано 25 промежуточных версий этого же участника)
Строка 1: Строка 1:
 +
 +
<br> '''Актуально для версии 2.9'''<br>
 +
 
<p><b>Задача:</b> Добавить к сценарию выгрузки заказов для 1С информацию об адресе доставки и её стоимости.<br />
 
<p><b>Задача:</b> Добавить к сценарию выгрузки заказов для 1С информацию об адресе доставки и её стоимости.<br />
 
<b>Решение.</b></p>
 
<b>Решение.</b></p>
<h3><b>Подготовка</b></h3>
+
<h4><b>Подготовка</b></h4>
 
<p>1. Открываем папку: <i>xsl/export/</i><br />
 
<p>1. Открываем папку: <i>xsl/export/</i><br />
 
   2. Копируем файл <i>ordersCommerceML.xsl</i> и вставляем в папку <i>/custom/</i> с заменой существующего там файла.<br />
 
   2. Копируем файл <i>ordersCommerceML.xsl</i> и вставляем в папку <i>/custom/</i> с заменой существующего там файла.<br />
 
   3. Открываем данный файл на редактирование.<br />
 
   3. Открываем данный файл на редактирование.<br />
4. В самом конце файла сотрем строчку: <b>&lt;xsl:include href=&quot;custom/ordersCommerceML.xsl&quot; /&gt;</b></p>
+
4. В самом конце файла сотрем строчку:  
<h3>Выводим стоимость доставки</h3>
+
<source lang="xml">
 +
<xsl:include href="custom/ordersCommerceML.xsl" />
 +
</source></p>
 +
<h4>Выводим стоимость доставки</h4>
 
<p>1. Создадим переменную, в которой будет хранится текущий индентификатор объекта.<br />
 
<p>1. Создадим переменную, в которой будет хранится текущий индентификатор объекта.<br />
   <i>&lt;xsl:template match=&quot;object&quot; mode=&quot;order&quot;&gt;<br />
+
   <source lang="xml" highlight="3">
  ...</i><br />
+
<xsl:template match="object" mode="order">
  <b>&lt;xsl:param name=&quot;my_order_id&quot; select=&quot;@id&quot; /&gt;</b><br />
+
...
  <i>...<br />
+
<xsl:param name="my_order_id" select="@id" />
  &lt;Документ&gt;</i><br />
+
...
  <br />
+
<Документ>
  2. Пропишем наш тег, в котором будет выводится информация о стоимости доставки. Для этого, внутри тега вызовим темплейт с mode=&quot;delivery_price&quot;:<br />
+
</source></p>
  <i>&lt;Курс&gt;1&lt;/Курс&gt;<br />
+
2. Пропишем наш тег, в котором будет выводится информация о стоимости доставки. Для этого, внутри тега вызовим темплейт с mode=&quot;delivery_price&quot;:<br />
  </i><br />
+
<source lang="xml" highlight="3">
  <b>&lt;СтоимостьДоставки&gt;&lt;xsl:apply-templates select=&quot;//object[@id=$my_order_id]&quot; mode=&quot;delivery_price&quot; /&gt;&lt;/СтоимостьДоставки&gt;</b><br />
+
<Курс>1</Курс>
<i>&lt;Сумма&gt;&lt;xsl:value-of select=&quot;$total_price&quot; /&gt;&lt;/Сумма&gt;</i></p>
+
<p>Теперь необходимо понять откуда взять нужную нам информацию. Так как мы работаем с объектами, то вся информация содержится в них.<br />
+
<СтоимостьДоставки><xsl:apply-templates select="//object[@id=$my_order_id]" mode="delivery_price" /></СтоимостьДоставки>
  Чтобы просмотреть содержимое объекта в xml-виде, мы можем включить протокол uobject и через него просмотреть содержимое объекта:<br />
+
<Сумма><xsl:value-of select="$total_price" /></Сумма>
  (рис)<br />
+
</source>
  В рамке отмеченна информация, которую мы будет внедрять в файл импорта заказов.</p>
+
 
 
<p>3. В конце файла опишем вызванный шаблон:<br />
 
<p>3. В конце файла опишем вызванный шаблон:<br />
  <b>&lt;xsl:template match=&quot;object&quot; mode=&quot;delivery_price&quot;&gt;<br />
+
<source lang="xml">
  Стоимость доставки: &lt;xsl:value-of select=&quot;//property[@name='delivery_price']/value&quot; /&gt;<br />
+
<xsl:template match="object" mode="delivery_price">
  &lt;/xsl:template&gt; </b></p>
+
Стоимость доставки: <xsl:value-of select="//property[@name='delivery_price']/value" />
<h3>Выводим информацию об адресе доставки</h3>
+
</xsl:template>  
<p>Выводить информацию об адресе доставки удобнее всего у контрагента совершившего заказ.<br />
+
</source>
  Если мы посмотрим на рисунок, то увидим, что информация об адресе доставки содержется в другом объекте и нам доступен id этого объекта и ссылка на него.<br />
+
<h4>Выводим информацию об адресе доставки</h4>
Получить данный id мы можем заранее, используя глобальную переменную, т.к. локальные переменные в других темплейтах будут недоступны.</p>
+
Выводить информацию об адресе доставки удобнее всего у контрагента совершившего заказ.<br />
<p>1. Опишем глобальную переменную в самом начале файла:<br />
+
 
  <i>&lt;xsl:output method=&quot;xml&quot; encoding=&quot;utf-8&quot;/&gt;</i><br />
+
Получить данный id мы можем заранее, используя переменную.</p>
  <b>&lt;xsl:variable name=&quot;delivery_id&quot; select=&quot;//properties/group/property[@name='delivery_address']/value/item/@id&quot;/&gt;</b><br />
+
<p>1. Найдем шаблон, по которому выводится информация о контрагенте  и опишем в нем нашу переменную:<br />
</p>
+
<source lang="xml" highlight="2">
<p>2. Найдем шаблон, по которому выводится информация о контрагенте:<br />
+
<xsl:template match="object" mode="customer">
  <i>&lt;xsl:template match=&quot;object&quot; mode=&quot;customer&quot;&gt;<br />
+
        <xsl:variable name="delivery_id" select="//properties/group/property[@name='delivery_addresses']/value/item/@id"/>
  &lt;Контрагент&gt;</i></p>
+
<Контрагент>
<p>3. Вызовим наш шаблон:<br />
+
</source></p>
  <b>&lt;xsl:apply-templates select=&quot;document(concat('uobject://', $delivery_id))/udata/object&quot; mode=&quot;current_address&quot; /&gt;</b></p>
+
<p>3. Там же, вызовим наш шаблон:<br />
 +
<source lang="xml"  highlight="3">
 +
        <Контрагент>
 +
        ...
 +
        <xsl:apply-templates select="document(concat('uobject://', $delivery_id))/udata/object" mode="current_address" />
 +
        </Контрагент>
 +
</source></p>
 
<p>4. Опишем шаблон:<br />
 
<p>4. Опишем шаблон:<br />
  <b>&lt;xsl:template match=&quot;object&quot; mode=&quot;current_address&quot;&gt;<br />
+
<source lang="xml">
  &lt;Адрес&gt;<br />
+
<xsl:template match="object" mode="current_address">
  Страна: &lt;xsl:value-of select=&quot;//property[@name='country']/value/item/@name&quot; /&gt;,<br />
+
<Адрес>
  Индекс: &lt;xsl:value-of select=&quot;//property[@name='index']/value&quot; /&gt;,<br />
+
Страна: <xsl:value-of select="//property[@name='country']/value/item/@name" />,
  Регион: &lt;xsl:value-of select=&quot;//property[@name='region']/value&quot; /&gt;,<br />
+
Индекс: <xsl:value-of select="//property[@name='index']/value" />,
  Город: &lt;xsl:value-of select=&quot;//property[@name='city']/value&quot; /&gt;,<br />
+
Регион: <xsl:value-of select="//property[@name='region']/value" />,
  Улица: &lt;xsl:value-of select=&quot;//property[@name='street']/value&quot; /&gt;,<br />
+
Город: <xsl:value-of select="//property[@name='city']/value" />,
  Дом: &lt;xsl:value-of select=&quot;//property[@name='house']/value&quot; /&gt;,<br />
+
Улица: <xsl:value-of select="//property[@name='street']/value" />,
  Квартира: &lt;xsl:value-of select=&quot;//property[@name='flat']/value&quot; /&gt;<br />
+
Дом: <xsl:value-of select="//property[@name='house']/value" />,
  &lt;/Адрес&gt;<br />
+
Квартира: <xsl:value-of select="//property[@name='flat']/value" />
  &lt;/xsl:template&gt; </b></p>
+
</Адрес>
 +
</xsl:template>
 +
 
 +
</source></p>
 
<p>Аналогичным образом, Вы можете описать и добавить в выгрузку любые другие поля, в том числе собственные.</p>
 
<p>Аналогичным образом, Вы можете описать и добавить в выгрузку любые другие поля, в том числе собственные.</p>
 
<p><b>Примечание 1:</b><br />
 
<p><b>Примечание 1:</b><br />
  Если при выгрузке заказов Вы получаете сообщение об ошибке разбора данных, то закомментируйте в нашем кастомном файле две строки:<br />
+
Если при выгрузке заказов Вы получаете сообщение об ошибке разбора данных, то закомментируйте в нашем кастомном файле две строки:<br />
  &lt;!-- &lt;xsl:variable name=&quot;currency&quot; select=&quot;document('udata://emarket/currencySelector/')/udata/items&quot; /&gt; --&gt;<br />
+
<source lang="xml">
&lt;!-- &lt;xsl:variable name=&quot;default-currency&quot; select=&quot;$currency/item[@default = 'default']/@codename&quot; /&gt; --&gt;</p>
+
<!-- <xsl:variable name="currency" select="document('udata://emarket/currencySelector/')/udata/items" /> -->
 +
<!-- <xsl:variable name="default-currency" select="$currency/item[@default = 'default']/@codename" /> -->
 +
</source></p>
 
<p><b>Примечание 2:</b><br />
 
<p><b>Примечание 2:</b><br />
 
   Обратите внимание на то, что заказы, которые Вы хотите выгрузить, разрешены к выгрузке: <br />
 
   Обратите внимание на то, что заказы, которые Вы хотите выгрузить, разрешены к выгрузке: <br />
 +
[[Файл:Order-export.png]]
 
</p>
 
</p>
<h3>Результат выгрузки</h3>
+
<h4>Результат выгрузки</h4>
 +
[[Файл:900-export-result.png]]
 +
 
 +
[[Категория:Интеграция с 1С]][[Категория:Модуль Обмен данными]]

Текущая версия на 16:59, 7 июня 2013


Актуально для версии 2.9

Задача: Добавить к сценарию выгрузки заказов для 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" /></Сумма>

3. В конце файла опишем вызванный шаблон:

<xsl:template match="object" mode="delivery_price">
		Стоимость доставки: <xsl:value-of select="//property[@name='delivery_price']/value" />
</xsl:template>

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

Выводить информацию об адресе доставки удобнее всего у контрагента совершившего заказ.

Получить данный id мы можем заранее, используя переменную.

1. Найдем шаблон, по которому выводится информация о контрагенте и опишем в нем нашу переменную:

<xsl:template match="object" mode="customer">
        <xsl:variable name="delivery_id" select="//properties/group/property[@name='delivery_addresses']/value/item/@id"/>
	<Контрагент>

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:
Обратите внимание на то, что заказы, которые Вы хотите выгрузить, разрешены к выгрузке:
Order-export.png

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

900-export-result.png