Спасибо за оригинальные комментарии и ответы!
В соответствии с просьбой я отредактировал вопрос и разбил свой код на более мелкие куски, чтобы его было легче понять, и, надеюсь, кто-то может разобраться, где Я ошибаюсь?
CRM использует XSL v.1.0 для создания пользовательских шаблонов pdf, используя поля из базы данных для создания предложений, счетов-фактур и заказов (используя один и тот же шаблон basi c и фильтрацию в зависимости от типа документа ).
Для каждого типа документа (цитата, заказ, счет и т. Д. c) есть отдельные поля, поэтому я пытался отфильтровать по типу документа, а также по каждой строке, чтобы проверить, является ли сумма не был нулевым (поэтому я могу добавить настраиваемые поля в макет счета, если применяется скидка)
Эта часть кода анализируется нормально, но не дает правильных ответов (см. ниже)
<?xml version="1.0" encoding="UTF-8"?>
<xslt:stylesheet xmlns:date="http://exslt.org/dates-and-times" xmlns:str="http://exslt.org/strings" xmlns:xslt="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xf="http://www.ecrion.com/xf/1.0" xmlns:xc="http://www.ecrion.com/2008/xc" xmlns:xfd="http://www.ecrion.com/xfd/1.0" xmlns:svg="http://www.w3.org/2000/svg" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" extension-element-prefixes="date str">
<xslt:output indent="yes" encoding="utf-8"/>
<xsl:template match="/">
<!-- == REGIONAL DISCOUNT == -->
<xsl:variable name="regional_discount_1">
<xsl:choose>
<xsl:when test="sum(/hash/order_line_items/*/additional_discount_1_percent[@amount > 0]) > 0">
<xsl:value-of select="1"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="0"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- == EARLY PAYMENT OR PRICE DISCOUNT == -->
<xsl:variable name="price_discount">
<xsl:choose>
<xsl:when test="sum(/hash/order_line_items/*/hash/discount_percent[@amount > 0]) > 0">
<xsl:value-of select="1"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="0"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- == TOTAL DISCOUNTS // NB BAND RELIEF NEEDS TWO COLUMNS == -->
<xsl:variable name="total_discount_columns">
<xsl:choose>
<xsl:when test="$regional_discount_1 + $price_discount = 0">
<xsl:value-of select="0"/>
</xsl:when>;
<xsl:when test="$regional_discount_1 + $price_discount = 1">
<xsl:value-of select="1"/>
</xsl:when>
<xsl:when test="$regional_discount_1 + $price_discount = 2">
<xsl:value-of select="2"/>
</xsl:when>
<xsl:when test="$regional_discount_1 + $price_discount = 3">
<xsl:value-of select="3"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="0"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
Однако код для этой переменной (@band_relief) не анализируется в CRM (но не выдает никаких сообщений об ошибках!), Так как его пришлось удалить из кода, поэтому не уверен, что с этим не так:
<xsl:variable name="band_relief">
<xsl:choose>
<xsl:when test="(sum(/hash/cf_customer_quotation_line_item_band_relief) != 0 and /hash/text/Collection_Class_Name = "Private::Accounting::Quotation")
or (sum(/hash/cf_customer_order_line_item_band_relief) != 0 and /hash/text/Collection_Class_Name = "Private::Accounting::SalesOrder")
or (sum(/hash/cf_customer_invoice_line_item_band_relief) != 0 and /hash/text/Collection_Class_Name = "Private::Invoice:Quotation")
or (sum(/hash/cf_customer_credit_note_line_item_band_relief) != 0 and /hash/text/Collection_Class_Name = "Private::CreditNote::Quotation")">
<xsl:value-of select="1"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="0"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
Если какая-либо из товарных линий имеет одну из трех скидок, я хочу, чтобы переменная отображалась как 1, иначе 0, чтобы я мог добавить дополнительные столбцы к макет счета-фактуры.
Используя приведенный ниже код, мне удалось извлечь данные из трех позиций счета-фактуры, и существует скидка для каждого типа, но для другого продукта, однако переменная @band_relief не анализируется при хотя я все еще могу извлечь данные, как показано ниже.
<fo:block padding-top="0.45cm" font-size="9pt" padding-bottom="0cm">
<fo:inline>
$regional_discount_1 <xsl:value-of select="$regional_discount_1"/>
$price_discount <xsl:value-of select="$price_discount"/>
</fo:inline>
</fo:block>
<fo:block padding-top="0.45cm" font-size="9pt" padding-bottom="0cm">
<xsl:for-each select = "/hash/order_line_items/order_line_item">
<fo:block padding-top="0.45cm" font-size="9pt" padding-bottom="0cm">
<fo:inline>
Band Relief <xsl:value-of select="sum(cf_customer_invoice_line_item_band_relief/@amount)"/>
Regional Discount <xsl:value-of select="sum(additional_discount_1_percent)"/>
Price Discount <xsl:value-of select="sum(discount_percent)"/>
</fo:inline>
</fo:block>
</xsl:for-each>
</fo:block>
, который дает следующие выходные данные в формате PDF:
Данные
Облегчение полосы 302,5 Региональная скидка 50 Цена со скидкой 0
Band Relief 10 Региональная скидка 0 Цена со скидкой 0
Band Relief 0 Региональная скидка 0 Цена со скидкой 5
Фактические результаты:
$ band_relief (Doesn 'работа') $ Regional_discount 0 $ Price_Discount 0
Ожидается (так как скидка существует!)
$ band_relief 1 $ Regional_Discount 1 $ Price_discount 1
Я просто не ' Что не так с кодом, так как я могу извлекать данные построчно, но просто не могу их суммировать, так как не могу найти способ суммирования столбцов в переменной, которая работает.
Запись; поля могут быть процентами, валютой или нулевыми значениями.
Я также не совсем уверен, что означает @amount, но предположим, что он просто извлекает числовое значение - я только что скопировал его, фактически не зная, что он делает !
Буду признателен за любую дополнительную помощь.
Спасибо