restart писал(а):
Пожалуй, проблема реально существует только с текстовыми конфигами, ибо там действительно невозможно сделать "срез" так, чтобы вот этот конфиг действовал с 01.01 по 31.05, а вот этот с 01.06. По поводу тарифных планов. А насколько правомочно вообще в таком случае редактирование тарифного плана? У нас есть возможность отмечать ТП как "не используемый", так пожалуйста. Если Вы грубо говоря вместо 1 руб\мб стали брать 0.8 руб\мб, то разве это тот же самый ТП? Закрываете старый, открываете новый и вуаля. Либо же внутри используете узел "период", опять же.
restart писал(а):
Вот надо будет Василию Пупкину переобсчитать старый месяц. Вот откатите Вы только его личный закрытый период - он ведь все равно будет переобсчитан уже по новой логике? Ровно точно также, как если бы Вы в текущей ситуации указали единственный договор для переобсчета.
Да, но это всплывёт сразу же, и только для него одного, а не во время сверки балансов.
Кроме того, в некоторых случаях нельзя пересчитать услуги только для одного договора: переобработка логов телефонии, netflow, максимальные трафики.
restart писал(а):
Вообщем, какой смысл городить этот огород ради исключения одной единственной ошибки вида "откатил закрытую дату и случайно переобсчитал всех ;("? Потому что, исключив эту ошибку из рассмотрения, мы не получаем абсолютно никакого профита, а только создаем новые потенциальные ошибки.
Проблема не в ошибке как таковой. Эта ошибка просто самая распространенная.
Мне не нравится вот это:
Cromeshnic писал(а):
Я никогда не могу уверенно сказать, что при пересчете вот этого договора у меня всё останется по-прежнему.
Т.е. даже если все процедурные вещи выполнять без ошибок, нельзя быть уверенным, что клиента не закроет сегодня из-за того, что у него изменились данные за предыдущие месяцы. Есть слишком много вещей, изменяющих баланс. Скажем, в 1С баланс меняется только при проведении "документов" (насколько я знаю). Т.е. есть одна точка входа для этого, которую можно контролировать. В биллинге же цепочка "данные"->"наработка"->"баланс" вызывается откуда угодно и выполняется в разных методах. Контроль предлагается в виде закрытого периода, который блокирует цепочку не в одном месте, а в при выполнении каждого действия, которое её вызывает - в каждый Action вставлена примерно такая проверка:
Код:
if (!checkDatesByClosedDate(olddate1, newdate1))
{
setErrorStatus("Устанавливаемая дата входит в границы закрытого периода!");
return;
}
По крайней мере, в 5.0 это так.
Выглядит не особо надёжно.
Вообще, на биллинг навешано много посторонних функций: CRM, Helpdesk, выставление счетов, плагин Documents, ... . Это хорошо - для маленьких компаний проще работать в одной системе, если задачи и масштабы небольшие. Потом от этих функций более-менее легко отказаться, отключив соответствующие плагины в BGBilling и перенеся функционал во внешнюю систему. Но, выходит, один функционал перенести нельзя - это функционал учетной системы. Функционал ведения баланса клиента. Мне не нужно тащить баланс клиента с предыдущих месяцев в биллинге, мне нужен только текущий, операционный баланс для принятия решения о доступе к услугам. Остальное - дело 1С, от биллинга требуется только раз в месяц выгружать наработку, платежи mps и принимать из 1С остальные платежи.
Родилось другое предложение: сделать функционал автоматического трансфера баланса по месяцам опциональным - чтобы можно было глобально выключить эту функцию. Тогда при пересчете конкретного месяца изменяется contract_balance только для него. Если нужно протащить изменения до текущего месяца - нажимаем специальную кнопку для этого. Для протаскивания баланса при переходе месяца делаем задачу планировщика, которую настраиваем на 1 число каждого месяца, после выполнения пересчетов. Затем, после выгрузки данных в 1С, выставления счетов и закрытия бухгалтерского периода, явно устанавливаем входящий баланс текущего месяца, взятый из 1С как внешней учетной системы. Это делают уже свои внутренние скрипты.
Единственная возникающая проблема - это возможное расхождение между исходящим остатком одного месяца и входящим - другого. Но это нормально при такой реализации, т.к. мы сознательно отказались от функций учетной системы - биллингу важно правильно посчитать и отдать только текущую наработку. В крайнем случае, можно сделать отчет по таким расхождениям и искать косяки уже по нему. Также логично отключить в ЛК пункт меню "просмотр баланса" и вместо него интегрировать этот функционал из внешней учетной системы.
При такой реализации мы будем начинать месяц с чистого листа. Внутри компании обсудили схему с бухгалтерией и IT-отделом, всем нравится.
discuss?