Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Не убивайте БРАТЦЫ!!...(special tygra) / 22 сообщений из 22, страница 1 из 1
29.12.2002, 20:51
    #32085629
balbes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не убивайте БРАТЦЫ!!...(special tygra)
Всех поздравляю с наступающим 2003 г. !!!

Идея заключается в том, что бы когда вводятся (или редактируются) очередные данные то при проверке на привышение нормы, если она (норма) превышена то вылетало сообщение и соответственно норма (точнее её количество) ограничивалось по МАХ возможной (т.е. если не использованая норма остается одна, а пользователь вводит две, то маша предупреждает что норма израсходована и вводит только одну норму), либо если все количество норм выбрано то возвращает ноль....
Реализованый мною механизм работает не корректно т.к. при попытке редактирования записей за предыдущий период (т.е. введённых ранее) получается ЛАЖА....

База Paradox...
То как я это пытался реализовать....
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
procedure TFrmOsn.QAccBeforePost(DataSet: TDataSet);
begin
  Date_nper := QAcc.FieldValues['Date_nper'];
  Pkz_n := QAcc.FieldValues['Pkz_n'];
  Base := QAcc.FieldValues['Base_id'];
  Q5.SQL.Clear;
  Q5.SQL.Add('select Pkz_n from Account where Date_nper=(SELECT  max
(Date_nper) From Account WHERE Date_nper<:Date_nper) and Base_id=:Base');
  Q5.Params[ 0 ].AsDate := Date_nper;
  Q5.Params[ 1 ].AsFloat := Base;
  Q5.Open;
  Pkz_n_0 := Q5.Fields[ 0 ].AsFloat;
  if Pkz_n_0 <>  0  then begin
    Pkz := Pkz_n - Pkz_n_0;
  end else
    Pkz :=  0 ;
  QAcc.FieldValues['Pkz'] := Pkz;
  Q5.Close;
  DecodeDate(Date_nper,Year,month,day);
  BeginDate:=EncodeDate(Year, 1 , 1 );
  EndDate:=EncodeDate(Year, 12 , 31 );
  Q5.SQL.Clear;
  Q5.SQL.Add('select SUM(Kol_norm) from Account where Date_nper>=:BeginDate
and Date_nper<=:EndDate and Base_id=:Base');
  Q5.Params[ 0 ].AsDate := BeginDate;
  Q5.Params[ 1 ].AsDate := EndDate;
  Q5.Params[ 2 ].AsFloat := Base;
  Q5.Open;
  Sum_kol_norm:= Q5.Fields[ 0 ].AsFloat;
  Label28.Caption := Q5.Fields[ 0 ].AsString;
  Q5.Close;
  If (Sum_kol_norm-QAccKol_Norm.Value) >  12  then
     Begin
     ShowMessage('ВНИМАНИЕ норма на   ''' +IntToStr(Year)+'''  год
израсходована');
     QAccKol_Norm.Value:= 0 ;
     end
  else If QAccKol_norm.Value > ( 12  - Sum_kol_norm)then
       Begin
            ShowMessage('ВНИМАНИЕ норма на   ''' +IntToStr(Year)+'''  год
израсходована');
       QAccKol_norm.Value := ( 12  - Sum_kol_norm);
       end;
  QAccNorm.Value:=QAccKol_norm.Value*TabLgtNmonth.Value;
  QAccSum_lgt.Value:=(QAccNorm.Value*TabLgtTarif_id.Value*TabLgtPrivilege.Value)/ 100 . 00 ;
  QAccSum_pkz.Value:=QAccpkz.Value*TabLgtTarif_id.Value-QAccSum_lgt.Value;
  QAccSum.Value:=QAccSum_lgt.Value+QAccSum_pkz.Value;
end;



Супер ПРОФИ сильно не ругайте за бональный вопрос....
...
Рейтинг: 0 / 0
30.12.2002, 10:38
    #32085700
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не убивайте БРАТЦЫ!!...(special tygra)
Ты и в выходные работаешь ? А я уже устал, и в такие то дни ничего делать не хочется :)

Не совсем разобрался пока, что делаешь, но сразу укажу на одну вещь, если ОНО, то хорошо, если нет, то дальше буду спрашивать

Код: plaintext
1.
2.
3.
4.
5.
6.
Q5.SQL.Add('select Pkz_n from Account where Date_nper=(SELECT  max
(Date_nper) From Account WHERE Date_nper<:Date_nper) and Base_id=:Base');
 -- Там где выбираешь максимальную дату, может тоже стоит добавить в условие: 
 
and Base_id=:Base
иначет получается, что макс. дату по всем Base_id выбираешь, а нужно то только по конкретному
...
Рейтинг: 0 / 0
30.12.2002, 12:51
    #32085743
balbes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не убивайте БРАТЦЫ!!...(special tygra)
tygra

thank you Братец tygra
логичное замечание хотя в принципе он и так, и так их с учётом ключа выбирает....
Но вопрос не в этом, а в том, что при вставке новой записи (выбор осуществляется по данным имеющимся в базе без учета вводимой суммы, нормы), а при редактировании сумма тукущей (редактиркемой) записи попадает ввыборку. при этом складывается ситуация что машина думает что сумма нормы которая стоит не учтена и начинает её обрезать. Как с этим бороться?? может условие разбить, или запихать не в BeforePost а в др. место...
...
Рейтинг: 0 / 0
30.12.2002, 12:56
    #32085746
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не убивайте БРАТЦЫ!!...(special tygra)
Эх, чего-то я уже не соображаю.........

Да еще монитор сгорел :(
Сижу на 15'', 1024х768, монитор хреновый - ничего не видно, башка гудит..

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

С Наступающим всех................
...
Рейтинг: 0 / 0
30.12.2002, 13:17
    #32085756
balbes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не убивайте БРАТЦЫ!!...(special tygra)
tygra

аналогично 15'', 1024х768, монитор.
ОК мысль понял Х^%$#^% с ним с условие будем празновать!!!!

надеюсь после праздников ты мне поможешь?!....


С НАСТУПАЮЩИМ ВСЕХ!!!!!!!!!.......
...
Рейтинг: 0 / 0
30.12.2002, 13:18
    #32085757
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не убивайте БРАТЦЫ!!...(special tygra)
Конечно помогу

А монитор БЫЛ 17" ......
...
Рейтинг: 0 / 0
30.12.2002, 13:23
    #32085759
balbes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не убивайте БРАТЦЫ!!...(special tygra)
А я от Шефа падарка на НОВЫЙ ГОД жду монитор 17"
...
Рейтинг: 0 / 0
30.12.2002, 13:29
    #32085761
eNose
Участник
[не активирован]
[не одобрен]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не убивайте БРАТЦЫ!!...(special tygra)
Никому не нужен hercules monochrome 13" ?
...
Рейтинг: 0 / 0
30.12.2002, 13:32
    #32085764
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не убивайте БРАТЦЫ!!...(special tygra)
У нас самих стоит куча старых мониторов - продаем по дешевке ....

А мой если не наладят 4-5 числа, то поедем покупать, LG Flatron 795 FT Plus однако, очень он мне нравится
...
Рейтинг: 0 / 0
30.12.2002, 13:34
    #32085766
mahoune
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не убивайте БРАТЦЫ!!...(special tygra)
2tygra, У нас самих стоит куча старых мониторов - продаем по дешевке ....
А это какие и почем?
Нужен один 15 дешево!
...
Рейтинг: 0 / 0
30.12.2002, 13:38
    #32085768
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не убивайте БРАТЦЫ!!...(special tygra)
Дешево - это скока???
...
Рейтинг: 0 / 0
30.12.2002, 13:40
    #32085769
mahoune
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не убивайте БРАТЦЫ!!...(special tygra)
Фиг его знает... $80
...
Рейтинг: 0 / 0
30.12.2002, 13:49
    #32085772
balbes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не убивайте БРАТЦЫ!!...(special tygra)
Да-а-а-а-а-а уш....

Мне бы хоть LGшку или Samsung 17"

о LG Flatron 795 FT Plus и не мечтаю....
...
Рейтинг: 0 / 0
30.12.2002, 14:49
    #32085781
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не убивайте БРАТЦЫ!!...(special tygra)
2 mahoune

Но качество сам понимаешь, не ахти, 5-6 лет проработали мониторы

Хотя за 80$ мона наверное

А тебе для чего хоть....
...
Рейтинг: 0 / 0
31.12.2002, 10:21
    #32085852
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не убивайте БРАТЦЫ!!...(special tygra)
Вопрос совсем не тривиален.
Желательно видеть структуру участвующих таблиц c пояснениями и пример заполнения.

Если я правильно понял, имеется таблица Account

Base_id integer //Уникальный идентификатор потребителя
Date_nper Date //Дата начала периода
Pkz_n float //Показатель счетчика
Kol_norm float //А это что за зверь такой?
...
Рейтинг: 0 / 0
02.01.2003, 16:51
    #32086030
balbes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не убивайте БРАТЦЫ!!...(special tygra)
Cat2

Сы пр-аз-з-з-з- ник-ик-ом...
Kol_norm float //А это что за зверь такой?
Это не зверь такой, это их количество... т.е. количество норм (месячных), которые ставит пользователь-П, плательщику (льготнику- Л) за опреледенный период оплаты. Допустим, платит он Л за 2 месяца П, ставит 2 нормы, это сделано по просьбе последних, т.к., когда платежи из деревень приходят ч/з почту, может возникнуть ситуация, когда плательщик исчерпав годовую норму продолжает платить по льготному тарифу, а программа ранее такого не приемлела. Пришлось изащьриться для того, чтобы можно было принимать любые плтежи, пока льготника изветстят П сделают пересчет и т.д., но принцип работы остался прежний.
Вводится очередной платеж, проверяется количество норм (месячных); потому и сравнивается с 12-ю. Далее, если есть превышение, то предупреждает и сокращает нормы ... принцип описан выше ...
Вот структура:
Файл Account.dp
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Account_id	Ключ лицевого счёта 
Base_id	Ключ плательщика задолженности (Account.base_id =Base.Base_id)
Num_acc	Номер лицевогосчёта
Date_opl	Дата оплаты (дата приёма платежа).
Type_met	Тип счётчика
Pkz_n	Начальные показания счётчика (показания на последнюю дату оплаты).
Pkz_e	Конечные показания счётчика (показания  на «текущую дату»).
Date_ust	Дата установки счётчика.
Date_pov	Дата последней поверки счётчика.
Pkz	Количество кВт./ч по показаниям счётчика.
Sum_lgt	Сумма льготы (стоимость льготы) за период оплаты.
Sum_pkz	Сумма оплаты с учётом льготы.
Norm	Норматив в кВт./ч за период оплаты.
Date_nper	Дата начала периода оплаты.
Date_kper	Дата конца периода оплаты.
Day_per	Количество дней периода. (не используется).
...
Рейтинг: 0 / 0
02.01.2003, 22:34
    #32086076
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не убивайте БРАТЦЫ!!...(special tygra)
По первому нетрезвому взгяду, это должно быть разбито на 4-5 таблиц. Если время поджимает, то надо плюнуть на запросы с всё сделать последовательным доступом на клиенте.
...
Рейтинг: 0 / 0
02.01.2003, 23:26
    #32086080
balbes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не убивайте БРАТЦЫ!!...(special tygra)
Cat2

На дворе 3 число, а у тебя все ещё взгляд не трезвый?! Это серьёзно.....
По первому нетрезвому взгяду, это должно быть разбито на 4-5 таблиц.
Если время поджимает, то надо плюнуть на запросы с всё сделать
последовательным доступом на клиенте.

Мысль не уловил???... Объясни?!....

Структура таблицы Accoutn приведена; Все остальные переменные оговорены в запросе... Тут главное принцип понять... Я уже писал Дата: 30 дек 02, 12:51
Пример:
Вводим на 01.01.2002 г. 10 норм т.е. при запросе Sum_Kol_norm:=10
Делее на 02.01.2002 г. 2 нормы т.е. при запрсе Sum_Kol_norm:=12
Машина выдаст сообщение 'ВНИМАНИЕ норма на '2002' год израсходована' но норму сощитает.
Далее на 03.01.2002 г. 1 норма (Sum_Kol_norm=12).сообщение 'ВНИМАНИЕ норма на '2002' год израсходована' и норма :=0.
А вот если сейчас попробуем редактировать введенные значения то плучается следующее..
допустим 02.01.2002 г. стоит 2 нормы когда пытаемя редактировать запускается процедура и Sum_Kol_norm=12, она же не знает что значение за 02.01.2002 г. уже учтено и естественно обнуляет его....

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
If (Sum_kol_norm) >  12  then
     Begin
     ShowMessage('ВНИМАНИЕ норма на   ''' +IntToStr(Year)+'''  год
израсходована');
     QAccKol_Norm.Value:= 0 ;
     end
  else If QAccKol_norm.Value > ( 12  - Sum_kol_norm)then
       Begin
            ShowMessage('ВНИМАНИЕ норма на   ''' +IntToStr(Year)+'''  год
израсходована');
       QAccKol_norm.Value := ( 12  - Sum_kol_norm);
       end;

Мне нужно, что бы машина учитывала этот нюанс, т.е. разбиралась когда считает количество норм за период, вводится новая запись (т.е. добавляется дополнительная норма) или редактируетя введенная....
...
Рейтинг: 0 / 0
04.01.2003, 22:03
    #32086551
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не убивайте БРАТЦЫ!!...(special tygra)
На какие таблицы это надо примерно разбить - я уже писал ранее. Из этой таблицы, по крайней мере я бы выкинул статистическую информацию по счетчику. Кстати, в своей базе я ее, по просьбам трудящихся масс уже сделал.

Type_met Тип счётчика
Date_ust Дата установки счётчика.
Date_pov Дата последней поверки счётчика.

Ничего полезного для рассчетов она не несет, а служит для чисто технических целей.

Разницу, что происходит - вставка, редактирование или удаление можно ловить в OnUpdateRecord
Можно также не редактировать записи, а удалять их и вставлять заново с нужными изменениями.

Плюнуть на запросы - это означает использовать прямое сканирование таблиц в цикле. Да и диалект SQL для парадоксовских баз довольно беден, много запросами не сделаешь.
...
Рейтинг: 0 / 0
04.01.2003, 22:39
    #32086557
balbes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не убивайте БРАТЦЫ!!...(special tygra)
Hi ещё раз Cat2

Делов том, что я не настолько крут как Ты...
И это первая серьезная программа которую я пытаюсь написать и вторая в обще за всю мою сознательную жизнь. Поэтому естественно заренее структуру базы я не продумывал она так сказать рождалась впроцессе прозьб, требований, притязаний Шефов и пользователей. Хотя сейчас уже осознаю что многое переделал бы. И впринципе собираюсь эту прогу бросить им для набора начальных данных и вязься за написание более глобального прототипа под SQL server..

СПАСИБО за совет, за то что не бросаешь в трудную минуту..
С прошедшим и С наступающими!!!
...
Рейтинг: 0 / 0
04.01.2003, 23:56
    #32086559
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не убивайте БРАТЦЫ!!...(special tygra)
"Самый плохой архитектор отличается от самой хорошей пчелы тем, что он сначала строит свое здание в уме" - не помню, кто сказал.

Между прочим, я пишу базу про учет электроэнергии потому, что на ней обломала зубы группа моих предшественников, а за готовую просют 300 000 руб. Это я не к тому, что я крутой, а что бы ты не переживал, что плохо получается. Это СЛОЖНАЯ база. Главные сложности: почти все параметры меняются во времени, участвующие в расчете временные интервалы не совпадают, обязателен ввод и корректировка прошедших периодов.
...
Рейтинг: 0 / 0
05.01.2003, 05:35
    #32086582
balbes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не убивайте БРАТЦЫ!!...(special tygra)
Cat2
Спасибо за подержку.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Не убивайте БРАТЦЫ!!...(special tygra) / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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