forum.bitel.ru
http://forum.bitel.ru/

SQL запрос из xsl
http://forum.bitel.ru/viewtopic.php?f=14&t=9038
Страница 1 из 1

Автор:  filin [ 12 мар 2014, 21:24 ]
Заголовок сообщения:  SQL запрос из xsl

В общем задача следующая:
в шаблоне Bill_pdf.xsl хочу сделать запрос в mysql на предмет пренадлежнасти договора к определенной группе договоров.
Но на сколько я понял ответа от мускуля не получаю

Код:
<xsl:variable name="gr" select="contract_data/contract/@gr"/>
       
   <xsl:variable name="queryorg1" select="concat('select ', $gr, '&amp;(1&lt;&lt;1) as org1', '')"/>
   <xsl:variable name="org1" select="sql:select( $queryorg1 )"/>
                                                                         
   <xsl:variable name="queryorg2" select="concat('select ', $gr, '&amp;(1&lt;&lt;2) as org2', '')"/>
   <xsl:variable name="org2" select="sql:select( $queryorg2 )"/>


а дальше смотреть если в переменной org1 >0 то одни реквизиты
если в переменной org2>0 то другие

Но проблема что не получаю ответ от мускуля

помогите найти косяк

Bgbilling 6.0

Автор:  dimOn [ 13 мар 2014, 11:37 ]
Заголовок сообщения:  Re: SQL запрос из xsl

А что должен вернуть ваш запрос вида
Код:
select 666&(1<<1) as org1
select 666&(1<<2) as org2

итд?
Вы так пытаетесь на маски проверять просто что ли? Или что вообще?

Автор:  dimOn [ 13 мар 2014, 11:42 ]
Заголовок сообщения:  Re: SQL запрос из xsl

Или вам надо проверить бит в имеющейся маске (групп договоров)? Это можно сделать без SQL

Автор:  filin [ 13 мар 2014, 13:25 ]
Заголовок сообщения:  Re: SQL запрос из xsl

мне нужно проверить принадлежность данного договора к группе договоров.
Что бы вывести нужные реквизиты в счете.

Объясню по другому:
В биллинге есть договор но организаций несколько а файл Bill_pdf.xls один

Автор:  dimOn [ 13 мар 2014, 13:30 ]
Заголовок сообщения:  Re: SQL запрос из xsl

Ну, вообще, ваш способ похож на рабочий, сам запрос вернёт значение > 0 если бит установлен.
Только не очень понятно про xsl , будет ли работать и как уйдёт в SQL. Что значит "не получаю ответ от мускуля"? Не возвращает? Зависает? Падает? А другие запросы работают?
Плюс как варианты:
1. Проверяйте просто биты, без SQL.
2. Сделайте разные Bill_pdf.xls для разных организаций.

Автор:  filin [ 13 мар 2014, 14:07 ]
Заголовок сообщения:  Re: SQL запрос из xsl

а как это? " Сделайте разные Bill_pdf.xls для разных организаций."

Автор:  dimOn [ 13 мар 2014, 15:52 ]
Заголовок сообщения:  Re: SQL запрос из xsl

Ну так это же шаблоны бухгалтерии, которые заводятся в модуле и привязываются явным образом к каждому договору. Делаете разные шаблоны , в каждом свой xls указываете, и привязываете к каждой организации какие нужно.
http://bgbilling.ru/v6.0/doc/ch09s03s03.html

Автор:  lda [ 13 мар 2014, 15:57 ]
Заголовок сообщения:  Re: SQL запрос из xsl

У меня тоже несколько организаций.

Я написал java класс, который и вызываю в xsl.

Если интересно могу скинуть пример.

Автор:  dimOn [ 13 мар 2014, 16:02 ]
Заголовок сообщения:  Re: SQL запрос из xsl

Ну, если изменения в шаблонах небольшие то да, разводить несколько их не очень правильно. Корректнее внутри проверять что надо. Иначе обновление их будет адомъ.

Автор:  lda [ 13 мар 2014, 16:38 ]
Заголовок сообщения:  Re: SQL запрос из xsl

У меня это работает примерно так:
java:
Код:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ru.lda.billing.xlst;

import java.sql.Connection;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import ru.bitel.bgbilling.server.util.ServerUtils;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.XMLUtils;

/**
 *
 * @author lda
 */
public class InfoForBill {
    private Setup setup = Setup.getSetup();
    private Connection con;
    public Element getData(String cid_, String date){
        int cid = Integer.parseInt(cid_);
        Element result = null;
        con = this.setup.getDBConnectionFromPool();
        Document doc = XMLUtils.newDocument();
        try{
            result = doc.createElement("data");
            doc.appendChild(result);
           
           
            result.setAttribute( "param1", "value1");
            result.setAttribute( "param2", "value2");
           
           
        }catch (Exception e){   
            e.printStackTrace();
        }finally{
            ServerUtils.closeConnection(con);
        }
        return result;
    }   
   
}


xsl:
Код:
...
<xsl:stylesheet
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:fo="http://www.w3.org/1999/XSL/Format"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns:xalan="http://xml.apache.org/xalan"
   xmlns:st="bitel.billing.server.bill.bean.SummaToString"
   xmlns:counter="bitel.billing.server.util.exslt.Counter"   
        xmlns:contract_info="ru.lda.billing.xlst.InfoForBill"
   version="1.0">

        <xalan:component prefix="contract_info" functions="get">
            <xalan:script lang="javaclass" src="xalan://ru.lda.billing.xlst.InfoForBill"/>
        </xalan:component>
...

   <xsl:template match="bill">
            <xsl:variable name="CONTRACT_BILL_INFO" select="contract_info:getData( string(/data/bill/contract_data/@cid))"/>

...

<fo:block>param1 <xsl:value-of select="$CONTRACT_BILL_INFO/@param1"/></fo:block>
<fo:block>param2 <xsl:value-of select="$CONTRACT_BILL_INFO/@param2"/></fo:block>
...

Автор:  Akhmat [ 13 мар 2014, 16:42 ]
Заголовок сообщения:  Re: SQL запрос из xsl

dimOn писал(а):
Или вам надо проверить бит в имеющейся маске (групп договоров)? Это можно сделать без SQL

как?

Автор:  dimOn [ 13 мар 2014, 18:14 ]
Заголовок сообщения:  Re: SQL запрос из xsl

Akhmat писал(а):
dimOn писал(а):
Или вам надо проверить бит в имеющейся маске (групп договоров)? Это можно сделать без SQL

как?

Опа-опа, следим за руками, с помощью не шибко хитрого метода
Код:
(MASK div 2^BIT) mod 2 == 1

Автор:  Akhmat [ 13 мар 2014, 18:28 ]
Заголовок сообщения:  Re: SQL запрос из xsl

ооо, красота. вот она, формула, вот она родная. молодец! безо всяких там сдвигов херовых.

Автор:  dimOn [ 13 мар 2014, 18:37 ]
Заголовок сообщения:  Re: SQL запрос из xsl

:umnik:

Автор:  filin [ 14 мар 2014, 13:43 ]
Заголовок сообщения:  Re: SQL запрос из xsl

А можно пояснить что тут что
Код:
(MASK div 2^BIT) mod 2 == 1

Автор:  dimOn [ 14 мар 2014, 14:15 ]
Заголовок сообщения:  Re: SQL запрос из xsl

MASK - битовая маска групп договоров
div - деление нацело, в xslt операция присутствует
2^BIT - маска с одним битом, два в степени нужного номера бита. например, для группы 3 это будет 2^3 = 8
mod - остаток от деления, в xslt операция присутствует
1 - наименьшее натуральное число

Автор:  filin [ 17 мар 2014, 15:51 ]
Заголовок сообщения:  Re: SQL запрос из xsl

в xsl написал следующее:
Код:
<xsl:variable name="gr" select="contract_data/contract/@gr"/>

fo:block xsl:use-attribute-sets="text" space-after="0.3cm">
<------><------><------><------><------><xsl:if test="($gr div 2^7) mod 2 == 1">реквизиты организации с группой 7</xsl:if>
<------><------><------><------><------><xsl:if test="($gr div 2^8) mod 2 == 1">реквизиты организации с группой 8</xsl:if>
<------><------><------><------></fo:block>


В ответ получаю ошибку

Код:
Неизвестный ИД системы; Номер строки 260; Номер столбца 45; Ожидалось ), обнаружено: ^
(Неизвестное расположение или ошибка)java.lang.ClassCastException: org.apache.xpath.objects.XNumber cannot be cast to java.lang.String

Автор:  filin [ 17 мар 2014, 15:56 ]
Заголовок сообщения:  Re: SQL запрос из xsl

Если пишу так:
Код:

<xsl:variable name="gr" select="contract_data/contract/@gr"/>

fo:block xsl:use-attribute-sets="text" space-after="0.3cm">
<------><------><------><------><------><xsl:if test="($gr div 128) mod 2 == 1">реквизиты организации с группой 7</xsl:if>
<------><------><------><------><------><xsl:if test="($gr div 256) mod 2 == 1">реквизиты организации с группой 8</xsl:if>
<------><------><------><------></fo:block>


То получаю такую ошибку:
Код:
Неизвестный ИД системы; Номер строки 260; Номер столбца 45; Ожидался путь, однако был обнаружен следующий маркер:  =
(Неизвестное расположение или ошибка)java.lang.RuntimeException: Запись программиста в getNextStepPos: неизвестный stepType: -1

Автор:  dimOn [ 17 мар 2014, 16:51 ]
Заголовок сообщения:  Re: SQL запрос из xsl

а так попробуйте?
Код:
<xsl:if test="floor($gr div 128) mod 2 = 1">
...
</xsl:if>

Автор:  filin [ 17 мар 2014, 16:55 ]
Заголовок сообщения:  Re: SQL запрос из xsl

А если просто вывожу на экран переменную $gr то без разницы в какой группе он или без разницы какой договор всегда выводит число 17

Автор:  filin [ 17 мар 2014, 16:57 ]
Заголовок сообщения:  Re: SQL запрос из xsl

dimOn писал(а):
а так попробуйте?
Код:
<xsl:if test="floor($gr div 128) mod 2 = 1">
...
</xsl:if>


нет эффекта

Биллинг 6

Автор:  filin [ 17 мар 2014, 17:05 ]
Заголовок сообщения:  Re: SQL запрос из xsl

через phpmyadmin смотрю в таблицу contract в поле gr у одних договоров стоит 145 а у других 273

Автор:  filin [ 17 мар 2014, 17:16 ]
Заголовок сообщения:  Re: SQL запрос из xsl

Просматриваю через XML счет и вижу там:
Код:
<contract_data cid="22">
            <contract balance_rest="446.43" cid="22" comment="Абонент №23" date1="05.04.2013" date2="" fc="1" gr="17" limit="0.00" mode="1" param_group="2" pswd="453453334" status="0" status_date="05.04.2013" time="19.02.2014 19:36" title="113020">
                <tariff date1="01.05.2013" date2="" eid="0" emid="0" tariff_plan="Безлимитный доступ 4 мегабита" tpid="4"/>
            </contract>

Автор:  dimOn [ 17 мар 2014, 17:24 ]
Заголовок сообщения:  Re: SQL запрос из xsl

Так.. и в чём проблема именно? 17 - это неправильная маска?

и что это вообще такое :lupa:
Код:
java.lang.RuntimeException: Запись программиста в getNextStepPos: неизвестный stepType: -1

Автор:  dimOn [ 17 мар 2014, 17:25 ]
Заголовок сообщения:  Re: SQL запрос из xsl

знак равно один или два, проверьте

Автор:  filin [ 17 мар 2014, 21:55 ]
Заголовок сообщения:  Re: SQL запрос из xsl

теперь один знак равно, а нужно 2??

Автор:  filin [ 18 мар 2014, 17:11 ]
Заголовок сообщения:  Re: SQL запрос из xsl

Разобрался, дело было в расчете маски.
Теперь другая проблема.
Если генерю счет из билинга то, месяц на английском, а если скриптом с вики то наименование в счете в виде ????????
я так понимаю что то с локалями или с чем?
помогите плиз

Автор:  dimOn [ 19 мар 2014, 12:04 ]
Заголовок сообщения:  Re: SQL запрос из xsl

не с локалями, а с кодировками.
вернее месяц на английском если беспокоит - то это локаль в системе скорее всего неправильная, да.
если в русской локали вопросики - кодировка на каком-то этапе сломана.

Автор:  filin [ 20 мар 2014, 08:25 ]
Заголовок сообщения:  Re: SQL запрос из xsl

Трабл решен.

С кодировками все норм везде UTF-8

проблема была с локалями.
решил так:
export LC_ALL=ru_RU.UTF-8

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/