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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2011, 00:46   #1
qwertase
 
Регистрация: 29.03.2011
Сообщений: 6
По умолчанию Проблема с вычислением з/п

Здравствуйте. Помогите как то вычислить з/п для каждого работника. Нужно найти для каждого процент от выслуги лет и его впихнуть в запрос.
Вот что то сам делал не получилось =(
Код:
procedure TForm1.Button1Click(Sender: TObject);
var StartDate,EndDate: TDateTime;
x:Tdatetime;
v:integer;
begin
while not ADOTable1.Eof do begin
x:=ADOTable1.FieldByName('data_vst').asdatetime;
StartDate:=x;
EndDate:=DateTimePicker1.Date;
a:= YearsBetween(trunc(Startdate),trunc(Enddate));
//memo1.Lines.Add(inttostr(a));
Break;
end;
if (a>=0) and (a<2) then v:=5 else
if (a>=2) and (a<5) then v:=10 else
if (a>=5) and (a<10) then v:=15 else
if (a>=10) and (a<15) then v:=20 else
if (a>=15) and (a<20) then v:=30 else
if (a>=20) and (a<25) then v:=50 else
if (a>=25) then v:=70;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select spivrob.surname,spivrob.name,posada.oklad,zvanya.nadbavka,(((posada.oklad+zvanya.nadbavka+(posada.oklad+zvanya.nadbavka)*'+floattostr(v)+'/100)*0.333)+((posada.oklad+zvanya.nadbavka)*'+floattostr(v)+'/100)+posada.oklad+zvanya.nadbavka) as Z/P');
ADOQuery1.SQL.Add('from posada,zvanya,spivrob');
ADOQuery1.SQL.Add('where spivrob.kod_p=posada.kod_p and spivrob.kod_z=zvanya.kod_z');
ADOQuery1.Open;
end;

___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 29.03.2011 в 13:36.
qwertase вне форума Ответить с цитированием
Старый 29.03.2011, 00:48   #2
XeruH
Форумчанин
 
Регистрация: 17.09.2010
Сообщений: 229
По умолчанию

Что именно не получилось? Какова структура ваших таблиц и какая СУБД?
З.Ы. для оформления кода есть специальный тэг CODE
Правильно заданный вопрос - половина ответа!
XeruH вне форума Ответить с цитированием
Старый 29.03.2011, 00:56   #3
qwertase
 
Регистрация: 29.03.2011
Сообщений: 6
По умолчанию

Цитата:
Сообщение от XeruH Посмотреть сообщение
Что именно не получилось? Какова структура ваших таблиц и какая СУБД?
З.Ы. для оформления кода есть специальный тэг CODE
Нужно в цикле посчитать для каждого работника сколько лет он работает и взять определённый процент от количества лет
qwertase вне форума Ответить с цитированием
Старый 29.03.2011, 13:26   #4
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Здравствуйте, qwertase
Ответьте пожалуйста на вопросы XeruH
Цитата:
Что именно не получилось? Какова структура ваших таблиц и какая СУБД?
а потом уж задавайте новые
Цитата:
Сообщение от qwertase Посмотреть сообщение
Нужно в цикле посчитать для каждого работника сколько лет он работает и взять определённый процент от количества лет
Если у Вас MS Access, используйте в SQL запросе только дату приёма на работу, безо всяких предварительных вычислений и функцию IIF и для количества лет и для процентов.
Вам так необходимо в цикле или достаточно получить всё в SQL запросе?
До свидания
OlegVE вне форума Ответить с цитированием
Старый 29.03.2011, 18:46   #5
qwertase
 
Регистрация: 29.03.2011
Сообщений: 6
По умолчанию

Сделал так, вроде все работает, может кому то понадобится
Код:
procedure TForm1.Button1Click(Sender: TObject);
var StartDate,EndDate: TDateTime;
x:Tdatetime;
v:real;
t:TSystemTime;
i:integer;
data:string;
zarplata,premia,vuslyga,oklad,nadbavka:real;
begin
GetSystemTime(t);
data:=inttostr(t.wDay)+'.'+inttostr(t.wMonth)+'.'+inttostr(t.wYear);
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('select * from spivrob,posada,zvanya where spivrob.kod_p=posada.kod_p and spivrob.kod_z=zvanya.kod_z');
ADOQuery2.Open;
ADOQuery2.First;
for i:=1 to ADOQuery2.RecordCount do begin
x:=ADOQuery2.FieldByName('data_vst').asdatetime;
StartDate:=x;
EndDate:=StrToDateTime(data);
a:= YearsBetween(trunc(Startdate),trunc(Enddate));
memo1.Lines.Add(inttostr(a));
if (a>=0) and (a<2) then v:=0.05 else
if (a>=2) and (a<5) then v:=0.1 else
if (a>=5) and (a<10) then v:=0.15 else
if (a>=10) and (a<15) then v:=0.2 else
if (a>=15) and (a<20) then v:=0.3 else
if (a>=20) and (a<25) then v:=0.5 else
if (a>=25) then v:=0.7;
oklad:=ADOQuery2.FieldByName('oklad').Asfloat;
nadbavka:=ADOQuery2.FieldByName('nadbavka').AsFloat;
vuslyga:=(oklad+nadbavka)*v;
premia:=(oklad+nadbavka+vuslyga)*0.333;
zarplata:=oklad+nadbavka+premia+vuslyga;
StringGrid1.RowCount:=i+1;
StringGrid1.Cells[0,i]:=ADOQuery2.FieldByName('kod_s').AsString;
StringGrid1.Cells[1,i]:=ADOQuery2.FieldByName('surname').AsString;
StringGrid1.Cells[2,i]:=ADOQuery2.FieldByName('name').AsString;
StringGrid1.Cells[3,i]:=ADOQuery2.FieldByName('oklad').AsString;
StringGrid1.Cells[4,i]:=ADOQuery2.FieldByName('nadbavka').AsString;
StringGrid1.Cells[5,i]:=FloatToStr(zarplata);
ADOQuery2.Next;
end;
end;
qwertase вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
массив проблема с вычислением oban11 Помощь студентам 3 14.11.2010 22:04
Проблема с вычислением oban11 Помощь студентам 1 13.11.2010 13:14
сортировка с вычислением адреса Xedos Мультимедиа в Delphi 2 18.09.2010 19:48
Проблема с вычислением количества дней в феврале функцией getTime(); Max0001 JavaScript, Ajax 1 05.12.2008 07:03