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, '&(1<<1) as org1', '')"/> <xsl:variable name="org1" select="sql:select( $queryorg1 )"/> <xsl:variable name="queryorg2" select="concat('select ', $gr, '&(1<<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 |
![]() |
Автор: | 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 - это неправильная маска? и что это вообще такое ![]() Код: 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/ |