BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 17 июн 2025, 03:59

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




Начать новую тему Ответить на тему  [ Сообщений: 48 ]  На страницу Пред.  1, 2
Автор Сообщение
СообщениеДобавлено: 20 сен 2010, 12:26 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Идея с альтернативной таблицей contract_account всё больше нравится.

Логика вполне нормальная: посчитали один раз, выгрузили наработку в 1С выставили счета и больше не трогаем.
При пересчете выбираем: либо применяем изменения в том же месяце, либо обрабатываем их вручную (тут можно даже стандартный обработчик сделать: указываем тип расхода и целевой месяц - сумма разниц по услугам вносится расходом). Отслеживать отдельно, какие перерасчеты обработаны, какие нет - не нужно имхо.

restart писал(а):
Следовательно нужно установить контроль на выходе из этого процесса. Уже после перерасчета определять, верно ли он был произведен и, в случае положительного ответа, принимать эти изменения, не входя в противоречие с бухгалтерией. И все равно уже здесь мы жертвуем корректностью, например, детализацией за пересчитанные месяцы, которые не будут верны в случае ошибочного перерасчета.


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


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

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
max писал(а):
по моему важным моментом будет добавить в шедулер задачу которая бы проверяла баланс в договоре биллинга с балансом в контрагенте 1с. Суть реализации заключается в формировании баланса договора на определённую дату и передачи его некому внешнему приложению, например скрипту, а там реализуйте хоть чёрта с рогами.


Это внешняя логика по отношению к биллингу и реализуется индивидуально.

Кстати, в BGBilling при желании можно писать собственные задачи шедулера в виде java-классов ;)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 сен 2010, 12:43 
Не в сети
Клиент

Зарегистрирован: 27 окт 2009, 16:17
Сообщения: 319
Откуда: Иркутск
Карма: 18
Ок. Тема с обсчетом наработки в 2 этапа тоже выход.
Тогда нужно делить не только contract_account, но и детализацию для каждого направления услуг (модулю).

Далее предусмотреть удобный механизм работы с разногласиями в наработке:
оформление дельты, расходом (услугой) на месяц по выбору для одного договора и для кучи договоров, чтобы не пришлось ходить по одному договору и тыкать кнопку "перенести дельту на текущий месяц".


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

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Не, дельта переносится в нашей бизнес-логике только индивидуально.
Вот применение пересчета в том же месяце - массово, в период перед выставлением счетов.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 сен 2010, 13:56 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
А может , лучше алгоритм, предложенный lda :
viewtopic.php?f=4&t=3571&hilit=%D0%B1%D0%BE%D0%BD%D1%83%D1%81

Т.е завести отдельную колонку перерасчёт в этом месяце . Но и немного надо изменить эту идею, т.е сделать детализацию этой колонки по услугам и месяцам . Т.е просто в сентябре пересчитываем за июль конкретную услугу , и разница попадает в отдельным полем в баланс сентября(баланс июля остаётся неизменным) . Если потом попытаетесь, например, в октябре снова пересчитать июль эту услугу , то нужно учесть это поле, добавленное в сентябре .

Тут подсказывают - убрать балансы из биллинга вообще не получится. Вроде бы по сертификату счета должен выставлять биллинг , а не 1с.


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

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Ой, так это модификация той же идеи.
Хотя сырая - допустим, мы пересчитали в сентябре (текущий месяц) июнь - изменение наработки за июне внесли с разбивкой по услугам в табличку сентября. Тут же решили пересчитать ещё и июль - куда девать эту дельту, тоже в сентябрь? Логичнее хранить именно для того месяца, который пересчитываем - как и предлагалось, сделать дополнительную табличку contract_account_live, куда будут попадать данные пересчетов модулей. А в contract_account наработка попадает уже вторым этапом, если нужно. Как использовать эти таблицы для пересчетов - уже другой вопрос.

Цель - не пересчеты как таковые, а сделать contract_account за прошлые месяцы фиксированной.

stark писал(а):
Т.е просто в сентябре пересчитываем за июль конкретную услугу , и разница попадает в отдельным полем в баланс сентября

А за июль данные меняются?


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

Зарегистрирован: 08 мар 2007, 20:44
Сообщения: 1570
Откуда: Челябинск
Карма: 18
stark писал(а):
А может , лучше алгоритм, предложенный lda :
viewtopic.php?f=4&t=3571&hilit=%D0%B1%D0%BE%D0%BD%D1%83%D1%81

Т.е завести отдельную колонку перерасчёт в этом месяце . Но и немного надо изменить эту идею, т.е сделать детализацию этой колонки по услугам и месяцам . Т.е просто в сентябре пересчитываем за июль конкретную услугу , и разница попадает в отдельным полем в баланс сентября(баланс июля остаётся неизменным) . Если потом попытаетесь, например, в октябре снова пересчитать июль эту услугу , то нужно учесть это поле, добавленное в сентябре .

Тут подсказывают - убрать балансы из биллинга вообще не получится. Вроде бы по сертификату счета должен выставлять биллинг , а не 1с.

слижком сложно и громоздко. правильно будет всётаки делать такую штуку типа закрытия месяца в 1с, где дать возможность гибко поступать с прошлым месяцем, для начала выводить компактно балансы, и спрашивать у/н?
идея с доп таблицей не лишена смысла....
а дальше домысливать нада...

_________________
Интернет и телефония оптом со склада, или в розницу


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 21 сен 2010, 09:34 
Не в сети
Клиент

Зарегистрирован: 27 окт 2009, 16:17
Сообщения: 319
Откуда: Иркутск
Карма: 18
Цитата:
Цель - не пересчеты как таковые, а сделать contract_account за прошлые месяцы фиксированной.

Вот именно.

Далее уже в случае появления дельты у наработки отдельный механизм, который с этой дельтой что-то сделает.


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

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
Попробую обобщить теоретические труды предшествующих авторов..

1) По результату переобсчёта дельта заносится в отдельную таблицу contract_account_delta со столбцами:
год
месяц
услуга
стоимость
перенесена на год
перенесена на месяц

Если переобсчёт производится ещё раз, то таблица дельты меняется. Если месяц закрыт, то результаты переобсчётов меняют только таблицу дельты.

2) В какой-то последующий месяц дельту нужно зачесть в баланс.
Всякая дельта должна быть зачтена в какой-то из последующих месяцев.
Незачтённые дельты как-то заносятся на баланс и отображаются там наподобие расходов разных знаков.

Что-то вроде:
Перерасчёт услуг "Входящих трафик" за март 2010 +10 руб. (недосчитали)
Перерасчёт услуг "VoiceIp" за март 2010 -30 руб. (насчитали лишнего)

3) Соответственно в модуле Bill будут отдельные макросы для извлечения этих перерасчётов и подстановки в счета-фактуры-акты.

По поводу детализации - если документы уже выставлены, то детализация в них включена.
От перерасчётов она не изменится. Так что можно в базе менять её, наверное.


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

Зарегистрирован: 19 мар 2009, 16:15
Сообщения: 210
Откуда: Уфа
Карма: 27
Тогда тут же еще вопрос: нужно ли заводить под это дело совершенно новую сущности типа "Перерасчет", которая будет идти отдельным столбцом в таблице contract_balance? Или же просто вносить это изменение как платеж (если положительный) или расход (если отрицательный)?

Подводные камни какие: есть 100500 отчетов и 200500 скриптов, в которых а) наличествует своя логика подсчета текущего баланса, б) вычисляется, является ли договор должником, что в общем случае приводит к тому, что не происходит вызовов getBalance из BalanceUtils, а идет прямое обращение к таблице. Соответственно, добавляя эту новую сущность мы получаем некорректно работающие отчеты и скрипты. Это самое очевидное следствие, возможно есть что-то еще.

Есть ли объективные непреодолимые причины считать эти "дельты" отдельными сущностями баланса или же можно обойтись существующими (расход и платеж)?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 22 сен 2010, 16:22 
Не в сети

Зарегистрирован: 16 ноя 2007, 16:11
Сообщения: 829
Карма: 49
А дельта может быть сущностью баланса, если она в него не попадает?


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

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Всё свели к пересчетам :(
Посоветовался с менеджерами, которые занимаются пересчетами - они не воодушевились. Сейчас объясню, почему.
Пересчеты у нас бывают двух типов:
1) "Внешние" - пересчеты по договорённости, суммы берутся с потолка. Например, возмещают время простоя из-за аварии, делают скидку, если клиент много накачал по трафику и т.п.
2) Пересчеты из-за неверного начисления в биллинге:
а) Ошибка на уровне договора (был указан не тот тариф, неправильно проставлена абонплата и т.п.)
б) Ошибка глобальной конфигурации (в глобальных тарифах, конфигурации модулей и т.п.)

2-а: Сейчас менеджеры считают разницу руками и проставляют соответствующий расход. Предложил, чтобы это считал биллинг - не увидел интереса. Во-первых, большинство таких пересчетов - абонплаты, которые легко считаются на калькуляторе (а если не абонплаты, то можно взять примерную сумму). Во-вторых, придётся изменять сущности на договоре задним числом, откатывать период - потом сложнее, чем в 2-б, разбираться, откуда взялась именно такая наработка. Нарушается та самая целостность (она и сейчас нарушается, но только в результате ошибок - см. сноску *).
Важно: Поскольку в этом случае открывается период, то не стоит привязывать логику таких начислений дельты к нему - будет много ошибок, т.к. сначала нужно открыть период для внесения изменений, затем закрыть и уже тогда пересчитать, чтобы баланс не съехал.
2-б: Здесь уже можно использовать contract_account_delta как средство пересчетов. Но такое бывает довольно редко.
Я вспоминаю только один раз - неправильно посчитались какие-то трафики, пришлось пересчитывать предыдущий месяц куче клиентов, предварительно сделав срез балансов, затем скриптом создавать догоняющие счета на дельту. Ужас.

По пунктам:

Администратор писал(а):
1) По результату переобсчёта дельта заносится в отдельную таблицу contract_account_delta со столбцами:
год
месяц
услуга
стоимость
перенесена на год
перенесена на месяц

Если переобсчёт производится ещё раз, то таблица дельты меняется. Если месяц закрыт, то результаты переобсчётов меняют только таблицу дельты.


Да. Хранить или дельту, или новую наработку - без разницы. Только пожалуй лучше не привязывать эту логику к закрытому периоду, а сделать отдельный параметр. Закрытый период часто откатывается. Кроме того, сейчас в закрытом периоде начисления производить нельзя, но проблемы возникают, когда его открывают и пересчитывают не то и не тем. Т.е. лучше эту настройку отделить.
Корни проблемы в том, что глобальные действия и действия уровня договора не разделяются в закрытом периоде: приходится открывать его для всех действий.

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

Насчет "должна" - не думаю.

Администратор писал(а):
Незачтённые дельты как-то заносятся на баланс и отображаются там наподобие расходов разных знаков.

Тоже необязательно. Т.е. не стоит строго требовать обработки дельты и вести учет: обработано, или нет.
Попробую представить, как будем пользоваться этим.
Возможны два случая:
1) Дельта появилась в результате осознанных действий пользователя: мы сами разбираемся с дельтой - после пересчета вносим её расходом соответствующего знака в текущем месяце. Причём в нашем случае расход один - сумма дельт по услугам.
2) Пересчет произошел по ошибке - за определённый месяц на некотором договоре появились дельты => нужно разбираться. По резульатам ошибка либо исправляется, либо нет (те же netflow.link в dialup), но таблица contract_account_delta обнуляется руками для этого договора + бьём по рукам тому, кто запускал начисление. Отслеживать такие изменения можно глобальным скриптом по расписанию, который шлёт на email отчет. Тогда в первом случае тоже нужно обнулять contract_account_delta для договора при "легальном" пересчете, чтобы они не появлялись в отчетах.

restart писал(а):
Тогда тут же еще вопрос: нужно ли заводить под это дело совершенно новую сущности типа "Перерасчет", которая будет идти отдельным столбцом в таблице contract_balance? Или же просто вносить это изменение как платеж (если положительный) или расход (если отрицательный)?

Подводные камни какие: есть 100500 отчетов и 200500 скриптов, в которых а) наличествует своя логика подсчета текущего баланса, б) вычисляется, является ли договор должником, что в общем случае приводит к тому, что не происходит вызовов getBalance из BalanceUtils, а идет прямое обращение к таблице. Соответственно, добавляя эту новую сущность мы получаем некорректно работающие отчеты и скрипты. Это самое очевидное следствие, возможно есть что-то еще.

Есть ли объективные непреодолимые причины считать эти "дельты" отдельными сущностями баланса или же можно обойтись существующими (расход и платеж)?

Нет, это всё лишнее.

Цитата:
3) Соответственно в модуле Bill будут отдельные макросы для извлечения этих перерасчётов и подстановки в счета-фактуры-акты.


Ну, нам оно не требуется пока.
Вообще, за полгода использования схемы пересчетов через расходы никто не просил расшифровать в детализации, что значит строка "Корректировка" в счете, за какие услуги и месяцы она посчитана - уже знают от менеджеров.

Цитата:
По поводу детализации - если документы уже выставлены, то детализация в них включена.
От перерасчётов она не изменится. Так что можно в базе менять её, наверное.

Я имею в виду данные в ЛК: логи сессий, звонков и т.п.

Главное для нас - это не переписывать contract_account. Пересчеты - уже как приятное(?) дополнение.

---
* По поводу целостности.
restart писал(а):
Просто напросто нарушается целостность системы

Долго думал - выходит, она и сейчас нарушена: если внести изменения задним числом, но не запускать пересчет, то будет несовпадение исходных данных и наработки. Просто при нашей схеме целостность будет нарушена и после пересчета, но взамен наработка не будет съезжать задним числом.
В любом случае нужно выбирать подход: либо мы жестко задаём процесс обработки данных без промежуточных состояний - любое изменение сразу влечёт полный пересчет вплоть до баланса. Либо ставить забор на каком-то уровне, через который последствия изменений не перелезут.


Последний раз редактировалось Cromeshnic 23 сен 2010, 09:49, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 сен 2010, 09:36 
Не в сети
Клиент

Зарегистрирован: 27 окт 2009, 16:17
Сообщения: 319
Откуда: Иркутск
Карма: 18
Уважаемые коллеги.
Обратимся к теме топика
"Закрытый период" для установки наработки по договору.
Основная цель в том, чтобы наработка прошлых месяцев не менялась.
Для чего - чтобы сумма счета , выставленная клиенту соответствовала сумме наработки (+расходы) на всем протяжении существования договора в системе.

Далее появляются моменты, когда она (наработка) начинает отличаться.
В этом месте появляется механизм пересчетов (дополнительная таблица, перенос дельты на определенный месяц и.т.д)


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

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
Цитата:
2-а: Сейчас менеджеры считают разницу руками и проставляют соответствующий расход. Предложил, чтобы это считал биллинг - не увидел интереса. Во-первых, большинство таких пересчетов - абонплаты, которые легко считаются на калькуляторе (а если не абонплаты, то можно взять примерную сумму). Во-вторых, придётся изменять сущности на договоре задним числом, откатывать период - потом сложнее, чем в 2-б, разбираться, откуда взялась именно такая наработка. Нарушается та самая целостность (она и сейчас нарушается, но только в результате ошибок - см. сноску *).
Важно: Поскольку в этом случае открывается период, то не стоит привязывать логику таких начислений дельты к нему - будет много ошибок, т.к. сначала нужно открыть период для внесения изменений, затем закрыть и уже тогда пересчитать, чтобы баланс не съехал.


Цитата:
Да. Хранить или дельту, или новую наработку - без разницы. Только пожалуй лучше не привязывать эту логику к закрытому периоду, а сделать отдельный параметр. Закрытый период часто откатывается. Кроме того, сейчас в закрытом периоде начисления производить нельзя, но проблемы возникают, когда его открывают и пересчитывают не то и не тем. Т.е. лучше эту настройку отделить.
Корни проблемы в том, что глобальные действия и действия уровня договора не разделяются в закрытом периоде: приходится открывать его для всех действий.


Возможно стоит просто сделать несколько режимов работы - в отрабатыванием проверки закрытого периода и без него. И возможность переключения для некоторых пользователей этого режима.
Сверху большую красную блямбу отображать: "Разрешена работа в закрытом периоде"!

Цитата:
Насчет "должна" - не думаю.


Да, мы уже тоже не думаем :) Просто сделать возможность эти дельты просматривать и разбирать: зачитать/удалять и т.п.

Цитата:
Долго думал - выходит, она и сейчас нарушена: если внести изменения задним числом, но не запускать пересчет, то будет несовпадение исходных данных и наработки. Просто при нашей схеме целостность будет нарушена и после пересчета, но взамен наработка не будет съезжать задним числом.


Будет совпадать, если в отчёте по балансу отображать ещё и дельту и показывать, куда она зачтена.


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

Зарегистрирован: 27 окт 2009, 16:17
Сообщения: 319
Откуда: Иркутск
Карма: 18
Тема как-то развивается ?
Будут соответствующие доработки в биллинге ?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 13 окт 2010, 13:38 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
В TODO записано, будем решать вопрос. По срокам не скажу. Точно в следующих версиях только, т.к. тарификацию в стабильной трогать не будем.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 май 2011, 12:11 
Не в сети
Клиент

Зарегистрирован: 30 мар 2009, 17:51
Сообщения: 431
Карма: 23
Коллеги, поделитесь наработками по данной теме, кто в итоге как у себя контролирует?

Я сейчас думал о сути проблемы и пришел к следующим выводам.
От сознательных но не легитимных изменений (понатыкали куда попало, поменяли не там где надо) сущностей договора пользователем введением закрытых периодов так просто не отделаешься. Все равно де факто приходится производить изменения в закрытых периодах. А если это разрешено кому-то для каких-то исключительных операций - то обязательно будут и те кто сделал/попорсил что-то не так.
Мне видится 2 возможности для тех кто хочет отслеживать такие изминения. "Расширить таблицу" contract_balance полем summa_out_fix, которую калькулировать либо одновременно с установкой закрытого договра для месяцев внутри закрытого периода, либо отдельным событием, после выставления счетов (в 1ске запустили событие выставить счет на такой то месяц - запросились данные, записалась сумма на которую выставлен счет если поле пустое, если в поле уже что-то записано - проверить отличается или нет, если да - устраивать панику с выяснением причин). При дальнейших пересчетах\изменениях можно сравнивать поменялись исходные данные или нет.
Отсюда вытекает второй вариант - допустим приходит указиловка сменить N клиентам задним числом тариф, либо сделать какой-либо пересчет услуг. Делать нечего, открываем закрытый период - вносим изменения и перед тем как нажать кнопку пересчет - запускаем кнопочку проверка изменений на начало текущего месяца\текущий момент, указываем договора\группу договоров\отмечаем все - для которых изменения ожидаемы нами вследствии пересчета (подразумеваем что в случае пересчета для указанных договоро все изменения будут легитимны с точки зрения учета, даже те которые вылезли по недосмотру - сами знали на что шли ведь) - запускается калькуляция услуг (без изменения текущих таблиц) - сравнивается баланс до и после этих изменений - вычисляется для кого что поменялось, были ли они в ожидаемой группе, генерируется список договоров у которых тоже поменяется баланс. Если все сделано правильно, то баланс должен меняться только у измененных нами после открытия закрытого периода договоров, если же он меняется у кого то еще - надо думать в чем было дело, лезить разбираться с тарифами и тд - это уже работа администраторов выяснять почему меняется наработка у того у кого она не должна меняться.

Замечания?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 май 2011, 13:08 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Вроде в последние месяцы массовых проблем со слетающей наработкой не возникало.
1. Стараемся соблюдать закрытый период.
2. При любой просьбе пересчитать задним числом - посылаем лесом. Вместо этого приучаем пользоваться перерассчетами.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 48 ]  На страницу Пред.  1, 2

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


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

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


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

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