Кастомизация сценария выгрузки заказов для 1С — различия между версиями
| Velross (обсуждение | вклад) | Velross (обсуждение | вклад)  | ||
| Строка 5: | Строка 5: | ||
|    2. Копируем файл <i>ordersCommerceML.xsl</i> и вставляем в папку <i>/custom/</i> с заменой существующего там файла.<br /> |    2. Копируем файл <i>ordersCommerceML.xsl</i> и вставляем в папку <i>/custom/</i> с заменой существующего там файла.<br /> | ||
|    3. Открываем данный файл на редактирование.<br /> |    3. Открываем данный файл на редактирование.<br /> | ||
| − | 4. В самом конце файла сотрем строчку: < | + | 4. В самом конце файла сотрем строчку:   | 
| + | <source lang="xml"> | ||
| + | <xsl:include href="custom/ordersCommerceML.xsl" /> | ||
| + | </source> | ||
| <h4>Выводим стоимость доставки</h4> | <h4>Выводим стоимость доставки</h4> | ||
| <p>1. Создадим переменную, в которой будет хранится текущий индентификатор объекта.<br /> | <p>1. Создадим переменную, в которой будет хранится текущий индентификатор объекта.<br /> | ||
| − |    < | + |    <source lang="xml"> | 
| − | + | <xsl:template match="object" mode="order"> | |
| − | + | ... | |
| − | + | <xsl:param name="my_order_id" select="@id" /> | |
| − | + | ... | |
| − | + | 	<Документ> | |
| + | </source> | ||
|    2. Пропишем наш тег, в котором будет выводится информация о стоимости доставки. Для этого, внутри тега вызовим темплейт с mode="delivery_price":<br /> |    2. Пропишем наш тег, в котором будет выводится информация о стоимости доставки. Для этого, внутри тега вызовим темплейт с mode="delivery_price":<br /> | ||
| − | + | <source lang="xml"> | |
| − | + | 		<Курс>1</Курс> | |
| − | + | ||
| − | < | + | 		<СтоимостьДоставки><xsl:apply-templates select="//object[@id=$my_order_id]"  mode="delivery_price" /></СтоимостьДоставки> | 
| + | 		<Сумма><xsl:value-of select="$total_price" /></Сумма> | ||
| + | </source> | ||
| <p>Теперь необходимо понять откуда взять нужную нам информацию. Так как мы работаем с объектами, то вся информация содержится в них.<br /> | <p>Теперь необходимо понять откуда взять нужную нам информацию. Так как мы работаем с объектами, то вся информация содержится в них.<br /> | ||
|    Чтобы просмотреть содержимое объекта в xml-виде, мы можем включить протокол uobject и через него просмотреть содержимое объекта:<br /> |    Чтобы просмотреть содержимое объекта в xml-виде, мы можем включить протокол uobject и через него просмотреть содержимое объекта:<br /> | ||
| Строка 24: | Строка 30: | ||
|    В рамке отмеченна информация, которую мы будет внедрять в файл импорта заказов.</p> |    В рамке отмеченна информация, которую мы будет внедрять в файл импорта заказов.</p> | ||
| <p>3. В конце файла опишем вызванный шаблон:<br /> | <p>3. В конце файла опишем вызванный шаблон:<br /> | ||
| − | + | <source lang="xml"> | |
| − | + | <xsl:template match="object" mode="delivery_price"> | |
| − | + | 		Стоимость доставки: <xsl:value-of select="//property[@name='delivery_price']/value" /> | |
| + | </xsl:template>   | ||
| + | </source> | ||
| <h4>Выводим информацию об адресе доставки</h4> | <h4>Выводим информацию об адресе доставки</h4> | ||
| <p>Выводить информацию об адресе доставки удобнее всего у контрагента совершившего заказ.<br /> | <p>Выводить информацию об адресе доставки удобнее всего у контрагента совершившего заказ.<br /> | ||
| Строка 32: | Строка 40: | ||
| Получить данный id мы можем заранее, используя глобальную переменную, т.к. локальные переменные в других темплейтах будут недоступны.</p> | Получить данный id мы можем заранее, используя глобальную переменную, т.к. локальные переменные в других темплейтах будут недоступны.</p> | ||
| <p>1. Опишем глобальную переменную в самом начале файла:<br /> | <p>1. Опишем глобальную переменную в самом начале файла:<br /> | ||
| − | + | <source lang="xml"> | |
| − | + | <xsl:output method="xml" encoding="utf-8"/> | |
| + | <xsl:variable name="delivery_id" select="//properties/group/property[@name='delivery_address']/value/item/@id"/> | ||
| + | </source> | ||
| </p> | </p> | ||
| <p>2. Найдем шаблон, по которому выводится информация о контрагенте:<br /> | <p>2. Найдем шаблон, по которому выводится информация о контрагенте:<br /> | ||
| − | + | <source lang="xml"> | |
| − | + | <xsl:template match="object" mode="customer"> | |
| + | 	<Контрагент> | ||
| + | </source></p> | ||
| <p>3. Вызовим наш шаблон:<br /> | <p>3. Вызовим наш шаблон:<br /> | ||
| − | + | <source lang="xml"> | |
| + | <xsl:apply-templates select="document(concat('uobject://', $delivery_id))/udata/object" mode="current_address" /> | ||
| + | </source></p> | ||
| <p>4. Опишем шаблон:<br /> | <p>4. Опишем шаблон:<br /> | ||
| − | + | <source lang="xml"> | |
| − | + | <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>  | ||
| + | |||
| + | </source></p> | ||
| <p>Аналогичным образом, Вы можете описать и добавить в выгрузку любые другие поля, в том числе собственные.</p> | <p>Аналогичным образом, Вы можете описать и добавить в выгрузку любые другие поля, в том числе собственные.</p> | ||
| <p><b>Примечание 1:</b><br /> | <p><b>Примечание 1:</b><br /> | ||
|    Если при выгрузке заказов Вы получаете сообщение об ошибке разбора данных, то закомментируйте в нашем кастомном файле две строки:<br /> |    Если при выгрузке заказов Вы получаете сообщение об ошибке разбора данных, то закомментируйте в нашем кастомном файле две строки:<br /> | ||
| − | + | <source lang="xml"> | |
| − | + | <!-- <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 /> | ||
Версия 20:42, 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 и через него просмотреть содержимое объекта:
   В рамке отмеченна информация, которую мы будет внедрять в файл импорта заказов.
  В рамке отмеченна информация, которую мы будет внедрять в файл импорта заказов.
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:
  Обратите внимание на то, что заказы, которые Вы хотите выгрузить, разрешены к выгрузке: 
 
Результат выгрузки
Версия: 2.8.5.3

