Кастомизация сценария выгрузки заказов для 1С — различия между версиями
Velross (обсуждение | вклад) |
Velross (обсуждение | вклад) |
||
(не показано 15 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
+ | |||
+ | <br> '''Актуально для версии 2.9'''<br> | ||
+ | |||
<p><b>Задача:</b> Добавить к сценарию выгрузки заказов для 1С информацию об адресе доставки и её стоимости.<br /> | <p><b>Задача:</b> Добавить к сценарию выгрузки заказов для 1С информацию об адресе доставки и её стоимости.<br /> | ||
<b>Решение.</b></p> | <b>Решение.</b></p> | ||
Строка 5: | Строка 8: | ||
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></p> | ||
<h4>Выводим стоимость доставки</h4> | <h4>Выводим стоимость доставки</h4> | ||
<p>1. Создадим переменную, в которой будет хранится текущий индентификатор объекта.<br /> | <p>1. Создадим переменную, в которой будет хранится текущий индентификатор объекта.<br /> | ||
− | < | + | <source lang="xml" highlight="3"> |
− | + | <xsl:template match="object" mode="order"> | |
− | + | ... | |
− | + | <xsl:param name="my_order_id" select="@id" /> | |
− | + | ... | |
− | + | <Документ> | |
− | + | </source></p> | |
− | + | 2. Пропишем наш тег, в котором будет выводится информация о стоимости доставки. Для этого, внутри тега вызовим темплейт с mode="delivery_price":<br /> | |
− | + | <source lang="xml" highlight="3"> | |
− | + | <Курс>1</Курс> | |
− | < | + | |
− | + | <СтоимостьДоставки><xsl:apply-templates select="//object[@id=$my_order_id]" mode="delivery_price" /></СтоимостьДоставки> | |
− | + | <Сумма><xsl:value-of select="$total_price" /></Сумма> | |
− | + | </source> | |
− | + | ||
<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> | ||
− | + | Выводить информацию об адресе доставки удобнее всего у контрагента совершившего заказ.<br /> | |
− | + | ||
− | Получить данный id мы можем заранее, используя | + | Получить данный id мы можем заранее, используя переменную.</p> |
− | <p>1. | + | <p>1. Найдем шаблон, по которому выводится информация о контрагенте и опишем в нем нашу переменную:<br /> |
− | + | <source lang="xml" highlight="2"> | |
− | + | <xsl:template match="object" mode="customer"> | |
− | </p> | + | <xsl:variable name="delivery_id" select="//properties/group/property[@name='delivery_addresses']/value/item/@id"/> |
− | <p> | + | <Контрагент> |
− | + | </source></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 /> | ||
− | + | <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 /> | |
− | + | <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 /> | ||
Строка 63: | Строка 80: | ||
<h4>Результат выгрузки</h4> | <h4>Результат выгрузки</h4> | ||
[[Файл:900-export-result.png]] | [[Файл: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:
Обратите внимание на то, что заказы, которые Вы хотите выгрузить, разрешены к выгрузке: