Registriert seit: 14. Dez 2003
65 Beiträge
|
Re: komplexe Berechnungen von abhängigen Datenbankfeldern
15. Feb 2006, 21: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.
|