![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Есть таблица StringGrid, пользователем указывается дата поступления на работу (например 11.07.1999).В общем, нужно сделать так чтобы при написании даты в ячейку 5-го столбца, в ячейке 7-го столбца высчитывалась надбавка за стаж по нынешнюю дату, которая складывается с окладом из ячейки 6-го столбца и сумма выводилась в ячейку 8-го столбца. :/
Надбавка за стаж считается следующим образом: От 5 до 10 лет – 10% от оклада; От 10 до 20 лет – 15% от оклада; Свыше 20 лет – 20% от оклада. |
|
#2
|
||||
|
||||
|
YearsBetween + два IF-а и ELSE-а.
|
|
#3
|
||||
|
||||
|
А еще можно сделать все это через DbGrid и вычисляемые поля.
|
|
#4
|
|||
|
|||
|
Нужен именно StringGrid
|
|
#5
|
||||
|
||||
|
Цитата:
Код:
function clc(ds, vs: string; var n: string): string;
var
m, d, y, mc, dc, yc: Word;
i: integer;
b: variant;
begin
DecodeDate(StrToDate(ds), y, m, d);
DecodeDate(Date, yc, mc, dc); i:= 0; b:= 0;
if (y = yc) and (m = mc) and (d = dc) then
begin
n:= 'Нет';
Result:= vs;
end else
begin
i:= yc - y;
if (m > mc) then Dec(i) else if (m = mc) and (d > dc) then Dec(i);
end;
if i < 5 then
begin
n:= 'Нет';
Result:= vs;
Exit;
end;
if (i >= 5) and (i <= 10) then b:= 0.1;
if (i > 10) and (i <= 20) then b:= 0.15;
if (i > 20) then b:= 0.20;
n:= FloatToStr(StrToFloat(vs) * b);
Result:= FloatToStr(StrToFloat(vs) + (StrToFloat(vs) * b));
end;
procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol,
ARow: Integer; const Value: String);
var
s: string;
begin
with (Sender as TStringGrid) do
if (not EditorMode) and (ACol = 5) then
begin
Cells[8, aRow]:= clc(Cells[5, aRow], Cells[6, aRow], s);
Cells[7, aRow]:= s;
end;
end;![]() З.Ы. Наверное в денежной системе нужно было исчислять оклад, здесь он без "копеек", извиняйте Последний раз редактировалось Alegun, 18.11.2014 в 07:13. Причина: баг вычисления процентов |