forum.bitel.ru http://forum.bitel.ru/ |
|
SQL-запрос в счете http://forum.bitel.ru/viewtopic.php?f=14&t=6790 |
Страница 1 из 1 |
Автор: | stanislav [ 17 май 2012, 13:12 ] |
Заголовок сообщения: | SQL-запрос в счете |
Подскажите, пожалуйста, как вставить SQL-запрос в шаблон счета за услуги связи. Нашел в WIKI следующее описание: Объявляется расширение так: <xsl:stylesheet version="1.0" 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:sql="bitel.billing.server.util.exslt.SQLQuery"> ...... Используется так: <xsl:variable name="query" select="'SELECT id, title FROM contract'"/> <xsl:variable name="contracts" select="sql:select( $query )"/> <xsl:for-each select="$contracts/row"/> <xsl:value-of select="@id"/> <xsl:value-of select="@title"/> </xsl:for-each> Этот запрос выводит данные по всем абонентам. Как изменить его, чтобы выводилось только для абонента которому создается счет? Что-то вроде SELECT id, title FROM contract WHERE id=xxxx. Подскажите, что подставить вместо ****. |
Автор: | skyb [ 17 май 2012, 13:25 ] |
Заголовок сообщения: | Re: SQL-запрос в счете |
а какие поля нада вывести? |
Автор: | stanislav [ 17 май 2012, 13:47 ] |
Заголовок сообщения: | Re: SQL-запрос в счете |
Мне нужно выводить детализацию МГ переговоров. Этот запрос я взял для примера из описания. |
Автор: | skyb [ 18 май 2012, 05:09 ] |
Заголовок сообщения: | Re: SQL-запрос в счете |
нене, просто допустим есть поля которые можно получить не запросом, просто я не вкурсе как передать id в счет |
Автор: | stanislav [ 18 май 2012, 12:39 ] |
Заголовок сообщения: | Re: SQL-запрос в счете |
Мне нужно выводить поля: дата, номер абонента Б, длительность разговора. Все это находится в тблицах log_session_1_yyyymm. Если есть возможность извлечь эти данные без SQL-запроса, подскажите как. |
Автор: | skyb [ 18 май 2012, 12:43 ] |
Заголовок сообщения: | Re: SQL-запрос в счете |
а, не, неть кажись ![]() |
Автор: | focus [ 18 май 2012, 14:00 ] |
Заголовок сообщения: | Re: SQL-запрос в счете |
Проверить у себя не могу, пока предположения. XSL натравливается на XML, в котором информация о счете. В xml счета есть вот такая информация (это вкратце, всякие атрибуты выкинул, чтобы не загромождать) Код: <?xml version="1.0" encoding="windows-1251"?> <data secret="984BBF2483277311604E298D8DB8E12A" status="ok"> <inline_params/> <bill account> <sub_bill cid="3"/> <sub_bill cid="4"/> <sub_bill cid="5"/> <contract_data cid="1"> </bill account> </data> т.е добраться до идентификатора договора можно. Вопрос Вам нужен основной договор или субдоговоры ? Если основной то, вот так можно попробовать Код: <!-- Так объявляем для себя переменную, куда будет сохраняться значения cid --> <xsl:variable name="mycid" select="/data/bill/contract_data/@cid" /> <!-- Так передаем это значение в SQL запрос --> <xsl:variable name="query">select id, title from contract where id=<xsl:value-of select="$mycid"/></xsl:variable> <xsl:variable name="contracts" select="sql:select( $query )"/> <!-- Перебираем строки запроса --> <xsl:for-each select="$contracts/row"> <fo:block><xsl:value-of select="@id"/></fo:block> <fo:block><xsl:value-of select="@title"/></fo:block> </xsl:for-each> Если вам нужны данные из log_session_1_.... то запрос модифицируем Код: ......... <!-- Так передаем это значение в SQL запрос --> <xsl:variable name="query">select session_start, to_number_164, round_session_time from log_session_1_201204 where id=<xsl:value-of select="$mycid"/></xsl:variable> ......... Нужно будет ещё динамически формировать имя таблички в зависимости от года и месяца. |
Автор: | stanislav [ 18 май 2012, 15:04 ] |
Заголовок сообщения: | Re: SQL-запрос в счете |
Большое спасибо за помощь. Ваше предположение полностью оправдалось. Скажите еще, пожалуйста, как вы узнали, что переменная находится data/bill/contract_data/@cid |
Автор: | focus [ 21 май 2012, 07:41 ] |
Заголовок сообщения: | Re: SQL-запрос в счете |
Посмотрел сформированный xml счета. XML можно посмотреть из клиентской части. В 5.2 по крайней мере можно: Заходим в модуль Bill, переходим к сформированным счетам. Делаем поиск какого-нибудь счета или выводим все счета за месяц, правой кнопкой на конкретном счете - "Просмотр". Откроется закладка с просмотром документов. Там есть кнопочка XML. И видим XML документа, на основании которого формируется счет. Этот же xml есть в табличке bill_data_[mid]. |
Автор: | stanislav [ 22 май 2012, 12:09 ] |
Заголовок сообщения: | Re: SQL-запрос в счете |
У меня биллинг версии 4.6. Здесь тоже есть возможность просмотра XML. Запись имеет вид <contract_data cid="6421">. 6421 соответствует id договора в базе данных. Вопрос в том, как это переводится в переменную <xsl:variable name="mycid" select="/data/bill/contract_data/@cid"/>. И еще, в моем шаблоне уже есть переменная <xsl:variable name="cid" select="/data/bill/@cid"/>. Если в SQL использовать ее, получается тот же результат. Может быть и еще где-то есть. Наверное где-то есть описание этих переменных? |
Автор: | dimOn [ 22 май 2012, 12:58 ] |
Заголовок сообщения: | Re: SQL-запрос в счете |
Вы же сами сказали что видите XML, там явно видно структуру XML и что cid берётся по xpath: /data/bill/contract_data/@cid. Это никакая не переменная, какое ещё описание нужно? Структуры XML? Всё вроде из семантики понятно… |
Автор: | focus [ 23 май 2012, 14:01 ] |
Заголовок сообщения: | Re: SQL-запрос в счете |
Цитата: Вопрос в том, как это переводится в переменную <xsl:variable name="mycid" select="/data/bill/contract_data/@cid"/>. dimOn писал(а): cid берётся по xpath: /data/bill/contract_data/@cid. т.е из xml с помощью XPath берем значение атрибута и запоминаем в переменную mycid. Если в xsl уже есть переменная cid и "видна" (доступна) в том месте, где выполняется SQL запрос, то используем её. Согласен с dimOn, что вроде интуитивно понятно из названий что к чему. |
Автор: | stanislav [ 24 май 2012, 11:22 ] |
Заголовок сообщения: | Re: SQL-запрос в счете |
Вроде бы разобрался. Еще раз большое спасибо за помощь. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |