Фильтр с несколькими параметрами в XSLT 2.0 - PullRequest
0 голосов
/ 15 декабря 2018

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

сумма (платежи, КОГДА ЛИБО запланированныеPaymentDate соответствует критериям X и Y, И ExecutionDate не существует ИЛИ ВыполнениеDate соответствует критериям X и Y)

Я думаюУ меня проблема с порядком операций в отношении скобок внутри фильтра.Вот фильтр, который у меня сейчас есть:

<xsl:value-of select="sum(payments[(((plannedPaymentDate/@year = $year and plannedPaymentDate/@month = $month) and not(executionDate/@date)) or (executionDate/@year = $year and executionDate/@month = $month))]/amount/co_costprice/@anglosaxon_amount)"/>

Мне известно о том, что он большой и неудобный, но у каждого элемента, над которым я зацикливаюсь, есть несколько платежей с потенциально несколькими датами, и я пытаюсьсуммировать все те платежи, которые соответствуют этому критерию.

Проблема в том, что у меня есть платеж за сентябрь 2019 года, который имеет запланированную дату, но также имеет дату исполнения, равную декабрю 2019 года, поэтому сентябрь должен бытьбыть пустым, но это не так, он показывает сумму платежа запланированной даты.

1 Ответ

0 голосов
/ 15 декабря 2018

Вы написали

<xsl:value-of select="sum(payments[
   ( ( ( plannedPaymentDate/@year = $year 
         and plannedPaymentDate/@month = $month
       ) 
       and not(executionDate/@date)
     ) 
     or ( executionDate/@year = $year 
          and executionDate/@month = $month
        )
  )
  ]/amount/co_costprice/@anglosaxon_amount)"/>

Вы не указали свой источник XML, но вы говорите, что есть «несколько дат оплаты», и это говорит мне о том, что в первых двух условиях выне указав, что оба условия должны удовлетворяться одним и тем же plannedPaymentDate.Поэтому я подозреваю, что это должно быть

<xsl:value-of select="sum(payments[
    ( plannedPaymentDate[@year = $year and @month = $month] 
       and not(executionDate/@date)
    ) 
    or executionDate[@year = $year and @month = $month]   
  ]/amount/co_costprice/@anglosaxon_amount)"/>

(мне нравится идея, что себестоимость рассчитывается в англосаксонской валюте ...)

...