Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations strongm on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Complete beginner needs help for "calculated fields" 1

Status
Not open for further replies.

E1smiley

Programmer
Sep 14, 2009
1
DK
Okay-

I am having this little update for programe,
A field has been added to the programme - Where the user can type in the Charge number- If Charge number is identical with ItemID = Charge number in the database, I want it to print.

How to do this?

type


TFoNEDVEJ = class(TForm)
RGSOGNAVN: TRadioGroup;
MainMenu1: TMainMenu;
Filer1: TMenuItem;
UdskrivLinie: TMenuItem;
UdskrivAlle: TMenuItem;
N1: TMenuItem;
Afslut: TMenuItem;
Sortering1: TMenuItem;
SorterefterKundenavn1: TMenuItem;
SorterefterFlg1: TMenuItem;
Sorter: TMenuItem;
GroupBox1: TGroupBox;
EdSOGNAVN: TEdit;
bbtSOGNAVN: TBitBtn;
RGFILTER: TRadioGroup;
EDANTAL: TEdit;
Label1: TLabel;
EDLABEL: TEdit;
Label2: TLabel;
bbtudskriv: TBitBtn;
bbtUDSKALLE: TBitBtn;
Label3: TLabel;
EDTOTAL: TEdit;
bbtudssam: TBitBtn;
UdskrivSamlet: TMenuItem;
N2: TMenuItem;
GruppeMonteringsst1: TMenuItem;
GruppeLsdele1: TMenuItem;
GruppeSlanger1: TMenuItem;
GruppeSlidindikatorer1: TMenuItem;
Gruppe500serie1: TMenuItem;
Gruppe900serie1: TMenuItem;
GruppeFilter: TMenuItem;
CBENKELT: TCheckBox;
bbtUDSALLEUNDER: TBitBtn;
spUNDER: TSpinEdit;
UdskrivAlleUnder: TMenuItem;
dbg: TDBGrid;
Application1: TApplication;
Timer: TTimer;
pa: TPanel;
paIm: TPanel;
im: TImage;
rgTryk: TRadioGroup;
dsPluk: TDataSource;
PopupMenu1: TPopupMenu;
Skifttrykkestatus1: TMenuItem;
Edit1: TEdit;
DBGrid1: TDBGrid;
edCHSTREG: TEdit;
Edit2: TEdit;
procedure dbgDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
procedure Skifttrykkestatus1Click(Sender: TObject);
procedure dsPlukDataChange(Sender: TObject; Field: TField);
procedure bbtudskrivClick(Sender: TObject);
procedure RGSOGNAVNClick(Sender: TObject);
procedure TimerTimer(Sender: TObject);
procedure SorterClick(Sender: TObject);
procedure bbtSOGNAVNClick(Sender: TObject);
procedure AfslutClick(Sender: TObject);
procedure UdskrivRows();
procedure UdskrivAlleClick(Sender: TObject);
procedure UdskrivSamletClick(Sender: TObject);
procedure GruppeFilterClick(Sender: TObject);
procedure bbtUDSALLEUNDERClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure EdSOGNAVNKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormDestroy(Sender: TObject);
procedure VisBillede;
private
procedure UdskrivSamletFraHer(Sender: TDataSet);
function AggregateTotal(Sender: TObject):boolean;
procedure BeginWork;
procedure EndWork;
public
end;


var
FoNEDVEJ: TFoNEDVEJ;
doc: LabelManager2_TLB.document;

implementation

uses DMNED, sqlhelpers,adohelper, utils,variants, DataSetForIn;

{$R *.DFM}

procedure TFoNEDVEJ.BeginWork;
begin
screen.cursor:=crHourGlass;
bbtUdskriv.Enabled:=false;
bbtUdsSam.enabled:=false;
bbtUdskAlle.enabled:=false;
bbtUdsAlleUnder.enabled:=false;
end;

procedure TFoNEDVEJ.dbgDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
DBGridDrawCheckBox(dbg, 'OJD_PRINTED', rect, dataCol, column, State);
end;

procedure TFoNEDVEJ.dsPlukDataChange(Sender: TObject; Field: TField);
begin
VisBillede();
end;

procedure TFoNEDVEJ.EndWork;
begin
screen.cursor:=crDefault;
bbtUdskriv.Enabled:=true;
bbtUdsSam.enabled:=true;
bbtUdskAlle.enabled:=true;
bbtUdsAlleUnder.enabled:=true;
end;

// prøver en sti og returnerer true hvis der er fundet et billede på stien
// den sætter desuden billed=stientilbilled, hvis det er fundet.
function TryPath(path:string; var billed: string): boolean;
var
s:string;
begin
s := path + billed;
if(fileexists(s + '.bmp')) then
begin
billed:=s + '.bmp';
result:=true;
end
else if(fileexists(s + '.jpg')) then
begin
billed:=s + '.jpg';
result:=true;
end
else
begin
result:=false;
end;
end;

procedure TFoNEDVEJ.VisBillede;
var
found:boolean;
b:string;
begin
found := true; // Maybe image exists...
if(not dmnedpak.quePluk.eof) then
begin
b:=dmnedpak.quePluk.fieldbyname('ITEMID').asstring;
b:=stringreplace(b,'.','',[rfReplaceAll]);
// Billednavn:
if copy(b,1,2)='WS' then // Til slidindikatorer
b := 'Q:\Billeder\Slidindikatorer\' + copy(b,1,2)+'_'+copy(b,4,4)
else // Andre...
found := TryPath('Q:\BILLEDER\LØSDELE\', b)
or TryPath('Q:\Billeder\Slanger\Quick\', b)
// or TryPath('O:\NogleAndreBilleder\', b)
;
end
else
found:=false; // Image does not exist
if(found) then
begin
// Load picture.
try
im.Picture.LoadFromFile(b);
paIm.caption := '';
im.Visible:=true;
except
paIm.caption := 'Fejl ved visning af billede';
im.Visible:=false;
end;
end
else
begin
paIm.caption := 'Intet billede';
im.Visible:=false;
end;
end;

procedure TFoNEDVEJ.TimerTimer(Sender: TObject);
begin
timer.enabled:=false;
BeginWork;
pa.Align:=alClient;
pa.Caption:='Åbner codesoft og tabeller...';
forms.application.processmessages;
application1.Visible:=true;
dmnedpak.Prepare;
pa.Visible:=false;
edSOGNAVN.SetFocus;
EndWork;
end;

procedure TFoNEDVEJ.bbtSOGNAVNClick(Sender: TObject);
const
sqlsort: array [0..2] of string = (' ORDER BY j.PICKINGLISTID,t.OJD_SUMGROUPID, t.OJD_GROUPSORTING, t.OJD_PICKINGLISTGROUPID, t.ITEMID',
' ORDER BY t.ITEMID, j.CustAccount, t.OJD_SUMGROUPID, t.OJD_GROUPSORTING, t.OJD_PICKINGLISTGROUPID, t.Pickinglistid',
' ORDER BY j.CustAccount, t.ITEMID, j.PICKINGLISTID, t.OJD_SUMGROUPID, t.OJD_GROUPSORTING, t.OJD_PICKINGLISTGROUPID');
sqlwhere = 'WHERE j.dataareaid=''ojd'' and t.dataareaid=''ojd'' and (j.PICKINGLISTID = t.PICKINGLISTID) and (i.ITEMID = t.ITEMID)'#13#10;
sqlbase = 'SELECT j.ORDERID, j.DELIVERYNAME, j.CUSTACCOUNT, j.LANGUAGEID, t.ITEMID, t.ORDERUNIT, t.ORDERQTY, t.INVENTQTY, t.OJD_EXTERNALITEMID, t.OJD_WEIGHTGROUPID, t.OJD_SUMGROUPID,'+' j.PICKINGLISTID, t.DELIVERYDATE, t.OJD_DATEREF, t.OJD_PICKINGLISTGROUPID, t.OJD_PRINTED, t.OJD_PURCHORDERFORMNUM, t.OJD_LINESALESID, i.ITEMBARCODE QUICK_BARCODE'#13#10+
'FROM inventpickinglistJOUR j, inventpickinglistTRANS t, InventItemBarcode i'+#13#10;
sqlUdvalg: array [0..12] of string = ('','00','01','02-08','03','03','03','04','02-01','02-01','02-02','02-03','02-04');
var
gp1,gp2,gpExtra:string; // for group filter
udvalg : string; // accumulated where clause
soeg1,soeg2:string; // soegefelt, evt. med wildcard
searchField: string; // søgefelt.
begin
BeginWork;
gp1:=sqlUdvalg[rgfilter.itemindex];
gp2:= gp1;
gpExtra:='';
// Gruppe
case rgfilter.itemindex of
3: gp2:='02-30';
5: gpExtra:= ' AND OJD_PICKINGLISTGROUPID=''FR''';
6: gpExtra:= ' AND OJD_PICKINGLISTGROUPID<>''FR''';
8: gp2:='02-04';
end;
if(rgFilter.itemindex > 0) then
udvalg:= makewhere(sqlwhere,'OJD_SUMGROUPID',gp1,gp2+char(250)) + gpExtra
else
udvalg:=sqlWhere;
// Trykkestatus
case rgTryk.ItemIndex of
1: udvalg:=udvalg + ' AND t.OJD_PRINTED=0';
2: udvalg:=udvalg + ' AND t.OJD_PRINTED=1';
end;

// Søgning
soeg1 :=edSOGNAVN.text;
dbg.Columns[0].Visible:=false;
if soeg1='' then
dmNEDPAK.quePluk.Close
else begin
if(rgSOGNAVN.itemindex = 0) then
try
// Her bruges med vilje kun soeg1.
// Range
if(pos('-', soeg1) <> 0) then
soeg1:='t.PickinglistID between ' + stringreplace(soeg1, '-', ' and ', [])
else // "normal"
soeg1:='t.PickinglistID = ' + soeg1;
// Komma separaret.
soeg1 := stringreplace(soeg1, ',', ' or t.PickinglistID = ', [rfReplaceAll]);
if(udvalg = '') then
udvalg := 'where ';
// vis kun pickinglistid ved flere forskellige.
dbg.Columns[0].Visible:=(pos(' or ',soeg1) <> 0) or (pos('between', soeg1) <> 0);
dbg.Columns[0].Width:=55;

udvalg := udvalg + ' and (' + soeg1 + ')';
except
dmNEDPAK.quePluk.Close;
EndWork;
exit;
end
else begin
if(copy(soeg1,length(soeg1),1) = '*') then // wildcard
begin
soeg1 := copy(soeg1,1,length(soeg1)-1);
soeg2 := soeg1 + chr(250);
end
else
soeg2 := soeg1;
case RGSOGNAVN.ItemIndex of
1 : searchField := 't.ItemId';
2 : searchField := 'j.CustAccount';
end;
udvalg:=makewhere(udvalg,searchField,soeg1,soeg2);
end;
// Sortering
makesql(dmNedpak.quePluk,sqlbase,udvalg,sqlSort[RGSOGNAVN.ItemIndex]);
end;

EndWork;
end;

procedure TFoNEDVEJ.UdskrivRows();
var
ef,ed:TStringlist;
lbl:string;
total:integer;

procedure Print(antal:integer; antalud:integer);
var
askeantal:string;
begin
askeantal:=inttostr(antal);
if copy(dmnedpak.quePluk.fieldbyname('CUSTACCOUNT').asstring,0,10)='6-DE FORD1' then
askeantal:=copy(dmnedpak.quePluk.fieldbyname('OJD_EXTERNALITEMID').asstring,10,10);
ed.Delete(ed.Count-1);
ed.add(askeantal);

// EmulatePrint('c:\nedpakNY.txt','not-used(literally)', 1, lbl, TDataSet(DMNEDPAK.quePluk), antalud, ef, ed);

CSPrint(application1,lbl,tdataset(DMNEDPAK.quePluk),false,[],antalud,nil,nil,ef,ed);
end;

var
antal:integer;
begin
ef:=TStringlist.Create;
ef.CaseSensitive:=false; // 'ASKE_ANTAL' og 'aske_ANTAL' benyttes begge, så den skal være caseinsensitive
ed:=TStringlist.create;
try
antal:=strtoint(edANTAL.text);
total:=ZeroAsOther(strtoint(EDTOTAL.TEXT),DMNEDPAK.quePluk.fieldbyname('ORDERQTY').asinteger);
lbl:= EDLABEL.TEXT;

dmnedpak.HentForpakningsInformation(
cbenkelt.checked,
antal,
total,
lbl,
ef,ed);
ef.add('ASKE_ANTAL');
// askeantal ændres i Print
ed.add('');


if CBENKELT.checked then
Print(1,total) // total etiketter med 1 stk.
else
begin
if(total < 20) then
begin
dmnedpak.CheckTeves(lbl);
antal:=total; // en etiket med total som antal
end;

Print(antal,trunc(total/antal));
// Hvis der er nogen der mangler at blive udskrevet
// - dvs. ANTAL/ANTALPERKASSE ikke gik op og der er en rest,
// så skal denne udskrives. Dog ikke hvis rest == samlet total, da den første etiket så giver total.
antal := total mod antal;
if antal > 0 then
begin
dmnedpak.CheckTeves(lbl);
Print(antal,1);
end;
end;
dmNedPak.SetTryk(true); // marker som trykt
EDTOTAL.TEXT:='0';
finally
ef.free;
ed.free;
end;
end;

function TfoNEDVEJ.AggregateTotal(Sender: TObject):boolean;
begin
// Sum up in edTOTAL.text, used as global int variable :)
edTOTAL.text:=inttostr(strtoint(edTOTAL.text) + DMNEDPAK.quePluk.fieldbyname('ORDERQTY').asinteger);
dmNEDPAK.SetTryk(true); // marker som trykt
// do not stop looping!:
result:=true;
end;

function RightStr
(Const Str: String; Size: Word): String;
begin
if Size > Length(Str) then Size := Length(Str) ;
RightStr := Copy(Str, Length(Str)-Size+1, Size)
end;

procedure TfoNEDVEJ.UdskrivSamletFraHer(Sender: TDataSet);
begin
// Opsaml en hel, fra nuværende position.

// Tidligere blev OJD_EXTERNALITEMID2 benyttet her, men den
// skal hentes eksternt. Den er dog UNIKT bestemt
// ud fra itemid, ojd_externalitemid og CUSTACCOUNT
// derfor bruges CUSTACCOUNT.

// Reset total
edTOTAL.text:='0';
// Loop og aggreger total
LoopToLast(DMNEDPAK.quePluk, ['ITEMID','OJD_EXTERNALITEMID','CUSTACCOUNT'], false, AggregateTotal);
// Udskriv
UdskrivRows;
end;

procedure TFoNEDVEJ.UdskrivAlleClick(Sender: TObject);
begin
try
BeginWork;
DMNEDPAK.quePluk.DoForAll(UdskrivSamletFraHer);
finally
EndWork;
end;
end;


procedure TFoNEDVEJ.UdskrivSamletClick(Sender: TObject);
begin
try
BeginWork;
if StrToInt(EDTOTAL.TEXT)>1 then
UdskrivRows
else begin
// Søg til den FØRSTE af slagsen (backwards)
LoopToLast(dmnedpak.quePluk, ['ITEMID','OJD_EXTERNALITEMID','CUSTACCOUNT'],true);
// Udskriv samlet
UdskrivSamletFraHer(dmnedpak.quePluk);
dmnedpak.quePluk.Next;
end;
finally
EndWork;
end;
end;

procedure TFoNEDVEJ.bbtUDSALLEUNDERClick(Sender: TObject);
begin
with DMNEDPAK.quePluk do
begin
try
BeginWork;
filter:='ORDERQTY < '+inttostr(spUNDER.value);
Filtered := true;
EndWork;
UdskrivAlleClick(sender);
finally
BeginWork;
Filtered := false;
EndWork;
end;
end;
end;
procedure TFoNEDVEJ.bbtudskrivClick(Sender: TObject);
var
x: word;
bm: TBookMark;
begin
try
BeginWork;
dbg.DataSource.DataSet.DisableControls;
with dbg.SelectedRows do
begin
if Count > 1 then // Multiple selected
begin
bm:= dbg.DataSource.DataSet.GetBookmark;
for x:=0 to Count - 1 do
begin
if IndexOf(Items[x]) > -1 then
begin
UdskrivRows;
dbg.DataSource.DataSet.Bookmark := Items[x];
end;
end;
dbg.DataSource.DataSet.GotoBookmark(bm);
dbg.DataSource.DataSet.FreeBookmark(bm);
end

else // one selected
begin
// Centrer valgte record når der udskrives ved klik på udskriv linie.
dbg.DataSource.dataset.GotoCurrent;
UdskrivRows;
end;
with edit2 do
begin

end;
end;
dbg.DataSource.DataSet.EnableControls;
finally
EndWork;
end;
end;


procedure TFoNEDVEJ.FormShow(Sender: TObject);
begin
if (paramcount >= 1) AND (paramstr(1) = 'DoNotPrint') then
DoPrint := false;
// See timer.OnTimer
end;

procedure TFoNEDVEJ.FormDestroy(Sender: TObject);
begin
Application1.Documents.CloseAll(False);
end;


procedure TFoNEDVEJ.EdSOGNAVNKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = vk_return then
bbtSOGNAVNClick(Sender)
end;

procedure TFoNEDVEJ.RGSOGNAVNClick(Sender: TObject);
begin
bbtSOGNAVNClick(sender);
edSOGNAVN.SetFocus;
end;

procedure TFoNEDVEJ.GruppeFilterClick(Sender: TObject);
begin
RGFILTER.ItemIndex := (sender as TMenuItem).tag;
end;

procedure TFoNEDVEJ.Skifttrykkestatus1Click(Sender: TObject);
begin
dmnedpak.ToggleTryk;
end;

procedure TFoNEDVEJ.SorterClick(Sender: TObject);
begin
RGSOGNAVN.ItemIndex := (Sender as TMenuItem).tag;
end;

procedure TFoNEDVEJ.AfslutClick(Sender: TObject);
begin
Close;
end;
 
Most of us will not either want/have the time to go through your code as you posted it to discover what it is doing. This is made further true, since you really do not explain what it is that you are having trouble with. If you are still having difficulty, you might post with a more specific statement of the problem you are having, and maybe some very specific sections of code where you are having the trouble.

Measurement is not management.
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top