Показать сообщение отдельно
  #5  
Старый 18.11.2014, 02:13
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Wandalin
...пользователем указывается дата поступления на работу (например 11.07.1999).В общем, нужно сделать так чтобы при написании даты в ячейку 5-го столбца, в ячейке 7-го столбца высчитывалась надбавка за стаж по нынешнюю дату, которая складывается с окладом из ячейки 6-го столбца и сумма выводилась в ячейку 8-го столбца. :/...
Код:
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;
Всё это из базы drkb, скачайте её себе кликнув по подписи к этому посту, там много решений всяких и разных. И перевести флажок goEditing в true в StringGrid.Options тоже не забудьте пжлст

З.Ы. Наверное в денежной системе нужно было исчислять оклад, здесь он без "копеек", извиняйте
Ответить с цитированием