unit frmPrijem1024; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Types, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, System.ImageList, Vcl.ImgList, Vcl.StdCtrls, Vcl.Buttons, Vcl.ComCtrls, ddPlugin_TLB, TBPackageU, Vcl.WinXPickers, Vcl.Mask, RxToolEdit, Vcl.NumberBox, Vcl.Grids, VirtualTrees, NxGridView6, NxColumns6, NxControls6, NxCustomGrid6, NxVirtualGrid6, NxGrid6, NxEdit6, MemTableDataEh, Data.DB, DBGridEhGrouping, ToolCtrlsEh, DBGridEhToolCtrls, DynVarsEh, EhLibVCL, GridsEh, EhLibMTE, DBAxisGridsEh, DBGridEh, MemTableEh, System.MaskUtils; type { TWideStringHelper = record helper for WideString function QuotedString: string; overload; end; TMaskedTextHelper = record helper for TMaskedText function QuotedString: string; overload; function Replace(oldStr, newStr: string): string; overload; end; } TSortiment = record nazev, k1, poleDodav: string; dodavatel: integer; typSort: byte; end; TformPrijem1024 = class(TForm) gbDodavatel: TGroupBox; gbPolozky: TGroupBox; Label1: TLabel; dtZavoz: TDateTimePicker; btnOK: TButton; Label2: TLabel; lblDodAdresa: TLabel; lblDodMisto: TLabel; cbxSortiment: TComboBox; Label3: TLabel; edtCisloObj: TNumberBox; Label4: TLabel; btnTisk: TButton; btnRozbalit: TButton; btnSbalit: TButton; btnZavrit: TButton; Panel1: TPanel; Panel2: TPanel; edtNumEditor: TNxEdit6; vTab: TMemTableEh; ds: TDataSource; polGrd: TDBGridEh; cbxDodavatel: TComboBox; lblDodICO: TLabel; lblDodDIC: TLabel; vTabPoradiSort: TSingleField; vTabPoradi: TSmallintField; vTabPoradiSortNazev: TStringField; vTabNazev1: TStringField; vTabRegCis: TStringField; vTabSkupZbo: TStringField; vTabIDZboSklad: TIntegerField; vTabMnozstvi: TFloatField; vTabIDPohybZboziObj: TIntegerField; vTabSortiment: TStringField; vTabK2: TStringField; vTabK1: TStringField; btnNactiObj: TButton; vTabTypZavozu: TStringField; cbZavoz: TComboBox; Label5: TLabel; vTabPoradiExt: TSingleField; vTabK1K2: TStringField; btnNuluj: TButton; vTabJCbezDaniKc: TSingleField; edtDodFak: TEdit; Label6: TLabel; procedure FormShow(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure cbxSortimentChange(Sender: TObject); procedure edtNumEditorClick(Sender: TObject); procedure btnRozbalitClick(Sender: TObject); procedure btnSbalitClick(Sender: TObject); procedure btnOKClick(Sender: TObject); procedure polGrdKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure btnZavritClick(Sender: TObject); procedure btnTiskClick(Sender: TObject); procedure vTabRanoValidate(Sender: TField); procedure vTabPoledneValidate(Sender: TField); procedure edtCisloObjExit(Sender: TObject); procedure btnNactiObjClick(Sender: TObject); procedure vTabMnozstviValidate(Sender: TField); procedure polGrdDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumnEh; State: TGridDrawState); procedure vTabFilterRecord(DataSet: TDataSet; var Accept: Boolean); procedure cbZavozChange(Sender: TObject); procedure polGrdDataGroupGetRowText(Sender: TCustomDBGridEh; GroupDataTreeNode: TGroupDataTreeNodeEh; var GroupRowText: string); procedure btnNulujClick(Sender: TObject); private cOrg: integer; function ZjistiBranchID: Integer; function MnozstviKPrijmuSum: Single; procedure NactiObjednavku(const idObj: integer); safecall; procedure WMGetMinMaxInfo(Var msg: TWMGetMinMaxInfo); message WM_GETMINMAXINFO; public Helios: IHelios; jeTest: boolean; idDZ: integer; end; var formPrijem1024: TformPrijem1024; sortim: TArray; cOrgs: TArray; cOrgDod, idDZ: integer; branchID: integer; compName, tabExtOrdInfo, cisloDokl, rDokl: string; bidHDCObj: integer; implementation uses System.StrUtils, System.DateUtils, helUtils; {$R *.dfm} {$IF CompilerVersion>=34} // Sydney a vys {$ENDIF} { function TWideStringHelper.QuotedString: string; begin Result:= string(Self).QuotedString; end; function TMaskedTextHelper.QuotedString: string; var s: string; begin s:= Self; Result:= s.QuotedString; end; function TmaskedTextHelper.Replace(oldStr: string; newStr: string): string; var s: string; begin s:= Self; Result:= s.Replace(oldStr, newStr); end; } procedure TformPrijem1024.WMGetMinMaxInfo(Var msg: TWMGetMinMaxInfo); begin inherited; with msg.MinMaxInfo^.ptMaxTrackSize Do begin X:= GetDeviceCaps( Canvas.handle, HORZRES ) + (Width - ClientWidth); Y:= GetDeviceCaps( Canvas.handle, VERTRES ) + (Height - ClientHeight); end; end; function TformPrijem1024.MnozstviKPrijmuSum: Single; var i: integer; begin result:= 0; if (vTab.RecordCount>0) then begin i:= vTab.RecNo; vTab.DisableControls; vTab.First; while not(vTab.Eof) do begin result:= result + vTab.FieldByName('Mnozstvi').AsSingle; vTab.Next; end; vTab.RecNo:= i; vTab.EnableControls; end; end; function TformPrijem1024.ZjistiBranchID: Integer; var s: string; begin result:= -1; s:= Helios.Sklad; if (LeftStr(s, 3)='005') then result:= RightStr(s, 1).ToInteger; end; procedure TformPrijem1024.btnNactiObjClick(Sender: TObject); var lSQL, zavoz, k1, k2: string; poradiSort, poradiSort2: Single; begin if (edtCisloObj.Value>0) then begin if not(vTab.Active) then vTab.Open; lSQL:= 'SELECT TOP(1) CisloOrg FROM ' + tblDZ + ' WHERE RadaDokladu LIKE N''9%0'' AND IDSklad=N' + Helios.Sklad.QuotedString + ' AND PoradoveCislo=' + edtCisloObj.ValueInt.ToString + ' ORDER BY DatPorizeni DESC'; cOrgDod:= helUtils.getHeliosIntVal(Helios, 0, lSQL); lSQL:= 'SELECT p.ID, p.IDZboSklad, p.Nazev1, (p.Mnozstvi-p.MnOdebrane-p.MnozstviStorno) AS Mnozstvi, p.SkupZbo, p.RegCis, p.Poradi, s.K1, s.K2, p.JCbezDaniKC'; lSQL:= lSQL + ', s.Nazev AS NazevSortim, ISNULL(pe._typzavozu,0) AS TypZavozu, ISNULL(sore.'; case branchID of 1: lSQL:= lSQL + '_PoradiObj_Klas1'; 2: lSQL:= lSQL + '_PoradiObj_MozPi'; 3: lSQL:= lSQL + '_PoradiObj_MozVod'; else lSQL:= lSQL + '_priorita'; end; lSQL:= lSQL + ', ISNULL(sore._priorita, 999)) AS Poradi FROM ' + tblDZ + ' d INNER JOIN ' + tblPZ; lSQL:= lSQL + ' p ON (p.IDDoklad=d.ID) INNER JOIN ' + tblSS + ' s ON (s.ID=p.IDZboSklad) INNER JOIN ' + tblKZ + ' k ON (k.ID=s.IDKmenZbozi)' + ' LEFT JOIN ' + tblSortim; lSQL:= lSQL + ' sor ON (sor.ID=k.IDSortiment) LEFT JOIN ' + tblSortimE + ' sore ON (sore.ID=sor.ID) LEFT JOIN ' + tblPZe + ' pe ON (pe.ID=p.ID) WHERE d.DruhPohybuZbo=6'; lSQL:= lSQL + ' AND d.Splneno=0 AND d.PoradoveCislo=' + edtCisloObj.ValueInt.ToString; lSQL:= lSQL + ' AND d.IDSklad=N' + Helios.Sklad.QuotedString + ' AND (p.Mnozstvi-p.MnOdebrane-p.MnozstviStorno)>0 ORDER BY'; lSQL:= lSQL + ' p.Poradi'; with Helios.OpenSQL(lSQL) do if (RecordCount>0) then begin First; while not(EOF) do begin k1:= VarToStr(FieldByName('K1').Value); k2:= VarToStr(FieldByName('K2').Value); lSQL:= 'SELECT ISNULL(se.'; case branchID of 1: lSQL:= lSQL + '_PoradiObj_Klas1'; 2: lSQL:= lSQL + '_PoradiObj_MozPi'; 3: lSQL:= lSQL + '_PoradiObj_MozVod'; else lSQL:= lSQL + '_priorita'; end; lSQL:= lSQL + ', ISNULL(se._priorita, 999)) FROM ' + tblSortim + ' s LEFT JOIN ' + tblSortimE + ' se ON (se.ID=s.ID) WHERE s.K1=N' + k1.QuotedString + ' AND s.K2 IS NULL'; poradiSort:= helUtils.getHeliosFloatVal(Helios, 0, lSQL); lSQL:= 'SELECT ISNULL(se.'; case branchID of 1: lSQL:= lSQL + '_PoradiObj_Klas1'; 2: lSQL:= lSQL + '_PoradiObj_MozPi'; 3: lSQL:= lSQL + '_PoradiObj_MozVod'; else lSQL:= lSQL + '_priorita'; end; lSQL:= lSQL + ', ISNULL(se._priorita, 999)) FROM ' + tblSortim + ' s LEFT JOIN ' + tblSortimE + ' se ON (se.ID=s.ID) WHERE s.K1=N' + k1.QuotedString; lSQL:= lSQL + ' AND s.K2=N' + k2.QuotedString + ' AND s.K3 IS NULL'; poradiSort2:= helUtils.getHeliosFloatVal(Helios, 0, lSQL); vTab.Append; vTab.FieldByName('IDPohybZboziObj').AsInteger:= VarToStr(FieldByNameValues('ID')).ToInteger; vTab.FieldByName('IDZboSklad').AsInteger:= VarToStr(FieldByNameValues('IDZboSklad')).ToInteger; if (VarIsNull(FieldByNameValues('Poradi'))) then vTab.FieldByName('Poradi').AsSingle:= 1 else vTab.FieldByName('Poradi').AsSingle:= VarToStr(FieldByNameValues('Poradi')).ToSingle; vTab.FieldByName('JCbezDaniKc').AsSingle:= VarToStr(FieldByNameValues('JCbezDaniKC')).ToSingle; vTab.FieldByName('SkupZbo').AsString:= VarToStr(FieldByNameValues('SkupZbo')); vTab.FieldByName('RegCis').AsString:= VarToStr(FieldByNameValues('RegCis')); vTab.FieldByName('Nazev1').AsString:= VarToStr(FieldByNameValues('Nazev1')); vTab.FieldByName('Mnozstvi').AsExtended:= VarToStr(FieldByNameValues('Mnozstvi')).ToExtended; vTab.FieldByName('K1').AsString:= k1; vTab.FieldByName('K2').AsString:= k2; vTab.FieldByName('K1K2').AsString:= k1 + k2; vTab.FieldByName('Sortiment').AsString:= VarToStr(FieldByNameValues('NazevSortim')); vTab.FieldByName('PoradiSortNazev').AsString:= k1 + k2 + VarToStr(FieldByNameValues('NazevSortim')); if (VarIsNull(FieldByNameValues('PoradiObj'))) then vTab.FieldByName('PoradiExt').AsSingle:= 1 else vTab.FieldByName('PoradiExt').AsSingle:= VarToStr(FieldByNameValues('PoradiObj')).ToSingle; zavoz:= VarToStr(FieldByNameValues('TypZavozu')); if (zavoz='1') then vTab.FieldByName('TypZavozu').AsString:= 'R'; if (zavoz='2') then vTab.FieldByName('TypZavozu').AsString:= 'P'; vTab.Post; Next; end; vTab.SortByFields('PoradiSortNazev,PoradiExt,K1,SkupZbo,RegCis'); end; end else begin Helios.Error(#1'Zadejte číslo objednávky'#1); if (edtCisloObj.CanFocus) then edtCisloObj.SetFocus; end; end; procedure TformPrijem1024.btnNulujClick(Sender: TObject); var i: integer; begin if (vTab.RecordCount>0) then begin i:= vTab.RecNo; vTab.DisableControls; vTab.First; while not(vTab.Eof) do begin vTab.Edit; vTab.FieldByName('Mnozstvi').AsInteger:= 0; vTab.Post; vTab.Next; end; vTab.RecNo:= i; vTab.EnableControls; end; end; procedure TformPrijem1024.btnOKClick(Sender: TObject); var oldRec, idHlava, idTiskForm: integer; lSQL: string; begin cisloDokl:= ''; idTiskForm:= -25; cOrgDod:= -1; if (vTab.RecordCount>0) then begin lSQL:= 'IF OBJECT_ID(N''dbo._temp_TabPrijemH'') IS NOT NULL' + CRLF + ' DELETE FROM dbo._temp_TabPrijemH WHERE Autor=SUSER_SNAME()' + CRLF; lSQL:= lSQL + 'IF OBJECT_ID(N''dbo._temp_TabPrijemR'') IS NOT NULL' + CRLF + ' IF OBJECT_ID(N''dbo._temp_TabPrijemH'') IS NOT NULL' + CRLF + ' DELETE FROM dbo._temp_TabPrijemR'; lSQL:= lSQL + ' WHERE IDHlava NOT IN (SELECT ID FROM dbo._temp_TabPrijemH)' + CRLF; lSQL:= lSQL + 'IF OBJECT_ID(N''dbo._temp_TabPrijemH'') IS NOT NULL' + CRLF + ' IF NOT EXISTS(SELECT ID FROM dbo._temp_TabPrijemH)' + CRLF + ' DROP TABLE dbo._temp_TabPrijemH' + CRLF; lSQL:= lSQL + 'IF OBJECT_ID(N''dbo._temp_TabPrijemR'') IS NOT NULL' + CRLF + ' IF NOT EXISTS(SELECT ID FROM dbo._temp_TabPrijemR)' + CRLF + ' DROP TABLE dbo._temp_TabPrijemR'; Helios.ExecSQL(lSQL); lSQL:= 'IF OBJECT_ID(N''tempdb..#TabPrijemH'') IS NOT NULL DROP TABLE #TabPrijemH' + CRLF; lSQL:= lSQL + 'CREATE TABLE #TabPrijemH (ID INT IDENTITY(1,1) NOT NULL, Sklad NVARCHAR(30), CisloOrg INT NOT NULL, Datum DATETIME, DodFak NVARCHAR(20), Autor NVARCHAR(80) NOT NULL DEFAULT SUSER_SNAME())'; if (jeTest) then lSQL:= lSQL.Replace('tempdb..#T', 'dbo._temp_T').Replace('#TabP', 'dbo._temp_TabP'); Helios.ExecSQL(lSQL); lSQL:= 'INSERT #TabPrijemH (CisloOrg, Sklad, Datum, DodFak) SELECT ISNULL(TRY_PARSE(N' + cOrgDod.ToString.Replace(';', '').Replace('-','').Replace(' ', '').QuotedString; lSQL:= lSQL + ' AS INT), 0), N' + Helios.Sklad.QuotedString + ', CONVERT(datetime, N' + FormatDateTime('d.m.yyyy', dtZavoz.Date).QuotedString + ', 104), N' + edtDodFak.Text.QuotedString; lSQL:= lSQL + CRLF + 'SELECT SCOPE_IDENTITY()'; if (jeTest) then lSQL:= lSQL.Replace('tempdb..#T', 'dbo._temp_T').Replace('#TabP', 'dbo._temp_TabP'); with Helios.OpenSQL(lSQL) do idHlava:= VarToStr(FieldValues(0)).ToInteger; lSQL:= 'IF OBJECT_ID(N''tempdb..#TabPrijemR'') IS NOT NULL' + CRLF + ' DROP TABLE #TabPrijemR' + CRLF; lSQL:= lSQL + 'CREATE TABLE #TabPrijemR (ID INT IDENTITY(1,1) NOT NULL, IDHlava INT NOT NULL, IDZboSklad INT NOT NULL, Mnozstvi NUMERIC(12,2) NOT NULL DEFAULT 0.0'; lSQL:= lSQL + ', JCbezDaniKc NUMERIC(19,6) NOT NULL DEFAULT 0.0, IDPohybZbozi INT NOT NULL, Autor NVARCHAR(80) NOT NULL DEFAULT SUSER_SNAME())'; if (jeTest) then lSQL:= lSQL.Replace('tempdb..#T', 'dbo._temp_T').Replace('#TabP', 'dbo._temp_TabP'); Helios.ExecSQL(lSQL); oldRec:= vTab.RecNo; vTab.DisableControls; vTab.First; while not(vTab.Eof) do begin if (vTab.FieldByName('Mnozstvi').AsSingle>0) then begin lSQL:= 'INSERT #TabPrijemR (IDHlava, IDZboSklad, Mnozstvi, IDPohybZbozi, JCbezDaniKc)' + CRLF + ' SELECT ' + idHlava.ToString + ', ' + vTab.FieldByName('IDZboSklad').AsString + ', '; lSQL:= lSQL + vTab.FieldByName('Mnozstvi').AsSingle.ToString.Replace(',', '.') + ', ' + vTab.FieldByName('IDPohybZboziObj').AsSingle.ToString; lSQL:= lSQL + ', ROUND(' + vTab.FieldByName('JCbezDaniKc').AsSingle.ToString.Replace(',', '.') + ', 3)'; if (jeTest) then lSQL:= lSQL.Replace('tempdb..#T', 'dbo._temp_T').Replace('#TabP', 'dbo._temp_TabP'); Helios.ExecSQL(lSQL); end; vTab.Next; end; vTab.RecNo:= oldRec; vTab.EnableControls; idDZ:= 0; if not(jeTest) and (MnozstviKPrijmuSum>0) then begin helUtils.waitStart(nil, 'Generování příjemky...', 0, 0); lSQL:= 'DECLARE @i INT=0' + CRLF + 'IF OBJECT_ID(N''dbo.ep_HDC_App_Prijemka'', N''P'') IS NOT NULL' + CRLF + ' EXEC dbo.ep_HDC_App_Prijemka @idDZ=@i OUT, @Sklad=N' + Helios.Sklad.QuotedString; lSQL:= lSQL + CRLF + 'SELECT @i'; try with Helios.OpenSQL(lSQL) do idDZ:= VarToStr(FieldValues(0)).ToInteger; cisloDokl:= helUtils.getHeliosStrVal(Helios, '', 'SELECT PoradoveCislo FROM ' + tblDZ + ' WHERE ID=' + idDZ.ToString); idTiskForm:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT TiskovyForm FROM ' + tblDDZ + ' WHERE ID=' + idDZ.ToString); except on E:Exception do Helios.Error(#1'Chyba generování příjemky' + #1 + CRLF + E.Message); end; helUtils.waitEnd; end; end; lSQL:= ''; if (Sender.ToString='TButton') then lSQL:= (Sender as TButton).Name; if (lSQL='btnOK') then Close; if (lSQL='btnTisk') and (idDZ>0) then begin Helios.Info(#1'Byla uložena příjemka - č. ' + cisloDokl + #1); Helios.PrintForm2(idTiskForm, 'ID=' + idDZ.ToString); end; end; procedure TformPrijem1024.btnRozbalitClick(Sender: TObject); begin polGrd.DataGrouping.ActiveGroupLevels[0].ExpandNodes; end; procedure TformPrijem1024.btnSbalitClick(Sender: TObject); begin polGrd.DataGrouping.ActiveGroupLevels[0].CollapseNodes; end; procedure TformPrijem1024.btnTiskClick(Sender: TObject); var lSQL: string; i: integer; begin btnOKClick(Sender); end; procedure TformPrijem1024.btnZavritClick(Sender: TObject); begin if (Helios.YesNo('Ukončit bez uložení příjemky ?', false)) then Close; end; procedure TformPrijem1024.NactiObjednavku(const idObj: integer); var lSQL, sort, k1, k2, cZbo, flt: string; idSort, idx: integer; mnR, mnP: Single; extOrdInfo: boolean; poradiSort, poradiSort2: Single; begin lSQL:= ''; if not(vTab.Active) then vTab.Open; idx:= cbxSortiment.ItemIndex; if (idObj>0) then begin k1:= sortim[idx].k1; btnNactiObj.Enabled:= false; lSQL:= 'SELECT o.Nazev, o.UliceSCisly, o.PSC, o.Misto FROM ' + tblDZ + ' d INNER JOIN ' + tblCOrg + ' o ON (o.CisloOrg=d.CisloOrg) WHERE d.ID=' + idObj.ToString; cbxDodavatel.Items.Clear; cbxDodavatel.Items.Add(helUtils.getHeliosStrVal(Helios, '', lSQL)); cbxDodavatel.ItemIndex:= 0; lSQL:= 'SELECT o.UliceSCisly, o.PSC, o.Misto, o.ICO, o.DIC, d.CisloOrg, d.Splatnost FROM ' + tblDZ + ' d INNER JOIN ' + tblCOrg + ' o ON (o.CisloOrg=d.CisloOrg) WHERE d.ID=' + idObj.ToString; with Helios.OpenSQL(lSQL) do begin First; cOrgDod:= VarToStr(FieldByNameValues('CisloOrg')).ToInteger; lblDodAdresa.Caption:= VarToStr(FieldByNameValues('UliceSCisly')); lblDodICO.Caption:= 'IČ ' + VarToStr(FieldByNameValues('ICO')); lblDodDIC.Caption:= 'DIČ ' + VarToStr(FieldByNameValues('DIC')); lblDodMisto.Caption:= Trim(VarToStr(FieldByNameValues('PSC')) + ' ' + VarToStr(FieldByNameValues('Misto'))); dtZavoz.DateTime:= StrToDate(VarToStr(FieldByNameValues('Splatnost'))) end; lSQL:= 'SELECT p.*, ISNULL(so.Nazev,N'''') AS NazevSort, ISNULL(so.K1, N'''') AS K1, ISNULL(so.K2, N'''') AS K2, (p.Mnozstvi-p.MnOdebrane-p.MnozstviStorno) AS MnozstviZustatek'; lSQL:= lSQL + ', ISNULL(pe._typzavozu, 0) AS TypZavozu, p.JCbezDaniKC, ISNULL(soe.'; case branchID of 1: lSQL:= lSQL + '_PoradiObj_Klas1'; 2: lSQL:= lSQL + '_PoradiObj_MozPi'; 3: lSQL:= lSQL + '_PoradiObj_MozVod'; else lSQL:= lSQL + '_priorita'; end; lSQL:= lSQL + ', ISNULL(soe._priorita, 999)) AS PoradiSort, ISNULL(ke._poradivsortimentu, 999) AS PoradiVSort FROM ' + tblPZ + ' p LEFT JOIN ' + tblPZe + ' pe ON (pe.ID=p.ID) INNER JOIN '; lSQL:= lSQL + tblDZ + ' d ON (d.ID=p.IDDoklad) INNER JOIN ' + tblSS + ' s ON (s.ID=p.IDZboSklad) INNER JOIN ' + tblKZ + ' k ON (k.ID=s.IDKmenZbozi)'; lSQL:= lSQL + ' LEFT JOIN ' + tblKZe + ' ke ON (ke.ID=k.ID)'; lSQL:= lSQL + ' LEFT JOIN ' + tblSortim + ' so ON (so.ID=k.IdSortiment) LEFT JOIN ' + tblSortimE + ' soe ON (soe.ID=so.ID)'; lSQL:= lSQL + ' WHERE d.ID=' + idObj.ToString + ' AND (p.Mnozstvi-p.MnOdebrane-p.MnozstviStorno)>0 AND d.Splneno=0 AND d.DruhPohybuZbo=6'; lSQL:= lSQL + ' AND d.RadaDokladu=N' + ('9' + branchID.ToString + '0').QuotedString; lSQL:= lSQL + ' AND ISNULL(pe._typzavozu,0)=' + (1+cbZavoz.ItemIndex).ToString; lSQL:= lSQL + ' ORDER BY (p.SkupZbo+p.RegCis)'; end else if (edtCisloObj.ValueInt>0) then begin k1:= sortim[idx].k1; lSQL:= 'SELECT p.*, ISNULL(so.Nazev,N'''') AS NazevSort, ISNULL(so.K1, N'''') AS K1, ISNULL(so.K2, N'''') AS K2, (p.Mnozstvi-p.MnOdebrane-p.MnozstviStorno) AS MnozstviZustatek'; lSQL:= lSQL + ', ISNULL(pe._typzavozu, 0) AS TypZavozu, p.JCbezDaniKC, ISNULL(soe.'; case branchID of 1: lSQL:= lSQL + '_PoradiObj_Klas1'; 2: lSQL:= lSQL + '_PoradiObj_MozPi'; 3: lSQL:= lSQL + '_PoradiObj_MozVod'; else lSQL:= lSQL + '_priorita'; end; lSQL:= lSQL + ', ISNULL(soe._priorita, 999)) AS PoradiSort, ISNULL(ke._poradivsortimentu, 999) AS PoradiVSort FROM ' + tblPZ + ' p LEFT JOIN ' + tblPZe + ' pe ON (pe.ID=p.ID) INNER JOIN '; lSQL:= lSQL + tblDZ + ' d ON (d.ID=p.IDDoklad) INNER JOIN ' + tblSS + ' s ON (s.ID=p.IDZboSklad) INNER JOIN ' + tblKZ + ' k ON (k.ID=s.IDKmenZbozi)'; lSQL:= lSQL + ' LEFT JOIN ' + tblKZe + ' ke ON (ke.ID=k.ID)'; lSQL:= lSQL + ' LEFT JOIN ' + tblSortim + ' so ON (so.ID=k.IdSortiment) LEFT JOIN ' + tblSortimE + ' soe ON (soe.ID=so.ID)'; lSQL:= lSQL + ' WHERE d.RadaDokladu=N' + ('9' + branchID.ToString + '0').QuotedString; lSQL:= lSQL + ' AND (p.Mnozstvi-p.MnOdebrane-p.MnozstviStorno)>0 AND d.Splneno=0 AND d.DruhPohybuZbo=6 AND d.PoradoveCislo=' + edtCisloObj.ValueInt.ToString; lSQL:= lSQL + ' AND d.IDSklad=N' + Helios.Sklad.QuotedString; lSQL:= lSQL + ' AND ISNULL(pe._typzavozu,0)=' + (1+cbZavoz.ItemIndex).ToString; lSQL:= lSQL + ' ORDER BY (p.SkupZbo+p.RegCis)'; end; if (lSQL<>'') then begin vTab.EmptyTable; vTab.DisableControls; with Helios.OpenSQL(lSQL) do if (RecordCount>0) then begin First; while not(EOF) do begin k1:= VarToStr(FieldByNameValues('K1')); k2:= VarToStr(FieldByNameValues('K2')); lSQL:= 'SELECT ISNULL(se.'; case branchID of 1: lSQL:= lSQL + '_PoradiObj_Klas1'; 2: lSQL:= lSQL + '_PoradiObj_MozPi'; 3: lSQL:= lSQL + '_PoradiObj_MozVod'; else lSQL:= lSQL + '_priorita'; end; lSQL:= lSQL + ', ISNULL(se._priorita, 999)) FROM ' + tblSortim + ' s LEFT JOIN ' + tblSortimE + ' se ON (se.ID=s.ID) WHERE s.K1=N' + k1.QuotedString + ' AND s.K2 IS NULL'; poradiSort:= helUtils.getHeliosFloatVal(Helios, 0, lSQL); lSQL:= 'SELECT ISNULL(se.'; case branchID of 1: lSQL:= lSQL + '_PoradiObj_Klas1'; 2: lSQL:= lSQL + '_PoradiObj_MozPi'; 3: lSQL:= lSQL + '_PoradiObj_MozVod'; else lSQL:= lSQL + '_priorita'; end; lSQL:= lSQL + ', ISNULL(se._priorita, 999)) FROM ' + tblSortim + ' s LEFT JOIN ' + tblSortimE + ' se ON (se.ID=s.ID) WHERE s.K1=N' + k1.QuotedString; lSQL:= lSQL + ' AND s.K2=N' + k2.QuotedString + ' AND s.K3 IS NULL'; poradiSort2:= helUtils.getHeliosFloatVal(Helios, 0, lSQL); vTab.Append; vTab.FieldByName('Poradi').AsString:= VarToStr(FieldByNameValues('Poradi')); vTab.FieldByName('PoradiSort').AsSingle:= VarToStr(FieldByNameValues('PoradiVSort')).ToSingle; if (VarIsNull(FieldByNameValues('Poradi'))) then vTab.FieldByName('PoradiExt').AsExtended:= 1 else vTab.FieldByName('PoradiExt').AsSingle:= VarToStr(FieldByNameValues('Poradi')).ToSingle; vTab.FieldByName('IDPohybZboziObj').AsString:= VarToStr(FieldByNameValues('ID')); vTab.FieldByName('IDZboSklad').AsString:= VarToStr(FieldByNameValues('IDZboSklad')); vTab.FieldByName('JCbezDaniKc').AsSingle:= VarToStr(FieldByName('JCbezDaniKC').Value).ToSingle; vTab.FieldByName('Sortiment').AsString:= VarToStr(FieldByNameValues('NazevSort')); vTab.FieldByName('K1').AsString:= k1; vTab.FieldByName('K2').AsString:= k2; vTab.FieldByName('K1K2').AsString:= k1 + k2; vTab.FieldByName('PoradiSortNazev').AsString:= ((poradiSort*1000.0)+poradiSort2).ToString.Replace(',', '.') + ' ' + VarToStr(FieldByNameValues('NazevSort')); vTab.FieldByName('TypZavozu').AsString:= ''; if (VarToStr(FieldByNameValues('TypZavozu'))='1') then vTab.FieldByName('TypZavozu').AsString:= 'R'; if (VarToStr(FieldByNameValues('TypZavozu'))='2') then vTab.FieldByName('TypZavozu').AsString:= 'P'; vTab.FieldByName('SkupZbo').AsString:= VarToStr(FieldByNameValues('SkupZbo')); vTab.FieldByName('RegCis').AsString:= VarToStr(FieldByNameValues('RegCis')); vTab.FieldByName('Nazev1').AsString:= VarToStr(FieldByNameValues('Nazev1')); vTab.FieldByName('Mnozstvi').AsString:= VarToStr(FieldByNameValues('MnozstviZustatek')); vTab.Post; Next; end; end; vTab.EnableControls; end; helUtils.waitEnd; polGrd.Options:= polGrd.Options + [dgEditing]; if not(vTab.Active) then polGrd.Options:= polGrd.Options - [dgEditing] else if (vTab.RecordCount=0) then polGrd.Options:= polGrd.Options - [dgEditing]; vTab.SortByFields('PoradiSortNazev,PoradiSort,SkupZbo,RegCis'); if (idObj=0) and (k1='001') then vTab.Locate('K1;K2', VarArrayOf(['001','']), []) else vTab.First; end; procedure TformPrijem1024.polGrdDataGroupGetRowText(Sender: TCustomDBGridEh; GroupDataTreeNode: TGroupDataTreeNodeEh; var GroupRowText: string); var s, s2: string; i: integer; errReverse: boolean; begin errReverse:= false; s2:= '(123)'; s2:= ReverseString(s2); if (s2.EndsWith('(')) then errReverse:= true; s:= GroupRowText.Replace('PoradiSortNazev: ', ''); if (s.IndexOf(' ')>-1) then s:= MidStr(s, s.IndexOf(' ')+1, s.Length).Trim; if (s.EndsWith(')')) then begin s:= ReverseString(s); if (errReverse) then i:= s.IndexOf('(') else i:= s.IndexOf(')'); if (i>-1) then s:= MidStr(s, i+2, s.Length); s:= ReverseString(s).Trim; end; s2:= helUtils.getHeliosStrVal(Helios, '', 'SELECT TOP(1) KatAllTecky FROM ' + tblSortim + ' WHERE Nazev=N' + s.QuotedString); GroupRowText:= IfThen(s2<>'', s2 + ' ', '') + s; end; procedure TformPrijem1024.polGrdDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumnEh; State: TGridDrawState); begin { if (Column.FieldName='Mnozstvi') then if (vTab.FieldByName('TypZavozu').AsString='P') then polGrd.Canvas.Brush.Color:= $00F7EE8A; if (Column.FieldName='Mnozstvi') then polGrd.DefaultDrawColumnCell(Rect, DataCol, Column, State); } end; procedure TformPrijem1024.polGrdKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); var i, i2: integer; lSQL: string; begin if (Key=Ord('p')) or (Key=Ord('P')) then begin i:= polGrd.DataSource.DataSet.FieldByName('IDKZ').AsInteger; if (i>0) then begin lSQL:= 'TabPohybyZbozi.IDZboSklad=(SELECT ID FROM ' + tblSS + ' WHERE IDKmenZbozi=' + i.ToString + ' AND IDSklad=N' + Helios.Sklad.QuotedString + ')'; Helios.OpenBrowse(66, lSQL); end; end; if (Key=Ord('o')) or (Key=Ord('O')) then begin i:= polGrd.DataSource.DataSet.FieldByName('IDKZ').AsInteger; i2:= 0; with Helios.OpenSQL('SELECT 100000+Cislo FROM ' + tblObecPrehled + ' WHERE NazevSys=N''hvw_HDC_StareProdeje_Pol''') do if (RecordCount=1) then i2:= VarToStr(FieldValues(0)).ToInteger; if (i2>0) then begin lSQL:= 'hvw_HDC_StareProdeje_Pol.IDSklad=N' + Helios.Sklad.QuotedString + ' AND hvw_HDC_StareProdeje_Pol.SkupZbo=N'; lSQL:= lSQL + polGrd.DataSource.DataSet.FieldByName('SkupZbo').AsString.QuotedString + ' AND hvw_HDC_StareProdeje_Pol.RegCis=N'; lSQL:= lSQL + polGrd.DataSource.DataSet.FieldByName('RegCis').AsString.QuotedString; lSQL:= lSQL + ' AND hvw_HDC_StareProdeje_Pol.DruhPohybuZbo IN (2,4)'; Helios.OpenBrowse(i2, lSQL); end; end; end; procedure TformPrijem1024.vTabFilterRecord(DataSet: TDataSet; var Accept: Boolean); var t: string; begin if (vTab.RecordCount>0) then begin t:= vTab.FieldByName('TypZavozu').AsString; case cbZavoz.ItemIndex of 0: Accept:= (t='R'); 1: Accept:= (t='P'); end; end; end; procedure TformPrijem1024.vTabMnozstviValidate(Sender: TField); var canCont: Boolean; mv, mm: Single; begin canCont:= true; mv:= TField(Sender).AsFloat; if (mv<0) then canCont:=false; if not(canCont) then TField(Sender).DataSet.Cancel; end; procedure TformPrijem1024.vTabPoledneValidate(Sender: TField); var canCont: Boolean; mv, mm: Single; begin canCont:= true; mv:= TField(Sender).AsFloat; mm:= TField(Sender).DataSet.FieldByName('Minimum').AsSingle; if (TField(Sender).AsInteger<>0) and (TField(Sender).DataSet.FieldByName('JenRano').AsInteger=1) then begin TField(Sender).DataSet.Cancel; Helios.Error(#1'Položka "' + TField(Sender).DataSet.FieldByName('RegCis').AsString +'" je určena jen pro ranní závoz.'#1); canCont:= false; end; if (canCont) and (TField(Sender).AsInteger<0) then begin canCont:= false; Helios.Error(#1'Položka "' + TField(Sender).DataSet.FieldByName('RegCis').AsString +'" je určena jen pro ranní závoz.'#1); end; if (canCont) and (mv0) then begin SetLength(cOrgs, RecordCount); First; idx:= 0; while not(EOF) do begin cbxDodavatel.Items.Add(VarToStr(FieldValues(1))); cOrgs[idx]:= VarToStr(FieldValues(0)).ToInteger; Inc(idx); Next; end; end; cbxDodavatel.ItemIndex:= helUtils.IfThenInt(cbxDodavatel.Items.Count=1, 0, -1); polGrd.Enabled:= (cbxDodavatel.ItemIndex>-1); { polGrd.Options:= polGrd.Options + [dgEditing]; if not(vTab.Active) then polGrd.Options:= polGrd.Options - [dgEditing] else if (vTab.RecordCount=0) then polGrd.Options:= polGrd.Options - [dgEditing]; } end; procedure TformPrijem1024.cbZavozChange(Sender: TObject); begin NactiObjednavku(idDZ); end; procedure TformPrijem1024.edtCisloObjExit(Sender: TObject); begin if (edtCisloObj.Value>0) then NactiObjednavku(0); end; procedure TformPrijem1024.edtNumEditorClick(Sender: TObject); begin edtNumEditor.Visible:= true; end; procedure TformPrijem1024.FormClose(Sender: TObject; var Action: TCloseAction); begin if (vTab.Active) then vTab.Close; if (tabExtOrdInfo<>'') and not(jeTest) then Helios.ExecSQL('IF OBJECT_ID(N' + tabExtOrdInfo.QuotedString + ', N''U'') IS NOT NULL DROP TABLE ' + tabExtOrdInfo); Action:= caFree; end; procedure TformPrijem1024.FormShow(Sender: TObject); var rHeight, i: integer; lSQL: string; rct: TRect; begin compName:= GetEnvironmentVariable('COMPUTERNAME'); UseLatestCommonDialogs:= true; self.SetBounds(Screen.WorkAreaRect.Left, 0, Screen.WorkAreaRect.Width, Screen.WorkAreaRect.Height); // rct.Create(0, 0, 0, 0); // rct:= BoundsRect; SetBounds( Left - ClientOrigin.X, Top - ClientOrigin.Y, GetDeviceCaps( Canvas.handle, HORZRES ) + (Width - ClientWidth), GetDeviceCaps( Canvas.handle, VERTRES ) + (Height - ClientHeight )); // BoundsRect:= rct; edtNumEditor.Height:= polGrd.RowHeight+2; dtZavoz.DateTime:= IncDay(Now,1); { grd.RowCount:= 2; grd.FixedRows:= 1; rHeight:= grd.Canvas.TextHeight('Áý'); grd.DefaultRowHeight:= grd.Font.Size + 18; // grd.RowHeights[1]:= grd.Canvas.TextHeight('Akce') + 4; grd.Cells[0, 0]:= 'Akce'; grd.Cells[1, 0]:= 'Číslo'; grd.Cells[2, 0]:= 'Název'; grd.Cells[3, 0]:= 'Doporučeno'; grd.Cells[4, 0]:= 'Ráno'; grd.Cells[5, 0]:= 'Poledne'; } branchID:= ZjistiBranchID; cOrgDod:= -1; lblDodAdresa.Caption:= ''; lblDodMisto.Caption:= ''; lblDodICO.Caption:= ''; lblDodDIC.Caption:= ''; cbxSortiment.Items.Clear; lSQL:= 'SELECT DISTINCT(s.K1) FROM ' + tblSortim + ' s INNER JOIN ' + tblSortimE + ' e ON (e.ID=s.ID) WHERE e._Objednavky_Zobrazit=1 GROUP BY s.K1'; with Helios.OpenSQL(lSQL) do if (RecordCount>0) then begin SetLength(sortim, RecordCount); i:= 0; First; while not(EOF) do begin cbxSortiment.Items.Add(helUtils.getHeliosStrVal(Helios, '', 'SELECT Nazev FROM ' + tblSortim + ' WHERE K2 IS NULL AND K1=N' + VarToStr(FieldValues(0)).QuotedString)); sortim[i].k1:= VarToStr(FieldValues(0)); sortim[i].nazev:= helUtils.getHeliosStrVal(Helios, '', 'SELECT Nazev FROM ' + tblSortim + ' WHERE K2 IS NULL AND K1=N' + VarToStr(FieldValues(0)).QuotedString); sortim[i].poleDodav:= ''; sortim[i].typSort:= 255; if (sortim[i].k1='001') then begin sortim[i].typSort:= 0; sortim[i].poleDodav:= '_dodpek'; end; if (sortim[i].k1='003') then begin sortim[i].typSort:= 1; sortim[i].poleDodav:= '_dodlah'; end; if (sortim[i].k1='004') then begin sortim[i].typSort:= 2; sortim[i].poleDodav:= '_dodvelko'; end; Inc(i); Next; end; cbxSortiment.ItemIndex:= 0; end; edtCisloObj.Enabled:= (idDZ=0); cbxSortiment.Enabled:= (idDZ=0); cbxDodavatel.Enabled:= (idDZ=0); bidHDCObj:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT 100000+Cislo FROM ' + tblObecPrehled + ' WHERE NazevSys=N''hvw_DokladyZbozi'''); bidHDCObj:= 22; btnNactiObj.Visible:= not(Helios.BrowseID=bidHDCObj); if (Helios.BrowseID=bidHDCObj) then begin edtCisloObj.Value:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT PoradoveCislo FROM ' + tblDZ + ' WHERE ID=' + idDZ.ToString); NactiObjednavku(idDZ); end else cbxSortimentChange(Sender); btnNuluj.Visible:= (Helios.LoginName='hdc') or (compName='NTB-T'); end; end.