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

Порядок следования позиций в счете
http://forum.bitel.ru/viewtopic.php?f=14&t=3233
Страница 1 из 1

Автор:  rix [ 24 ноя 2009, 17:23 ]
Заголовок сообщения:  Порядок следования позиций в счете

Имеется следующий конфиг:
Код:
bill.pos.8.title=Абонентская плата за интернет
bill.pos.8.name=Абонентская плата за интернет за $month 2009 г.
bill.pos.8.summ=SERVICE_ACCOUNT($month,18)
bill.pos.8.unit=МБайт
bill.pos.8.quantity=DIALUP_TARIFF_DETAIL_AMOUNT(1,$month,1048576,1)

bill.pos.9.title=Плата за интернет по тарифу2
bill.pos.9.name=Плата за интернет по тарифу за $month 2009 г. Первое превышение
bill.pos.9.summ=TARIFF_DETAIL_COST(1,$month,2)
bill.pos.9.unit=МБайт
bill.pos.9.quantity=DIALUP_TARIFF_DETAIL_AMOUNT(1,$month,1048576,2)

bill.pos.10.title=Плата за интернет по тарифу3
bill.pos.10.name=Плата за интернет по тарифу за $month 2009 г. Второе превышение
bill.pos.10.summ=TARIFF_DETAIL_COST( 1,$month,3 )
bill.pos.10.unit=МБайт
bill.pos.10.quantity=DIALUP_TARIFF_DETAIL_AMOUNT(1,$month,1048576,3)

bill.pos.11.title=Плата за интернет по тарифу4
bill.pos.11.name=Плата за интернет по тарифу за $month 2009 г. Третье превышение
bill.pos.11.summ=TARIFF_DETAIL_COST( 1,$month, 4 )
bill.pos.11.unit=МБайт
bill.pos.11.quantity=DIALUP_TARIFF_DETAIL_AMOUNT(1,$month,1048576,4)

При генерации счета порядок позиций уже другой:
1)Абонплата
2)Третье превышение
3)Первое превышение
4)Второе превышение
В чем причина такого несоответствия? Можно ли как-нибудь сделать так, чтобы позиции в счете шли в правильном порядке?

Вложения:
Комментарий к файлу: Счет
.jpg
.jpg [ 42.64 КБ | Просмотров: 4588 ]

Автор:  rix [ 25 ноя 2009, 11:20 ]
Заголовок сообщения:  Re: Порядок следования позиций в счете

И еще вопрос - можно как-нибудь сделать чтобы мегабайты не округлялись до целого числа, а выдавались с заданной точностью (например 2 знака после запятой).

Автор:  rix [ 25 ноя 2009, 12:43 ]
Заголовок сообщения:  Re: Порядок следования позиций в счете

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

Автор:  Amir [ 25 ноя 2009, 13:16 ]
Заголовок сообщения:  Re: Порядок следования позиций в счете

Добавьте там где выводятся позиции, сразу после
<xsl:for-each select="pos">
ветку
<xsl:sort select="@position_id"/>

Автор:  Jimson [ 29 ноя 2009, 20:17 ]
Заголовок сообщения:  Re: Порядок следования позиций в счете

rix писал(а):
И еще вопрос - можно как-нибудь сделать чтобы мегабайты не округлялись до целого числа, а выдавались с заданной точностью (например 2 знака после запятой).


глобально, объявите российский формат числа:
<xsl:decimal-format name="RU" decimal-separator=',' grouping-separator=' ' NaN='0' />

там где выводится число делать примерно так:
<xsl:value-of select="format-number( (@summ - $nds) div @quantity, '# ##0,00', 'RU')" />

подробнее http://www.w3schools.com/XSL/func_formatnumber.asp

Автор:  rix [ 30 ноя 2009, 11:15 ]
Заголовок сообщения:  Re: Порядок следования позиций в счете

Проблема в том, что мегабайты округлены уже в xml-файле, следовательно xsl тут не поможет.

Автор:  Jimson [ 30 ноя 2009, 14:44 ]
Заголовок сообщения:  Re: Порядок следования позиций в счете

тогда остается только передавать данные в XML в байтах и хардкодить в XSLT
в принципе достаточно странная точность, кому нужны десятки килобайт, если речь идет о печати счетов, то там нет никаких требований к форме документа, и произведение цены и объема не обязано равняться сумме

а при печати фактур лучше вообще никакие объемы и единицы измерения не писать, так как там очень жесткие требования, но даже если вы решите печатать объемы, то цену вы в любом случае должны будете вычислять в XSLT как сумма/объем, иначе не будет равенства и налоговая оторвет вашим клиентам головы

Автор:  rix [ 02 мар 2010, 11:15 ]
Заголовок сообщения:  Re: Порядок следования позиций в счете

Апну тему, потому что правильный порядок следования позиций по прежнему актуален. xsl:sort не работает. А после одного из недавних обновлений позиции, даже вручную отсортированные в поле pos_list, в документах идут рандомом.

Нашел причину проблемы - функция xsl:sort вместо того, чтобы отсортировать позиции по position_id, расставляет их чуть ли не рандомом.

Автор:  Airat [ 17 июн 2010, 21:24 ]
Заголовок сообщения:  Re: Порядок следования позиций в счете

Правильное использование xsl:sort:
<xsl:sort select="number(@position_id)" data-type="number"/>

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