Настройка позиций
Позиция - это составная часть документа, обладающая суммой, количеством и единицей измерения, которую биллинг вычисляет для конкретного договора и месяца и подставляет в документ. Позиции счетов и счет-фактур задаются в конфигурации модуля, каждая позиция идентифицируются числовым кодом, коды позиций счетов и счет-фактур могут пересекаться.
Позиции счетов/счетов-фактур задаются аналогично, с той лишь разницей, что префикс bill.pos заменяется на invoice.pos. Разберём более подробно различные параметры позиции.
В name может быть указана произвольная строка с подстановками $month, $nextmonth, $prevmonth, $prev2month, $prev3month. Подстановка означает строковое название месяца за который выставляется счёт, следующего месяца, предыдущего месяца, и ещё двух предыдующих месяцев. Также возможно вывести значение месяца в произвольном формате, вместо $month ($nextmonth и т.п.) указать в виде {$month,date,фомат}, например {$month,date,MMMM yyyy г.} - результатом будет апрель 2009 г.
В summ могут быть указаны следующие макросы, связанные знаками "+" и "-". Вместо <month> могут быть подставлены значения $month, $nextmonth, $prevmonth, $prev2month, $prev3month, означающие в данном контексте месяц, за который производится выборка.
DEBT(<month>) - долг на конец месяца, равен минус исходящему остатку;
IN_REST(<month>) - входящий остаток на месяц;
SERVICE_ACCOUNT(<month>, <коды услуг через запятую>) - наработка по определённым услугам;
FULL_ACCOUNT(<month>) - суммарная наработка по всем услугам;
CHARGE(<month>, <коды расходов через запятую, не обязательный параметр>) - сумма расходов за месяц;
PAYMENT(<month>, <коды типов платежей, не обязательный параметр>) - сумма платежей за месяц;
NPAY_MIN_ACCOUNT(<код экземпляра модуля абонплат>,<month>,<код услуги модуля абонплат>) - для "доводящей абонплаты" сумма, до которой она доводится;
BILL_BILL_SUM(<код экземпляра модуля бухгалтерия>,<month>,<коды типов документов>) - сумма выставленных счетов за определённый месяц для данного договора, перечень кодов типов документов через запятую - необязательный параметр;
BILL_INVOICE_SUM(<код экземпляра модуля бухгалтерия>,<month>,<коды типов документов>) - сумма выставленных счетов-фактур за определённый месяц для данного договора, перечень кодов типов документов через запятую - необязательный параметр;
CONST(<число>) - числовая константа.
В quantity могут быть указаны следующие макросы, связанные знаками "+" и "-". Вместо <month> могут быть подставлены значения $month, $nextmonth, $prevmonth, $prev2month, $prev3month, означающие в данном контексте месяц, за который производится выборка. Вместо <mid> подставляется код экземпляра соответствующего модуля. Вместо <sids> подставляются коды услуг через запятую, это уточняющий и не обязательный параметр, если он не указан, будут взяты все услуги.
KERNEL_SERVICE_COUNT(<month>, <коды услуг через запятую>) - количество разрешенных услуг, определённых перечнем, заведённых в договоре на начало указанного месяца;
NPAY_SERVICE_COUNT(<mid>, <month>, <sids>) - количество услуг абонплаты, определённых перечнем, заведённых в договоре на начало указанного месяца, учитывая параметр кол-во в свойствах услуги абонплат;
NPAY_SERVICE_COUNT_MONTH(<mid>, <month>, <sids>) - аналогично предыдущему, но считается количество услуг абонплат не на первое число месяца, а всего попавших в данный месяц отрезков данных услуг;
DIALUP_SERVICE_AMOUNT(<mid>, <month>, <делитель>, <sids>) - объем услуг DialUP модуля, делитель определяет число, на которое будет разделен объем услуги (байты для трафика, секунды для времени); Например, делитель 1048576 даст объем в МБ для услуг типа трафик;
DIALUP_MAX_SERVICE_AMOUNT(<mid>, <month>, <делитель>, <sids>) - объем услуг DialUP модуля типа "максимальный трафик", делитель определяет число, на которое будет разделен объем услуги (байты для трафика). Например, делитель 1048576 даст объем в МБ для услуг типа трафик;
DIALUP_LOGIN_COUNT(<mid>, <month>) - количество DialUP логинов на начало месяца;
VOICEIP_SERVICE_AMOUNT(<mid>, <month>, <делитель>, <sids>) - объем услуг VoiceIP модуля в секундах округлённого времени, делитель определяет число, на которое будет разделен объем услуги. Например, делитель 60 даст объем в минутах;
VOICEIP_LOGIN_COUNT(<mid>, <month>) - количество VoiceIP-логинов на начало месяца;
IPN_SERVICE_AMOUNT(<mid>, <month>, <делитель>, <sids>) - объем услуг IPN модуля в байтах, делитель определяет число, на которое будет разделен объем услуги. Например, делитель 1048576 даст объем в МБ;
IPN_MAX_SERVICE_AMOUNT(<mid>, <month>, <делитель>, <sids>) - объем услуг IPN модуля типа "максимальный трафик" в байтах, делитель определяет число, на которое будет разделен объем услуги. Например, делитель 1048576 даст объем в МБ;
PHONE_SERVICE_AMOUNT(<mid>, <month>, <делитель>, <sids>) - объем услуг Phone модуля в секундах округлённого времени, делитель определяет число, на которое будет разделен объем услуги. Например, делитель 60 даст объем в минутах;
PHONE_ZERO_SERVICE_AMOUNT(<mid>, <month>, <делитель>, <sids>) - то же, что предыдущее, но считаются только сессии с нулевой стоимостью;
PHONE_NOZERO_SERVICE_AMOUNT(<mid>, <month>, <делитель>, <sids>) - то же, но считаются только сессии с ненулевой стоимостью;
PHONE_NOZERO_SERVICE_COUNT(<mid>, <month>, <sids>) - считается кол-во сессий с ненулевой стоимостью;
PHONE_SERVICE_COUNT(<mid>, <month>, <sids>) - общее количество сессий;
PHONE_POINT_COUNT(<mid>, <month>) - количество Phone-поинтов на начало месяца;
RSCM_SERVICE_AMOUNT(<mid>, <month>, <делитель>, <sids>) - объем услуг RSCM-модуля в единицах, делитель определяет число, на которое будет разделен объем услуги;
INET_SERVICE_AMOUNT(<mid>, <month>, <делитель>, <sids>) - объем услуг Inet-модуля, делитель определяет число, на которое будет разделен объем услуги (байты для трафика, секунды для времени). Например, делитель 1048576 даст объем в МБ для услуг типа трафик;
INET_SERV_COUNT(<mid>, <month>) - количество Inet-сервисов на начало месяца.
VOICE_SERVICE_AMOUNT(<mid>, <month>, <делитель>, <sids>) - объем услуг Voice модуля в секундах округлённого времени, делитель определяет число, на которое будет разделен объем услуги. Например, делитель 60 даст объем в минутах;
VOICE_ZERO_SERVICE_AMOUNT(<mid>, <month>, <делитель>, <sids>) - то же, что предыдущее, но считаются только сессии с нулевой стоимостью;
VOICE_NOZERO_SERVICE_AMOUNT(<mid>, <month>, <делитель>, <sids>) - то же, но считаются только сессии с ненулевой стоимостью;
VOICE_NOZERO_SERVICE_COUNT(<mid>, <month>, <sids>) - считается кол-во сессий с ненулевой стоимостью для модуля Voice;
VOICE_SERVICE_COUNT(<mid>, <month>, <sids>) - общее количество сессий Voice;
VOICE_ACCOUNT_COUNT(<mid>, <month>) - количество Voice-аккаунтов на начало месяца;
Если quantity не указано, то позиция принимается за единицу.
Начиная с версии 4.6, добавлен необязательный параметр позиции - число знаков после запятой для количества (qtynums). По умолчанию он принимается за 0 (т.е. количество округляется соответствуя логике предыдущих версий).
В unit указывается просто строка вида "Мб", "Кб", "мин.". Если параметр не указан, то единицы принимаются за "шт.". Параметр unitCode определяет цифровой код единицы измерения. Если параметр не указан, то подставляется код 796, который, согласно Общероссийскому классификатору единиц измерений, соответствует единице измерения "шт.".
Если параметр insum не указан, позиция включается в сумму документа, для исключения необходимо установить его в 0. Данный режим может быть полезен для позиций, несущих вспомогательную информацию.
Если параметр awlz указан, позиция включается в сумму документа, даже если сумма по позиции 0. Данный режим может быть полезен в случаях, когда нужно показать отсутствие расходов по позициям.
Рассмотрим несколько примеров построения позиций.
Пример 1
Клиенту необходимо выставлять суммарный долг за услуги интернета.
bill.pos.
1
.title=Долг за услуги Интернет
bill.pos.
1
.name=Долг за услуги Интернет за
$month
bill.pos.
1
.summ=
DEBT
(
$month
)
Пример 2
А корпоративным клиентам необходимо выставлять отдельными строчками абонплату, наработку по интернет и телефонии. За каждый месяц необходимо выставлять счета с наработкой за данный месяц и предоплатой абонплаты за следующий. Предположим, что у нас в системе установлен модуль абонплат, IPN и VoiceIP. Предположим также, что существуют следующие коды услуг:
Абонплата - 1;
Трафик -2;
Телефония - 3.
Так будет выглядеть настройка позиций счетов и счетов-фактур:
bill.pos.
1
.title=Долг за услуги Интернет и Телефонию
bill.pos.
1
.name=Долг за услуги Интернет и Телефонию за $month
bill.pos.
1
.summ=SERVICE_ACCOUNT($month,
2
,
3
)
bill.pos.
2
.title=Абонплата за Интернет и Телефонию
bill.pos.
2
.name=Абонплата за Интернет и Телефонию за $nextmonth
bill.pos.
2
.summ=SERVICE_ACCOUNT($nextmonth,
1
)
#
invoice.pos.
1
.title=Услуги Интернет и Телефонии
invoice.pos.
1
.name=Услуги Интернет и Телефонии за $month
invoice.pos.
1
.summ=SERVICE_ACCOUNT($month,
2
,
3
)
invoice.pos.
2
.title=Абонплата за Интернет и Телефонию
invoice.pos.
2
.name=Абонплата за Интернет и Телефонию за $month
invoice.pos.
2
.summ=SERVICE_ACCOUNT($month,
1
)
Возможно суммирование и вычитание макросов суммы и количества. Например, следующим образом можно добавить в наработку определённые виды расходов:
invoice.pos.
3
.summ=
SERVICE_AMOUNT
(
$month
,
101
,
102
)+
CHARGE
(
$month
,
14
,
8
,
1
,
54
,
32
)