Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2009, 10:22   #1
Земляника
Пользователь
 
Аватар для Земляника
 
Регистрация: 04.06.2009
Сообщений: 13
Восклицание Изменение вычисляемого поля в коде

Люди добрые подскажите:
У меня есть поле Начисленная зарплата и дата заболевания и выздоровления. Как правильно написать код, чтоб считался больничный в процедуре ComboBoxChange(выбор месяца). Я все написала, а он не считает, говорят надо что-то добавить в начале и в конце, чтоб таблица запоминала это. Вот эта процедура:
procedure TBaseForm.ComboBox1Change(Sender: TObject);
var Year,Month,Day{дата заболевания},Year2,Month2,Day2{дата выздоровления},Year3,Month3,Day3{да та поступления на работу}:Word;
den{стоимость одного дня},denbol{стоимость одного дня по больничному}:word;
begin
den:=0;
denbol:=0;

SysUtils.DecodeDate(DataModule2.Boo kTableDateTimeField2.Value,Year,Mon th,day);
//Процедура превода типа TDateTime в прееменные дата, день, год
SysUtils.DecodeDate(DataModule2.Boo kTableDateTimeField3.Value,Year2,Mo nth2,day2);
SysUtils.DecodeDate(DataModule2.Boo kTableDateTimeField.Value,Year3,Mon th3,day3);
case ComboBox1.ItemIndex of
0,2,4,6,7,9,11en:=round(DataModul e2.BookTableBCDField2.AsInteger/31);
3,5,8,10: den:=round(DataModule2.BookTableBCD Field2.AsInteger/30);
1: den:=round(DataModule2.BookTableBCD Field2.AsInteger/28);
//находим стоимость рабочего дня относительно от месяца
end;

if god-Year3<2 then
denbol:=round(den*0.5);
if (god-Year3>2) and (god-Year3<4) then
denbol:=round(den*0.8);
//находим стоимость дня по больничному относительно стажа работы
if ComboBox1.ItemIndex+1=Month then
begin
if Month<>Month2 then
case ComboBox1.ItemIndex of
0,2,4,6,7,9,11: DataModule2.BookTableBCDField2.Valu e:=Day*den+(31-Day)*denbol;
3,5,8,10:DataModule2.BookTableBCDFi eld2.Value:=Day*den+(30-Day)*denbol;
1:DataModule2.BookTableBCDField2.Va lue:=Day*den+(28-Day)*denbol;
end;
if Month=Month2 then
case ComboBox1.ItemIndex of
0,2,4,6,7,9,11:DataModule2.BookTabl eBCDField2.Value:=(31-(Day2-Day))*den+(Day2-Day)*denbol;
3,5,8,10:DataModule2.BookTableBCDFi eld2.Value:=(30-(Day2-Day))*den+(Day2-Day)*denbol;
1: DataModule2.BookTableBCDField2.Valu e:=(28-(Day2-Day))*den+(Day2-Day)*denbol;
end;
end;
if ComboBox1.ItemIndex+1=Month2 then
case ComboBox1.ItemIndex of
0,2,4,6,7,9,11:DataModule2.BookTabl eBCDField2.Value:=Day2*denbol+(31-Day2)*den;
3,5,8,10: DataModule2.BookTableBCDField2.Valu e:=Day2*denbol+(30-Day2)*den;
1: DataModule2.BookTableBCDField2.Valu e:=Day2*denbol+(28-Day2)*den;
end;
end;
//DataModule2.BookTableBCDField2-начисленная зарплата
Спят усталые админы, мышки спят.Флешки и клавиатуры ждут ребят.Windows тоже спать ложится, Чтобы ночью нам приснитьсяАську закрывай. Баю-бай.
Земляника вне форума Ответить с цитированием
Старый 04.06.2009, 15:09   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

под словом "чтоб таблица запоминала это" видимо имеется ввиду сохранение на диск? Или вычислимое поле?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.06.2009, 15:37   #3
Земляника
Пользователь
 
Аватар для Земляника
 
Регистрация: 04.06.2009
Сообщений: 13
По умолчанию

Имеется ввиду, чтобы это поле меняло свое значение с учетом этих вычислений
Спят усталые админы, мышки спят.Флешки и клавиатуры ждут ребят.Windows тоже спать ложится, Чтобы ночью нам приснитьсяАську закрывай. Баю-бай.
Земляника вне форума Ответить с цитированием
Старый 04.06.2009, 16:15   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
это поле меняло
Оно и так меняется:
Цитата:
DataModule2.BookTabl eBCDField2.Value:=Day2*denbol+(31-Day2)*den;
Просто у тебя я не вижу нигде команды записи в файл изменений.
Если изменения должны сохраняться примени метод post.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.06.2009, 16:20   #5
Земляника
Пользователь
 
Аватар для Земляника
 
Регистрация: 04.06.2009
Сообщений: 13
По умолчанию

Это написать в конце всей этой процедуры?
Спят усталые админы, мышки спят.Флешки и клавиатуры ждут ребят.Windows тоже спать ложится, Чтобы ночью нам приснитьсяАську закрывай. Баю-бай.
Земляника вне форума Ответить с цитированием
Старый 04.06.2009, 19:35   #6
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

кагтотаг
Код:
//находим стоимость дня по больничному относительно стажа работы

DataModule2.BookTableBCD.Edit;
if ComboBox1.ItemIndex+1=Month then
begin
.......

.......

DataModule2.BookTableBCD.Post;
Замечания:
1) каменты к коду принято писать до описываемых действий
2) у вас такая специфика или вы не знаете чем кол-во рабочих дней в месяце отличается от кол-ва дней в месяце?!
3) алгоритм будет условно рабочим (с учетом п.2) каждые 3 года из 4х
soleil@mmc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сумма вычисляемого поля TTable Anton.sev Общие вопросы Delphi 1 10.05.2010 20:31
Изменение вычисляемого поля в коде Земляника SQL, базы данных 0 04.06.2009 10:02
Изменение функции поля сводной таблицы Lal Microsoft Office Excel 3 05.03.2009 16:47
Изменение связаного поля (Delphi, BDE, Paradox) Шульц БД в Delphi 4 08.01.2009 06:51
изменение содержимого поля edit truel Win Api 1 21.04.2008 12:31