Einzelnen Beitrag anzeigen

Emilio

Registriert seit: 14. Dez 2003
65 Beiträge
 
#12

Re: komplexe Berechnungen von abhängigen Datenbankfeldern

  Alt 15. Feb 2006, 12:04
Ups, hab ich mich doch verschrieben, ich meinte

die Variablen a = zuschlag und b = ProvSatz

sind als Integer deklariert, da sie solche sind.

Ich stell mal den neuen Code rein:

Unit Main:

Delphi-Quellcode:
procedure TForm1.cxLookupComboBox1PropertiesCloseUp(Sender: TObject);

var
  ekneu, bpneu, lvpneu , margeEneu, margeprozneu , provlvpneu, bruttolvpneu, bpaender, lvpaender, bruttolvpaender, BPALT, LVPAlt, BruttoLVPAlt : Extended;
  zuschlag, ProvSatz : Integer;
begin
  ekneu := StrToFloat(cxTextEdit1.Text);
  BPAlt := StrToFloat(cxDBLabel5.Caption);
  LVPAlt := StrToFloat(cxDBLabel9.Caption);
  BruttoLVPAlt := StrToFloat(cxLabel17.Caption);
  ProvSatz := StrToInt(cxDBLabel13.Caption);
  zuschlag := StrToInt(cxLookupComboBox1.Text);

  CalcRule01(ekneu, bpneu, lvpneu, margeEneu, margeprozneu, provlvpneu, bruttolvpneu, bpaender, lvpaender, bruttolvpaender, BPALT, LVPAlt, BruttoLVPAlt, ProvSatz, zuschlag);

  cxLabel14.Caption := Format('EUR ' + '%8.2f', [bpneu]);
  cxTextEdit5.Text := Format('EUR ' + '%8.2f', [lvpneu]);
  cxTextEdit2.Text := Format('EUR ' + '%8.2f', [margeEneu]);
  cxTextEdit3.Text := Format('%5.2f', [margeprozneu]) + '%';
  cxTextEdit6.Text := Format('EUR ' + '%8.2f', [provlvpneu]);
  cxTextEdit4.Text := Format('EUR ' + '%8.2f', [bruttolvpneu]);
  cxLabel18.Caption := Format('%4.2f', [bpaender]) + '%';
  cxLabel19.Caption := Format('%4.2f', [lvpaender]) + '%';
  cxLabel24.Caption := Format('%4.2f', [bruttolvpaender]) + '%';
end;
und die zweite unit:

Delphi-Quellcode:

unit Kalk;

interface

procedure CalcRule01(EKAlt,BPAlt,LVPAlt,BruttoLVPAlt,MargeEAlt, MargeProzAlt, ProvLVPAlt, MwSt: Extended;
   zuschlag,ProvSatz: Integer;
   var ekneu, bpneu,lvpneu,margeEneu,margeprozneu,provlvpneu,bruttolvpneu,bpaender,lvpaender,bruttolvpaender,
   ekaender, margeEaender, margeprozaender, provlvpaender: Extended);

implementation

function f_bpneu(ekneu: Extended; zuschlag: Integer): Extended; forward;
function f_lvpneu(ekneu: Extended): Extended; forward;
function f_margeEneu(ekneu: Extended; lvpneu: Extended):Extended; forward;
function f_margeprozneu(ekneu: Extended; lvpneu: Extended):Extended; forward;
function f_provlvpneu(bpneu: Extended; lvpneu: Extended; ProvSatz: Integer):Extended; forward;
function f_bruttolvpneu(lvpneu: Extended; MwSt: Extended): Extended; forward;
function f_ekaender(ekneu: Extended; EKAlt: Extended): Extended; forward;
function f_bpaender(bpneu: Extended; BPAlt: Extended): Extended; forward;
function f_lvpaender(lvpneu: Extended; LVPAlt: Extended): Extended; forward;
function f_bruttolvpaender(bruttolvpneu: Extended; BruttoLVPAlt: Extended): Extended; forward;
function f_margeEaender(margeEneu: Extended; MargeEAlt: Extended): Extended; forward;
function f_margeprozaender(margeEneu: Extended; MargeEAlt: Extended): Extended; forward;
function f_provlvpaender(provlvpneu: Extended; ProvLVPAlt: Extended): Extended; forward;

function f_bpneu(ekneu: Extended; zuschlag: Integer): Extended;
  begin
    Result := ekneu + (ekneu * zuschlag / 100);
  end;

function f_lvpneu(ekneu: Extended): Extended;
  begin
    Result := ekneu/55*100;
  end;

function f_margeEneu(ekneu: Extended; lvpneu: Extended): Extended;
  begin
    Result := lvpneu-ekneu;
  end;

function f_margeprozneu(ekneu: Extended; lvpneu: Extended): Extended;
  begin
    Result := (1-(ekneu/lvpneu)*100);
  end;

function f_provlvpneu(bpneu: Extended; lvpneu: Extended; ProvSatz: Integer): Extended;
  begin
    Result := (lvpneu-bpneu)*ProvSatz/100;
  end;

function f_bruttolvpneu(lvpneu: Extended; MwSt: Extended): Extended;
  begin
    Result := lvpneu+(lvpneu*MwSt/100);
  end;
  
function f_ekaender(ekneu: Extended; EKAlt: Extended): Extended;
  begin
    Result := (ekneu/EKAlt-1)*100;
  end;

function f_bpaender(bpneu: Extended; BPAlt: Extended): Extended;
  begin
    Result := (bpneu/BPAlt-1)*100;
  end;

function f_lvpaender(lvpneu: Extended; LVPAlt: Extended): Extended;
  begin
    Result := (lvpneu/LVPAlt-1)*100;
  end;

function f_bruttolvpaender(bruttolvpneu: Extended; BruttoLVPAlt: Extended): Extended;
  begin
    Result := (bruttolvpneu/BruttoLVPAlt-1)*100;
  end;

function f_margeEaender(margeEneu: Extended; MargeEAlt: Extended): Extended;
  begin
    Result := (margeEneu-MargeEAlt);
  end;

function f_margeprozaender(margeEneu: Extended; MargeEAlt: Extended): Extended;
  begin
    Result := (margeEneu/MargeEAlt-1)*100;
  end;

function f_provlvpaender(provlvpneu: Extended; ProvLVPAlt: Extended): Extended;
  begin
    Result := (provlvpneu/ProvLVPAlt-1)*100;
  end;

procedure CalcRule01(EKAlt,BPAlt,LVPAlt,BruttoLVPAlt,MargeEAlt, MargeProzAlt, ProvLVPAlt,MwSt: Extended;
   zuschlag, ProvSatz: Integer;
   var ekneu, bpneu,lvpneu,margeEneu,margeprozneu,provlvpneu,bruttolvpneu,bpaender,lvpaender,bruttolvpaender,
   ekaender, margeEaender, margeprozaender, provlvpaender: Extended);
begin
  bpneu := f_bpneu(ekneu, zuschlag);
  lvpneu := f_lvpneu(ekneu);
  margeEneu := f_margeEneu(ekneu, lvpneu);
  margeprozneu := f_margeprozneu(ekneu, lvpneu);
  provlvpneu := f_provlvpneu(bpneu, lvpneu, ProvSatz);
  bruttolvpneu := f_bruttolvpneu(lvpneu, MwSt);
  bpaender := f_bpaender(bpneu, BPAlt);
  lvpaender := f_lvpaender(lvpneu, LVPAlt);
  bruttolvpaender := f_bruttolvpaender(bruttolvpneu, BruttoLVPAlt);
  ekaender := f_ekaender(ekneu, EKAlt);
  margeEaender := f_margeEaender(margeEneu, MargeEAlt);
  margeprozaender := f_margeProzaender(margeEneu, MargeEAlt);
  provlvpaender := f_provlvpaender(provlvpneu, ProvLVPNeu);
end;

end.

//Konstanten:
// EKAlt = cxDBLabel8
// BPAlt = cxDBLabel5
// LVPAlt = cxDBLabel9
// BruttoLVPAlt = cxDBLabel17
// MargeEAlt = cxDBLabel11
// MargeProzAlt = cxDBLabel12
// ProvLVPAlt = cxDBLabel14
// MwSt = cxDBLabel16
// ProvSatz = cxDBLabel13

// Variablen
// ekneu = cxTextEdit1
// zuschlag = cxLookupCombobox1
// bpneu = cxLabel14
// lvpneu = cxTextEdit5
// bruttolvpneu = cxTextEdit4
// margeEneu = cxTextEdit2
// margeprozneu = cxTExtEdit3
// provlvpneu = cxTextEdit6

// + die Variablen, welche die Veränderungen neu gegen alt "anzeigen" sollen
// ekaender = cxLabel15
// bpaender = cxLabel18
// lvpaender = cxLabel19
// bruttolvpaender = cxLabel24 +++ eingentlich obsolet, aberwassolls +++
// margeEaender = cxLabel25
// margeprozaender = cxLabel26
// provlvpaender = cxLabel27
Ich kann leider nicht erkennen, wo ich noch was anpassen müsste.

VG
Emilio
  Mit Zitat antworten Zitat