Расширенная информация о контрагенте для выгрузки заказов

Материал из Umicms
Версия от 14:04, 18 мая 2020; Aposio (обсуждение | вклад) (Новая страница: «'''Актуально для версии 21''' == Задача == Добавить в файл с заказами, который выгружается с с…»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск

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

Задача

Добавить в файл с заказами, который выгружается с сайта в 1С, более подробную информацию о контрагенте.
В рамках данной статьи будет показано, как добавить в файл следующую информацию:

  • телефон
  • email
  • адрес

Решение

Вся работа будет производиться в файле styles\common\xsl\export\custom\ordersCommerceML.xsl

1. Копируем в файл styles\common\xsl\export\custom\ordersCommerceML.xsl из файла styles\common\xsl\export\ordersCommerceML.xsl следующие шаблоны:

  • <xsl:template match="object" mode="order">
    
  • <xsl:template match="object" mode="customer">
    

Примечание: шаблон - это блок кода, начинающийся с <xsl:template...> и заканчивающийся </xsl:template>


2. Добавляем в шаблон <xsl:template match="object" mode="order"> параметр delivery_id:

<xsl:param name="delivery_id" select="string(properties/group/property[@name='delivery_address']/value/item/@id)" />



3. Заменяем содержимое тега <Контрагенты> на следующее:

<Контрагенты>
    <xsl:apply-templates select="document(concat('uobject://', $customer_id))/udata/object" mode="customer" >
        <xsl:with-param name="delivery_id">
            <xsl:value-of select="$delivery_id"/>
        </xsl:with-param>
    </xsl:apply-templates>
</Контрагенты>



4. Заменяем код шаблона <xsl:template match="object" mode="customer"> следующим образом:

<xsl:template match="object" mode="customer">
    <xsl:param name="delivery_id" />

    <xsl:variable name="index" select="document(concat('uobject://', $delivery_id))//property[@name='index']/value" />
    <xsl:variable name="city" select="document(concat('uobject://', $delivery_id))//property[@name='city']/value" />
    <xsl:variable name="street" select="document(concat('uobject://', $delivery_id))//property[@name='street']/value" />
    <xsl:variable name="house" select="document(concat('uobject://', $delivery_id))//property[@name='house']/value" />
    <xsl:variable name="full_address" select="concat($index, ', ', $city, ', ',  $street, ', ', $house)" />

    <Контрагент>
        <Ид><xsl:value-of select="@id" /></Ид>
        <Наименование><xsl:value-of select="//property[@name='fname']/value" />&#160;<xsl:value-of select="//property[@name='lname']/value" /></Наименование>
        <ПолноеНаименование><xsl:value-of select="//property[@name='fname']/value" />&#160;<xsl:value-of select="//property[@name='lname']/value" /></ПолноеНаименование>
        <Роль>Покупатель</Роль>
        <Фамилия><xsl:value-of select="//property[@name='lname']/value" /></Фамилия>
        <Имя><xsl:value-of select="//property[@name='fname']/value" /></Имя>
        <Контакты>
            <Контакт>
                <Тип>Телефон рабочий</Тип>
                <Значение><xsl:value-of select="//property[@name='phone']/value" /></Значение>
            </Контакт>
            <Контакт>
                <Тип>Электронная почта</Тип>
                <Значение><xsl:value-of select="//property[@name='email']/value" /></Значение>
            </Контакт>
        </Контакты>
        <АдресРегистрации>
            <Представление><xsl:value-of select="$full_address" /></Представление>
            <АдресноеПоле>
                <Тип>Почтовый индекс</Тип>
                <Значение><xsl:value-of select="$index" /></Значение>
            </АдресноеПоле>
            <АдресноеПоле>
                <Тип>Город</Тип>
                <Значение><xsl:value-of select="$city" /></Значение>
            </АдресноеПоле>
            <АдресноеПоле>
                <Тип>Улица</Тип>
                <Значение><xsl:value-of select="$street" /></Значение>
            </АдресноеПоле>
            <АдресноеПоле>
                <Тип>Дом</Тип>
                <Значение><xsl:value-of select="$house" /></Значение>
            </АдресноеПоле>
        </АдресРегистрации>
    </Контрагент>
</xsl:template>



В итоге информация о контрагенте будет выглядеть следующим образом:

<Контрагенты>
    <Контрагент>
        <Ид>1695</Ид>
        <Наименование>Василий Пупкин</Наименование>
        <ПолноеНаименование>Василий Пупкин</ПолноеНаименование>
        <Роль>Покупатель</Роль>
        <Фамилия>Пупкин</Фамилия>
        <Имя>Василий</Имя>
        <Контакты>
            <Контакт>
                <Тип>Телефон рабочий</Тип>
                <Значение>+7-999-888-77-66</Значение>
            </Контакт>
            <Контакт>
                <Тип>Электронная почта</Тип>
                <Значение>mail@mail.ru</Значение>
            </Контакт>
        </Контакты>
        <АдресРегистрации>
            <Представление>197110, Санкт-Петербург, Красного Курсанта, 25</Представление>
            <АдресноеПоле>
                <Тип>Почтовый индекс</Тип>
                <Значение>197110</Значение>
            </АдресноеПоле>
            <АдресноеПоле>
                <Тип>Город</Тип>
                <Значение>Санкт-Петербург</Значение>
            </АдресноеПоле>
            <АдресноеПоле>
                <Тип>Улица</Тип>
                <Значение>Красного Курсанта</Значение>
            </АдресноеПоле>
            <АдресноеПоле>
                <Тип>Дом</Тип>
                <Значение>25</Значение>
            </АдресноеПоле>
        </АдресРегистрации>
    </Контрагент>
</Контрагенты>

Информация о структуре xml-файла взята из документации для разработчиков: XML-файлы для обмена данными