Einzelnen Beitrag anzeigen

Emilio

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

Re: komplexe Berechnungen von abhängigen Datenbankfeldern

  Alt 15. Feb 2006, 20:07
@ Marabu,

würde mich mächtig freuen, wenn Du Deinen geschulten Blick noch einmal auf den Code werfen könntest;

Wie durch Geisterhand sind Warnungen mit möglicherweise nichtinitialisierten Variablen verschwunden (vielleicht hat DELPHI erkannt, dass ich veredlungsresistent bin und aufgegeben ...)
Das Programm läuft sauber aber bewirkt nicht das was es sollte. Die Felder die berechneten Werte anzeigen sollen, weisen nach einigem rumprobieren und überlegen immer nur den Wert "0" aus; zwar schön formatiert, aber wertlos. Eigentlich kann es doch nur so sein, dass zum Zeitpunkt der Berechnungen, das Feld [ekneu] oder cxTextEdit1 leer ist - isses aber (zumindest optisch) nicht. Ich komme nicht dahinter!


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

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

begin
  ekneu := StrToFloat(cxTextEdit1.Text);
  EKAlt := StrToFloat(cxDBLabel8.Caption);
  BPAlt := StrToFloat(cxDBLabel5.Caption);
  LVPAlt := StrToFloat(cxDBLabel9.Caption);
  BruttoLVPAlt := StrToFloat(cxDBLabel17.Caption);
  MargeEAlt := StrToFloat(cxDBLabel11.Caption);
  MargeProzAlt := StrToFloat(cxDBLabel12.Caption);
  ProvLVPAlt := StrToFloat(cxDBlabel14.Caption);
  MwSt := StrToFloat(cxDBLabel16.Caption);
  ProvSatz := StrToFloat(cxDBLabel13.Caption);
  zuschlag := StrToFloat(cxLookupComboBox1.Text);



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

  
  cxTextEdit1.Text := Format('%m', [ekneu]);
  cxLabel14.Caption := Format('EUR ' + '%8.2f', [bpneu]);
  cxTextEdit5.Text := Format('EUR ' + '%8.2f', [lvpneu]);
  cxTextEdit4.Text := Format('EUR ' + '%8.2f', [bruttolvpneu]);
  cxTextEdit2.Text := Format('EUR ' + '%8.2f', [margeEneu]);
  cxTextEdit3.Text := Format('%5.2f', [margeprozneu]) + '%';
  cxTextEdit6.Text := Format('EUR ' + '%8.2f', [provlvpneu]);
  cxLabel18.Caption := Format('%4.2f', [bpaender]) + '%';
  cxLabel19.Caption := Format('%4.2f', [lvpaender]) + '%';
  cxLabel24.Caption := Format('%4.2f', [bruttolvpaender]) + '%';
  cxLabel25.Caption := Format('%8.2f', [margeEaender]);
  cxLabel26.Caption := Format('%4.2f', [margeprozaender]) + '%';
  cxLabel27.Caption := Format('%4.2f', [provlvpaender]) + '%';

end;
und die Kalk-Unit:

Delphi-Quellcode:
interface

procedure CalcRule01(EKAlt, ekneu, BPAlt,LVPAlt,BruttoLVPAlt,MargeEAlt, MargeProzAlt, ProvLVPAlt, MwSt, ProvSatz, zuschlag: Extended;

   var bpneu,lvpneu, bruttolvpneu, margeEneu, margeprozneu, provlvpneu, ekaender, bpaender, lvpaender, bruttolvpaender,
    margeEaender, margeprozaender, provlvpaender: Extended);

implementation

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

end.

  Mit Zitat antworten Zitat