BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 28 апр 2024, 20:54

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 20 ] 
Автор Сообщение
СообщениеДобавлено: 22 дек 2016, 19:36 
Не в сети

Зарегистрирован: 02 авг 2016, 14:06
Сообщения: 47
Карма: 0
имеется скрипт следующего содержания:
Код:
package ru.stk;
 
import bitel.billing.common.TimeUtils;
import ru.bitel.bgbilling.kernel.script.server.dev.GlobalScriptBase;
import ru.bitel.bgbilling.server.util.ModuleSetup;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.sql.ConnectionSet;
import ru.bitel.common.Utils;
import ru.bitel.common.XMLUtils;
import ru.bitel.bgbilling.modules.npay.server.Calculator;
import bitel.billing.server.bill.bean.*;
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.contract.bean.ContractParameterManager;
 
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.math.*;
import java.sql.*;
import java.util.*;
import java.util.Date;
 
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
 
import org.apache.log4j.Logger;
 
public class BillGen
   extends GlobalScriptBase
{
   private static final Logger logger = Logger.getLogger( BillGen.class );
 
   @Override
   public void execute( Setup setup1, ConnectionSet connectionSet2 )
      throws Exception
   {
      log( "Инициализация" );
      //переменные
      int npayMid = 2;  //код модуля Npay
      String groups = "4"; //коды групп договоров через запятую
      Connection con = connectionSet2.getConnection(); //соединение с БД
      ContractParameterManager contractParameterManager = new ContractParameterManager(con);
      int billMid = 10; // код модуля Бухгалтерии
      int accountId = 1; // код счета банка
      String docType = "1"; // ID типа выставляемого документа
      int userId = 2; // ID пользователя, от имени которого выставляется счет
      //получаем список договоров, для которых будем выставлять счета
      log( "Получение списка договоров" );
      StringBuilder cids = new StringBuilder();
      StringBuilder query = new StringBuilder( "SELECT id FROM contract" );
      long groupMask = Utils.enumToMask( groups );
      if( groupMask > 0 )
      {
         query.append( " WHERE gr&?>0" );
      }
      PreparedStatement ps = con.prepareStatement( query.toString() );
      if( groupMask > 0 )
      {
         ps.setLong( 1, groupMask );
      }
      ResultSet rs = ps.executeQuery();
      while( rs.next() )
      {
         cids.append( rs.getInt( "id" ) + "," );
      }
      rs.close();
      ps.close();
      cids.deleteCharAt( cids.lastIndexOf( "," ) );
      log( "Получено " + cids.toString().split( "," ).length + " договоров, которым необходимо выставить авансовые счета" );
      //запускаем калькулятор по всем договорам, полученным выше
      log( "Запуск предначисления наработки для выбранных договоров" );
      Calendar dt = new GregorianCalendar();
      dt.add( Calendar.MONTH, 1 ); //нам нужно, чтобы считался будущий месяц
      dt.set( Calendar.DAY_OF_MONTH, dt.getActualMaximum( Calendar.DAY_OF_MONTH ) ); //выставляем последнее число будущего месяца
 
      Calculator calculator = new Calculator();
      calculator.setExecutingTime( dt );
      calculator.setPreCalc();
      calculator.initTask( setup1, 0, "mid=" + npayMid ); //здесь можно прописывать только конкретные услуги через service.set=<наборы через запятую>
      calculator.setCids( cids.toString() );
      calculator.startTask();
      //после обсчета получаем список наработок с разбивкой по договорам
      Map<Integer, BigDecimal> planAccountMap = new HashMap<Integer, BigDecimal>();
      if( !calculator.isCalcErrors() )
      {
         planAccountMap = calculator.getCostCache().getContractAccounts();
      }
      log( "Подсчет наработки закончен. Формирование документов" );
      //ок, теперь нужно формировать документы
      int mm = dt.get(Calendar.MONTH);
      int yy = dt.get(Calendar.YEAR);
      log("Дата формирования счетов: " + TimeUtils.format( new Date(), TimeUtils.DATE_FORMAT_PATTERN_DDMMYYYY_HHMMSS ) );
      log("Старт генерации документов за год=" + yy + "; месяц=" + mm + "; группы договоров=" + groups);
 
      BalanceUtils bu = new BalanceUtils( con );    
      ModuleSetup moduleSetup = setup1.getModuleSetup( billMid );
      TemplateBillManager man = new TemplateBillManager( moduleSetup, con, billMid, false );
      List<TemplateBill> templateBillList = man.getTemplatePayBillList( moduleSetup, yy, mm, groups, null, docType, null, false );
      log("Число сгенерированных документов = " + templateBillList.size());
      DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
      DocumentBuilder docBuilder = dFactory.newDocumentBuilder();
      Document doc = docBuilder.newDocument();
      Element bills = doc.createElement("bills");
      for( TemplateBill templateBill : templateBillList )
      {
         Element row = XMLUtils.createElement(bills, "bill");
         row.setAttribute( "rest", Utils.formatBigDecimalSumm( bu.getBalance( dt.getTime(), templateBill.getContractId() ) ) );
         row.setAttribute( "account_id",String.valueOf(accountId ));
         //Получаем наработку за будущий месяц по договору, если она есть
         BigDecimal summ = Utils.maskNull( planAccountMap.get( templateBill.getContractId() ) );
         fillBillData( row, templateBill, summ, contractParameterManager );
      }
      doc.appendChild(bills);
      ByteArrayOutputStream sos = new ByteArrayOutputStream();
      XMLUtils.serialize(bills, sos, "UTF-8");
      String xml = sos.toString();
      log("Полученная сгенерированная xml со счетами: " + xml );
      InputStream is = new ByteArrayInputStream( xml.getBytes( "cp1251" ) );
      BillManager pbm = new BillManager( setup1, con, billMid, moduleSetup );
      pbm.addBillDocs( userId, is, yy, mm, dt.getTime(), false );
   }
 
   private void fillBillData( Element row, TemplateBill templateBill, BigDecimal billSumm, ContractParameterManager contractParameterManager )
   {
      row.setAttribute( "id", String.valueOf( templateBill.getContractDocTypeId() ) );
      row.setAttribute( "type", String.valueOf( templateBill.getDocTypeId() ) );
      row.setAttribute( "cid", String.valueOf( templateBill.getContractId() ) );
 
      row.setAttribute( "contract", templateBill.getContractTitle() );
      row.setAttribute( "contract_comment", templateBill.getContractComment() );
      row.setAttribute( "innbuyer", contractParameterManager.getStringParam( templateBill.getContractId(),60 ) );
      
      for( PositionValue value : templateBill.getPositionList() )
      {
         value.setSumma( billSumm );
         value.setSumScaled( billSumm );
         value.setSumUnscaled( billSumm );
         Element posEl = XMLUtils.createElement( row, "pos" );
         value.toElement( posEl );
 
         Position pos = value.getPosition();
         posEl.setAttribute( "insum", Utils.booleanToStringInt( pos.isInSum() ) );
         posEl.setAttribute( "awlz", Utils.booleanToStringInt( pos.isAddWhenLessZero() ) );
      }
      //предполагается, что на догоовре одна абонка. в итоге получим лишь одну позицию
      row.setAttribute( "summ", Utils.formatBigDecimalSumm( billSumm ) );
   }

   /**
    * Вывод сообщений и в лог-файл и в клиентский лог.
    * @param msg текст сообщения.
    */
   private void log( String msg )
   {
      print( msg );
      logger.info( msg );
   }
}


результат выполнения скрипта:
Получено 39 договоров, которым необходимо выставить авансовые счета
Запуск предначисления наработки для выбранных договоров
Подсчет наработки закончен.
Формирование документов
Дата формирования счетов: 22.12.2016 16:12:15
Старт генерации документов за год=2017; месяц=0; группы договоров=4
Число сгенерированных документов = 1
Полученная сгенерированная xml со счетами: <?xml version="1.0" encoding="UTF-8"?><bills><bill account_id="1" cid="256" contract="216/ЙШЛ/2015" contract_comment="ООО "Рога и копыта"" id="1" innbuyer="1215202369" rest="0.00" summ="1000.00" type="1"><pos awlz="0" insum="1" name="Предоставление услуг доступа к сети Internet по договору за февраль" position_id="1" qtynums="0" qtynumsRnd="4" quantity="1" sumUnscaled="1000.00000" summ="1000.00" unit="шт." unitCode="796"/></bill></bills>

Кусок кода счета xsl шаблона:
Код:
<fo:table-row>
   <fo:table-cell>
      <fo:block xsl:use-attribute-sets="text">
         Покупатель:
      </fo:block>
   </fo:table-cell>
   <fo:table-cell>
      <fo:block xsl:use-attribute-sets="text_bold">
         <xsl:value-of select="@contract_comment" />,&nbsp;
         <xsl:value-of select="@cid"/>,&nbsp;
      </fo:block>
   </fo:table-cell>
</fo:table-row>


После выполнения скрипта просматриваю готовый счет. В счет не добавляется комментарий договора, хотя id договора вставляется туда без проблем.

Также возникает вопрос с кодировкой. xml имеет кодировку utf-8, шаблон счета также имеет кодировку utf-8. А в таблице русские буквы не отображаются.

В чем может быть проблема?


Вложения:
счет.jpg
счет.jpg [ 71.56 КБ | Просмотров: 8995 ]

_________________
Клиент: вер. 7.0.837 / 21.09.2016 19:51:30
os: Windows 8.1; java: Java HotSpot(TM) Client VM, v.1.8.0_25
Сервер: вер. 7.0.1113 / 22.09.2016 19:15:59
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_101
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 дек 2016, 09:37 
Не в сети
Клиент

Зарегистрирован: 09 фев 2011, 15:28
Сообщения: 1092
Карма: 135
В xml нужно спецсимволы экранировать html-ными кодами, т.е. должно быть contract_comment="ООО &quot;Рога и копыта&quot;"


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 дек 2016, 11:58 
Не в сети

Зарегистрирован: 02 авг 2016, 14:06
Сообщения: 47
Карма: 0
barguzin2 писал(а):
В xml нужно спецсимволы экранировать html-ными кодами, т.е. должно быть contract_comment="ООО &quot;Рога и копыта&quot;"

Это, конечно, да. Я пробовал указывать и без кавычек, contract_comment="ООО Рога и копыта". Так например. Все равно эффект нулевой.
Код:
<fo:table-row>
   <fo:table-cell>
      <fo:block xsl:use-attribute-sets="text">
         Покупатель:
      </fo:block>
   </fo:table-cell>
   <fo:table-cell>
      <fo:block xsl:use-attribute-sets="text_bold">
         <xsl:value-of select="@contract_comment" />,&nbsp;
         <xsl:value-of select="@cid"/>,&nbsp;
         [b]<xsl:value-of select="@innbuyer"/>,&nbsp;[/b]
      </fo:block>
   </fo:table-cell>
</fo:table-row>

Если в шаблон добавить ИНН организации, то он также не вставляется в счет, хотя там никаких кавычек нет.

_________________
Клиент: вер. 7.0.837 / 21.09.2016 19:51:30
os: Windows 8.1; java: Java HotSpot(TM) Client VM, v.1.8.0_25
Сервер: вер. 7.0.1113 / 22.09.2016 19:15:59
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_101


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 дек 2016, 12:19 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
Код:
<fo:block xsl:use-attribute-sets="text_bold" start-indent="15cm" space-before="0cm"><xsl:value-of select="/data/bill/contract_data/contract/@comment"/></fo:block>

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 дек 2016, 12:37 
Не в сети
Аватара пользователя

Зарегистрирован: 27 янв 2010, 16:12
Сообщения: 941
Откуда: Уфа
Карма: 124
Для полной картины приложите всю xml и xsl.

_________________
С уважением, Гареев Артур. Вежливый разработчик ООО "Бител".


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 дек 2016, 13:10 
Не в сети

Зарегистрирован: 02 авг 2016, 14:06
Сообщения: 47
Карма: 0
Artur писал(а):
Для полной картины приложите всю xml и xsl.


Код скрипта:
Код:
package ru.stk;
 
import bitel.billing.common.TimeUtils;
import ru.bitel.bgbilling.kernel.script.server.dev.GlobalScriptBase;
import ru.bitel.bgbilling.server.util.ModuleSetup;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.sql.ConnectionSet;
import ru.bitel.common.Utils;
import ru.bitel.common.XMLUtils;
import ru.bitel.bgbilling.modules.npay.server.Calculator;
import bitel.billing.server.bill.bean.*;
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.contract.bean.ContractParameterManager;
 
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.math.*;
import java.sql.*;
import java.util.*;
import java.util.Date;
 
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
 
import org.apache.log4j.Logger;
 
public class BillGen
   extends GlobalScriptBase
{
   private static final Logger logger = Logger.getLogger( BillGen.class );
 
   @Override
   public void execute( Setup setup1, ConnectionSet connectionSet2 )
      throws Exception
   {
      log( "Инициализация" );
      //переменные
      int npayMid = 2;  //код модуля Npay
      String groups = "4"; //коды групп договоров через запятую
      Connection con = connectionSet2.getConnection(); //соединение с БД
      ContractParameterManager contractParameterManager = new ContractParameterManager(con);
      int billMid = 10; // код модуля Бухгалтерии
      int accountId = 1; // код счета банка
      String docType = "1"; // ID типа выставляемого документа
      int userId = 2; // ID пользователя, от имени которого выставляется счет
      //получаем список договоров, для которых будем выставлять счета
      log( "Получение списка договоров" );
      StringBuilder cids = new StringBuilder();
      StringBuilder query = new StringBuilder( "SELECT id FROM contract" );
      long groupMask = Utils.enumToMask( groups );
      if( groupMask > 0 )
      {
         query.append( " WHERE gr&?>0" );
      }
      PreparedStatement ps = con.prepareStatement( query.toString() );
      if( groupMask > 0 )
      {
         ps.setLong( 1, groupMask );
      }
      ResultSet rs = ps.executeQuery();
      while( rs.next() )
      {
         cids.append( rs.getInt( "id" ) + "," );
      }
      rs.close();
      ps.close();
      cids.deleteCharAt( cids.lastIndexOf( "," ) );
      log( "Получено " + cids.toString().split( "," ).length + " договоров, которым необходимо выставить авансовые счета" );
      //запускаем калькулятор по всем договорам, полученным выше
      log( "Запуск предначисления наработки для выбранных договоров" );
      Calendar dt = new GregorianCalendar();
      dt.add( Calendar.MONTH, 1 ); //нам нужно, чтобы считался будущий месяц
      dt.set( Calendar.DAY_OF_MONTH, dt.getActualMaximum( Calendar.DAY_OF_MONTH ) ); //выставляем последнее число будущего месяца
 
      Calculator calculator = new Calculator();
      calculator.setExecutingTime( dt );
      calculator.setPreCalc();
      calculator.initTask( setup1, 0, "mid=" + npayMid ); //здесь можно прописывать только конкретные услуги через service.set=<наборы через запятую>
      calculator.setCids( cids.toString() );
      calculator.startTask();
      //после обсчета получаем список наработок с разбивкой по договорам
      Map<Integer, BigDecimal> planAccountMap = new HashMap<Integer, BigDecimal>();
      if( !calculator.isCalcErrors() )
      {
         planAccountMap = calculator.getCostCache().getContractAccounts();
      }
      log( "Подсчет наработки закончен. Формирование документов" );
      //ок, теперь нужно формировать документы
      int mm = dt.get(Calendar.MONTH);
      int yy = dt.get(Calendar.YEAR);
      log("Дата формирования счетов: " + TimeUtils.format( new Date(), TimeUtils.DATE_FORMAT_PATTERN_DDMMYYYY_HHMMSS ) );
      log("Старт генерации документов за год=" + yy + "; месяц=" + mm + "; группы договоров=" + groups);
 
      BalanceUtils bu = new BalanceUtils( con );    
      ModuleSetup moduleSetup = setup1.getModuleSetup( billMid );
      TemplateBillManager man = new TemplateBillManager( moduleSetup, con, billMid, false );
      List<TemplateBill> templateBillList = man.getTemplatePayBillList( moduleSetup, yy, mm, groups, null, docType, null, false );
      log("Число сгенерированных документов = " + templateBillList.size());
      DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
      DocumentBuilder docBuilder = dFactory.newDocumentBuilder();
      Document doc = docBuilder.newDocument();
      Element bills = doc.createElement("bills");
      for( TemplateBill templateBill : templateBillList )
      {
         Element row = XMLUtils.createElement(bills, "bill");
         row.setAttribute( "rest", Utils.formatBigDecimalSumm( bu.getBalance( dt.getTime(), templateBill.getContractId() ) ) );
         row.setAttribute( "account_id",String.valueOf(accountId ));
         //Получаем наработку за будущий месяц по договору, если она есть
         BigDecimal summ = Utils.maskNull( planAccountMap.get( templateBill.getContractId() ) );
         fillBillData( row, templateBill, summ, contractParameterManager );
      }
      doc.appendChild(bills);
      ByteArrayOutputStream sos = new ByteArrayOutputStream();
      XMLUtils.serialize(bills, sos, "UTF-8");
      String xml = sos.toString();
      log("Полученная сгенерированная xml со счетами: " + xml );
      InputStream is = new ByteArrayInputStream( xml.getBytes( "cp1251" ) );
      BillManager pbm = new BillManager( setup1, con, billMid, moduleSetup );
      pbm.addBillDocs( userId, is, yy, mm, dt.getTime(), false );
   }
 
   private void fillBillData( Element row, TemplateBill templateBill, BigDecimal billSumm, ContractParameterManager contractParameterManager )
   {
      row.setAttribute( "id", String.valueOf( templateBill.getContractDocTypeId() ) );
      row.setAttribute( "type", String.valueOf( templateBill.getDocTypeId() ) );
      row.setAttribute( "cid", String.valueOf( templateBill.getContractId() ) );
 
      row.setAttribute( "contract", templateBill.getContractTitle() );
      row.setAttribute( "contract_comment", templateBill.getContractComment() );
      
      row.setAttribute( "innbuyer", contractParameterManager.getStringParam( templateBill.getContractId(),60 ) );
      
      for( PositionValue value : templateBill.getPositionList() )
      {
         value.setSumma( billSumm );
         value.setSumScaled( billSumm );
         value.setSumUnscaled( billSumm );
         Element posEl = XMLUtils.createElement( row, "pos" );
         value.toElement( posEl );
 
         Position pos = value.getPosition();
         posEl.setAttribute( "insum", Utils.booleanToStringInt( pos.isInSum() ) );
         posEl.setAttribute( "awlz", Utils.booleanToStringInt( pos.isAddWhenLessZero() ) );
      }
      //предполагается, что на догоовре одна абонка. в итоге получим лишь одну позицию
      row.setAttribute( "summ", Utils.formatBigDecimalSumm( billSumm ) );
   }

   /**
    * Вывод сообщений и в лог-файл и в клиентский лог.
    * @param msg текст сообщения.
    */
   private void log( String msg )
   {
      print( msg );
      logger.info( msg );
   }
}


Код xml:
Код:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet  [
   <!ENTITY nbsp   "&#160;">
   <!ENTITY copy   "&#169;">
   <!ENTITY reg    "&#174;">
   <!ENTITY trade  "&#8482;">
   <!ENTITY mdash  "&#8212;">
   <!ENTITY ldquo  "&#8220;">
   <!ENTITY rdquo  "&#8221;">
   <!ENTITY pound  "&#163;">
   <!ENTITY yen    "&#165;">
   <!ENTITY euro   "&#8364;">
]>

<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"   
   version="1.0">
   
   <xalan:component prefix="st" functions="summaToString">
             <xalan:script lang="javaclass" src="xalan://bitel.billing.server.bill.bean.SummaToString"/>
     </xalan:component>
   <xalan:component prefix="counter" functions="add set get">
             <xalan:script lang="javaclass" src="xalan://bitel.billing.server.util.exslt.Counter"/>
     </xalan:component>

   <xsl:output encoding="UTF-8" method='xml' indent='yes' />

   <!-- Список атрибутов:
      
   <bill
      contract         Договор
      bill_number         Номер счета
      date            Дата выписки
      payer            Плательщик
      
      
      total_sum         Итого: Сумма
      total_NDS         Итого: НДС
      total_sum_withNDS   Итого: Всего с НДС
      total_to_pay         Итого к оплате
      
      purpose            Назаначение
   >
         <pay
         //\//\//\//\//\//\//\//\//\//
            pos      Товар
            unit      Ед.
            amount      Кол-во
            price      Цена
            sum         Сумма
            NDS         НДС
            sumWithNDS   Всего с НДС
         //\//\//\//\//\//\//\//\//\//
         />
         
   </bill>
   -->

   <!-- РЕКВИЗИТЫ ПРЕДПРИЯТИЯ -->   
   <xsl:variable name="postal_address" select="'125190, Москва г, Ленинградский пр-т, дом №80, корпус б, оф.11, тел.: 8(8362) 34-10-10, факс: 8(8362) 34-10-09'" />
   <xsl:variable name="INN" select="'ИНН 7705330160'" />
   <xsl:variable name="KPP" select="'КПП 121502001'" />
   <xsl:variable name="title" select="'Филиал ООО &quot;РОЙЛКОМ&quot; в городе Йошкар-Оле'" />
   <xsl:variable name="bank" select="'ФИЛИАЛ N6318 ВТБ 24 (ПАО) Г. САМАРА'" />
   <!-- РЕКВИЗИТЫ ПРЕДПРИЯТИЯ -->

   <!-- ТЕКСТ В ВЕРХУ СЧЕТА -->
   <xsl:variable name="text_on_top" select="'Внимание! Оплата данного счета означает согласие с условиями поставки товара. Уведомление об оплате обязательно, в противном случае не гарантируется наличие товара на складе. Товар отпускается по факту прихода денег на р/с Поставщика, самовывозом, при наличии доверенности и паспорта.'" />
   <!-- ТЕКСТ В ВЕРХУ СЧЕТА -->

   <xsl:variable name="currency" select="'рубль'" />

   <xsl:attribute-set name="text">
      <xsl:attribute name="text-align">left</xsl:attribute>
      <xsl:attribute name="font-family">arial</xsl:attribute>
      <xsl:attribute name="font-size">10pt</xsl:attribute>
      <xsl:attribute name="start-indent">0.1cm</xsl:attribute>
      <xsl:attribute name="end-indent">0.1cm</xsl:attribute>
   </xsl:attribute-set>
   
   <xsl:attribute-set name="text_center">
      <xsl:attribute name="text-align">center</xsl:attribute>
      <xsl:attribute name="font-family">arial</xsl:attribute>
      <xsl:attribute name="font-size">9pt</xsl:attribute>
      <xsl:attribute name="start-indent">0.1cm</xsl:attribute>
      <xsl:attribute name="end-indent">0.1cm</xsl:attribute>
   </xsl:attribute-set>
   
   <xsl:attribute-set name="text_ban">
      <xsl:attribute name="text-align">right</xsl:attribute>
      <xsl:attribute name="font-family">arial</xsl:attribute>
      <xsl:attribute name="font-size">6pt</xsl:attribute>
      <xsl:attribute name="start-indent">0.1cm</xsl:attribute>
      <xsl:attribute name="end-indent">0.1cm</xsl:attribute>
   </xsl:attribute-set>

   <xsl:attribute-set name="text_bold">
      <xsl:attribute name="text-align">left</xsl:attribute>
      <xsl:attribute name="font-family">arial</xsl:attribute>
      <xsl:attribute name="font-weight">bold</xsl:attribute>
      <xsl:attribute name="font-size">10pt</xsl:attribute>
      <xsl:attribute name="start-indent">0.1cm</xsl:attribute>
      <xsl:attribute name="end-indent">0.1cm</xsl:attribute>
   </xsl:attribute-set>

   <xsl:attribute-set name="table_text_left">
      <xsl:attribute name="text-align">left</xsl:attribute>
      <xsl:attribute name="font-family">arial</xsl:attribute>
      <xsl:attribute name="font-size">8pt</xsl:attribute>
      <xsl:attribute name="start-indent">0.2cm</xsl:attribute>
      <xsl:attribute name="end-indent">0.2cm</xsl:attribute>
      <xsl:attribute name="space-before">0.1cm</xsl:attribute>
   </xsl:attribute-set>
   
   <xsl:attribute-set name="table_text_right">
      <xsl:attribute name="text-align">right</xsl:attribute>
      <xsl:attribute name="font-family">arial</xsl:attribute>
      <xsl:attribute name="font-size">8pt</xsl:attribute>
      <xsl:attribute name="start-indent">0.2cm</xsl:attribute>
      <xsl:attribute name="end-indent">0.2cm</xsl:attribute>
      <xsl:attribute name="space-before">0.1cm</xsl:attribute>
   </xsl:attribute-set>

   <xsl:attribute-set name="table_text_center">
      <xsl:attribute name="text-align">center</xsl:attribute>
      <xsl:attribute name="font-family">arial</xsl:attribute>
      <xsl:attribute name="font-size">8pt</xsl:attribute>
      <xsl:attribute name="start-indent">0.2cm</xsl:attribute>
      <xsl:attribute name="end-indent">0.2cm</xsl:attribute>
      <xsl:attribute name="space-before">0.1cm</xsl:attribute>
   </xsl:attribute-set>
   
   <xsl:attribute-set name="table_text10_left">
      <xsl:attribute name="text-align">left</xsl:attribute>
      <xsl:attribute name="font-family">arial</xsl:attribute>
      <xsl:attribute name="font-size">10pt</xsl:attribute>
      <xsl:attribute name="start-indent">0.2cm</xsl:attribute>
      <xsl:attribute name="end-indent">0.2cm</xsl:attribute>
      <xsl:attribute name="space-before">0.1cm</xsl:attribute>
   </xsl:attribute-set>

   <xsl:attribute-set name="table_text10_center">
      <xsl:attribute name="text-align">center</xsl:attribute>
      <xsl:attribute name="font-family">arial</xsl:attribute>
      <xsl:attribute name="font-size">10pt</xsl:attribute>
      <xsl:attribute name="start-indent">0.2cm</xsl:attribute>
      <xsl:attribute name="end-indent">0.2cm</xsl:attribute>
      <xsl:attribute name="space-before">0.1cm</xsl:attribute>
   </xsl:attribute-set>

   <xsl:attribute-set name="text_title">
      <xsl:attribute name="text-align">center</xsl:attribute>
      <xsl:attribute name="font-family">arial</xsl:attribute>
      <xsl:attribute name="font-size">14pt</xsl:attribute>
      <xsl:attribute name="font-weight">bold</xsl:attribute>
      <xsl:attribute name="start-indent">0.1cm</xsl:attribute>
      <xsl:attribute name="end-indent">0.1cm</xsl:attribute>
      <xsl:attribute name="space-before">0.3cm</xsl:attribute>
      <xsl:attribute name="space-after">0.2cm</xsl:attribute>
   </xsl:attribute-set>
   
   <xsl:attribute-set name="text_italic">
      <xsl:attribute name="text-align">left</xsl:attribute>
      <xsl:attribute name="font-family">arial</xsl:attribute>
      <xsl:attribute name="font-size">8pt</xsl:attribute>
      <xsl:attribute name="start-indent">0.1cm</xsl:attribute>
      <xsl:attribute name="end-indent">0.1cm</xsl:attribute>
   </xsl:attribute-set>
   
   <xsl:attribute-set name="table_text6_left">
      <xsl:attribute name="text-align">left</xsl:attribute>
      <xsl:attribute name="font-family">arial</xsl:attribute>
      <xsl:attribute name="font-size">7pt</xsl:attribute>
      <xsl:attribute name="start-indent">0.1cm</xsl:attribute>
      <xsl:attribute name="end-indent">0.1cm</xsl:attribute>
      <xsl:attribute name="space-before">0.1cm</xsl:attribute>
   </xsl:attribute-set>
   
   <xsl:attribute-set name="table_text6_right">
      <xsl:attribute name="text-align">right</xsl:attribute>
      <xsl:attribute name="font-family">arial</xsl:attribute>
      <xsl:attribute name="font-size">7pt</xsl:attribute>
      <xsl:attribute name="start-indent">0.1cm</xsl:attribute>
      <xsl:attribute name="end-indent">0.1cm</xsl:attribute>
      <xsl:attribute name="space-before">0.1cm</xsl:attribute>
   </xsl:attribute-set>

   <xsl:attribute-set name="table_text6_center">
      <xsl:attribute name="text-align">center</xsl:attribute>
      <xsl:attribute name="font-family">arial</xsl:attribute>
      <xsl:attribute name="font-size">7pt</xsl:attribute>
      <xsl:attribute name="start-indent">0.1cm</xsl:attribute>
      <xsl:attribute name="end-indent">0.1cm</xsl:attribute>
      <xsl:attribute name="space-before">0.1cm</xsl:attribute>
   </xsl:attribute-set>
      
   

   <xsl:attribute-set name="cell_border">
      <xsl:attribute name="border-width">0.7pt</xsl:attribute>
      <xsl:attribute name="border-top-style">solid</xsl:attribute>
      <xsl:attribute name="border-bottom-style">solid</xsl:attribute>
      <xsl:attribute name="border-left-style">solid</xsl:attribute>
      <xsl:attribute name="border-right-style">solid</xsl:attribute>
   </xsl:attribute-set>

   <xsl:attribute-set name="cell_border_top">
      <xsl:attribute name="border-width">0.7pt</xsl:attribute>
      <xsl:attribute name="border-top-style">solid</xsl:attribute>
      <xsl:attribute name="border-left-style">solid</xsl:attribute>
      <xsl:attribute name="border-right-style">solid</xsl:attribute>
   </xsl:attribute-set>

   <xsl:attribute-set name="cell_border_bottom">
      <xsl:attribute name="border-width">0.7pt</xsl:attribute>
      <xsl:attribute name="border-bottom-style">solid</xsl:attribute>
      <xsl:attribute name="border-left-style">solid</xsl:attribute>
      <xsl:attribute name="border-right-style">solid</xsl:attribute>
   </xsl:attribute-set>

   <xsl:attribute-set name="cell_border_no">
      <xsl:attribute name="border-width">0.7pt</xsl:attribute>
      <xsl:attribute name="border-left-style">solid</xsl:attribute>
      <xsl:attribute name="border-right-style">solid</xsl:attribute>
   </xsl:attribute-set>

   <xsl:attribute-set name="cell_border_all">
      <xsl:attribute name="border-width">0.7pt</xsl:attribute>
      <xsl:attribute name="border-top-style">solid</xsl:attribute>
      <xsl:attribute name="border-bottom-style">solid</xsl:attribute>
      <xsl:attribute name="border-left-style">solid</xsl:attribute>
      <xsl:attribute name="border-right-style">solid</xsl:attribute>
   </xsl:attribute-set>

   <xsl:attribute-set name="cell_border_top_bold">
      <xsl:attribute name="border-width">2pt</xsl:attribute>
      <xsl:attribute name="border-top-style">solid</xsl:attribute>
   </xsl:attribute-set>


   <xsl:template match="data">
      <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
         <xsl:apply-templates select="bill" />
      </fo:root>
   </xsl:template>
   
   <xsl:template match="bill">
      <xsl:variable name="nds_rate" select="number(params/@nds)"/>      
      <xsl:value-of select="counter:set('total_nds', '0.0')"/>

      <fo:layout-master-set>
         <fo:simple-page-master margin-right="1cm" margin-left="2cm"
            margin-bottom="2cm" margin-top="0.5cm" page-width="21cm"
            page-height="29.7cm" master-name="first">
            <fo:region-body margin-top="1cm" margin-bottom="1.5cm" />
            <fo:region-before extent="1cm" />
            <fo:region-after extent="1.5cm" />
         </fo:simple-page-master>
      </fo:layout-master-set>

      <xsl:call-template name="calcNDS">
         <xsl:with-param name="nds_rate" select="$nds_rate"/>
      </xsl:call-template>
   
      <fo:page-sequence master-reference="first">   
         <fo:flow flow-name="xsl-region-body">
         
            <!-- заголовок -->
            <fo:block xsl:use-attribute-sets="table_text_center">
                <xsl:value-of select="$text_on_top"/>
            </fo:block>
            <fo:block>
               &nbsp;
            </fo:block>
            <!-- заголовок -->
      
      
            <!-- начало таблицы номеров счета, БИК etc. -->
            <fo:table table-layout="fixed">
               <fo:table-column column-width="5cm" />
               <fo:table-column column-width="4.5cm" />
               <fo:table-column column-width="1.7cm" />
               <fo:table-column column-width="5.8cm" />
      
      
               <fo:table-body>
                  <!-- первая строка -->
                  <fo:table-row>
                     <fo:table-cell xsl:use-attribute-sets="cell_border_top" number-columns-spanned="2">
                        <fo:block xsl:use-attribute-sets="table_text10_left">
                           <xsl:value-of select="$bank" />
                        </fo:block>
                     </fo:table-cell>
      
                     <fo:table-cell xsl:use-attribute-sets="cell_border_all">
                        <fo:block xsl:use-attribute-sets="table_text10_left">
                           БИК
                        </fo:block>
                     </fo:table-cell>
      
                     <fo:table-cell xsl:use-attribute-sets="cell_border_top">
                        <fo:block xsl:use-attribute-sets="table_text10_left">
                           <xsl:value-of select="@bik" />
                        </fo:block>
                     </fo:table-cell>
                  </fo:table-row>
      
                  <fo:table-row>
                     <fo:table-cell xsl:use-attribute-sets="cell_border_no" number-columns-spanned="2" display-align="center">
                        <fo:block/>
                     </fo:table-cell>
                     
                     <fo:table-cell xsl:use-attribute-sets="cell_border_top">
                        <fo:block xsl:use-attribute-sets="table_text10_left">
                           Сч. №
                        </fo:block>
                     </fo:table-cell>
                     
                     <fo:table-cell xsl:use-attribute-sets="cell_border_no">
                        <fo:block xsl:use-attribute-sets="table_text10_left">
                           <xsl:value-of select="@corr_account" />
                        </fo:block>
                     </fo:table-cell>
                  </fo:table-row>
      
                  <fo:table-row>
                     <fo:table-cell xsl:use-attribute-sets="cell_border_bottom" number-columns-spanned="2">
                        <fo:block xsl:use-attribute-sets="table_text_left">
                           Банк получателя
                        </fo:block>
                     </fo:table-cell>
      
                     <fo:table-cell xsl:use-attribute-sets="cell_border_bottom" display-align="center">
                        <fo:block/>
                     </fo:table-cell>
      
                     <fo:table-cell xsl:use-attribute-sets="cell_border_bottom">
                        <fo:block/>
                     </fo:table-cell>
                  </fo:table-row>
   
   
               <!-- вторая строка -->
                  <fo:table-row>
                     <fo:table-cell xsl:use-attribute-sets="cell_border_all">
                        <fo:block xsl:use-attribute-sets="table_text10_left">
                           <xsl:value-of select="$INN" />
                        </fo:block>
                     </fo:table-cell>
      
                     <fo:table-cell xsl:use-attribute-sets="cell_border_all">
                        <fo:block xsl:use-attribute-sets="table_text10_left">
                           <xsl:value-of select="$KPP" />
                        </fo:block>
                     </fo:table-cell>
      
                     <fo:table-cell xsl:use-attribute-sets="cell_border_top">
                        <fo:block xsl:use-attribute-sets="table_text10_left">
                           Сч №
                        </fo:block>
                     </fo:table-cell>
                     
                     <fo:table-cell xsl:use-attribute-sets="cell_border_top">
                        <fo:block xsl:use-attribute-sets="table_text10_left">
                           <xsl:value-of select="@account" />
                        </fo:block>
                     </fo:table-cell>
                     
                  </fo:table-row>
      
                  <fo:table-row>
                     <fo:table-cell xsl:use-attribute-sets="cell_border_top" number-columns-spanned="2">
                        <fo:block xsl:use-attribute-sets="table_text10_left">
                           <xsl:value-of select="$title" />
                        </fo:block>
                     </fo:table-cell>
      
                     <fo:table-cell
                        xsl:use-attribute-sets="cell_border_no">
                        <fo:block/>
                     </fo:table-cell>
      
                     <fo:table-cell
                        xsl:use-attribute-sets="cell_border_no">
                        <fo:block/>
                     </fo:table-cell>
                  </fo:table-row>
                  
                  <fo:table-row>
                     <fo:table-cell xsl:use-attribute-sets="cell_border_no" number-columns-spanned="2">
                        <fo:block>
                           &nbsp;
                        </fo:block>
                     </fo:table-cell>
      
                     <fo:table-cell
                        xsl:use-attribute-sets="cell_border_no">
                        <fo:block/>
                     </fo:table-cell>
      
                     <fo:table-cell
                        xsl:use-attribute-sets="cell_border_no">
                        <fo:block/>
                     </fo:table-cell>
                  </fo:table-row>
                  
                  <fo:table-row>
                     <fo:table-cell xsl:use-attribute-sets="cell_border_bottom" number-columns-spanned="2">
                        <fo:block xsl:use-attribute-sets="table_text_left">
                           Получатель
                        </fo:block>
                     </fo:table-cell>
      
                     <fo:table-cell xsl:use-attribute-sets="cell_border_bottom">
                        <fo:block/>
                     </fo:table-cell>
      
                     <fo:table-cell xsl:use-attribute-sets="cell_border_bottom">
                        <fo:block/>
                     </fo:table-cell>
                  </fo:table-row>
               </fo:table-body>
            </fo:table>
            <!-- конец таблицы номеров счета, БИК etc. -->
      
      
            <fo:block xsl:use-attribute-sets="text_title" text-align="left">
               Счет на оплату № <xsl:value-of select="@bill_number" /> от <xsl:value-of select="@date" /> г.
            </fo:block>
            
            <fo:table table-layout="fixed">
               <fo:table-column column-width="17cm" />
               <fo:table-body>
                  <fo:table-row>
                     <fo:table-cell xsl:use-attribute-sets="cell_border_top_bold">
                        <fo:block>&nbsp;
                        </fo:block>
                     </fo:table-cell>
                  </fo:table-row>
               </fo:table-body>
            </fo:table>

            <fo:table table-layout="fixed">
               <fo:table-column column-width="2.2cm" />
               <fo:table-column column-width="14.8cm" />
               <fo:table-body>
                  <fo:table-row>
                     <fo:table-cell>
                        <fo:block xsl:use-attribute-sets="text">
                           Поставщик:
                        </fo:block>
                     </fo:table-cell>
                     <fo:table-cell>
                        <fo:block xsl:use-attribute-sets="text_bold">
                           <xsl:value-of select="$title" />,&nbsp;
                           <xsl:value-of select="$INN" />,&nbsp;
                           <xsl:value-of select="$KPP" />,
                           <xsl:value-of select="$postal_address" />
                        </fo:block>
                     </fo:table-cell>
                  </fo:table-row>
                  
                  <fo:table-row>
                     <fo:table-cell>
                        <fo:block xsl:use-attribute-sets="text">
                           Покупатель:
                        </fo:block>
                     </fo:table-cell>
                     <fo:table-cell>
                        <fo:block xsl:use-attribute-sets="text_bold">
                           <xsl:value-of select="@innbuyer" />,&nbsp;
                           <xsl:value-of select="@cid"/>,&nbsp;
                           <xsl:value-of select="@contract"/>,&nbsp;
                        </fo:block>
                     </fo:table-cell>
                  </fo:table-row>
               </fo:table-body>
            </fo:table>

            <fo:block xsl:use-attribute-sets="text_bold">
               Плательщик: <xsl:value-of select="/data/bill/attributes/@org_name" />
            </fo:block>
            
            <fo:block xsl:use-attribute-sets="text">
               Телефон:  <xsl:value-of select="/data/bill/contract_data/contract_params/parameter[@pid='6']/@value"/>
                                       
            </fo:block>
            
            <fo:table table-layout="fixed">            
               <fo:table-column column-width="7cm"/>
               <fo:table-column column-width="10.1cm"/>
               
               <fo:table-body>
                  <fo:table-row>
                     <fo:table-cell>
                        <fo:block xsl:use-attribute-sets="text">
                           Договор: <xsl:value-of select="@contract"/>
                        </fo:block>
                     </fo:table-cell>
                     <fo:table-cell>
                        <fo:block xsl:use-attribute-sets="text" text-align="right">
                           валюта: <xsl:value-of select="$currency"/>
                        </fo:block>
                     </fo:table-cell>
                  </fo:table-row>
               </fo:table-body>
         </fo:table>
   
         <xsl:call-template name="payList">
            <xsl:with-param name="nds_rate" select="$nds_rate"/>
         </xsl:call-template>
   
         <fo:block xsl:use-attribute-sets="text" space-before="0.1cm">
            * Цена не включает НДС
         </fo:block>
   
         <xsl:if test="@with_stamp">
            <fo:table start-indent="1cm" table-layout="fixed" width="100%">
               
               <fo:table-column column-width="2.7cm"/>
               <fo:table-column column-width="4.0cm"/>
               <fo:table-column column-width="proportional-column-width(1)"/>
               
               <fo:table-body>                     
                  <fo:table-row>
                     <fo:table-cell>
                        <fo:block/>
                     </fo:table-cell>
                     <fo:table-cell number-columns-spanned="2">
                        <fo:block>
                        <fo:external-graphic src="webroot/stamp.gif" width="4.1cm" height="3.85cm" content-height="3.85cm" content-width="4.1cm" space-before="0.2cm"/>
                        </fo:block>
                     </fo:table-cell>
                  </fo:table-row>                        
               </fo:table-body>
            </fo:table>   
         </xsl:if>
   
         <fo:table start-indent="1cm" table-layout="fixed" width="100%" >
            <xsl:choose>
               <xsl:when test="@with_stamp">
                  <xsl:attribute name="space-before">-3.5cm</xsl:attribute>
               </xsl:when>
               <xsl:otherwise>
                  <xsl:attribute name="space-before">0.5cm</xsl:attribute>
               </xsl:otherwise>
            </xsl:choose>            
            
            <fo:table-column column-width="2.7cm"/>
            <fo:table-column column-width="4.0cm"/>
            <fo:table-column column-width="proportional-column-width(1)"/>
            
            <fo:table-body>
               <fo:table-row>
                  <fo:table-cell number-columns-spanned="3">
                     <fo:block xsl:use-attribute-sets="text_bold" start-indent="1cm">
                        Итого к оплате: <xsl:value-of select="st:summaToString(@total_sum)" />
                     </fo:block>
                  </fo:table-cell>
               </fo:table-row>
            
               <fo:table-row>
                  <fo:table-cell>
                     <fo:block xsl:use-attribute-sets="text" start-indent="1cm" space-before="0.8cm">Счет выдал</fo:block>
                  </fo:table-cell>
                  <fo:table-cell border-bottom-style="solid" border-bottom-width="0.7pt">
                     <fo:block/>
                  </fo:table-cell>
                  <fo:table-cell>
                     <fo:block/>
                  </fo:table-cell>
               </fo:table-row>
               
               <fo:table-row>
                  <fo:table-cell number-columns-spanned="3">
                     <fo:block xsl:use-attribute-sets="text_bold" start-indent="1cm" space-before="0.7cm">
                        Для своевременного поступления суммы оплаты на Ваш Лицевой счет в платежном поручении просим указывать НОМЕР КОНТРАКТА!
                     </fo:block>
                  </fo:table-cell>
               </fo:table-row>               
            </fo:table-body>
         </fo:table>
      </fo:flow>   
      </fo:page-sequence>      
   </xsl:template>   
      
   <xsl:template name="calcNDS">
      <xsl:param name="nds_rate"/>
   
      <xsl:for-each select="pos">            
            <xsl:variable name="nds" select="number((@summ * ($nds_rate div 100))div($nds_rate div 100 + 1))" />
            <xsl:value-of select="counter:add( 'total_nds', format-number($nds, '0.00') )"/>
      </xsl:for-each>
   </xsl:template>   
      
   <xsl:template name="payList">      
      <xsl:param name="nds_rate"/>
         
      <!-- начало таблицы счета -->   
      <fo:table space-before="0.3cm" table-layout="fixed">
      
          <fo:table-column column-width="0.6cm"/>
          <fo:table-column column-width="4.9cm"/>
          <fo:table-column column-width="1.2cm"/>
          <fo:table-column column-width="1.1cm"/>
          <fo:table-column column-width="2.2cm"/>
          <fo:table-column column-width="2.2cm"/>
          <fo:table-column column-width="1.9cm"/>
          <fo:table-column column-width="2.9cm"/>
                               
         <fo:table-header>
         
            <fo:table-row>
                 <fo:table-cell xsl:use-attribute-sets="cell_border">
                  <fo:block xsl:use-attribute-sets="table_text_center">№</fo:block>
                </fo:table-cell>
                 <fo:table-cell xsl:use-attribute-sets="cell_border">
                  <fo:block xsl:use-attribute-sets="table_text_center">Товар</fo:block>
                </fo:table-cell>
                 <fo:table-cell xsl:use-attribute-sets="cell_border">
                  <fo:block xsl:use-attribute-sets="table_text_center">Ед.</fo:block>
                </fo:table-cell>
                 <fo:table-cell xsl:use-attribute-sets="cell_border">
                  <fo:block xsl:use-attribute-sets="table_text_center">Кол-во</fo:block>
                </fo:table-cell>
                 <fo:table-cell xsl:use-attribute-sets="cell_border">
                  <fo:block xsl:use-attribute-sets="table_text_center">Цена *</fo:block>
                </fo:table-cell>
                 <fo:table-cell xsl:use-attribute-sets="cell_border">
                  <fo:block xsl:use-attribute-sets="table_text_center">Сумма</fo:block>
                </fo:table-cell>
                 <fo:table-cell xsl:use-attribute-sets="cell_border">
                  <fo:block xsl:use-attribute-sets="table_text_center">НДС</fo:block>
                </fo:table-cell>
                 <fo:table-cell xsl:use-attribute-sets="cell_border">
                  <fo:block xsl:use-attribute-sets="table_text_center">Всего с НДС</fo:block>
                </fo:table-cell>                                                 
             </fo:table-row>
         
         </fo:table-header>
         
         
         <fo:table-body>
         
            <!-- начало цикл pay -->
            <xsl:for-each select="pos">
            
               <xsl:variable name="nds" select="number((@summ * ($nds_rate div 100))div($nds_rate div 100 + 1))" />
               <!-- <xsl:value-of select="counter:add( 'total_nds', format-number($nds, '0.00') )"/>   -->
               
               <fo:table-row>
                    <fo:table-cell xsl:use-attribute-sets="cell_border">
                     <fo:block xsl:use-attribute-sets="table_text_center"><xsl:value-of select="position()"/></fo:block>
                   </fo:table-cell>
                    <fo:table-cell xsl:use-attribute-sets="cell_border">
                     <fo:block xsl:use-attribute-sets="table_text_left"><xsl:value-of select="@name"/></fo:block>
                   </fo:table-cell>
                    <fo:table-cell xsl:use-attribute-sets="cell_border">
                     <fo:block xsl:use-attribute-sets="table_text_center">
                           <xsl:if test="@unit">
                              <xsl:value-of select="@unit"/>
                           </xsl:if>   
                           <xsl:if test="not(@unit)">
                              месяц
                           </xsl:if>                       
                     </fo:block>
                   </fo:table-cell>
                    <fo:table-cell xsl:use-attribute-sets="cell_border">
                     <fo:block xsl:use-attribute-sets="table_text_center">
                           <xsl:if test="@quantity">
                              <xsl:value-of select="@quantity"/>
                           </xsl:if>   
                           <xsl:if test="not(@quantity)">
                              1
                           </xsl:if>                    
                     </fo:block>
                   </fo:table-cell>
                    <fo:table-cell xsl:use-attribute-sets="cell_border">
                     <fo:block xsl:use-attribute-sets="table_text_right"><xsl:value-of select="format-number(@summ - $nds, '0.00')"/></fo:block>
                   </fo:table-cell>
                    <fo:table-cell xsl:use-attribute-sets="cell_border">
                     <fo:block xsl:use-attribute-sets="table_text_right"><xsl:value-of select="format-number(@summ - $nds, '0.00')"/></fo:block>
                   </fo:table-cell>
                    <fo:table-cell xsl:use-attribute-sets="cell_border">
                     <fo:block xsl:use-attribute-sets="table_text_right"><xsl:value-of select="format-number($nds, '0.00')"/></fo:block>
                   </fo:table-cell>
                    <fo:table-cell xsl:use-attribute-sets="cell_border">
                     <fo:block xsl:use-attribute-sets="table_text_right"><xsl:value-of select="format-number(@summ, '0.00')"/></fo:block>
                   </fo:table-cell>
               </fo:table-row>
      
            </xsl:for-each>
            <!-- конец цикл pos -->
            
            
            <!-- итого -->
            <fo:table-row>
                 <fo:table-cell><fo:block/></fo:table-cell>
                 <fo:table-cell><fo:block/></fo:table-cell>
                 <fo:table-cell>
                    <fo:block xsl:use-attribute-sets="table_text_center">Итого:</fo:block>
                 </fo:table-cell>
                 <fo:table-cell><fo:block/></fo:table-cell>
                 <fo:table-cell><fo:block/></fo:table-cell>
   
                 <fo:table-cell xsl:use-attribute-sets="cell_border">
                  <fo:block xsl:use-attribute-sets="table_text_right"><xsl:value-of select="format-number(@total_sum - counter:get( 'total_nds'), '0.00')"/></fo:block>
                </fo:table-cell>
                 <fo:table-cell xsl:use-attribute-sets="cell_border">
                  <fo:block xsl:use-attribute-sets="table_text_right"><xsl:value-of select="format-number( counter:get( 'total_nds'), '0.00')"/></fo:block>
                </fo:table-cell>
                 <fo:table-cell xsl:use-attribute-sets="cell_border">
                  <fo:block xsl:use-attribute-sets="table_text_right"><xsl:value-of select="format-number(@total_sum, '0.00')"/></fo:block>
                </fo:table-cell>
            </fo:table-row>
            <!-- итого -->
            
         </fo:table-body>
   
      </fo:table>   
      
      <!-- конец таблицы счета -->
   </xsl:template>
         
   <xsl:template match="pay" mode="pay">
      <xsl:param name="curr_nds"/>

      <xsl:variable name="nds_param" select="params/@nds"/>
      <xsl:variable name="nds_rate_temp" select="number(/data/bill/attributes/@*[name()=$nds_param])"/>

      <xsl:variable name="nds_rate">
         <xsl:choose>
            <xsl:when test="contains($nds_rate_temp,'NaN')">
               <xsl:value-of select="number(/data/bill/params/@default_nds)"/>                        
            </xsl:when>
            <xsl:otherwise>
               <xsl:value-of select="$nds_rate_temp"/>
            </xsl:otherwise>
         </xsl:choose>
      </xsl:variable>

      <xsl:variable name="nds" select="round((@sum * ($nds_rate div 100))div($nds_rate div 100 + 1))" />

      <xsl:choose>
      <xsl:when test="not(following-sibling::*)">
         <xsl:value-of select="$curr_nds + $nds"/>
      </xsl:when>
      <xsl:otherwise>
         <xsl:apply-templates select="following-sibling::*[position()=1]" mode="pay"><xsl:with-param name="curr_nds" select="$curr_nds + $nds"/></xsl:apply-templates>
      </xsl:otherwise>
      </xsl:choose>
   </xsl:template>
</xsl:stylesheet>

_________________
Клиент: вер. 7.0.837 / 21.09.2016 19:51:30
os: Windows 8.1; java: Java HotSpot(TM) Client VM, v.1.8.0_25
Сервер: вер. 7.0.1113 / 22.09.2016 19:15:59
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_101


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 дек 2016, 19:05 
Не в сети

Зарегистрирован: 02 авг 2016, 14:06
Сообщения: 47
Карма: 0
Artur писал(а):
Для полной картины приложите всю xml и xsl.


Вы смотрели код?

_________________
Клиент: вер. 7.0.837 / 21.09.2016 19:51:30
os: Windows 8.1; java: Java HotSpot(TM) Client VM, v.1.8.0_25
Сервер: вер. 7.0.1113 / 22.09.2016 19:15:59
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_101


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 дек 2016, 14:23 
Не в сети
Аватара пользователя

Зарегистрирован: 27 янв 2010, 16:12
Сообщения: 941
Откуда: Уфа
Карма: 124
GalarG писал(а):
Artur писал(а):
Для полной картины приложите всю xml и xsl.


Вы смотрели код?


Да, этот код я когда то писал. Я просил показать xml сформированных документов.

_________________
С уважением, Гареев Артур. Вежливый разработчик ООО "Бител".


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 30 дек 2016, 12:13 
Не в сети

Зарегистрирован: 02 авг 2016, 14:06
Сообщения: 47
Карма: 0
Artur писал(а):
GalarG писал(а):
Artur писал(а):
Для полной картины приложите всю xml и xsl.


Вы смотрели код?


Да, этот код я когда то писал. Я просил показать xml сформированных документов.


Код:
<?xml version="1.0" encoding="UTF-8"?><data secret="EB10DCC688C09EE3046ACE6339041304" status="ok">
    <inline_params/>
    <bill account="ХХХХХХХХХХХХ" amounts="0.00" balance_mode="1" bank_title="ФИЛИАЛ N6318 ВТБ 24 (ПАО) Г.САМАРА" bik="ХХХХХХХ" bill_number="2300" charges="0.00" cid="256" contract="216/ЙШЛ/2015" contract_date1="20.11.2015" contract_date2="" corr_account="ХХХХХХХХХХХХХХХХХХ" correction="0" date="31.01.2017" fc="1" mm="1" month="январь" npid="1" payer="ООО &quot;Рога и копыта&quot;" payments="0.00" period_date1="01.01.2017" period_date2="31.01.2017" saldo="0.00" saldo_prev="0.00" total_sum="1000.00" type="1" type_title="null" yy="2017">
        <pos awlz="0" insum="1" name="�������������� ����� ������� � ���� Internet �� �������� �� �������" position_id="1" qtynums="0" qtynumsRnd="4" quantity="1" sumUnscaled="1000.00000" summ="1000.00" unit="��." unitCode="796"/>
        <tariff_bill>
            <tariff date1="20.11.2015" date2="" tariff_plan="Интернет: Бизнес 5" tpid="62"/>
        </tariff_bill>
        <contract_data cid="256">
            <contract balance_rest="0.00" cid="256" comment="ООО &quot;Рога и копытаquot;" date1="20.11.2015" date2="" fc="1" gr="2064" limit="0.00" mode="1" param_group="2" pswd="157509" status="0" status_date="20.11.2016" time="30.12.2016 09:00" title="216/ЙШЛ/2015">
                <tariff date1="20.11.2015" date2="" eid="0" emid="0" tariff_plan="Интернет: Бизнес 5" tpid="62"/>
            </contract>
            <module id="2" name="npay" title="Абонплата 1">
                <npay_service_object_2 cid="256" col="1" comment="" csid="0" date1="2016-10-01" eid="0" emid="0" id="29" oid="0" sid="7" title="Интернет"/>
            </module>
            <module id="10" name="bill" title="Бухгалтерия 1">
                <bill_contract_doc_type_10 cid="256" doc_type="1" id="1"/>
            </module>
            <module id="4" name="inet" title="Интернет 1">
                <inet_serv_4 _addressFrom="100.65.0.4" _deviceComment="Чавайна 36, ЦОД" _deviceTitle="D-Link DES-1210-28/ME: C0A0BBD60CD1 [192.168.ХХХ.ХХХ:23]" _typeTitle="юр. лицо - internet 82" accessCode="0" addressFrom="$BINARY_DATA$64 41 00 04" addressTo="$BINARY_DATA$" comment="" contractId="256" contractObjectId="0" dateFrom="2015-11-19" deviceId="51" deviceOptions="6" deviceState="1" id="290" interfaceId="2" ipResourceId="17" ipResourceSubscriptionId="398" login="" macAddress="$BINARY_DATA$" parentId="0" password="" sessionCountLimit="1" status="0" title="интернет (юр. лицо)" typeId="7" vlan="650"/>
                <inet_accounting_period_4 contractId="256" id="166" timeFrom="2016-11-22 00:00:00.0" timeTo="2016-11-30 23:59:59.0" userId="0"/>
                <inet_accounting_period_4 contractId="256" id="174" timeFrom="2016-12-01 00:00:00.0" timeTo="2016-12-31 23:59:59.0" userId="0"/>
            </module>
            <plugin id="16" name="ru.bitel.bgbilling.plugins.dispatch" title="Dispatch"/>
            <plugin id="8" name="ru.bitel.bgbilling.plugins.documents" title="Документооборот"/>
        </contract_data>
        <condel del="0" fc="1" pfid="0" pgid="2"/>
        <contract_params>
            <parameter pid="53" pt="1" sort="5" title="Наименование организации (полное)" value="Общество с ограниченной ответственностью &quot;Рога и копыта&quot;"/>
            <parameter pid="54" pt="1" sort="8" title="Наименование организации (сокращенное)" value="ООО &quot;Рога и копыта&quot;"/>
            <parameter pid="60" pt="1" sort="10" title="ИНН" value="ХХХХХХХХХ"/>
            <parameter pid="61" pt="1" sort="11" title="КПП" value="ХХХХХХХХ"/>
            <parameter pid="62" pt="1" sort="12" title="ОГРН" value="ХХХХХХХХХХХХ"/>
            <parameter pid="59" pt="1" sort="13" title="Юридический адрес" value="424000, РМЭ, г. Йошкар-Ола, ул. Якова Эшпая, д. 139"/>
            <parameter pid="55" pt="1" sort="21" title="В лице (должность+полное ФИО)" value="Директора Иванова Ивана Ивановича "/>
            <parameter pid="56" pt="1" sort="22" title="Должность" value="Директор"/>
            <parameter pid="57" pt="1" sort="23" title="Подписант И.О. Фамилия" value="И.И.Иванов "/>
            <parameter pid="58" pt="1" sort="26" title="Основание" value="Устава "/>
            <parameter pid="66" pt="1" sort="28" title="Банк (в банке)" value="в Банке «Йошкар-Ола» ПАО г. Йошкар-Ола "/>
            <parameter pid="65" pt="1" sort="29" title="Расчетный счет" value="ХХХХХХХХХХХХХХХХХ "/>
            <parameter pid="67" pt="1" sort="30" title="Кор. счет" value="ХХХХХХХХХХХХХХХХХ "/>
            <parameter pid="68" pt="1" sort="31" title="БИК" value="ХХХХХХХХ  "/>
            <parameter pid="73" pt="1" sort="39" title="ФИО контактного лица" value="Иванов Иван Иванович "/>
            <parameter pid="78" pt="1" sort="56" title="Количество точек подключения" value="1"/>
            <parameter pid="79" pt="1" sort="57" title="Абонентская плата (интернет) с учетом НДС" value="1000"/>
            <parameter pid="69" pt="1" sort="99" title="№ приложения" value="1"/>
            <parameter pid="70" pt="1" sort="100" title="Дата приложения" value="20.11.2015"/>
            <parameter pid="71" pt="1" sort="101" title="№ заказа" value="1"/>
            <parameter pid="72" pt="1" sort="102" title="Тип заказа" value="Новый"/>
            <parameter comment="" pid="16" pt="2" sort="40" title="Адрес установки абонентского оборудования" value="424031, г. Энск ул. Энная д. 1"/>
            <parameter pid="7" pt="3" sort="41" title="Адрес электронной почты" value="Иванов Иван Иванович &lt;roga@mail.ru&gt;; "/>
            <parameter pid="34" pt="6" sort="82" title="Предоставление доступа не позднее" value="01.12.2015"/>
            <parameter pid="45" pt="6" sort="93" title="Дата заключения" value="20.11.2015"/>
            <parameter pid="81" pt="6" sort="103" title="Дата акта включения" value="01.12.2015"/>
            <parameter pid="88" pt="7" sort="9" title="Организационно-правовая форма" value="Общество с ограниченной ответственностью" valueId="28"/>
            <parameter pid="19" pt="7" sort="48" title="Тип IP адреса" value="динамический" valueId="1"/>
            <parameter pid="21" pt="7" sort="50" title="Технология предоставления" value="проводная" valueId="3"/>
            <parameter pid="74" pt="7" sort="52" title="Скорость доступа" value="5 Мб/с" valueId="59"/>
            <parameter pid="80" pt="7" sort="59" title="Метод расчетов Интернет" value="авансовая" valueId="31"/>
            <parameter pid="46" pt="7" sort="94" title="услуга Интернет" value="да" valueId="21"/>
            <parameter pid="47" pt="7" sort="95" title="услуга Телефония" value="нет" valueId="24"/>
            <parameter pid="48" pt="7" sort="96" title="Дополнительные услуги" value="нет" valueId="26"/>
            <parameter pid="84" pt="7" sort="98" title="Схема подключения" value="Основной" valueId="38"/>
            <parameter pid="94" pt="9" sort="43" title="Рабочий телефон" value=" 8 (8362) ХХ - ХХ - ХХ"/>
            <parameter pid="29" pt="9" sort="45" title="Номер телефона контактного лица" value=" 8 (8362) ХХ - ХХ - ХХ"/>
        </contract_params>
        <params nds="18"/>
        <attributes/>
    </bill>
</data>

_________________
Клиент: вер. 7.0.837 / 21.09.2016 19:51:30
os: Windows 8.1; java: Java HotSpot(TM) Client VM, v.1.8.0_25
Сервер: вер. 7.0.1113 / 22.09.2016 19:15:59
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_101


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 30 дек 2016, 14:57 
Не в сети

Зарегистрирован: 02 авг 2016, 14:06
Сообщения: 47
Карма: 0
Artur писал(а):
GalarG писал(а):
Artur писал(а):
Для полной картины приложите всю xml и xsl.


Вы смотрели код?


Да, этот код я когда то писал. Я просил показать xml сформированных документов.



Как оказалось, в xml поле называется "payer". А в шаблоне из коробки поле называлось "contract_comment".
Но вот ИНН этой организации не передается в xml

_________________
Клиент: вер. 7.0.837 / 21.09.2016 19:51:30
os: Windows 8.1; java: Java HotSpot(TM) Client VM, v.1.8.0_25
Сервер: вер. 7.0.1113 / 22.09.2016 19:15:59
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_101


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 30 дек 2016, 15:29 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
а ИНН где указан?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 30 дек 2016, 15:39 
Не в сети

Зарегистрирован: 02 авг 2016, 14:06
Сообщения: 47
Карма: 0
skn писал(а):
а ИНН где указан?

ИНН получилось достать с помощью <xsl:value-of select="/data/bill/contract_params/parameter[@pid='ХХ']/@value"/>
Но значение товара передается в непонятной кодировке:
Код:
<pos awlz="0" insum="1" name="�������������� ����� ������� � ���� Internet �� �������� �� �������" position_id="1" qtynums="0" qtynumsRnd="4" quantity="1" sumUnscaled="1000.00000" summ="1000.00" unit="��." unitCode="796"/>

Хотя кодировка шаблона и xml UTF-8
Код:
<?xml version="1.0" encoding="UTF-8"?><data secret="F94175862F16A6DDDAE544F31704C91C" status="ok">

_________________
Клиент: вер. 7.0.837 / 21.09.2016 19:51:30
os: Windows 8.1; java: Java HotSpot(TM) Client VM, v.1.8.0_25
Сервер: вер. 7.0.1113 / 22.09.2016 19:15:59
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_101


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 30 дек 2016, 16:43 
Не в сети
Аватара пользователя

Зарегистрирован: 27 янв 2010, 16:12
Сообщения: 941
Откуда: Уфа
Карма: 124
Покажите весь текст из окна about.

_________________
С уважением, Гареев Артур. Вежливый разработчик ООО "Бител".


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 30 дек 2016, 17:02 
Не в сети

Зарегистрирован: 02 авг 2016, 14:06
Сообщения: 47
Карма: 0
Artur писал(а):
Покажите весь текст из окна about.

Информация о версии:

Клиент: вер. 7.0.845 / 21.10.2016 17:44:26
os: Windows 8.1; java: Java HotSpot(TM) Client VM, v.1.8.0_25
Сервер: вер. 7.0.1136 / 24.10.2016 18:04:50
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_101

bill: вер. 7.0.103 / 21.10.2016 17:46:32
card: вер. 7.0.40 / 22.08.2016 16:40:03
dba: вер. 7.0.167 / 08.04.2016 17:52:32
inet: вер. 7.0.696 / 24.10.2016 18:09:08
moneta: вер. 7.0.8 / 05.10.2016 13:42:52
mps: вер. 7.0.204 / 05.10.2016 13:36:29
npay: вер. 7.0.199 / 05.10.2016 13:38:35
paylinks: вер. 7.0.36 / 10.06.2016 16:59:37
phone: вер. 7.0.280 / 24.10.2016 18:05:25
qiwi: вер. 7.0.50 / 03.10.2016 16:42:13
reports: вер. 7.0.221 / 18.10.2016 12:55:45
rscm: вер. 7.0.181 / 05.10.2016 13:43:18
ru.bitel.bgbilling.plugins.cladr: вер. 7.0.123 / 08.04.2016 17:52:32
ru.bitel.bgbilling.plugins.dispatch: вер. 7.0.89 / 17.10.2016 15:38:03
ru.bitel.bgbilling.plugins.documents: вер. 7.0.175 / 05.10.2016 13:42:40
sberbank: вер. 7.0.55 / 07.10.2016 16:37:00
subscription: вер. 7.0.41 / 05.10.2016 13:43:31
voiceip: вер. 7.0.189 / 08.04.2016 17:40:15

Окружение:

Клиент:
os: Windows 8.1 x86, 6.3
java: Java HotSpot(TM) Client VM, v.1.8.0_25
jre home: C:\Program Files (x86)\Java\jre1.8.0_25
memory (use/total/max): 52M/93M/247M
default tz: 30.12.2016 15:00 MSK +0400 (W-SU)
user tz: 30.12.2016 15:00 MSK +0400 (Europe/Moscow)
locale: ru_RU
Сервер:
os: Linux amd64, 2.6.32-504.8.1.el6.x86_64
java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_101
jre home: /usr/java/jdk1.8.0_101/jre
default tz: 30.12.2016 14:01 MSK +0300 (W-SU)
memory (use/total/max): 142M/234M/910M
db time: master: 30.12.2016 08:23 EDT
db charset: connection: utf8(utf8_unicode_ci), database: utf8(utf8_general_ci)
locale: en_US
uptime: Started: 12.12.2016 16:02:19 Uptime: 17 d 21:59:04

Третьи стороны:

Fugue Icons. Copyright © 2011 Yusuke Kamiyamane. All rights reserved.
http://p.yusukekamiyamane.com/
Silk icon set. Copyright © Mark James. All rights reserved.
http://www.famfamfam.com/lab/icons/silk/

_________________
Клиент: вер. 7.0.837 / 21.09.2016 19:51:30
os: Windows 8.1; java: Java HotSpot(TM) Client VM, v.1.8.0_25
Сервер: вер. 7.0.1113 / 22.09.2016 19:15:59
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_101


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 01 янв 2017, 15:18 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Великий хаос в системе
Цитата:
Клиент:
default tz: 30.12.2016 15:00 MSK +0400 (W-SU) <- здесь явно неправильная TZ, у MSK +03, у вас пришло для синхронизации W-SU из сервера, где оно верно раскрылось в +0300, а на клиенте неправильно
user tz: 30.12.2016 15:00 MSK +0400 (Europe/Moscow) <- но у вас и здесь косяк даже для Europe/Moscow, если у вас стоит в системе "переводить на летнее время" - странно сейчас то зима, а зимой для москвы +04 было несколько лет назад недолгое время, при медведеве, когда было летнее время круглый год, так что, короче, обновите java на клиентах.
Сервер:
default tz: 30.12.2016 14:01 MSK +0300 (W-SU) <- это олдовое название западной зоны ссср, в сервере правильно опозналось
db time: master: 30.12.2016 08:23 EDT <- здесь и таймзона американская и со временем белиберда


Здесь сделайте чтобы одинаково было:
Цитата:
db charset: connection: utf8(utf8_unicode_ci), database: utf8(utf8_general_ci)

в connection в data.properties пропишите utf8_general_ci , раз у вас БД такая, но при этом просто вполне возможно, что у вас отдельные таблицы в других кодировках как раз, нужно проверять, тем более если вы конвертировали БД руками итд

Ну и здесь желательно чтобы было ru_RU, но по-хорошему должно работать без, можно поразбираться
Цитата:
locale: en_US

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 10 янв 2017, 13:40 
Не в сети

Зарегистрирован: 02 авг 2016, 14:06
Сообщения: 47
Карма: 0
dimOn писал(а):
Великий хаос в системе
Цитата:
Клиент:
default tz: 30.12.2016 15:00 MSK +0400 (W-SU) <- здесь явно неправильная TZ, у MSK +03, у вас пришло для синхронизации W-SU из сервера, где оно верно раскрылось в +0300, а на клиенте неправильно
user tz: 30.12.2016 15:00 MSK +0400 (Europe/Moscow) <- но у вас и здесь косяк даже для Europe/Moscow, если у вас стоит в системе "переводить на летнее время" - странно сейчас то зима, а зимой для москвы +04 было несколько лет назад недолгое время, при медведеве, когда было летнее время круглый год, так что, короче, обновите java на клиентах.
Сервер:
default tz: 30.12.2016 14:01 MSK +0300 (W-SU) <- это олдовое название западной зоны ссср, в сервере правильно опозналось
db time: master: 30.12.2016 08:23 EDT <- здесь и таймзона американская и со временем белиберда


Здесь сделайте чтобы одинаково было:
Цитата:
db charset: connection: utf8(utf8_unicode_ci), database: utf8(utf8_general_ci)

в connection в data.properties пропишите utf8_general_ci , раз у вас БД такая, но при этом просто вполне возможно, что у вас отдельные таблицы в других кодировках как раз, нужно проверять, тем более если вы конвертировали БД руками итд

Ну и здесь желательно чтобы было ru_RU, но по-хорошему должно работать без, можно поразбираться
Цитата:
locale: en_US


Сейчас окно о программе выглядит так:
Информация о версии:

Клиент: вер. 7.0.845 / 21.10.2016 17:44:26
os: Windows 8.1; java: Java HotSpot(TM) Client VM, v.1.8.0_25
Сервер: вер. 7.0.1136 / 24.10.2016 18:04:50
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_101

bill: вер. 7.0.103 / 21.10.2016 17:46:32
card: вер. 7.0.40 / 22.08.2016 16:40:03
dba: вер. 7.0.167 / 08.04.2016 17:52:32
inet: вер. 7.0.696 / 24.10.2016 18:09:08
moneta: вер. 7.0.8 / 05.10.2016 13:42:52
mps: вер. 7.0.204 / 05.10.2016 13:36:29
npay: вер. 7.0.199 / 05.10.2016 13:38:35
paylinks: вер. 7.0.36 / 10.06.2016 16:59:37
phone: вер. 7.0.280 / 24.10.2016 18:05:25
qiwi: вер. 7.0.50 / 03.10.2016 16:42:13
reports: вер. 7.0.221 / 18.10.2016 12:55:45
rscm: вер. 7.0.181 / 05.10.2016 13:43:18
ru.bitel.bgbilling.plugins.cladr: вер. 7.0.123 / 08.04.2016 17:52:32
ru.bitel.bgbilling.plugins.dispatch: вер. 7.0.89 / 17.10.2016 15:38:03
ru.bitel.bgbilling.plugins.documents: вер. 7.0.175 / 05.10.2016 13:42:40
sberbank: вер. 7.0.55 / 07.10.2016 16:37:00
subscription: вер. 7.0.41 / 05.10.2016 13:43:31
voiceip: вер. 7.0.189 / 08.04.2016 17:40:15

Окружение:

Клиент:
os: Windows 8.1 x86, 6.3
java: Java HotSpot(TM) Client VM, v.1.8.0_25
jre home: C:\Program Files (x86)\Java\jre1.8.0_25
memory (use/total/max): 75M/80M/247M
default tz: 10.01.2017 10:37 MSK +0300 (W-SU)
user tz: 10.01.2017 10:37 MSK +0300 (Europe/Moscow)
locale: ru_RU
Сервер:
os: Linux amd64, 2.6.32-504.8.1.el6.x86_64
java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_101
jre home: /usr/java/jdk1.8.0_101/jre
default tz: 10.01.2017 10:37 MSK +0300 (W-SU)
memory (use/total/max): 147M/286M/910M
db time: master: 10.01.2017 10:36 MSK
db charset: connection: utf8(utf8_general_ci), database: utf8(utf8_general_ci)
locale: ru_RU
uptime: Started: 09.01.2017 15:28:22 Uptime: 0 d 19:09:20

Третьи стороны:

Fugue Icons. Copyright © 2011 Yusuke Kamiyamane. All rights reserved.
http://p.yusukekamiyamane.com/
Silk icon set. Copyright © Mark James. All rights reserved.
http://www.famfamfam.com/lab/icons/silk/

Но по прежнему счет отображается в другой кодировке

В БД все таблицы в кодировке utf8_general_ci, кроме таблицы contract_payment_deleted. Она в кодировке utf8_unicode_ci.


Вложения:
счет.jpg
счет.jpg [ 32.4 КБ | Просмотров: 8872 ]

_________________
Клиент: вер. 7.0.837 / 21.09.2016 19:51:30
os: Windows 8.1; java: Java HotSpot(TM) Client VM, v.1.8.0_25
Сервер: вер. 7.0.1113 / 22.09.2016 19:15:59
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_101
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 10 янв 2017, 14:23 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
Код:
InputStream is = new ByteArrayInputStream( xml.getBytes( "cp1251" ) );

сменить на
Код:
InputStream is = new ByteArrayInputStream( xml.getBytes( "UTF-8" ) );

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 10 янв 2017, 14:30 
Не в сети

Зарегистрирован: 02 авг 2016, 14:06
Сообщения: 47
Карма: 0
skyb писал(а):
Код:
InputStream is = new ByteArrayInputStream( xml.getBytes( "cp1251" ) );

сменить на
Код:
InputStream is = new ByteArrayInputStream( xml.getBytes( "UTF-8" ) );

Благодарю, все работает

_________________
Клиент: вер. 7.0.837 / 21.09.2016 19:51:30
os: Windows 8.1; java: Java HotSpot(TM) Client VM, v.1.8.0_25
Сервер: вер. 7.0.1113 / 22.09.2016 19:15:59
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_101


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 10 янв 2017, 14:38 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
GalarG писал(а):
skyb писал(а):
Код:
InputStream is = new ByteArrayInputStream( xml.getBytes( "cp1251" ) );

сменить на
Код:
InputStream is = new ByteArrayInputStream( xml.getBytes( "UTF-8" ) );

Благодарю, все работает

Плюсик под ником ;-) :oops:

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 10 янв 2017, 19:23 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Не, про таймзоны итд это не к этой проблемы было, конечно.
А про БД да.... сразу не разглядывал код, он же у вас и раньше не должен был работать внезависимости от БД, у вас БД и её кодировки там и не используется даже.
Код:
ByteArrayOutputStream sos = new ByteArrayOutputStream();
XMLUtils.serialize(bills, sos, "UTF-8");
String xml = sos.toString();
log("Полученная сгенерированная xml со счетами: " + xml );
InputStream is = new ByteArrayInputStream( xml.getBytes( "cp1251" ) );

Вы сначала сериализуете DOM в байты кодируя в utf8, потом превращаете в строку без указания кодировки (это не будет кстати работать в системах с дефаулт чарсет отличном от utf-8 винде, например, будут кракозябры, там тоже надо тогда "UTF-8" поставить: String xml = sos.toString("UTF-8")) обратно её раскодируете из строки в другой кодировке уже.
Возможно вы это раньше делали для старых перекодируемых полей.

Но тогда вот так будет намного чище и логичнее, вместо
Код:
InputStream is = new ByteArrayInputStream( xml.getBytes( "cp1251" ) );

вот это:
Код:
InputStream is = new ByteArrayInputStream( sos.toByteArray() );

это можно оставить если у вас сервер в линуксах: String xml = sos.toString(), хотя тоже некрасиво

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 20 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


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

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 1.243s | 60 Queries | GZIP : On ]