unit frmBaliciListy; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, ddPlugin_TLB, Vcl.StdCtrls, Vcl.Mask, RzEdit, RzBtnEdt, DB, helUtils, Vcl.Buttons, RzCmboBx, Vcl.Menus, FireDAC.Comp.Client, FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Comp.DataSet, Vcl.ComCtrls, Vcl.Grids, Vcl.DBGrids, JvExDBGrids, JvDBGrid, JvExComCtrls, JvStatusBar; const errPlg = #13#10 + '(plgLovato.frmBalListy)'; tblBL = '[dbo].[_TabBL]'; tblBLPol = '[dbo].[_TabBLPolozky]'; cOrgFinaly = '3'; VyrSkl = '200'; VyrFin = '210'; VyrRekl = '20000001'; type Tkooperanti = record Nazev, Sklad: string; CisloOrg: Integer; ItemIndex: Integer; end; TformBaliciListy = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; selSZ: TRzButtonEdit; GroupBox2: TGroupBox; GroupBox3: TGroupBox; selRegCis: TRzButtonEdit; edtKS: TRzNumericEdit; Label7: TLabel; Label9: TLabel; edtBox: TRzNumericEdit; vTabBL: TFDMemTable; dsBL: TDataSource; btnOK: TButton; btnCancel: TButton; lblKarta: TLabel; btnAddPol: TBitBtn; Label4: TLabel; edtDat: TRzDateTimeEdit; Label5: TLabel; cbOrg: TRzComboBox; pMenu: TPopupMenu; pmDelPol: TMenuItem; cbVratka: TCheckBox; Label6: TLabel; edtPrikaz: TRzNumericEdit; pmObnovNeulozene: TMenuItem; N1: TMenuItem; N2: TMenuItem; pmSmazNeulozene: TMenuItem; N3: TMenuItem; pmImpReader: TMenuItem; cbTypDokl: TRzComboBox; cbReklamace: TCheckBox; lblVerze: TLabel; vTabBLidKZ: TIntegerField; vTabBLidSS: TIntegerField; vTabBLidPZ: TIntegerField; vTabBLSkupZbo: TStringField; vTabBLRegCis: TStringField; vTabBLBox: TStringField; vTabBLMnoz: TFloatField; vTabBLCelkHmot: TFloatField; vTabBLPrikaz: TIntegerField; vTabBLIdBLPol: TIntegerField; vTabBLIDSklad: TStringField; vTabBLidSSCil: TIntegerField; vTabBLIDSkladCil: TStringField; grd: TJvDBGrid; statBar: TJvStatusBar; procedure FormShow(Sender: TObject); procedure btnCancelClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure selSZButtonClick(Sender: TObject); procedure selRegCisButtonClick(Sender: TObject); procedure selRegCisExit(Sender: TObject); procedure selRegCisKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure selSZKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure edtKSExit(Sender: TObject); procedure btnAddPolClick(Sender: TObject); procedure btnOKClick(Sender: TObject); procedure pmDelPolClick(Sender: TObject); procedure cbOrgChange(Sender: TObject); procedure FormActivate(Sender: TObject); procedure cbVratkaClick(Sender: TObject); procedure viewPolKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure pmObnovNeulozeneClick(Sender: TObject); procedure pmSmazNeulozeneClick(Sender: TObject); procedure pmImpReaderClick(Sender: TObject); procedure cbTypDoklChange(Sender: TObject); procedure btnOKMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure cbTypDoklEnter(Sender: TObject); procedure cbOrgEnter(Sender: TObject); procedure vTabBLAfterPost(DataSet: TDataSet); procedure grdDblClick(Sender: TObject); private helParams: THeliosParams; cfMnozBLDef: TFieldDef; cfMnozBL: TField; function JeLovato: boolean; function JePrevodka: boolean; function VratVyrFin: string; function VratSumu (FieldName: string): Extended; procedure VytvorTabulkyAGrid; procedure TestRC; procedure NastavEdity; procedure NastavFonty; procedure NactiBalList; procedure WMGetMinMaxInfo(var AMsg: TWMGetMinMaxInfo); message WM_GETMINMAXINFO; procedure FocusRegCis; procedure FocusKS; procedure NajdiZdrojCil; public idDZ: integer; edit: Boolean; typ: byte; // 1=BL, 2=Prevodka, 3=Prijemka Helios: IHelios; end; var formBaliciListy: TformBaliciListy; koop: TArray; oVar1,oVar2: OleVariant; rDokl, cDokl, sIdSS, sIdSSCil, verText, sklZdroj, sklCil: string; idPZDZ, idBL, idPZBL, idKZ: integer; mnoz, hmotZ, hmotC: Extended; iOdb: integer; selVyber, jsemLov, jsemPrev, insData: boolean; oldCBTyp, oldCBOdb: integer; implementation uses System.StrUtils, Vcl.Clipbrd; {$R *.dfm} function GetAveCharSize(Canvas: TCanvas): TPoint; const Buffer: PChar = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; var tm: TTextMetric; begin GetTextMetrics(Canvas.Handle, tm); GetTextExtentPoint(Canvas.Handle, Buffer, 52, TSize(Result)); Result.X := (Result.X div 26 + 1) div 2; Result.Y := tm.tmHeight; end; function FormMnozstviBox(const Helios: IHelios; Title: string; var mnoz: extended; var box: string): boolean; var frm: TForm; lbl1,lbl2: TLabel; eMnoz,eBox: TEdit; btnOK,btnCancel: TButton; DialogUnits: TPoint; ButtonWidth, ButtonHeight: Integer; begin result:= false; frm:= TForm.Create(nil); with frm do try Canvas.Font:= Font; DialogUnits:= GetAveCharSize(Canvas); BorderStyle:= bsDialog; Caption:= Title; ClientWidth:= MulDiv(180, DialogUnits.X, 4); ClientHeight:= 150; Position:= poScreenCenter; lbl1:= TLabel.Create(frm); with lbl1 do begin Parent:= frm; Caption:= 'Množství: '; Left:= MulDiv(8, DialogUnits.X, 4); Top:= MulDiv(8, DialogUnits.X, 4); Constraints.MaxWidth:= MulDiv(164, DialogUnits.X, 4); WordWrap:= True; end; lbl2:= TLabel.Create(frm); with lbl2 do begin Parent:= frm; Caption:= 'Číslo boxu/krabice: '; Left:= MulDiv(8, DialogUnits.X, 4); Top:= lbl1.Top + lbl1.Height + 10; Constraints.MaxWidth:= MulDiv(164, DialogUnits.X, 4); WordWrap:= True; end; eMnoz:= TFloatEdit.Create(frm); with eMnoz do begin Parent:= frm; Left:= lbl2.Left + lbl2.Width + 25; Top:= lbl1.Top; Alignment:= taRightJustify; Text:= FloatToStr(Mnoz); end; eBox:= TEdit.Create(frm); with eBox do begin Parent:= frm; Left:= lbl2.Left + lbl2.Width + 25; Top:= lbl2.Top; Alignment:= taRightJustify; Text:= Box; end; ButtonWidth := MulDiv(50, DialogUnits.X, 4); ButtonHeight := MulDiv(14, DialogUnits.Y, 8); with TButton.Create(frm) do begin Parent:= frm; Caption:= 'OK'; ModalResult:= mrOK; Default:= true; SetBounds(MulDiv(20, DialogUnits.X, 4), 100, ButtonWidth, ButtonHeight); end; with TButton.Create(frm) do begin Parent:= frm; Caption:= 'Zrušit'; ModalResult:= mrCancel; Cancel:= True; SetBounds(MulDiv(100, DialogUnits.X, 4), 100, ButtonWidth, ButtonHeight); end; if ShowModal=mrOK then begin result:= true; mnoz:= StrToFloat(Trim(eMnoz.Text)); box:= Trim(eBox.Text); end; finally frm.Free; end; end; function NajdiVKoop(vrat,podle: byte; fHodn: Variant): Variant; var i: integer; begin case vrat of 1,3: result:= ''; else result:= -1; end; for i:=0 to Length(koop)-1 do begin case vrat of // vrat Nazev 1: case podle of 2: if koop[i].CisloOrg=fHodn then begin result:= koop[i].Nazev; Exit; end; 3: if koop[i].Sklad=fHodn then begin result:= koop[i].Nazev; Exit; end; 4: if koop[i].ItemIndex=fHodn then begin result:= koop[i].Nazev; Exit; end; end; // vrat CisloOrg 2: case podle of 1: if koop[i].Nazev=fHodn then begin result:= koop[i].CisloOrg; Exit; end; 3: if koop[i].Sklad=fHodn then begin result:= koop[i].CisloOrg; Exit; end; 4: if koop[i].ItemIndex=fHodn then begin result:= koop[i].CisloOrg; Exit; end; end; // vrat Cislo skladu 3: case podle of 1: if koop[i].Nazev=fHodn then begin result:= koop[i].Sklad; Exit; end; 2: if koop[i].CisloOrg=fHodn then begin result:= koop[i].Sklad; Exit; end; 4: if koop[i].ItemIndex=fHodn then begin result:= koop[i].Sklad; Exit; end; end; // vrat ItemIndex 4: case podle of 1: if koop[i].Nazev=fHodn then begin result:= koop[i].ItemIndex; Exit; end; 2: if koop[i].CisloOrg=fHodn then begin result:= koop[i].ItemIndex; Exit; end; 3: if koop[i].Sklad=fHodn then begin result:= koop[i].ItemIndex; Exit; end; end; end; end; end; function TformBaliciListy.VratVyrFin: string; begin result:= VyrFin; with Helios.OpenSQL('SELECT Cislo FROM ' + tblStrom + ' WHERE Cislo LIKE N''2%'' AND TypStrediska=0') do if (RecordCount=1) then result:= VarToStr(FieldValues(0)); end; function TformBaliciListy.VratSumu(FieldName: string): Extended; var bmk: TBookmark; begin result:= 0; if (Assigned(grd.DataSource)) then if (grd.DataSource.DataSet.Active) then begin bmk:= vTabBL.GetBookmark; vTabBL.DisableControls; try vTabBL.First; while not(vTabBL.Eof) do begin if (vTabBL.FindField(FieldName)<>nil) then if not(vTabBL.FieldByName(FieldName).IsNull) then result:= result + vTabBL.FieldByName(FieldName).AsExtended; vTabBL.Next; end; finally if (vTabBL.BookmarkValid (bmk)) then vTabBL.GotoBookmark (bmk); vTabBL.FreeBookmark (bmk); vTabBL.EnableControls; end; end; end; procedure TformBaliciListy.vTabBLAfterPost (DataSet: TDataSet); begin statBar.Panels.Items[1].Text:= FormatFloat('#,##0.##', self.VratSumu('Mnoz')); statBar.Panels.Items[3].Text:= FormatFloat('#,##0.###', self.VratSumu('CelkHmot')); end; procedure TformBaliciListy.NajdiZdrojCil; begin sklZdroj:= Helios.Sklad; if (jsemLov) and (cbTypDokl.ItemIndex=3) then sklZdroj:= VyrRekl; if not(jsemLov) then sklCil:= NajdiVKoop(3, 4, cbOrg.ItemIndex); if (cbVratka.Checked) then begin sklZdroj:= NajdiVKoop(3, 4, cbOrg.ItemIndex); sklCil:= VratVyrFin; end; if (cbTypDokl.Text='REKLAMACE') then sklCil:= VyrRekl; end; function TformBaliciListy.JePrevodka: boolean; var i: integer; begin result:= false; for i:=0 to Length(koop)-1 do if (koop[i].itemIndex=cbOrg.ItemIndex) then if (koop[i].CisloOrg=0) then result:= true; jsemPrev:= result; end; function TformBaliciListy.JeLovato: boolean; begin result:= false; if (Pos('itálie',LowerCase(cbOrg.Text))>0) then result:= true; jsemLov:= result; end; procedure TformBaliciListy.FocusRegCis; begin selRegCis.SetFocus; if Length(selRegCis.Text)=0 then selRegCis.Text:= '%'; selRegCis.SelStart:= Length(selRegCis.Text); selRegCis.SelLength:= 0; end; procedure TformBaliciListy.FocusKS; begin edtKS.SetFocus; edtKS.SelStart:= 0; edtKS.SelLength:= Length(edtKS.Text); end; procedure TformBaliciListy.NactiBalList; var pol: IHeQuery; lSQL, tStr: string; iTmp: integer; begin if (idDZ>0) then begin cbOrg.Enabled:= false; edtDat.Enabled:= false; edit:= false; with Helios.OpenSQL('SELECT id FROM ' + tblDZ + ' WHERE Realizovano=1 AND ID=' + IntToStr(idDZ)) do if RecordCount>0 then begin edit:= true; btnAddPol.Enabled:= False; pMDelPol.Enabled:= false; Helios.Error('Doklad byl realizován, nelze editovat.'); btnOK.Enabled:= false; end; { with Helios.OpenSQL('SELECT IDHlavicky FROM TabDokZboDodatek WHERE DatumTisku IS NOT NULL AND IDHlavicky=' + IntToStr(idDZ)) do if RecordCount>0 then begin edit:= true; btnAddPol.Enabled:= False; pMDelPol.Enabled:= false; Helios.Error('Doklad byl vytisknutý, nelze editovat.'); btnOK.Enabled:= false; end; } lSQL:= 'SELECT co.CisloOrg,dz.DatPorizeni,dz.MistoUrceni FROM ' + tblDZ + ' dz INNER JOIN ' + tblCOrg + ' co ON (dz.CisloOrg=co.CisloOrg)'; lSQL:= lSQL + ' WHERE dz.id=' + IntToStr(idDZ); with Helios.OpenSQL(lSQL) do if RecordCount>0 then begin tStr:= VarToStr(FieldValues(1)); tStr:= LeftStr(tStr,Pos(' ',tStr)-1); edtDat.Date:= StrToDate(tStr); iTmp:= StrToInt(VarToStr(FieldValues(0))); if (iTmp=1) then cbOrg.ItemIndex:= 0 else cbOrg.ItemIndex:= NajdiVKoop(4,2,iTmp); cbTypDokl.Enabled:= true; cbTypDokl.ItemIndex:= 0; if (cbOrg.ItemIndex=0) then begin with Helios.OpenSQL('SELECT _TypBalicihoListu FROM ' + tblDZe + ' WHERE id=' + IntToStr(idDZ)) do if not VarIsNull(FieldValues(0)) then cbTypDokl.ItemIndex:= StrToInt(VarToStr(FieldValues(0))) - 1; end; lSQL:= 'SELECT pz.id,pz.IDZboSklad,pz.SkupZbo,pz.RegCis,pz.Mnozstvi,kz.id,pz.NazevSozNa1,pz.Hmotnost FROM ' + tblPZ + ' pz INNER JOIN '; lSQL:= lSQL + tblKZ + ' kz ON (pz.RegCis=kz.RegCis AND pz.SkupZbo=kz.SkupZbo) WHERE pz.IDDoklad=' + IntToStr(idDZ); // lSQL:= lSQL + ' ORDER BY pz.SkupZbo,pz.RegCis'; lSQL:= lSQL + ' ORDER BY pz.id'; pol:= Helios.OpenSQL(lSQL); if pol.RecordCount>0 then begin if not vTabBL.Active then vTabBL.Open; vTabBL.EmptyDataSet; pol.First; while not(pol.EOF) do begin vTabBL.Insert; vTabBL.FieldByName('idPZ').AsString:= VarToStr(pol.FieldValues(0)); vTabBL.FieldByName('idSS').AsString:= VarToStr(pol.FieldValues(1)); vTabBL.FieldByName('idKZ').AsString:= VarToStr(pol.FieldValues(5)); vTabBL.FieldByName('SkupZbo').AsString:= VarToStr(pol.FieldValues(2)); vTabBL.FieldByName('RegCis').AsString:= VarToStr(pol.FieldValues(3)); vTabBL.FieldByName('Box').AsString:= VarToStr(pol.FieldValues(6)); vTabBL.FieldByName('Mnoz').AsFloat:= StrToFloat(VarToStr(pol.FieldValues(4))); vTabBL.FieldByName('CelkHmot').AsFloat:= RoundToEx(StrToFloat(VarToStr(pol.FieldValues(7))),-3); with Helios.OpenSQL('SELECT id FROM ' + tblBLPol + ' WHERE id=' + VarToStr(pol.FieldValues(0))) do if RecordCount>0 then vTabBL.FieldByName('IdBLPol').AsString:= VarToStr(FieldValues(0)); vTabBL.Post; pol.Next; end; end; end; end; end; procedure TformBaliciListy.TestRC; var lSQL, podm, skl: string; begin jsemLov:= JeLovato; if (jsemLov) and (cbTypDokl.ItemIndex=2) then if (selSZ.Text<>'MAT') then begin Helios.Error(#1'Je vybrán BL druh MATERIÁL, nelze zadat dílce/polosestavy.'#1); selSZ.Text:= ''; selRegCis.Text:= ''; edtKS.Value:= 0; idKZ:= 0; sIdSS:= ''; Exit; end; if (jsemLov) and (cbTypDokl.ItemIndex<2) then if (Pos('POL_',selRegCis.Text)>0) or (selSZ.Text='MAT') then begin Helios.Error(#1'Je vybrán BL druh FINÁLY/NEBALENÉ, nelze zadat polosestavy či materiál.'#1); selSZ.Text:= ''; selRegCis.Text:= ''; edtKS.Value:= 0; idKZ:= 0; sIdSS:= ''; Exit; end; if (sIdSS<>'') and (not selVyber) then begin if (idKZ>0) then begin lSQL:= 'SELECT Hmotnost FROM ' + tblKZ + ' WHERE id=' + IntToStr(idKZ); with Helios.OpenSQL(lSQL) do hmotZ:= StrToFloat(VarToStr(FieldValues(0))); end; lSQL:= 'SELECT id FROM ' + tblSS + ' WHERE IDSklad=N' + QuotedStr(sklCil) + ' AND IDKmenZbozi=('; lSQL:= lSQL + 'SELECT IdKmenZbozi FROM ' + tblSS + ' WHERE id=' + sIdSS + ')'; with Helios.OpenSQL(lSQL) do if (RecordCount=1) then if not(VarIsNull(FieldValues(0))) then sIdSSCil:= VarToStr(FieldValues(0)); if (sIdSSCil='') and not(jsemLov) then begin Helios.Error(#1'Vybraná položka není určena pro tohoto odběratele !'#1 + CRLF + 'Nejprve přiřaďte kartu na sklad.'); sIdSS:= ''; idKZ:= 0; lblKarta.Caption:= ''; selSZ.Text:= ''; selRegCis.Text:= '%'; selRegCis.SetFocus; Exit; end; end; end; procedure TformBaliciListy.grdDblClick (Sender: TObject); var mnozZad, stav: Extended; lSQL, box,skl: string; chkStav: boolean; clRow, clCol: integer; fldName: string; begin // Získání pozice kurzoru v gridu clCol := grd.MouseCoord(Mouse.CursorPos.X - grd.ClientOrigin.X, Mouse.CursorPos.Y - grd.ClientOrigin.Y).X; clRow := grd.MouseCoord(Mouse.CursorPos.X - grd.ClientOrigin.X, Mouse.CursorPos.Y - grd.ClientOrigin.Y).Y; // Pokud je dvojklik na buňce, zjistíme jméno pole if (clRow>0) and (clCol>0) then begin fldName:= grd.Columns[clCol-1].FieldName; mnozZad:= vTabBL.FieldByName('Mnoz').AsFloat; box:= vTabBL.FieldByName('Box').AsString; if FormMnozstviBox(Helios, 'Zadejte opravené množství', mnozZad, box) then begin skl:= NajdiVKoop(3,4,cbOrg.ItemIndex); if not(jsemLov) and (Helios.BrowseID=18) then skl:= '200'; chkStav:= false; if (Helios.BrowseID=18) then chkStav:= true; stav:= 0; lSQL:= 'DECLARE @mn NUMERIC(19,6)' + CRLF + 'SET @mn=0' + CRlF; lSQL:= lSQL + 'IF EXISTS(SELECT id FROM ' + tblSS + ' WHERE IDSklad=N' + QuotedStr(skl) + ' AND IdKmenZbozi='; lSQL:= lSQL + vTabBL.FieldByName('idKZ').AsString + ')' + CRLF + 'SELECT @Mn=Mnozstvi FROM ' + tblSS + ' WHERE IDSklad=N' + QuotedStr(skl); lSQL:= lSQL + ' AND IdKmenZbozi=' + vTabBL.FieldByName('idKZ').AsString + CRLF + 'SELECT @mn'; with Helios.OpenSQL(lSQL) do if RecordCount>0 then stav:= StrToFloat(VarToStr(FieldValues(0))); if (stav0'; cBid:= 235; end; if (jsemLov) and (Helios.BrowseID=27) then begin podm:= 'IdSklad=N' + QuotedStr(sklZdroj) + ' AND IdKmenZbozi IN (SELECT id FROM ' + tblKZ + ' WHERE Material='; if (cbTypDokl.ItemIndex=2) or (cbTypDokl.ItemIndex=3) then podm:= podm + '1' else podm:= podm + '0'; podm:= podm + ' AND LEFT(RegCis,4)<>N' + QuotedStr('POL_') + ')'; cBid:= 235; end; bidTit:= 'Stavy skladu "' + sklZdroj +'"'; if (selRegCis.Text<>'%') and (selRegCis.Text<>'') then podm:= podm + ' AND IdKmenZbozi IN (SELECT id FROM ' + tblKZ + ' WHERE RegCis LIKE N' + QuotedStr(selRegCis.Text + '%') + ')'; podm:= podm + ' AND IdKmenZbozi NOT IN (SELECT id FROM ' + tblKZ + ' WHERE Blokovano=1)'; if Helios.Prenos(cBid,'id',oVar1,podm,bidTit,true) then begin idKZ:= 0; if (cBid=100050) or (cBid=235) then begin sIdSS:= VarToStr(oVar1); // zdroj podm:= 'SELECT kz.SkupZbo,kz.RegCis,kz.id FROM ' + tblSS + ' ss INNER JOIN ' + tblKZ + ' kz ON (ss.IdKmenZbozi=kz.id)'; podm:= podm + ' WHERE ss.id=' + sIdSS; with Helios.OpenSQL(podm) do begin selSZ.Text:= VarToStr(FieldValues(0)); selRegCis.Text:= VarToStr(FieldValues(1)); idKZ:= StrToInt(VarToStr(FieldValues(2))); end; end; sIdSSCil:= ''; if (idKZ>0) then // and (skl<>VyrSkl) with Helios.OpenSQL('SELECT id FROM ' + tblSS + ' WHERE IDKmenZbozi=' + IntToStr(idKZ) + ' AND IDSklad=N' + QuotedStr(sklCil)) do if (RecordCount=1) then if not(VarIsNull(FieldValues(0))) then sIdSSCil:= VarToStr(FieldValues(0)); if (sIdSSCil='') and not(jsemLov) then begin Helios.Error(#1'Tato položka nelze převést na sklad ' + sklCil + #1 + CRLF + '(není vytvořena karta)'); Exit; end; if (cBid=bidKZ) then begin idKZ:= StrToInt(VarToStr(oVar1)); with Helios.OpenSQL('SELECT SkupZbo,RegCis FROM ' + tblKZ + ' WHERE id=' + IntToStr(idKZ)) do begin selSZ.Text:= VarToStr(FieldValues(0)); selRegCis.Text:= VarToStr(FieldValues(1)); end; with Helios.OpenSQL('SELECT id FROM ' + tblSS + ' WHERE IDKmenZbozi=' + IntToStr(idKZ) + ' AND IDSklad=N' + QuotedStr(skl)) do if (RecordCount=1) then sIdSS:= VarToStr(FieldValues(0)); end; TestRC; end; { if Helios.Prenos2(bidKZ,'SkupZbo','RegCis',oVar1,oVar2,podm,'Karty zboží a materiálu',true,true,false,1) then begin selSZ.Text:= VarToStr(oVar1); selSZ.Text:= StringReplace(selSZ.Text,'N''','',[rfReplaceAll]); selSZ.Text:= StringReplace(selSZ.Text,'''','',[rfReplaceAll]); selRegCis.Text:= VarToStr(oVar2); selRegCis.Text:= StringReplace(selRegCis.Text,'N''','',[rfReplaceAll]); if Length(selRegCis.Text)=2 then selRegCis.Text:= selRegCis.Text + 'N'; selRegCis.Text:= StringReplace(selRegCis.Text,'''','',[rfReplaceAll]); end; } end; procedure TformBaliciListy.selRegCisExit(Sender: TObject); var lSQL, podm: string; wild: boolean; begin jsemLov:= JeLovato; jsemPrev:= JePrevodka; if (selRegCis.Text<>'') and (selRegCis.Text<>'%') and not(selVyber) then // KBN4L11P, %BGX5000 - final // 4RF915 - nebalane begin NajdiZdrojCil; sIdSS:= ''; sIdSSCil:= ''; if (selRegCis.Text[1]='%') then begin wild:= true; selRegCis.Text:= MidStr(selRegCis.Text,2,255); end; lSQL:= 'SELECT ss.id FROM ' + tblSS + ' ss INNER JOIN ' + tblKZ + ' kz ON (ss.IdKmenZbozi=kz.id)'; lSQL:= lSQL + ' INNER JOIN ' + tblKZe + ' kze ON (kze.id=kz.id)'; lSQL:= lSQL + ' WHERE ss.IDSklad=N' + QuotedStr(sklZdroj) + ' AND kz.RegCis LIKE ' + QuotedStr('%' + selRegCis.Text + '%'); lSQL:= lSQL + ' AND kz.SkupZbo<>N' + QuotedStr('M00') + ' AND kz.SkupZbo IN (SELECT sz.SkupZbo FROM '; lSQL:= lSQL + tblSZ + ' sz LEFT JOIN ' + tblSZe + ' sze ON (sz.id=sze.id) WHERE sze._JeVyroba=1)'; // finaly if (cbTypDokl.ItemIndex=0) and (jsemLov) then lSQL:= lSQL + ' AND kze._TypKartyVyroba IN (0,2)'; // nebalene if (cbTypDokl.ItemIndex=1) and (jsemLov) then lSQL:= lSQL + ' AND kze._TypKartyVyroba IN (1,2)'; { with Helios.OpenSQL(lSQL + ' AND ss.Blokovano=1') do begin if (RecordCount>0) then begin Helios.Error(#1'Některá odpovídající karta je na zdrojovém skladě (' + sklZdroj + ') blokována, pokud chcete' + CRLF + 'převést blokovanou kartu, převod se musí udělat standardním editorem.'#1); selRegCis.Text:= '%' + selRegCis.Text; selRegCis.SetFocus; idKZ:= 0; sIdSS:= ''; sIdSSCil:= ''; end; end; } with Helios.OpenSQL(lSQL) do begin case RecordCount of 0: begin Helios.Error(#1'Nebyla nalezena žádná odpovídající karta zboží.'#1 + CRLF + 'Zkontrolujte typ na ext.informacích kmenové karty (Finál/Nebalené apod.)'); selRegCis.Text:= '%'; selRegCis.SetFocus; idKZ:= 0; sIdSS:= ''; sIdSSCil:= ''; Exit; end; 1: begin sIdSS:= VarToStr(FieldValues(0)); // idSS zdroj with Helios.OpenSQL('SELECT IdKmenZbozi FROM ' + tblSS + ' WHERE id=' + sIdSS) do idKZ:= StrToInt(VarToStr(FieldValues(0))); end; else begin podm:= 'TabStavSkladu.IDSklad=N' + QuotedStr(sklZdroj) + ' AND TabStavSkladu.idKmenZbozi IN (SELECT id FROM ' + tblKZ; podm:= podm + ' kz WHERE '; if (jsemLov) and (cbTypDokl.ItemIndex<2) then podm:= podm + 'SkupZbo<>N' + QuotedStr('MAT') + ' AND LEFT(RegCis,4)<>N' + QuotedStr('POL_'); if (Pos('MAT', podm))>0 then podm:= podm + ' AND '; podm:= podm + 'RegCis LIKE N' + QuotedStr(IfThen(selRegCis.Text[1]='%','','%') + selRegCis.Text + '%'); if (jsemLov) and (cbTypDokl.ItemIndex=2) then podm:= podm + ' AND SkupZbo=N' + QuotedStr('MAT'); podm:= podm + ' AND Blokovano=0 AND SkupZbo IN (SELECT SkupZbo FROM dbo.TabSkupinyZbozi sz LEFT JOIN dbo.TabSkupinyZbozi_EXT'; podm:= podm + ' sze ON (sz.id=sze.id) WHERE sze._JeVyroba=1 AND RIGHT(SkupZbo,1)<>N''V''))'; if Helios.Prenos(235,'id',oVar1,podm,'Stav skladu ' + sklZdroj,true) then begin sIdSS:= VarToStr(oVar1); with Helios.OpenSQL('SELECT IdKmenZbozi FROM ' + tblSS + ' WHERE id=' + sIdSS) do idKZ:= StrToInt(VarToStr(FieldValues(0))); end else sIdSS:= ''; end; end; end; if (sIdSS<>'') then begin lSQL:= 'SELECT kz.SkupZbo,kz.RegCis,kz.Nazev1,kz.id FROM ' + tblSS + ' ss INNER JOIN ' + tblKZ + ' kz ON (ss.IdKmenZbozi=kz.id)'; lSQL:= lSQL + ' WHERE ss.id=' + sIdSS; with Helios.OpenSQL(lSQL) do begin selSZ.Text:= VarToStr(FieldValues(0)); selRegCis.Text:= VarToStr(FieldValues(1)); lblKarta.Caption:= VarToStr(FieldValues(2)); idKZ:= StrToInt(VarToStr(FieldValues(3))); end; sIdSSCil:= ''; end; end; selVyber:= false; if (sIdSS<>'') and (idKZ>0) then begin TestRC; if (selRegCis.Text<>'%') then FocusKS; end; end; procedure TformBaliciListy.selRegCisKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key=VK_ESCAPE then selRegCis.Text:= ''; if (Key in [VK_RETURN,VK_TAB]) and (selRegCis.Text<>'') and (selRegCis.Text<>'%') then begin selRegCisButtonClick(Sender); FocusKS; end; end; procedure TformBaliciListy.selSZButtonClick(Sender: TObject); var podm: string; begin podm:= 'TabSkupinyZbozi.id IN (SELECT id FROM ' + tblSZe + ' WHERE _JeVyroba=1)'; if (JeLovato) and (cbTypDokl.ItemIndex=2) then podm:= 'TabSkupinyZbozi.SkupZbo=N' + QuotedStr('MAT'); if Helios.Prenos(bidSZ,'SkupZbo',oVar1,podm,'Skupiny zboží',true) then selSZ.Text:= VarToStr(oVar1); selSZ.Text:= Trim(selSZ.Text); end; procedure TformBaliciListy.selSZKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin selSZ.Text:= Trim(selSZ.Text); if (Key in [VK_RETURN,VK_TAB]) and (selSZ.Text<>'') then begin with Helios.OpenSQL('SELECT id FROM ' + tblSZ + ' WHERE SkupZbo=N' + QuotedStr(selSZ.Text)) do if RecordCount=0 then begin Helios.Error(#1'Zadaná skupina zboží neexistuje.'#1); selSZ.Text:= ''; end; end; end; procedure TformBaliciListy.pmDelPolClick(Sender: TObject); var sTmp: string; begin if not edit then begin if vTabBL.RecordCount=0 then Exit; sTmp:= vTabBL.FieldByName('SkupZbo').AsString + ' : ' + vTabBL.FieldByName('RegCis').AsString; if Helios.YesNo('Opravdu zrušit položku (' + sTmp + ') ?',False) then begin Clipboard.AsText:= vTabBL.FieldByName('Mnoz').AsString; vTabBL.Delete; FocusRegCis; end; end else Helios.Error('Na realizovaném dokladu nelze mazat položky.'); end; procedure TformBaliciListy.pmImpReaderClick(Sender: TObject); var fIn: TStringStream; idx,pocet: Integer; fName: string; radky: TStringList; begin if OtevriSoubor('Soubor importovaných dat','Textový soubor','*.txt','',fName) then begin fIn:= TStringStream.Create; try fIn.LoadFromFile(fName); pocet:= Length(fIn.DataString)-Length(StringReplace(fIn.DataString,#13,'',[rfReplaceAll])); finally fIn.Free; end; end else Helios.Error(#1'Nebyl vybrán soubor pro import...'#1); end; procedure TformBaliciListy.VytvorTabulkyAGrid; var idx: integer; begin if not(vTabBL.Active) then vTabBL.Open; { with vTabBL do begin with FieldDefs do begin Clear; Add('idKZ', ftInteger, 0, true); Add('idSS', ftInteger, 0, false); Add('idPZ', ftInteger, 0, false); Add('SkupZbo', ftString, 3, true); Add('RegCis', ftString, 20, true); Add('Box', ftString, 20, false); Add('Mnoz', ftFloat, 0, true); Add('CelkHmot', ftFloat, 0, false); Add('Prikaz', ftInteger, 0, false); Add('IdBLPol', ftInteger, 0, false); Add('IDSklad', ftString, 30, false); Add('idSSCil', ftInteger, 0, false); Add('IDSkladCil', ftString, 30, false); end; end; vTabBL.Open; } end; procedure TformBaliciListy.btnAddPolClick(Sender: TObject); var lSQL, skl: string; stav: Extended; chkStav: Boolean; begin jsemLov:= JeLovato; if (idKZ>0) and (sIdSS<>'') and ((sIdSSCil<>'') or (jsemLov)) then begin chkStav:= false; if (Helios.BrowseID=18) then chkStav:= true; stav:= 0; // skl:= VyrSkl; // if (cbVratka.Checked) then // skl:= NajdiVKoop(3,4,cbOrg.ItemIndex); { lSQL:= 'DECLARE @mn NUMERIC(19,6)' + CRLF + 'SET @mn=0' + CRLF; lSQL:= lSQL + 'IF EXISTS(SELECT id FROM ' + tblSS + ' WHERE IDSklad=N' + QuotedStr(skl) + ' AND IdKmenZbozi='; lSQL:= lSQL + IntToStr(idKZ) + ')' + CRLF + 'SELECT @mn=Mnozstvi FROM ' + tblSS + ' WHERE IDSklad=N' + QuotedStr(skl); lSQL:= lSQL + ' AND IdKmenZbozi=' + IntToStr(idKZ) + CRLF + 'SELECT @mn'; } lSQL:= 'DECLARE @mn NUMERIC(19,6)' + CRLF + 'DECLARE @skl NVARCHAR(30)' + CRLF + 'SET @mn=0' + CRLF + 'SET @skl=NULL' + CRLF; lSQL:= lSQL + 'SELECT @mn=Mnozstvi-MnozstviKVydeji,@skl=IDSklad FROM ' + tblSS + ' WHERE id=' + sIdSS + CRLF + 'SELECT @mn,@skl'; with Helios.OpenSQL(lSQL) do stav:= StrToFloat(VarToStr(FieldValues(0))); if (stav0) then begin edtBox.Text:= Trim(edtBox.Text); vTabBL.Append; vTabBL.FieldByName('idKZ').AsInteger:= idKZ; vTabBL.FieldByName('idSS').AsString:= sIdSS; vTabBL.FieldByName('Mnoz').AsFloat:= edtKS.Value; vTabBL.FieldByName('SkupZbo').AsString:= selSZ.Text; vTabBL.FieldByName('RegCis').AsString:= selRegCis.Text; vTabBL.FieldByName('Box').AsString:= edtBox.Text; vTabBL.FieldByName('CelkHmot').AsFloat:= RoundToEX(hmotC,-3); vTabBL.FieldByName('IDSklad').AsString:= sklZdroj; vTabBL.FieldByName('IDSkladCil').AsString:= sklCil; vTabBL.FieldByName('IdSSCil').AsString:= sIdSSCil; lSQL:= 'INSERT ' + tblBLPol + ' (IdDoklad,IdStavSkladu,IdStavSkladuCil,Mnozstvi,Box) VALUES ('; lSQL:= lSQL + IntToStr(idBL) + ',' + sIdSS + ','; if (sIdSSCil='') then lSQL:= lSQL + '0' else lSQL:= lSQL + sIdSSCil; lSQL:= lSQL + ',' + StringReplace(FloatToStr(edtKS.Value),',','.',[rfReplaceAll]) + ',N'; lSQL:= lSQL + QuotedStr(edtBox.Text) + ')' + CRLF + 'SELECT SCOPE_IDENTITY()'; try with Helios.OpenSQL(lSQL) do vTabBL.FieldByName('IdBLPol').AsString:= VarToStr(FieldValues(0)); except end; vTabBL.Post; selSZ.Text:= ''; selRegCis.Text:= ''; edtKS.Value:= 0; edtBox.Text:= '0'; idKZ:= 0; sIdSS:= ''; sIdSSCil:= ''; lblKarta.Caption:= ''; FocusRegCis; end; end else Helios.Error(#1'Není vybraná položka.'#1); end; procedure TformBaliciListy.btnCancelClick(Sender: TObject); begin if vTabBL.RecordCount=0 then Helios.ExecSQL('DELETE FROM ' + tblBL + ' WHERE id=' + IntToStr(idBL)); Close; end; procedure TformBaliciListy.btnOKClick(Sender: TObject); const rPrev = '250'; var idx, idKZ, idPZ, idSS, prikaz, idDZ2, idDZv, idDZp, idKJ: integer; lSQL, wCond: string; kurz, jcena, qty, hmot: Extended; mena, mj, cOrg, cBL, rDoklBL, cSkl, dt, idObd, cZak: string; idcka: string; jeMat, realVyd, realPrij: boolean; oldSkl, sklPrev: string; begin ReseedTable(Helios,tblDZ); ReseedTable(Helios,tblPZ); ReseedTable(Helios,tblBL); ReseedTable(Helios,tblBLPol); // ReseedTable(Helios,'[dbo].[_TamTempPolozkyBL]'); idObd:= ''; idDZv:= 0; // vydejka idDZp:= 0; // prijemka idKJ:= 0; jsemLov:= JeLovato; jsemPrev:= JePrevodka; lSQL:= 'DECLARE @obd INT,@dt DATETIME' + CRLF + 'SET @dt=CONVERT(datetime,N' + QuotedStr(DateToStr(edtDat.Date)) + ',104)'; lSQL:= lSQL + CRLF + 'EXEC @obd=dbo.hp_GetObdobiDleDatumu @dt,0,null,null,0,0' + CRLF + 'SELECT @obd'; with Helios.OpenSQL(lSQL) do idObd:= Trim(VarToStr(FieldValues(0))); if (idObd='') then begin Helios.Error(#1'Podle zadaného data nebylo nalezeno Období, zkontrolujte nastavení Heliosu.'#1); end; lSQL:= 'DELETE FROM dbo._TabStavPrevod WHERE DATEDIFF(month, DatPorizeni, GETDATE())>1'; Helios.ExecSQL(lSQL); oldSkl:= Helios.Sklad; // balici listy cBL:= '11'; // druh pohybu Nabidkove sestavy rDoklBL:= '200'; // rada dokladu lSQL:= BoolToStr(jsemLov); if not(jsemLov) then begin cBL:= '4'; // vydej v evid.cene rDoklBL:= '450'; // vydejka-prevodka end; if (vTabBL.RecordCount>0) then begin // smaze z dokladu polozky smazane skladnikem v BL idcka:= helUtils.IDckaTabulky(vTabBL,'idPZ'); if (idcka<>'') then try Helios.ExecSQL('DELETE FROM ' + tblPZ + ' WHERE idDoklad=' + IntToStr(idDZ) + ' AND id NOT IN (' + idcka + ')'); except on E:Exception do Helios.Error(#1'Z Balicího listu nelze smazat "starý" řádek.'#1 + CRLF + E.Message); end; if (jsemLov) then cOrg:= '1' // Lovato IT else cOrg:= NajdiVKoop(2, 4, cbOrg.ItemIndex); if (jsemPrev) then cOrg:= '0'; // pri prevodce nastav vlastni organizaci lSQL:= 'UPDATE ' + tblBL + ' SET CisloOrg=' + cOrg + ',Vratka='; if cbVratka.Checked then lSQL:= lSQL + '1' else lSQL:= lSQL + '0'; if (jsemLov) then begin lSQL:= lSQL + ',MistoUrceni='; if (cbTypDokl.ItemIndex>0) then begin lSQL:= lSQL + cOrg end else begin lSQL:= lSQL + cOrgFinaly; end; end; if (jsemLov) then lSQL:= lSQL + ',TypBL=' + IntToStr(cbTypDokl.ItemIndex+1); lSQL:= lSQL + ' WHERE id=' + IntToStr(idBL); try Helios.ExecSQL(lSQL); except end; // pri reklamaci udelej zakazku cZak:= ''; if (cbTypDokl.Text='REKLAMACE') then begin dt:= '200'; // rada zakazek Vyroba-Reklamace lSQL:= 'SELECT REPLICATE(N''0'', (SELECT CisloDelka FROM dbo.TabZakazkaRada WHERE Rada=N' + QuotedStr(dt); lSQL:= lSQL + ') - LEN(CONVERT(nvarchar, CONVERT(int, ( SELECT ISNULL'; lSQL:= lSQL + ' ( (SELECT MAX(CisloZakazky) FROM dbo.TabZakazka WHERE Rada=N' + QuotedStr(dt) + ') ,0))))))'; lSQL:= lSQL + ' + CONVERT(NVARCHAR,MAX(CONVERT(int,z.CisloZakazky))+1) FROM TabZakazka z WHERE z.Rada=N' + QuotedStr(dt); with Helios.OpenSQL(lSQL) do cZak:= VarToStr(FieldValues(0)); lSQL:= 'INSERT ' + tblZak + ' (Rada,CisloZakazky,Nazev) VALUES (N' + QuotedStr(dt) + ',N' + QuotedStr(cZak) + ',N'; dt:= 'Reklamace > '; case StrToInt(cOrg) of 11: dt:= dt + 'VDST'; 17: dt:= dt + 'Pikl'; 25: dt:= dt + 'PCO'; end; lSQL:= lSQL + QuotedStr(dt) + ')'; try Helios.ExecSQL(lSQL); except on E:Exception do Helios.Error(#1'Nelze uložit číslo zakázky pro reklamaci.'#1 + CRLF + E.Message); end; end; { vTabBL.First; while not vTabBL.Eof do begin lSQL:= 'INSERT [dbo].[_TabTempPolozkyBL] (SkupZbo,RegCis,Mnoz,Box,CisloOrg) VALUES (N'; lSQL:= lSQL + QuotedStr(vTabBL.FieldByName('SkupZbo').AsString) + ',N' + QuotedStr(vTabBL.FieldByName('RegCis').AsString); lSQL:= lSQL + ',' + StringReplace(vTabBL.FieldByName('Mnoz').AsString,',','.',[rfReplaceAll]) + ',N'; lSQL:= lSQL + QuotedStr(vTabBL.FieldByName('Box').AsString) + ',' + cOrg + ')'; try Helios.ExecSQL(lSQL); except end; vTabBL.Next; end; sklPrev:= NajdiVKoop(3,4,cbOrg.ItemIndex); if (cbVratka.Checked) and not(jeLovato) then begin Helios.SetSklad(sklPrev); sklPrev:= '200'; if (cbTypDokl.ItemIndex=1) and (cbReklamace.Checked) then if Length(sklPrev)=3 then begin sklPrev:= sklPrev + '00001' end else begin sklPrev:= sklPrev + '001' end end; } dt:= DateTimeToStr(Now); if (edtDat.Text<>'') then dt:= DateToStr(edtDat.Date) + ' ' + TimeToStr(Now); kurz:= 1; mena:= 'CZK'; if (jsemLov) then begin mena:= 'EUR'; lSQL:= 'DECLARE @dt DATETIME' + CRLF + 'SET @dt=CONVERT(datetime,N' + QuotedStr(dt) + ',104)'; lSQL:= lSQL + CRLF + 'SELECT kurz FROM ' + tblKList + ' WHERE Datum<=@dt AND Mena=N' + QuotedStr(mena) + ' ORDER BY Datum DESC'; with Helios.OpenSQL(lSQL) do if (RecordCount>0) then kurz:= StrToFloat(VarToStr(FieldValues(0))); end; if (idDZ=0) then begin lSQL:= 'DECLARE @dt DATETIME,@Ident INT'; lSQL:= lSQL + CRLF + 'SET @dt=CONVERT(datetime,N' + QuotedStr(dt) + ',104)'; lSQL:= lSQL + CRLF + 'EXEC dbo.hp_InsertHlavickyOZ @Ident OUT,@Sklad=N'; lSQL:= lSQL + QuotedStr(sklZdroj)+',@DruhPohybu=' + cBL + ',@RadaDokladu=N' + QuotedStr(rDoklBL); lSQL:= lSQL +',@Insert=1,@PC=NULL,@CisloOrg=' + cOrg + ',@Mena=N' + QuotedStr(mena) + ',@DatumPorizeni=@dt'; lSQL:= lSQL + CRLF + 'SELECT @Ident'; idDZ:= 0; try with Helios.OpenSQL(lSQL) do if VarIsNull(FieldValues(0)) then idDZ:= 0 else if not TryStrToInt(VarToStr(FieldValues(0)), idDZ) then idDZ:= 0; if (idDZ>0) and (cOrg<>'') and not(jeLovato) then begin idDZv:= idDZ; lSQL:= 'UPDATE ' + tblDZ + ' SET Mena=' + QuotedStr('CZK') + ',IdSkladPrevodu=N' + QuotedStr(sklCil); lSQL:= lSQL + ',BlokovaniEditoru=' + IntToStr(Helios.UserId) + ',TypPrevodky=N' + QuotedStr(rPrev); lSQL:= lSQL + ',Text3=CONVERT(ntext,N' + QuotedStr('plgLOVATO') + '),DruhPohybuPrevod=0 WHERE id=' + IntToStr(idDZ); if (cZak<>'') then lSQL:= lSQL + CRLF + 'UPDATE ' + tblDZ + ' SET CisloZakazky=N' + QuotedStr(cZak) + ' WHERE id=' + IntToStr(idDZ); Helios.ExecSQL(lSQL); end; except on E:Exception do begin Helios.Error(#1'Nelze uložit nový Balící list/Výdejku/Vratku.'#1 + CRLF + E.Message); idKJ:= ZapisDoKJ(Helios,'HEO','','POR','','Plugin plgLOVATO','Nelze uložit nový Balící list/Výdejku/Vratku'); if idKJ>0 then Helios.ExecSQL('INSERT ' + tblKJPozn + ' (IDKontJednani,Nazev,Poznamka) VALUES (' + IntToStr(idKJ) + ',N' + QuotedStr('Podrobnosti.baliciListy') + ',N' + QuotedStr(E.Message + CRLF + lSQL) + ')'); idKJ:= 0; end; end; end; if (idDZ>0) then begin if (jsemLov) then begin lSQL:= 'UPDATE ' + tblDZ + ' SET MistoUrceni='; if (cOrg='1') then if (cbTypDokl.ItemIndex>0) then begin lSQL:= lSQL + cOrg end else begin lSQL:= lSQL + cOrgFinaly; end; lSQL:= lSQL + ' WHERE id=' + IntToStr(idDZ); Helios.ExecSQL(lSQL); lSQL:= 'IF NOT EXISTS(SELECT id FROM ' + tblDZe + ' WHERE id=' + IntToStr(idDZ) + ')' + CRLF; lSQL:= lSQL + 'INSERT ' + tblDZe + ' (id) VALUES (' + IntToStr(idDZ) + ')' + CRLF; lSQL:= lSQL + 'UPDATE ' + tblDZe + ' SET _TypBalicihoListu=' + IntToStr(cbTypDokl.ItemIndex+1); lSQL:= lSQL + ' WHERE id=' + IntToStr(idDZ); Helios.ExecSQL(lSQL); end; with Helios.OpenSQL('SELECT Mena FROM ' + tblDZ + ' WHERE id=' + IntToStr(idDZ)) do begin if not VarIsNull(FieldValues(0)) then mena:= VarToStr(FieldValues(0)); // if not VarIsNull(FieldValues(1)) then // kurz:= StrToFloat(VarToStr(FieldValues(1))); end; vTabBL.DisableControls; vTabBL.First; while not(vTabBL.EOF) do begin qty:= vTabBL.FieldByName('Mnoz').AsFloat; idKZ:= vTabBL.FieldByName('idKZ').AsInteger; idSS:= vTabBL.FieldByName('idSS').AsInteger; idPZ:= vTabBL.FieldByName('idPZ').AsInteger; hmot:= vTabBL.FieldByName('CelkHmot').AsFloat; hmot:= RoundToEx(hmot/qty,-3); prikaz:= vTabBL.FieldByName('Prikaz').AsInteger; jcena:= 0.1; mj:= 'ks'; if (idKZ<>0) and (idPZ=0) then with Helios.OpenSQL('SELECT MJevidence,Hmotnost FROM ' + tblKZ + ' WHERE id=' + IntToStr(idKZ)) do begin mj:= VarToStr(FieldValues(0)); if VarIsNull(FieldValues(1)) then Helios.ExecSQL('UPDATE ' + tblKZ + ' SET Hmotnost=0 WHERE id=' + IntToStr(idKZ)) else hmot:= StrToFloat(VarToStr(FieldValues(1))); end; if (idSS=0) and (idKZ<>0) and (idPZ=0) then begin with Helios.OpenSQL('SELECT id FROM ' + tblSS + ' WHERE IDSklad=N' + QuotedStr(Helios.Sklad) + ' AND IDKMenZbozi=' + IntToStr(idKZ)) do if RecordCount>0 then idSS:= StrToInt(VarToStr(FieldValues(0))) else begin lSQL:= 'INSERT ' + tblSS + ' (IDSklad,IDKmenZbozi) VALUES (N' + QuotedStr(Helios.Sklad); lSQL:= lSQL + ',' + IntToStr(idKZ) + ')' + CRLF + 'SELECT SCOPE_IDENTITY()'; with Helios.OpenSQL(lSQL) do idSS:= StrToInt(VarToStr(FieldValues(0))); end; end; if (idSS>0) and (qty<>0) then begin // data pro kontrolu prevodu lSQL:= 'INSERT dbo._TabStavPrevod(IDDoklad,IDZboSklad,Stav,Mnozstvi) VALUES ('; lSQL:= lSQL + IntToStr(idDZ) + ',' + IntToStR(idSS) + ','; with Helios.OpenSQL('SELECT Mnozstvi FROM ' + tblSS + ' WHERE id=' + IntToStr(idSS)) do lSQL:= lSQL + StringReplace(VarToStr(FieldValues(0)),',','.',[rfReplaceAll]) + ','; lSQL:= lSQL + StringReplace(FloatToStr(qty),',','.',[rfReplaceAll]) + ')'; Helios.ExecSQL(lSQL); with Helios.OpenSQL('SELECT EcJc FROM ' + tblJC + ' WHERE IDStavSkladu=' + IntToStr(idSS)) do if (RecordCount>0) then jcena:= StrToFloat(VarToStr(FieldValues(0))) else jcena:= 0.1; jeMat:= false; if (idKZ>0) then begin with Helios.OpenSQL('SELECT id FROM ' + tblKZ + ' WHERE Material=1 AND id=' + IntToStr(idKZ)) do if (RecordCount>0) then jeMat:= true; end; // kalkulacni cena materialu na balici listy i vydejky kooperantum // !! kalk.cena je v EURech !! if (jeMat) then begin with Helios.OpenSQL('SELECT TOP(1) kc.Cena FROM ' + tblKalkCe + ' kc LEFT JOIN ' + tblCZmen + ' cz ON (kc.ZmenaOd=cz.id) WHERE kc.IDKmenZbozi=' + IntToStr(idKZ) + ' ORDER BY cz.datum DESC') do if (RecordCount=1) then jcena:= StrToFloat(VarToStr(FieldValues(0))); end else begin with Helios.OpenSQL('SELECT TOP(1) zk.Mat FROM ' + tblZaklKalk + ' zk LEFT JOIN ' + tblCZmen +' cz ON (zk.ZmenaOd=cz.id) WHERE zk.dilec=' + IntToStr(idKZ) + ' ORDER BY cz.Datum DESC') do if (RecordCount=1) then jcena:= StrToFloat(VarToStr(FieldValues(0))); end; jCena:= RoundToEx(jcena*Kurz,-4); // cena * Kurz if (idPZ=0) then begin lSQL:= 'DECLARE @Ident INT,@dt DATETIME' + CRLF + 'SET @dt=CONVERT(datetime,N' + QuotedStr(dt) + ',104)'; lSQL:= lSQL + CRLF + 'EXEC dbo.hp_InsertPolozkyOZ @Ident OUT,@IDDoklad='; lSQL:= lSQL + IntToStr(idDZ) + ',@DruhPohybu=' + cBL + ',@CisloOrg=' + cOrg + ',@IDZboSklad=' + IntToStr(idSS); lSQL:= lSQL + ',@SazbaDPH=null,@Mnozstvi=' + StringReplace(FloatToStr(qty),',','.',[rfReplaceAll]); lSQL:= lSQL + ',@MJ=N' + QuotedStr(mj) + ',@JCbezDaniKC=' + StringReplace(FloatToStr(jcena),',','.',[rfReplaceAll]); lSQL:= lSQL + ',@DatPorizeni=@dt,@VstupniCena='; if (cOrg='1') then lSQL:= lSQL + '4,@Kurz=' + StringReplace(FloatToStr(kurz),',','.',[rfReplaceAll]) else lSQL:= lSQL + '0,@Kurz=1'; lSQL:= lSQL + ',@PovolitDuplicitu=1,@SazbaSD=0,@ZakazanoDPH=0,@KurzEuro=0,@Mena=N' + QuotedStr(mena); lSQL:= lSQL + ',@JednotkaMeny=1,@Selectem=0' + CRLF + 'SELECT @Ident'; end else begin lSQL:= 'UPDATE ' + tblPZ + ' SET Mnozstvi=' + StringReplace(FloatToStr(qty),',','.',[rfReplaceAll]); lSQL:= lSQL + ',VstupniCena='; if cOrg='1' then lSQL:= lSQL + '4,Kurz=' + StringReplace(FloatToStr(kurz),',','.',[rfReplaceAll]) else lSQL:= lSQL + '0,Kurz=1'; lSQL:= lSQL + ',StredNaklad=N' + QuotedStr(VyrSkl) + ' WHERE id=' + IntToStr(idPZ); end; try with Helios.OpenSQL(lSQL) do if (idPZ=0) then if (RecordCount>0) then if not VarIsNull(FieldValues(0)) then if not TryStrToInt(VarToStr(FieldValues(0)),idPZ) then idPZ:= 0; except on E:Exception do Helios.Error(#1'Nelze uložit položku do Balícího listu/Výdejky !'#1 + CRLF + lSQL); end; if (idPZ>0) then begin if (vTabBL.FieldByName('idBLPol').AsString<>'') then begin lSQL:= 'UPDATE ' + tblBLPol + ' SET IdPolozkaOZ=' + IntToStr(idPZ) + ' WHERE id='; lSQL:= lSQL + vTabBL.FieldByName('idBLPol').AsString; Helios.ExecSQL(lSQL); end; lSQL:= 'UPDATE ' + tblPZ + ' SET NazevSozNa1=N' + QuotedStr(IfThen(jsemPrev, '', vTabBL.FieldByName('Box').AsString)); lSQL:= lSQL + ',JCbezDaniKC=Kurz*' + StringReplace(FloatToStr(jcena),',','.',[rfReplaceAll]); lSQL:= lSQL + ',CCbezDaniKc=JCbezDaniKC*Mnozstvi,JCbezDaniVal='; lSQL:= lSQL + StringReplace(FloatToStr(jcena),',','.',[rfReplaceAll]) + ',CCbezDaniVal='; lSQL:= lSQL + 'JCbezDaniVal*Mnozstvi WHERE id=' + IntToStr(idPZ); Helios.ExecSQL(lSQL); if (prikaz>0) then begin with Helios.OpenSQL('SELECT id FROM ' + tblPZe + ' WHERE id=' + IntToStr(idPZ)) do if RecordCount=0 then lSQL:= 'INSERT ' + tblPZe + ' (id,_VyrobniPrikaz) VALUES (' + IntToStr(idPZ) + ',' + IntToStr(prikaz) + ')' else lSQL:= 'UPDATE ' + tblPZe + ' SET _VyrobniPrikaz=' + IntToStr(prikaz) + ' WHERE id=' + IntToStr(idPZ); Helios.ExecSQL(lSQL); end; end; vTabBL.Next; end; end; vTabBL.EnableControls; Helios.ExecSQL('UPDATE ' + tblBL + ' SET IdDokladOZ=' + IntToStr(idDZ) + ' WHERE id=' + IntToStr(idBL)); Helios.ExecSQL('EXEC dbo.ep_DoplnKooperacniCenyVydejky @idDZ=' + IntToStr(idDZ)); Helios.ExecSQL('EXEC dbo.hp_VypCenOZPolozek_IDDokladu @IDDoklad=' + IntToStr(idDZ) + ',@AktualizaceSlev=1'); Helios.ExecSQL('UPDATE ' + tblDZ + ' SET BlokovaniEditoru=null WHERE id=' + IntToStr(idDZ)); if (cZak<>'') then Helios.ExecSQL('UPDATE ' + tblPZ + ' SET CisloZakazky=N' + QuotedStr(cZak) + ' WHERE idDoklad=' + IntToStr(idDZ)); if not(jsemLov) and (Helios.BrowseID=bidDZPrij) then begin with Helios.OpenSQL('SELECT id FROM ' + tblDZ + ' WHERE NavaznyDoklad IS NOT NULL AND id=' + IntToStR(idDZ)) do if (RecordCount=0) then begin realVyd:= false; // vytvor hlavicku nasledneho dokladu if (rDoklBL='450') then begin rDoklBL:= '250'; cBL:= '0'; end; // wCond:= 'IDSklad=N' + QuotedStr(sklCil); // wCond:= wCond + ' AND Obdobi=' + idObd; // wCond:= wCond + ' AND DruhPohybuZbo=' + cBL + ' AND RadaDokladu=N' + QuotedStr(rDoklBL); // idDZ2:= helUtils.NajdiPrvniVolny(Helios,tblDZ,'PoradoveCislo',cBL,rDoklBL,idObd,wCond); lSQL:= 'DECLARE @dt DATETIME,@Ident INT' + CRLF + 'SET @dt=CONVERT(datetime,N' + QuotedStr(dt) + ',104)'; lSQL:= lSQL + CRLF + 'EXEC dbo.hp_InsertHlavickyOZ @Ident OUT,@Sklad=N' + QuotedStr(sklCil); lSQL:= lSQL + ',@DruhPohybu=' + cBL + ',@RadaDokladu=N' + QuotedStr(rDoklBL); lSQL:= lSQL + ',@Insert=1,@PC=NULL,@CisloOrg='; lSQL:= lSQL + cOrg + ',@Mena=N' + QuotedStr(mena) + ',@DatumPorizeni=@dt' + CRLF + 'SELECT @Ident'; idDZ2:= 0; try with Helios.OpenSQL(lSQL) do if VarIsNull(FieldValues(0)) then idDZ2:= 0 else if not TryStrToInt(VarToStr(FieldValues(0)), idDZ2) then idDZ2:= 0; except on E:Exception do Helios.Error(#1'Nelze vytvořit následný doklad.'#1 + CRLF + E.Message + errPlg); end; end; if (idDZ2>0) then idDZp:= idDZ2; if (cZak<>'') and (idDZp>0) then begin lSQL:= 'UPDATE ' + tblDZ + ' SET CisloZakazky=N' + QuotedStr(cZak) + ' WHERE id=' + IntToStr(idDZp); try Helios.ExecSQL(lSQL); except end; end; // if cbVratka.Checked then try lSQL:= 'IF OBJECT_ID(N' + QuotedStr('tempdb..#TabTempUziv') + ') IS NULL CREATE TABLE #TabTempUziv(Tabulka'; lSQL:= lSQL + ' NVARCHAR(255) NOT NULL, SCOPE_IDENTITY INT NULL, Datum DATETIME NULL)' + CRLF; lSQL:= lSQL + 'EXEC dbo.hp_generuj_navazny_doklad @IDDokladDst=' + IntToStr(idDZ2) + ',@IDDokladSrc=' + IntToStr(idDZ); lSQL:= lSQL + ',@CisloOrgCil=' + cOrg + ',@MUcil=null,@KurzCil=1,@JednotkaMenyCil=1,@MenaCil=N' + QuotedStr('CZK'); lSQL:= lSQL + ',@Returnem=1,@KurzEuroCil=0,@CisloZakCil=null,@NOkruhCil=null,@StredNakladCil=N' + QuotedStr(VyrSkl) + ',@StredVynosCil=null'; lSQL:= lSQL + ',@FormaDopravyCil=null,@VozidloCil=null,@ObjednavkaCil=null,@PopisDodavkyCil=N' + QuotedStr('Převod materiálu'); lSQL:= lSQL + ',@NavaznyDobropisCil=null,@ZamestnanecCil=null,@DodFakCil=null,@Nasobek=1,@SlevaCil=0,@VytvaretPolozkovouVazbu=1'; Helios.ExecSQL(lSQL); except on E:Exception do begin Helios.ExecSQL('DELETE FROM ' + tblDZ + ' WHERE id=' + IntToStR(idDZp)); // idDZp:= 0; Helios.Error(#1'Chyba při generování návazného dokladu.'#1 + CRLF + E.Message + errPlg); end; end; try lSQL:= 'EXEC dbo.ep_PZ_KopirujCenyDleOldPolozky @IdDokladNew=' + IntTOStr(idDZ2); Helios.ExecSQL(lSQL); except on E:Exception do begin Helios.Error(#1'Chyba při duplikaci cen na návazný doklad.'#1 + CRLF + E.Message + errPlg); end; end; { // pokud je kalkulacni cena nulova, koukni se na posledni prijemku, cena v EURech if jcena=0 then with Helios.OpenSQL('SELECT TOP(1) JCbezDaniValPoS FROM ' + tblPZ + ' WHERE Mena=N''EUR'' AND DruhPohybuZbo=0 AND IdZboSklad=' + IntToStr(idSS) + ' ORDER BY pz.DatPorizeni DESC') do if RecordCount=1 then if not VarIsNull(FieldValues(0)) then jcena:= StrToFloat(VarToStr(FieldValues(0))); } realVyd:= false; if (idDZ>0) and (idDZp>0) and not(JeLovato) then begin realPrij:= false; try lSQL:= 'DECLARE @dt DATETIME,@chyba BIT' + CRLF + 'SET @dt=CONVERT(datetime,N' + QuotedStr(dt) + ',104)' + CRLF; lSQL:= lSQL + 'SET @chyba=0' + CRLF + 'EXEC dbo.hp_Realizuj_Vydej ' + IntToStr(idDZ) + ',@dt,' + IntToStr(Helios.UserId) + ',0,@chyba OUT'; lSQL:= lSQL + CRLF + 'SELECT @chyba'; with Helios.OpenSQL(lSQL) do begin if not VarIsNull(FieldValues(0)) then if (LowerCase(VarToStr(FieldValues(0)))='false') then realVyd:= true; end; except on E:Exception do begin if (Pos('50024',E.Message))>0 then Helios.Error(#1'Na výdejce nejsou položky, nelze realizovat.'#1) else Helios.Error(#1'Nelze realizovat výdejku !'#1 + CRLF + 'idVyd: ' + IntToStr(idDZ) + CRLF + E.Message + errPlg); { idKJ:= ZapisDoKJ(Helios,'HEO','','POR','','Plugin plgLOVATO','Nelze realizovat Výdejku/Vratku'); if idKJ>0 then Helios.ExecSQL('INSERT INTO ' + tblKJPozn + ' (IDKontJednani,Nazev,Poznamka) VALUES (' + IntToStr(idKJ) + ',N' + QuotedStr('Podrobnosti.unit7') + ',N' + QuotedStr(E.Message + CRLF + lSQL) + ')'); idKJ:= 0; } end; end; { try lSQL:= 'DECLARE @dt DATETIME,@chyba BIT' + CRLF + 'SET @dt=CONVERT(datetime,N' + QuotedStr(dt) + ',104)' + CRLF; lSQL:= lSQL + 'EXEC dbo.hp_Realizuj_Prijem ' + IntToStr(idDZp) + ',@dt,' + IntToStr(Helios.UserId) + ',@chyba OUT'; lSQL:= lSQL + CRLF + 'SELECT @chyba'; with Helios.OpenSQL(lSQL) do begin if not VarIsNull(FieldValues(0)) then if LowerCase(VarToStr(FieldValues(0)))='false' then realPrij:= true; end; except on E:Exception do Helios.Error(#1'Nelze realizovat výdejku/příjemku !'#1 + CRLF + 'idVyd: ' + IntToStr(idDZ) + CRLF + 'idPrij: ' + IntToStr(idDZp) + CRLF + E.Message + errPlg); end; } end; if (idDZp>0) and (realVyd) then begin realPrij:= false; try lSQL:= 'EXEC dbo.ep_PZ_KopirujCenyDleOldPolozky @IdDokladNew=' + IntTOStr(idDZp); Helios.ExecSQL(lSQL); except on E:Exception do Helios.Error(#1'Chyba při duplikaci cen na návazný doklad.'#1 + CRLF + E.Message + errPlg); end; try lSQL:= 'DECLARE @chyba BIT,@dt DATETIME' + CRLF + 'SET @dt=CONVERT(datetime,N' + QuotedStr(dt) + ',104)' + CRLF; lSQL:= lSQL + 'EXEC dbo.hp_Realizuj_Prijem ' + IntToStr(idDZp) + ',@dt,' + IntToStr(Helios.UserId) + ',@chyba OUT'; lSQL:= lSQL + CRLF + 'SELECT @chyba'; with Helios.OpenSQL(lSQL) do if not VarIsNull(FieldValues(0)) then if (LowerCase(VarToStr(FieldValues(0)))='false') then realPrij:= true; except on E:Exception do Helios.Error(#1'Nelze realizovat následnou příjemku !'#1 + CRLF + E.Message + errPlg); end; end else begin if (idDZp>0) then begin lSQL:= 'FROM ' + tblPZ + ' WHERE IdDoklad=' + IntToStr(idDZp); try Helios.ExecSQL('DELETE FROM [dbo].[TabPohybyZboziSD] WHERE id IN (SELECT id ' + lSQL + ')'); Helios.ExecSQL('DELETE ' + lSQL); Helios.ExecSQL('DELETE FROM [dbo].[TabDokZboDodatek] WHERE IDHlavicky=' + IntToStr(idDZp)); Helios.ExecSQL('UPDATE ' + tblDZ + ' SET NavaznyDoklad=null WHERE id='+ IntToStr(idDZv)); Helios.ExecSQL('DELETE FROM ' + tblDZ + ' WHERE Id=' + IntToStr(idDZp)); except on E:Exception do Helios.Error('Chyba při mazání záznamů.' + CRLF + E.Message); end; end; end; end; Helios.Refresh(true); end; end; end; procedure TformBaliciListy.btnOKMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var log: string; begin log:= 'SELECT DISTINCT(Stanice) FROM dbo._TabPlgUse WHERE PlgJmeno=N' + QuotedStr('plgLOVATO'); log:= log + ' AND DATEDIFF(day,GETDATE(),Datum)=0 GROUP BY Stanice'; if (ssCtrl in Shift) and (Button=mbRight) then with Helios.OpenSQL(log) do if (RecordCount>0) then begin log:= ''; First; while not(EOF) do begin log:= log + VarToStr(FieldValues(0)) + CRLF; Next; end; Helios.Info('Dnes plugin používali:' + CRLF + log); end; end; procedure TformBaliciListy.cbOrgChange(Sender: TObject); var msg: string; begin jsemLov:= JeLovato; jsemPrev:= JePrevodka; if not(jsemLov) and (Helios.BrowseID<>27) then Self.Caption:= ' Výdejky / Vratky / Převodky' else Self.Caption:= ' Balicí listy'; if ((Helios.BrowseID=16) or (Helios.BrowseID=18)) and (JeLovato) then begin if (Helios.Sklad<>VyrRekl) then begin msg:= #1'Výdejku pro LOVATO Itálie lze dělat pouze pro sklad Výroba REKLAMACE.' + CRLF + 'Chcete přepnout sklad ?'; if Helios.YesNo(msg,true) then begin Self.Caption:= ' Výdej do IT ze skladu Výroba REKLAMACE'; Helios.SetSklad(VyrRekl); end end else begin cbOrg.ItemIndex:= oldCBOdb; Exit; end; end; if (vTabBL.RecordCount>0) then begin Helios.Error(#1'Ve Výdejce/převodce jsou položky, nelze měnit Odběratele.'#1); cbOrg.ItemIndex:= oldCBOdb; end; if (jsemLov) or (jsemPrev) then cbVratka.Visible:= false; selRegCis.Text:= Trim(selRegCis.Text); if (selRegCis.Text='') or (selRegCis.Text='%') then FocusRegCis; end; procedure TformBaliciListy.cbOrgEnter(Sender: TObject); begin oldCBOdb:= cbOrg.ItemIndex; end; procedure TformBaliciListy.cbTypDoklChange(Sender: TObject); var sSkl, nSkl, msg: string; begin if (jsemLov) then begin if (vTabBL.RecordCount>0) then begin Helios.Error(#1'V balícím listu jsou zadány položky, nelze měnit typ BL.'#1); cbTypDokl.ItemIndex:= oldCBTyp; Exit; end; msg:= 'Tento druh BL lze vydávat jen ze skladu '; case cbTypDokl.ItemIndex of 0: begin sSkl:= VyrFin; nSkl:= 'Výroba sklad ' + sSkl; end; 1,2: begin sSkl:= VyrSkl; nSkl:= 'Výroba ' + sSkl; end; 3: begin sSkl:= VyrRekl; nSkl:= 'Výroba REKLAMACE'; end; end; if (Helios.Sklad<>sSkl) then begin Helios.Error(msg + #1 + nSkl + ',' + CRLF + 'aktuální sklad bude změněn.'#1); Helios.SetSklad(sSkl); end; end; selRegCis.SetFocus; end; procedure TformBaliciListy.cbTypDoklEnter(Sender: TObject); begin oldCBTyp:= cbTypDokl.ItemIndex; end; procedure TformBaliciListy.cbVratkaClick(Sender: TObject); begin Self.Caption:= ' Výdejky pro kooperanta'; if cbVratka.Checked then Self.Caption:= ' Vratky materiálu od kooperanta' else if (JeLovato) then Self.Caption:= ' Balící listy'; end; procedure TformBaliciListy.edtKSExit(Sender: TObject); begin mnoz:= edtKS.Value; hmotC:= hmotZ * mnoz; end; procedure TformBaliciListy.FormActivate(Sender: TObject); begin verText:= GetFileVersion2(GetModuleName(HInstance)); if Length(verText)=12 then verText:= LeftStr(verText,9) + '0' + RightStr(verText,3); lblVerze.Caption:= verText; pmObnovNeulozene.Visible:= false; pmSmazNeulozene.Visible:= false; N1.Visible:= false; N2.Visible:= false; with Helios.OpenSQL('SELECT id FROM ' + tblBLPol + ' WHERE IdPolozkaOZ IS NULL') do if (RecordCount>0) then begin pmObnovNeulozene.Visible:= true; pmSmazNeulozene.Visible:= true; N1.Visible:= true; N2.Visible:= true; end; cbVratka.Enabled:= false; cbVratka.Checked:= false; cbOrg.ItemIndex:= 1; edtBox.Enabled:= false; edtPrikaz.Enabled:= false; case Helios.BrowseID of 16: begin Self.Caption:= ' Příjemky od kooperanta'; cbVratka.Checked:= true; // cbPolos.Visible:= true; // cbPolos.Checked:= false; // cbPolos.Caption:= 'REKLAMACE'; cbTypDokl.Items.Clear; cbTypDokl.Items.Add(''); cbTypDokl.Items.Add('REKLAMACE'); cbTypDokl.ItemIndex:= 0; cbTypDokl.Visible:= true; cbTypDokl.Enabled:= true; cbReklamace.Enabled:= true; end; 18: begin Self.Caption:= ' Výdejky pro kooperanta/převodka mezi sklady'; // cbPolos.Visible:= false; cbTypDokl.Visible:= false; cbTypDokl.Enabled:= false; end; else begin Self.Caption:= ' Balící listy'; cbOrg.Enabled:= false; cbOrg.ItemIndex:= 0; edtBox.Enabled:= true; cbTypDokl.ItemIndex:= 0; edtPrikaz.Enabled:= false; if (idDZ>0) then NactiBalList; end; end; FocusRegCis; end; procedure TformBaliciListy.FormClose(Sender: TObject; var Action: TCloseAction); begin if (vTabBL.Active) then vTabBL.Close; Action:= caFree; end; procedure TformBaliciListy.NastavEdity; var idx: integer; begin for idx:=0 to ComponentCount-1 do begin if (Self.Components[idx] is TRzEdit) then (Self.Components[idx] as TRzEdit).FocusColor:= helParams.colBg; end; end; procedure TformBaliciListy.NastavFonty; var idx: integer; begin idx:= 0; while idx0) then begin if Helios.YesNo(#1'POZOR - Smazat zadané položky ?'#1,false) then vTabBL.EmptyDataSet; Helios.ExecSQL('UPDATE ' + tblBLPol + ' SET IdDoklad=' + IntToStr(idBL) + ' WHERE IdPolozkaOZ IS NULL'); First; while not(EOF) do begin vTabBL.Append; vTabBL.FieldByName('idBLPol').AsString:= VarToStr(FieldByNameValues('Id')); vTabBL.FieldByName('idSS').AsString:= VarToStr(FieldByNameValues('IdStavSkladu')); vTabBL.FieldByName('Mnoz').AsFloat:= StrToFloat(VarToStr(FieldByNameValues('Mnozstvi'))); vTabBL.FieldByName('Box').AsString:= VarToStr(FieldByNameValues('Box')); if VarIsNull(FieldByNameValues('IdPolozkaOZ')) then vTabBL.FieldByName('idPZ').AsString:= '' else vTabBL.FieldByName('idPZ').AsString:= VarToStr(FieldByNameValues('IdPolozkaOZ')); lSQL:= 'SELECT kz.SkupZbo,kz.RegCis,kz.id FROM ' + tblSS + ' ss INNER JOIN ' + tblKZ + ' kz'; lSQL:= lSQL + ' ON (ss.IdKmenZbozi=kz.id) WHERE ss.id=' + VarToStr(FieldByNameValues('IdStavSkladu')); with Helios.OpenSQL(lSQL) do if RecordCount>0 then begin vTabBL.FieldByName('SkupZbo').AsString:= VarToStr(FieldValues(0)); vTabBL.FieldByName('RegCis').AsString:= VarToStr(FieldValues(1)); vTabBL.FieldByName('idKZ').AsString:= VarToStr(FieldValues(2)); end; vTabBL.Post; Next; end; end; end; procedure TformBaliciListy.pmSmazNeulozeneClick (Sender: TObject); begin if Helios.YesNo(#1'POZOR - opravdu chcete smazat neuložené položky ?'#1 + CRLF + '(tyto vzniknou např. při násilném vypnutí PC/Heliosu)',false) then Helios.ExecSQL('DELETE FROM ' + tblBLPol + ' WHERE IdPolozkaOZ IS NULL'); end; procedure TformBaliciListy.FormShow (Sender: TObject); var lSQL: string; i: integer; begin // if (Helios.Sklad<>'200') then // begin // Helios.Error('Aktuální sklad není 200 - Výroba, automaticky přepínám.'); // Helios.SetSklad('200'); // end; { SetThreadLocale(LOCALE_USER_DEFAULT); GetFormatSettings; ShortDateFormat:= 'dd.mm.yyyy'; } Application.Handle:= Helios.MainApplicationHandle; Application.Icon.Handle:= Helios.MainApplicationIconHandle; // Self.Font.Name:= Helios.Font; NactiParametryHeliosu(Helios, helParams); if (helParams.podbarveni) then NastavEdity; // NastavFonty; selVyber:= false; cbOrg.Items.Clear; cbOrg.Items.Add('LOVATO Itálie'); lSQL:= 'SELECT s.Nazev, se._CisloOrg, s.Cislo FROM ' + tblStrom + ' s INNER JOIN ' + tblStromE + ' se ON (se.id=s.id)'; lSQL:= lSQL + ' WHERE se._VydejZjednodusene=1 AND ISNULL(se._CisloOrg,-1)>=0 ORDER BY s.Cislo'; with Helios.OpenSQL(lSQL) do if (RecordCount>0) then SetLength(koop,RecordCount); i:= -1; lSQL:= 'SELECT s.Nazev, se._CisloOrg, s.Cislo FROM ' + tblStrom + ' s INNER JOIN ' + tblStromE + ' se ON (se.id=s.id)'; lSQL:= lSQL + ' WHERE se._VydejZjednodusene=1 AND ISNULL(se._CisloOrg,-1)=0 ORDER BY s.Cislo'; with Helios.OpenSQL(lSQL) do if (RecordCount>0) and (Length(koop)>0) then begin First; while not(EOF) do begin if (VarToStr(FieldValues(2))<>Helios.Sklad) then begin Inc(i); koop[i].Nazev:= VarToStr(FieldValues(0)); koop[i].CisloOrg:= StrToInt(VarToStr(FieldValues(1))); koop[i].Sklad:= VarToStr(FieldValues(2)); koop[i].ItemIndex:= i+1; cbOrg.Items.Add(koop[i].Nazev); end; Next; end; end; lSQL:= 'SELECT s.Nazev, se._CisloOrg, s.Cislo FROM ' + tblStrom + ' s INNER JOIN ' + tblStromE + ' se ON (se.id=s.id)'; lSQL:= lSQL + ' WHERE se._VydejZjednodusene=1 AND ISNULL(se._CisloOrg,-1)>0 ORDER BY s.Cislo'; with Helios.OpenSQL(lSQL) do if (RecordCount>0) and (Length(koop)>0) then begin First; while not(EOF) do begin if (VarToStr(FieldValues(2))<>Helios.Sklad) then begin Inc(i); koop[i].Nazev:= VarToStr(FieldValues(0)); koop[i].CisloOrg:= StrToInt(VarToStr(FieldValues(1))); koop[i].Sklad:= VarToStr(FieldValues(2)); koop[i].ItemIndex:= i+1; cbOrg.Items.Add(koop[i].Nazev); end; Next; end; end; i:= 0; if (Length(koop)>0) then begin for i:=0 to Length(koop)-1 do if (koop[i].Nazev='') then Break; end; if (i>0) then SetLength (koop,i); edtDat.Date:= Now; // viewPol.OptionsView.NoDataToDisplayInfoText:= ''; insData:= true; VytvorTabulkyAGrid; iOdb:= 0; // pocatecni index cbOrg idBL:= 0; if (idDZ>0) then begin // cbTypDokl.Enabled:= false; NactiBalList end else begin lSQL:= 'INSERT ' + tblBL + ' (CisloOrg, Datum, Vratka) VALUES ('; case Helios.BrowseID of 27: lSQL:= lSQL + '1'; else lSQL:= lSQL + '11'; end; lSQL:= lSQL + ',CONVERT(datetime,N' + QuotedStr(edtDat.Text) + ',104),0)' + CRLF + 'SELECT SCOPE_IDENTITY()'; with Helios.OpenSQL(lSQL) do idBL:= StrToInt(VarToStr(FieldValues(0))); end; insData:= false; end; procedure TformBaliciListy.WMGetMinMaxInfo (var AMsg: TWMGetMinMaxInfo); begin inherited; { with AMsg.MinMaxInfo^ do begin ptMinTrackSize:= Point(Self.Constraints.MinWidth, Self.Constraints.MinHeight); ptMaxTrackSize:= Point(Self.Constraints.MaxWidth, Self.Constraints.MaxHeight); end; } end; end.