|
|
Строка 1: |
Строка 1: |
− | <p><b>Задача:</b> Добавить к сценарию выгрузки заказов для 1С информацию об адресе доставки и её стоимости.<br />
| + | Статья на рерайте и дополнительном тестировании. |
− | <b>Решение.</b></p>
| |
− | <h4><b>Подготовка</b></h4>
| |
− | <p>1. Открываем папку: <i>xsl/export/</i><br />
| |
− | 2. Копируем файл <i>ordersCommerceML.xsl</i> и вставляем в папку <i>/custom/</i> с заменой существующего там файла.<br />
| |
− | 3. Открываем данный файл на редактирование.<br />
| |
− | 4. В самом конце файла сотрем строчку:
| |
− | <source lang="xml">
| |
− | <xsl:include href="custom/ordersCommerceML.xsl" />
| |
− | </source></p>
| |
− | <h4>Выводим стоимость доставки</h4>
| |
− | <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>Теперь необходимо понять откуда взять нужную нам информацию. Так как мы работаем с объектами, то вся информация содержится в них.<br />
| |
− | Чтобы просмотреть содержимое объекта в xml-виде, мы можем включить протокол uobject и через него просмотреть содержимое объекта:<br />
| |
− | [[Файл:Xslt.png]]<br> (Изображение 1)<br/>
| |
− | В рамке отмеченна информация, которую мы будет внедрять в файл импорта заказов.</p>
| |
− | <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>
| |
− | Выводить информацию об адресе доставки удобнее всего у контрагента совершившего заказ.<br />
| |
− | Если мы посмотрим на "изображение 1", то увидим, что информация об адресе доставки содержется в другом объекте и нам доступен id этого объекта и ссылка на него.<br />
| |
− | Получить данный id мы можем заранее, используя глобальную переменную, т.к. локальные переменные в других темплейтах будут недоступны.</p>
| |
− | <p>1. Опишем глобальную переменную в самом начале файла:<br />
| |
− | <source lang="xml" highlight="2">
| |
− | <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>2. Найдем шаблон, по которому выводится информация о контрагенте:<br />
| |
− | <source lang="xml" highlight="2">
| |
− | <xsl:template match="object" mode="customer">
| |
− | <Контрагент>
| |
− | </source></p>
| |
− | <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 />
| |
− | <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><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 />
| |
− | Обратите внимание на то, что заказы, которые Вы хотите выгрузить, разрешены к выгрузке: <br />
| |
− | [[Файл:Order-export.png]]
| |
− | </p>
| |
− | <h4>Результат выгрузки</h4>
| |
− | [[Файл:900-export-result.png]]
| |
− | <p>Версия: 2.8.5.3</p>
| |