powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Сортировка (с конца одного поля на начало другого)
45 сообщений из 45, показаны все 2 страниц
Сортировка (с конца одного поля на начало другого)
    #32547812
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно формулировка темы получилась немного кривоватой.
Похожую проблему где-то видел на форуме, но сейчас немогу найти.

есть месяц и пары чисел (начальные и конечные показания электросчётчика)

Код: plaintext
1.
2.
3.
4.
5.
6.
 /*Должно быть вот так*/ 
янв2004  9960    9995 
фев2004  9995    50    /*Вот тут произошёл полный оборот */ 
фев2004  50      200   /*За один месяц в один день абонент может проплатить и двумя квитанциями — ему по барабану мои трудности */ 
мар2004  200     350 
апр2004  350     450 
апр2004  450     600 

Поскольку обработка квитанций после сберкассы идёт вручную, то забить в базу могут в любом порядке.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 /*Может получиться вот так*/ 
янв2004  9960    9995 
фев2004  50      200  
фев2004  9995    50   
мар2004  200     350 
апр2004  450     600 
апр2004  350     450 
Но на экране я должен показать логичную последовательность.
Никакой ORDER BY тут не катит. Объём маленький всего 40-50 записей на одного абонента за три года(один, редко два, платежа в месяц). Массово всю базу(мильёны записей) сортировать не надо. Только одного абонента, когда он затребовал распечатку своих платежей. Мне нужна любая помощь(подсказка, ссылка) в написании алгоритма — либо на сервере средствами SQL, либо на клиенте в ClientDataSet`ах.
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32547849
Фотография Мигалка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хранить не показания счетчика (или не только), а реальные числа:
Код: plaintext
1.
2.
фев2004  9995    10050 
фев2004  10050      10200 
мар2004  10200     10350 
При забивке квитанций 50 исправлять на реальное значение автоматом
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32547859
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хранимая процедура (алгоритм):
выбрать первую строку в first_col, sec_col
цикл:
искать сл. sec_col
выбрать в first_col, sec_col где first_col = sec_col
конец цикла.
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32547861
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
рабочий вариант могу дать, только значительно позже :)
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32547878
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторвыбрать в first_col, sec_col где first_col = sec_col
Согласен. Об этом думал. Выглядит очень даже логично, но если для каждого следующего first_col есть равный ему предыдущий sec_col. А если его нет - пропустили одну квитанцию (потеряли) при упаковке в сберкассе - распаковке у меня в операционном зале. В самом общем виде пока не дотягиваю.
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32547918
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не существует однозначного всеобщего решения данной задачи в рамках представленных исходных данных. Например:

Код: plaintext
1.
2.
3.
4.
5.
было  2  полных оборота за месяц
фев2004   9995      50   
фев2004      50     200  
фев2004    200    9995   
фев2004   9995      50   
фев2004      50     200  

Как различить вторую и пятую записи ? Правильно, никак !
Значит нужны дополнительные признаки...
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32547924
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...или дополнительные ограничения...
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32547961
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Johnmen
Я не спорю, какие-то дополнения должны быть. Но какие? Номер квитанции, который пропечатала сберкасса? Абонент может высыпать кучку квитанций и в каком порядке их обработает кассир неизвестно. Но на два полных оборота за один месяц можно не обращать внимания. Абонент с таким бешеным потреблением энергии это эксклюзив. Его выловим другим способом и поставим более мощный счётчик (другой модели) пусть потребляет - криминала нет. Красота и марафет в этом случае не нужны. Мне важно красоту и понятность навести для основной массы абонентов(большинство пенсионеры) чтобы они меньше тратили времени и быстрее понимали распечатку сравнивая со своими корешками квитанций. Вот корешки-то они сами отсортировали так как надо - можете быть уверены на 100 баллов.
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548067
vl2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не забывай еще про такую вещь, как замена счетчика. При этом нарушается последовательность показаний.
Я у себя решил этот вопрос так:
храню не месяц и год, а полную дату показания, причем два показания на одну дату не допускаются. Это позволяет делать и замены счетчиков, и смену тарифов и т.д.
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548086
Фотография VF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 vl2000
всё гениальное просто
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548090
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВАУ!!! vl2000 — родственная душа! Ты из какого Энерго?

Замену счётчика я разрулил и достаточно оптимально с точки зрения скорости БД. Интересует сортировка в пределах одного счётчика и лучше всего на клиенте.
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548107
vl2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саратовэнерго, Приволжские эл. сети
А ты?
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548117
vl2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь, не обратил внимания на профиль. Наверное из НижНовЭнерго7
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548128
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vl2000причем два показания на одну дату не допускаются
Допускаютя! И ничего с этим не сделать. Особенно когда продвинутые абоненты платят через ИнтерНет с пластиковых карт. Тот кто разрабатывал сайт для оплаты предусмотрел только дневной и ночной тарифы и НЕ предусмотрел оплату 40 кВт на человека по базовому тарифу.
Поэтому абоненты в один день делают два платежа
1. 40 кВт на человека по базовому
2. Оставшиеся кВт-ы по экономически обоснованному - ёбтть
А потом это валится мне.

>vl2000
Наверное из НижНовЭнерго7

Оно самое.
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548268
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Общее решение в предположении, что за рассматриваемый период (напр.месяц) счётчик не делает "полный оборот" и последовательность снятых показаний "непрерывна" (т.е. V1=100-V2=200,V1=200-V2=300,...):

1. Получаем "последнее" показание, не имеющее "продолжения" (VMax)
SELECT T1.V2 FROM T T1
WHERE NOT EXISTS (SELECT 0 FROM T T2 WHERE T1.V2=T2.V1)
2. Получаем, что хотим
SELECT CASE WHEN (V2<=VMax) THEN V2 ELSE V2-VConst, T.* FROM T
ORDER BY 1

где VConst - максимально возможное показание счетчика (напр.9999).
Ну и, естественно, добавить условие по интересующему периоду времени.
И сервер должен поддерживать CASE.
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548310
vl2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Johnmen
Если предполагать что:
счётчик не делает "полный оборот" и последовательность снятых показаний "непрерывна"
то можно обойтись простым:
SELECT d,t1,t2 order by d,t1
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548394
vl2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
правильно сказал Johnmen:
нужны дополнительные признаки...
...или дополнительные ограничения..
А конкретно, дата, на которую снималось показание счетчика, а если за день снимается несколько показаний (меняются счетчики и т.п.), то еще и время.
Причем это НЕ дата, когда абонент оплачивал квитанцию, а Дата показаний.
Как же вы без этой даты определяете действующий тариф?
Например, тариф менялся 10 мая. А у вас два показания- и оба за май, одно до 9 мая, другое 31. Как узнаете, какому показанию- какой тариф?
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548444
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У нас и делается ;)
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548508
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>vl2000

Достаточно тех ограничений, которые я указал (их и имел в виду автор, я думаю).
А что касается временного интервала, частоты снятия показаний и т.п. это абсолютно не важно и роли не играет.
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548568
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну скажем, в середине месяца тарифы не меняются — по закону. Иначе население такое устроит, что министру, рискнувшему сменить тариф в середине месяца, придётся расстаться с креслом. А тариф будет отменён.
Абонент оплачивает потребление за конкретный месяц - это он указывает в квитанции. И проблема возникает, когда ...
Старый пример:
Раньше до 300 кВт был один тариф от 301 кВт другой тариф.
Хитрые абоненты, израсходовав в месяц 900 кВт, платили тремя квитанциями по 300 кВт в один день, указывая один и тот же месяц напр. май.
Все три квитанции попав в БД будут расчитаны правильно 300 и от 301 до 900.
Три раза по 300 кВт по маленькому тарифу это меньше чем 300 по маленькому и 600 по большому. Я ему насчитаю правильную задолженность, а он придёт качать права.
Проблема только в визуализации истории этих евойных платежей. Чтобы ему было проще увидеть, где я его ущучил. Если показания будут отсортированы как-то иначе (не логично и не последовательно) он начнёт скандалить, обвинять во всём компьютер и... (...баного Чубайса).
Проблема осложняется только двумя моментами
1. Произошёл оботот(переход) счётчика
2. При забивке в БД потерялась одна квитанция.
Мне по барабану эти осложнения и даже замена счётчика, расчитаю-то я всё-равно правильно. Главное показать (визуализировать).

Допущения типа в один месяц одна квитанция не проходят — это практика. Теория в данном случае никого не интересует. Должно быть так как на практике.
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548572
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не пойму я чё вы маетесь...
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT T.* FROM TableN T
ORDER BY T.Month_N,
      CASE
        WHEN (T.F2 > T.F1) THEN  1 
        ELSE - 1 
      END,
      T.F1
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548586
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Zmeishe

Я уже ответил.
Добавлю, что если потеряли одну при забивке, то в первом запросе получим 2 значения для не имеющего "продолжения". Принимаем решение о дальнейших действиях...

>Мимопроходящий
>Не пойму я чё вы маетесь...

А ты постарайся...

...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548601
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для той задачи, которую описал Zmeishe, мой запрос подходит уполне.
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548629
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не подойдет. Однозначно...
:)
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548648
vl2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Мимопроходящий
А если будет такой вариант (счетчик трехзначный):

янв 10 40
янв 45 90 (переход через 0)

есть гарантия, что твой запрос не сделает так:

янв 45 90 (переход через 0)
янв 10 40
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548660
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548687
vl2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>мимопрох..
беру свои слова обратно, просмотрел третье выражение в ORDER BY
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548699
vl2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а для 3-х показаний?
20 40
40 90
25 30 (переход через 0)
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548705
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мим
CASE
WHEN (T.F2 > T.F1) THEN 1
ELSE -1
END,
T.F1

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 /*Должно быть вот так*/ 
янв2004  9960    9995 
фев2004  9995    50   
фев2004  50      200  
мар2004  200     350 
апр2004  350     450 
апр2004  450     600 

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
У тебя
фев2004  9995    50   - 1 
фев2004  50      200    1  
мар2004  200     350    1 
апр2004  350     450    1 
апр2004  450     600    1 
янв2004  9960    9995     1 

...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548710
vl2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Johnmen
нет, там вначале по месяцу идет сортировка
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548718
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал.
На клиенте есть цикл по всему НД - для доп. вычислений и марафета. Как я писал всего 30-40 записей поэтому мгновенно.
Добавил в НД одно служебное поле NUM и в этот цикл впихнул условие из идеи Мима.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
if(cdsFaceAccountST_COUNTER->Value > cdsFaceAccountEN_COUNTER->Value)
      cdsFaceAccountNUM->Value =  0 ;
else cdsFaceAccountNUM->Value =  1 ;

cdsFaceAccount->IndexFieldNames = "PAYMENT_MONTH;EN_DATE_COUNTER;NUM;ST_COUNTER";
PAYMENT_MONTH - Месяц 
EN_DATE_COUNTER - Дата снятия счётчика (для ныне действующего '01.01.5941');
NUM - Это самое служебное для сортировки на момент полного оборота
ST_COUNTER - Начальные показания счётчика
Всё получилось. Два и более полных оборотов за месяц - да бог с ними. Абонент ни в жизнь не покажет больше одного. Он что дурак платить за два оборота, когда можно за один. Оно же не доказуемо.
Спасибище всем потратившим на меня время.
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548724
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>vl2000
>нет, там вначале по месяцу идет сортировка
&
>Те, кто в танке

Это НЕ ИМЕЕТ ЗНАЧЕНИЯ !
См. по-другому:

Код: plaintext
1.
2.
3.
4.
5.
6.
 /*Должно быть вот так*/ 
янв2004  9960    9995 
янв2004  9995    50   
янв2004  50      200  
янв2004  200     350 
янв2004  350     450 
янв2004  450     600 

...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548727
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Johnmen: ты наверное не мой запрос выполнял
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548730
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Мим

Твой твой ! Для данных, приведенных выше.
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548741
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как занятно, у тебя данные
Код: plaintext
1.
2.
3.
4.
5.
янв2004  9960    9995 
фев2004  9995    50   
фев2004  50      200  
мар2004  200     350 
апр2004  350     450 
апр2004  450     600 
превратились вдруг в
Код: plaintext
1.
2.
3.
4.
5.
янв2004  9960    9995 
янв2004  9995    50   
янв2004  50      200  
янв2004  200     350 
янв2004  350     450 
янв2004  450     600 
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548754
Фотография Johnmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо прикидываться дурачком
Я надеюсь, ты всё прекрасно понял...
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548765
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не-а. Я никуя не понял.
Змей задачу поставил? Поставил.
Я задачу решил? Решил.
И фули?
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548775
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, вообще-то да
Код: plaintext
1.
2.
3.
 Если этот гадёныш всю кучу квитанций в один месяц, то будет именно так
янв2004  9995    50      0 
янв2004  50      200     1 
янв2004  9960    9995    1 
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548780
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гадёныш — это абонент.
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548844
vl2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не, тут надо вводить дату показания.
если есть показание счетчика, значит есть и дата, когда это показание сняли.
Есть дата, можно отсортировать.
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548889
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>не, тут надо вводить дату показания
Обьясни это абонентам - у меня их 1`500`000 чел.
Выдай инструкцию каждому. Типа если вы хотите один месяц оплатить разными квитанциями, то сначала отсортируйте эти квитанции по показаниям счётчика, а затем проставьте разные даты тоже в порядке возрастания.
Уверяю тебя - им насрать на наши неудобства. Поэтому рулить придёться математически. Надо изобрести доп параметр - будем изобретать. Но только служебные доп параметры. Чтобы в квитанциях ничего лишнего для населения не было.
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32548914
Фотография Мигалка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
им насрать на наши неудобства - подтверждаю!

Абонент

:)
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32582293
Андрей12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет, коллеги!

Я тоже работаю в энергетике. Для своего отдела сбыта написал простенькую программку по обсчёту частников. Могу поделиться, если это кому-нибудь нужно. Правда, писал на связке Линтер/ЛАБ - дабы побыстрее заткнуть проблемный участок. А теперь потихоньку перевожу всесь комплекс сбыта электоэнергии (отделы договорной/частники/промсектор) на ФБ/Дельфи, на полноценную КИС.

Данную задачу решил следующим образом. Вся история взаимоотношений поставщика с абонентом выводится в одном окне "Картина расчетов", по данному лицевому счёту. Картина расчетов разделена вертикальной черной линией на две части: исходные данные (слева) и расчетная часть (справа). Исходные данные - это то, что вносят операторы: показания счетчиков, оплата, данные о льготах и субсидиях и т.д. Расчетная часть недоступна для непосредственного изменения оператором и служит только для показа результатов расчетов. На основании произведённых расчётов печатаются квитанции, которые кидаются абонентам по почтовым ящикам.

Самое первая колонка "Картины расчётов" - флаг расчитанных записей. То есть вся картина делится как бы на две части: нижняя часть, отмеченная галочками в первой колонке - расчитанные записи; верхняя часть - нерасчитанные записи (галочки не выставлены). Потребление расчитывается очень просто, как разница текущих и предыдущих показаний. Соответственно, как только появилась расчитанная запись, на основании расчитанного потребления вычисляется стоимость (общая/льготная и т.д.), определяется сумма к оплате и т.д. Как только в любую запись вносится какое-либо изменение (изменение/добавление/удаление записи), то данная запись и все последующие сбрасывают флаг "Запись расчитана". На печать выдаются только расчитанные записи, то есть показанная на картинке квитанция получается только на основании расчитанной записи о потреблении (в данном случае - от 29.06.2001).

Скриншот можно посмотреть вот тут: http://tpaktop040310.pochta.ru/kr2.jpg

На картинке последняя колонка, "Долг", показывает задолженность потребителя перед поставщиком красным цветом, а переплату ("предоплату") - черным. Обратите внимание, что самая верхняя строка потребления, с датой 28.07.2002, пока ещё не расчитана и поэтому в колонках Расход, Стоимость, Оплата, Долг нет никаких цифр и галочка в самой первой колонке не проставлена.

Такая структура данных позволила отказаться от избыточных записей типа "Месяц - Предыдущие показания - Текущие показания". Мной использована более простая и надёжная структура "Дата - Показания".

Таким образом, "Картина расчётов" показывает всю историю взаимоотношений потребителя и абонента (клиента) - установку и снятие Аппарата Учёта (счётчик/по среднему), назначение льгот, потребления и оплаты и т.д. Самое главное - в любой момент постояно можно видеть картину изменения долга потребителя, то есть легко вычисляется кто есть кто - "злостный" задолженник или честный плательщик.
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32582346
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет. Ты из какого Энерго? Я собираю такие где используют IB/FB. В нашем полку г. Владимир, г. Cаратов, вполне возможно г. Тамбов.

авторПотребление расчитывается очень просто, как разница текущих и предыдущих показаний.
Тебе повезло, либо у тебя абоненты дисциплинированные как немцы и аккуратно указывают показания счётчика, либо твоё Энерго уже перешло на технологию выставления счетов, когда за абонента показания указывают обходчики. А мои могут вообще никаких показаний не указывать, только сумму. Либо указывают, но мне пришлось создать такую математику, которая перед вставкой в таблицу анализирует какое из них начальное, а какое конечное.
"Крышу сносит неспеша"

В общем я пришёл к выводу, что такая сортировка похожа на обработку деревовидной структуры. Начальное показание это ID, конечное - ID_PARENT. Обработка "дырок", когда квитанция потеряна, это доп. условия.
...
Рейтинг: 0 / 0
Сортировка (с конца одного поля на начало другого)
    #32584373
Андрей12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет!

ZmeisheТы из какого Энерго? Я собираю такие где используют IB/FB. В нашем полку г. Владимир, г. Cаратов, вполне возможно г. Тамбов.
г. Петропавловск-Камчатский

Zmeishe авторПотребление расчитывается очень просто, как разница текущих и предыдущих показаний.
Тебе повезло, либо у тебя абоненты дисциплинированные как немцы и аккуратно указывают показания счётчика, либо твоё Энерго уже перешло на технологию выставления счетов, когда за абонента показания указывают обходчики.
У нас показания снимают контролеры, т.к. основная масса счётчиков находятся вне квартир, на лестничных площадках. Те потребители, у кого счётчик внутри квартиры, сами приносят показания. Периодически их проверяют контролеры.

ZmeisheА мои могут вообще никаких показаний не указывать, только сумму. Либо указывают, но мне пришлось создать такую математику, которая перед вставкой в таблицу анализирует какое из них начальное, а какое конечное.
Нужно просто приучить потребителей, что каждый месяц, с немецкой точностью :-) к ним в почтовый ящик падает квиток с расчетом - потребление, стоимость, оплачено за период, итого к оплате. И они наглядно видят, как с каждым месяцем у них в квитках накапливается/уменьшается долг. Так что у нас потребители могут платить любую сумму - хоть несколько раз в день приносить по 100 рублей, хоть один раз в год заплатить 10 тысяч, это непринципиально.

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

Zmeishe"Крышу сносит неспеша"

В общем я пришёл к выводу, что такая сортировка похожа на обработку деревовидной структуры. Начальное показание это ID, конечное - ID_PARENT. Обработка "дырок", когда квитанция потеряна, это доп. условия.
Чем сложнее логика, тем больше вероятности появления хитрой ошибки. У меня всё гораздо проще, логика чисто линейная. Если по какой-либо причине пропущена запись потребления, то абонент не получит квитанцию с расчётом, а на следующий месяц ему придёт квитанция, в которой автоматически накопилось потребление уже за два месяца (Операторы делают круглые глаза и уверяют клиента, что он сам должен следить за сохранностью своего почтового ящика :) ).

И вообще, я принципиально стою на позиции "в БД вносятся только фактические данные". То есть в программе абсолютно не должно допускаться никаких догадок и остроумных "обратных" расчётов, типа вычисления показаний счетчика по внесённой сумме оплаты...

Логика должна быть железная и только однонаправленная:

Очередные показания аппарата учёта => Вычисление потребления => Вычисление стоимости потреблённой энегрии => Отнять льготы/Добавить долги => Итого к оплате

Иначе это будет не производство, а бардак.
...
Рейтинг: 0 / 0
45 сообщений из 45, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Сортировка (с конца одного поля на начало другого)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]