unit frmOrder21366; 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, DBAxisGridsEh, DBGridEh, MemTableEh, EhLibMTE, System.MaskUtils, IdComponent, IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase, IdMessageClient, IdSMTPBase, IdSMTP, IdBaseComponent, IdMessage, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL, IdSSLOpenSSL, IdAttachment, IdAttachmentFile, IdAttachmentMemory, datModObj; 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; TVisColumn = record index: integer; koeficient: Single; end; TSortiment = record nazev, k1, poleDodav: string; dodavatel: integer; poradiSort: Single; typSort: byte; end; TformOrder21366 = 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; btnPoslat: TButton; btnRozbalit: TButton; btnSbalit: TButton; btnZavrit: TButton; Panel1: TPanel; Panel2: TPanel; edtNumEditor: TNxEdit6; vTab: TMemTableEh; ds: TDataSource; polGrd: TDBGridEh; vTabPoradiSort: TSingleField; vTabK1: TStringField; vTabK2: TStringField; vTabSortiment: TStringField; vTabIDZboSklad: TIntegerField; vTabRegCis: TStringField; vTabNazev: TStringField; vTabRano: TFloatField; vTabPoledne: TFloatField; vTabStavSkladu: TFloatField; vTabDoporuceno: TFloatField; vTabPriorita: TIntegerField; vTabCisloZbozi: TStringField; cbxDodavatel: TComboBox; lblDodICO: TLabel; lblDodDIC: TLabel; vTabIDKZ: TIntegerField; vTabSkupZbo: TStringField; vTabDodavatel: TIntegerField; vTabJenRano: TSmallintField; vTabMinimum: TFloatField; vTabDelitelnost: TFloatField; btnVynulovat: TButton; lblInfo: TLabel; vTabPoradi: TSingleField; gbSortiment: TGroupBox; vTabK1K2: TStringField; vTabPoradiSortNazev: TStringField; btnNovaPolozka: TSpeedButton; 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 cbxDodavatelChange(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 dtZavozChange(Sender: TObject); procedure FormResize(Sender: TObject); procedure btnVynulovatClick(Sender: TObject); procedure vTabAfterPost(DataSet: TDataSet); procedure vTabAfterDelete(DataSet: TDataSet); procedure btnPoslatClick(Sender: TObject); procedure polGrdDataGroupGetRowText(Sender: TCustomDBGridEh; GroupDataTreeNode: TGroupDataTreeNodeEh; var GroupRowText: string); procedure btnNovaPolozkaClick(Sender: TObject); private cOrg: integer; visCols: TArray; function ZjistiBranchID: Integer; procedure NactiKarty; public Helios: IHelios; jeTest: boolean; oznacKOdeslani: boolean; end; var formOrder21366: TformOrder21366; sortim: TArray; dmObj: TdmObj; cOrgs: TArray; cOrgDod: integer; // poradCislo: integer; branchID, idDZ, idObd, idBidVydObjHDC, idTiskForm, idTiskFormVydObjHDC, idMailProfile: integer; tabExtOrdInfo, cisloDokl, rDokl: string; smtpProfil: boolean; delkaPoradCisla: byte; arrIdSS: TArray; 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; function TformOrder21366.ZjistiBranchID: Integer; var s: string; begin result:= -1; s:= Helios.Sklad; if (LeftStr(s, 3)='005') then result:= RightStr(s, 1).ToInteger; end; procedure TformOrder21366.btnNovaPolozkaClick(Sender: TObject); var oVar: OleVariant; idSS, idKZ: integer; lSQL, k1, k2: string; poradiSort, poradiSort2: Single; begin lSQL:= 'TabStavSkladu.Blokovano=0'; if (Length(arrIdSS)>0) then lSQL:= lSQL + ' AND TabStavSkladu.ID NOT IN (' + helUtils.ArrayToString(arrIdSS, ',') + ')'; if Helios.Prenos(bidSS, 'TabStavSkladu.ID', oVar, lSQL, 'Přidejte kartu na objednávku', true) then begin idSS:= VarToStr(oVar).ToInteger; idKZ:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT IDKmenZbozi FROM ' + tblSS + ' WHERE ID=' + idSS.ToString); vTab.Append; vTab.FieldByName('IDZboSklad').AsInteger:= idSS; vTab.FieldByName('IDKZ').AsInteger:= idKZ; vTab.FieldByName('Rano').AsInteger:= 0; vTab.FieldByName('Poledne').AsInteger:= 0; vTab.FieldByName('Doporuceno').AsInteger:= 0; lSQL:= 'SELECT k.SkupZbo, k.RegCis, k.Nazev1, k.CisloZbozi, ISNULL(ke._delitelnost,1) AS delitelnost, ISNULL(ke._poradivsortimentu,999) AS PoradiVSort, ISNULL(ke._priorita,3) AS priorita'; lSQL:= lSQL + ', ISNULL(ke._zavoz,1) AS zavoz, ISNULL(so.K1,N'''')+ISNULL(so.K2,N'''') AS K1K2, ISNULL(so.K1,N'''') AS K1, ISNULL(so.K2,N'''') AS K2, ISNULL(k.Aktualni_Dodavatel,-1) AS dodavatel'; lSQL:= lSQL + ', ISNULL(so.Nazev,N'''') AS SortNazev FROM ' + tblKZ + ' k LEFT JOIN ' + tblKZe + ' ke ON (ke.ID=k.ID) LEFT JOIN ' + tblSortim; lSQL:= lSQL + ' so ON (so.ID=k.IDSortiment) LEFT JOIN ' + tblSortimE + ' soe ON (soe.ID=so.ID) WHERE k.ID=' + idKZ.ToString; with Helios.OpenSQL(lSQL) do begin k1:= VarToStr(FieldByNameValues('K1')); k2:= VarToStr(FieldByNameValues('K2')); vTab.FieldByName('PoradiSort').AsSingle:= VarToStr(FieldByNameValues('PoradiVSort')).ToSingle; vTab.FieldByName('K1').AsString:= k1; vTab.FieldByName('K2').AsString:= k2; vTab.FieldByName('K1K2').AsString:= k1+k2; vTab.FieldByName('Priorita').AsInteger:= VarToStr(FieldByNameValues('priorita')).ToInteger; vTab.FieldByName('Dodavatel').AsInteger:= VarToStr(FieldByNameValues('dodavatel')).ToInteger; if (VarToStr(FieldByNameValues('zavoz'))='1') then vTab.FieldByName('JenRano').AsInteger:= 1 else vTab.FieldByName('JenRano').AsInteger:= 0; lSQL:= 'SELECT s.ID, s.Nazev, s.K1, ISNULL(s.K2,N'''') AS K2, 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)) AS Poradi FROM ' + tblSortim + ' s LEFT JOIN ' + tblSortimE + ' se ON (se.ID=s.ID) WHERE se._Objednavky_Zobrazit=1'; lSQL:= lSQL + ' AND s.K1=N' + k1.QuotedString; // + ' AND s.K2 IS NOT NULL'; lSQL:= lSQL + ' ORDER BY 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)), K1, ISNULL(s.K2, N'''')'; with Helios.OpenSQL(lSQL) do if (RecordCount>0) then begin poradiSort2:= VarToStr(FieldByNameValues('Poradi')).ToSingle; vTab.FieldByName('PoradiSortNazev').AsString:= ((poradiSort*1000.0)+poradiSort2).ToString.Replace(',', '.') + ' ' + VarToStr(FieldByNameValues('SortNazev')); end; vTab.FieldByName('Sortiment').AsString:= VarToStr(FieldByNameValues('SortNazev')); vTab.FieldByName('SkupZbo').AsString:= VarToStr(FieldByNameValues('SkupZbo')); vTab.FieldByName('RegCis').AsString:= VarToStr(FieldByNameValues('RegCis')); vTab.FieldByName('Nazev').AsString:= VarToStr(FieldByNameValues('Nazev1')); vTab.FieldByName('StavSkladu').AsExtended:= helUtils.getHeliosFloatVal(Helios, 0, 'SELECT ISNULL((SELECT Mnozstvi FROM ' + tblSS + ' WHERE ID=' + idSS.ToString + '),0)'); end; vTab.Post; vTab.Refresh; end; end; procedure TformOrder21366.btnOKClick(Sender: TObject); var oldRec, idHlava, idHlava2: integer; lSQL, spojeniKontaktu, popisKontaktu, idSS, sz, rc: string; tiskOK, kontaktNalezen: boolean; begin cisloDokl:= ''; if (vTab.RecordCount>0) then begin // dmObj.ZapisObjednavky(vTab, cOrgDod, edtCisloObj.ValueInt, dtZavoz); spojeniKontaktu:= ''; popisKontaktu:= ''; kontaktNalezen:= false; if not(smtpProfil) then Helios.Error(#1'Nemáte přednastavený emailový profil pro odeslání přes SMTP'#1) else begin with Helios.OpenSQL('EXEC dbo.hp_GetKontaktProKosAOrg @IDKOs=NULL, @CisOrg=' + cOrgDod.ToString + ', @Druh=6') do if (RecordCount>0) then begin First; while not(EOF) and not(kontaktNalezen) do begin popisKontaktu:= VarToStr(FieldValues(0)); // @Popis spojeniKontaktu:= VarToStr(FieldValues(1)); // @Spojeni if (spojeniKontaktu<>'') or (popisKontaktu='Objednávky') then kontaktNalezen:= true; Next; end; end; if not(kontaktNalezen) then Helios.Error(#1'U dodavatele není kontakt typu email s popisem "Objednávky"'#1 + CRLF + 'Email nebude automatem odeslán.'); end; lSQL:= 'IF OBJECT_ID(N''dbo._temp_TabObjednavkaH'') IS NOT NULL' + CRLF + ' DELETE FROM dbo._temp_TabObjednavkaH WHERE Autor=SUSER_SNAME()' + CRLF; lSQL:= lSQL + 'IF OBJECT_ID(N''dbo._temp_TabObjednavkaR'') IS NOT NULL AND OBJECT_ID(N''dbo._temp_TabObjednavkaH'') IS NOT NULL' + CRLF + ' DELETE FROM dbo._temp_TabObjednavkaR WHERE'; lSQL:= lSQL + ' IDHlava NOT IN (SELECT ID FROM dbo._temp_TabObjednavkaH)' + CRLF; lSQL:= lSQL + 'IF OBJECT_ID(N''dbo._temp_TabObjednavkaH'') IS NOT NULL' + CRLF + ' IF NOT EXISTS(SELECT * FROM dbo._temp_TabObjednavkaH)' + CRLF + ' DROP TABLE dbo._temp_TabObjednavkaH' + CRLF; lSQL:= lSQL + 'IF OBJECT_ID(N''dbo._temp_TabObjednavkaR'') IS NOT NULL' + CRLF + ' IF NOT EXISTS(SELECT * FROM dbo._temp_TabObjednavkaR)' + CRLF + ' DROP TABLE dbo._temp_TabObjednavkaR'; Helios.ExecSQL(lSQL); lSQL:= 'IF OBJECT_ID(N''tempdb..#TabObjednavkaH'') IS NOT NULL' + CRLF + ' DROP TABLE #TabObjednavkaH' + CRLF; lSQL:= lSQL + 'CREATE TABLE #TabObjednavkaH (ID INT IDENTITY(1,1) NOT NULL, CisloOrg INT NOT NULL, Sklad NVARCHAR(30), Datum DATETIME, EmailCil NVARCHAR(80) NOT NULL DEFAULT N'''''; lSQL:= lSQL + ', Autor NVARCHAR(80) NOT NULL DEFAULT SUSER_SNAME())'; if (jeTest) then lSQL:= lSQL.Replace('tempdb..#T', 'dbo._temp_T').Replace('#TabO', 'dbo._temp_TabO'); Helios.ExecSQL(lSQL); idHlava:= 0; lSQL:= 'INSERT #TabObjednavkaH (CisloOrg, Sklad, Datum, EmailCil)' + CRLF + ' 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' + spojeniKontaktu.QuotedString; lSQL:= lSQL + CRLF + 'SELECT SCOPE_IDENTITY()'; if (jeTest) then lSQL:= lSQL.Replace('tempdb..#T', 'dbo._temp_T').Replace('#TabO', 'dbo._temp_TabO'); with Helios.OpenSQL(lSQL) do idHlava:= VarToStr(FieldValues(0)).ToInteger; lSQL:= 'IF OBJECT_ID(N''tempdb..#TabObjednavkaR'') IS NOT NULL' + CRLF + ' DROP TABLE #TabObjednavkaR' + CRLF; lSQL:= lSQL + 'CREATE TABLE #TabObjednavkaR (ID INT IDENTITY(1,1) NOT NULL, IDHlava INT NOT NULL, IDZboSklad INT NOT NULL, Rano NUMERIC(15,4) NOT NULL DEFAULT 0.0, PoradiObj NUMERIC(10,2) DEFAULT 999'; lSQL:= lSQL + ', Poledne NUMERIC(15,4) NOT NULL DEFAULT 0.0, Doporuceno NUMERIC(15,4) NOT NULL DEFAULT 0.0, SkupZbo NVARCHAR(3), RegCis NVARCHAR(30), Sklad NVARCHAR(30), Autor NVARCHAR(80) NOT NULL DEFAULT SUSER_SNAME())'; if (jeTest) then lSQL:= lSQL.Replace('tempdb..#T', 'dbo._temp_T').Replace('#TabO', 'dbo._temp_TabO'); Helios.ExecSQL(lSQL); lSQL:= 'INSERT dbo._HDC_TabAplikace (TypDokladu, IDSklad) VALUES (1, N' + Helios.Sklad.QuotedString + '); SELECT SCOPE_IDENTITY()'; idHlava2:= helUtils.getHeliosIntVal(Helios, 0, lSQL); oldRec:= vTab.RecNo; vTab.DisableControls; vTab.First; while not(vTab.Eof) do begin if (vTab.FieldByName('Rano').AsSingle>0) or (vTab.FieldByName('Poledne').AsSingle>0) then begin idSS:= IfThen(vTab.FieldByName('IDZboSklad').AsString='', '0', vTab.FieldByName('IDZboSklad').AsString); sz:= vTab.FieldByName('SkupZbo').AsString; rc:= vTab.FieldByName('RegCis').AsString; lSQL:= 'INSERT dbo._HDC_TabAplikaceR (IDHlava, TypDokladu, IDSklad, IDZboSklad, CisloZbozi, Rano, Poledne) SELECT ' + idHlava2.ToString + ', 1, N' + Helios.Sklad.QuotedString; lSQL:= lSQL + ', ' + idSS + ', N' + (sz+rc).QuotedString + ', ' + vTab.FieldByName('Rano').AsSingle.ToString + ', ' + vTab.FieldByName('Poledne').AsSingle.ToString; Helios.ExecSQL(lSQL); lSQL:= 'INSERT #TabObjednavkaR (IDHlava, IDZboSklad, Rano, Poledne, Doporuceno, Sklad, PoradiObj, SkupZbo, RegCis)' + CRLF + ' SELECT ' + idHlava.ToString + ', ' + idSS + ', '; lSQL:= lSQL + vTab.FieldByName('Rano').AsSingle.ToString.Replace(',','.') + ', ' + vTab.FieldByName('Poledne').AsSingle.ToString.Replace(',','.'); lSQL:= lSQL + ', ' + vTab.FieldByName('Doporuceno').AsSingle.ToString.Replace(',','.') + ', N' + Helios.Sklad.QuotedString + ', ' + vTab.FieldByName('Poradi').AsString.Replace(',', '.'); lSQL:= lSQL + ', N' + sz.QuotedString + ', N' + rc.QuotedString; if (jeTest) then lSQL:= lSQL.Replace('tempdb..#T', 'dbo._temp_T').Replace('#TabO', 'dbo._temp_TabO'); Helios.ExecSQL(lSQL); end; vTab.Next; end; vTab.RecNo:= oldRec; vTab.EnableControls; idDZ:= 0; if not(jeTest) then begin helUtils.waitStart(self, 'Zápis vydané objednávky...', 0, 0); try lSQL:= 'DECLARE @i INT; IF OBJECT_ID(N''dbo.ep_HDC_App_Objednavka'', N''P'') IS NOT NULL EXEC dbo.ep_HDC_App_Objednavka @idDZ=@i OUT, @Sklad=N' + Helios.Sklad.QuotedString + CRLF + 'SELECT @i'; with Helios.OpenSQL(lSQL) do idDZ:= VarToStr(FieldValues(0)).ToInteger; if (idDZ>0) and (oznacKOdeslani) then begin Helios.ExecSQL('IF NOT EXISTS(SELECT ID FROM ' + tblDZe + ' WHERE ID=' + idDZ.ToString + ') INSERT ' + tblDZe + ' (ID) SELECT ' + idDZ.ToString); Helios.ExecSQL('UPDATE ' + tblDZe+ ' SET _VydObj_OdeslatNaMail=1 WHERE ID=' + idDZ.ToString); // Helios.Info(#1'Objednávka byla označena k odeslání emailem dodavateli.'#1); end; except end; helUtils.waitEnd; end; 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); end; lSQL:= ''; if (Sender.ToString='TButton') then lSQL:= (Sender as TButton).Name; if (lSQL='btnOK') then Close; if (lSQL='btnTisk') or (lSQL='btnPoslat') then begin tiskOK:= false; Helios.Info(#1'Objednávka byla uložena - č. ' + cisloDokl + #1); if (lSQL='btnTisk') then if (idBidVydObjHDC>0) then tiskOK:= Helios.PrintForm3(idBidVydObjHDC, idTiskFormVydObjHDC, 'ID=' + idDZ.ToString) else tiskOK:= Helios.PrintForm2(11, 'ID=' + idDZ.ToString); end; end; procedure TformOrder21366.btnPoslatClick(Sender: TObject); var popisKontaktu, spojeniKontaktu: string; kontaktNalezen: Boolean; begin if (cOrgDod<0) then begin Helios.Error(#1'Není vybrán dodavatel'#1); Exit; end; if not(smtpProfil) then Helios.Error(#1'Nemáte přednastavený emailový profil pro odeslání přes SMTP'#1) else begin spojeniKontaktu:= ''; popisKontaktu:= ''; kontaktNalezen:= false; with Helios.OpenSQL('EXEC dbo.hp_GetKontaktProKosAOrg @IDKOs=NULL, @CisOrg=' + cOrgDod.ToString + ', @Druh=6') do if (RecordCount>0) then begin First; while not(EOF) and not(kontaktNalezen) do begin popisKontaktu:= VarToStr(FieldValues(0)); // @Popis spojeniKontaktu:= VarToStr(FieldValues(1)); // @Spojeni if (spojeniKontaktu<>'') or (popisKontaktu='Objednávky') then kontaktNalezen:= true; Next; end; end; if not(kontaktNalezen) then Helios.Error(#1'U dodavatele není kontakt typu email s popisem "Objednávky"'#1 + CRLF + 'Email nebude automatem odeslán.') else begin btnOKClick(Sender); if (idDZ>0) then begin Helios.ExecSQL('IF NOT EXISTS(SELECT ID FROM ' + tblDZe + ' WHERE ID=' + idDZ.ToString + ') INSERT ' + tblDZe + ' (ID) SELECT ' + idDZ.ToString); Helios.ExecSQL('UPDATE ' + tblDZe+ ' SET _VydObj_OdeslatNaMail=1 WHERE ID=' + idDZ.ToString); Helios.Info(#1'Objednávka byla označena k odeslání emailem dodavateli.'#1); Close; end else Helios.Error(#1'Chyba, objednávku se v rámci odeslání nepodařilo uložit. Zkuste to znovu.'#1) end; end; end; procedure TformOrder21366.btnRozbalitClick(Sender: TObject); begin polGrd.DataGrouping.ActiveGroupLevels[0].ExpandNodes; end; procedure TformOrder21366.btnSbalitClick(Sender: TObject); begin polGrd.DataGrouping.ActiveGroupLevels[0].CollapseNodes; end; procedure TformOrder21366.btnTiskClick(Sender: TObject); var lSQL: string; i: integer; begin { lSQL:= 'IF OBJECT_ID(N''tempdb..#TabObjTiskH'') IS NOT NULL DROP TABLE #TabObjTiskH' + CRLF + 'CREATE TABLE #TabObjTiskH (ID INT IDENTITY(1,1) NOT NULL'; lSQL:= lSQL + ', CisloOrg INT NOT NULL, Sklad NVARCHAR(30), Datum DATETIME)' + CRLF; Helios.ExecSQL(lSQL); lSQL:= 'INSERT #TabObjTiskH (CisloOrg, Sklad, Datum) 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)'; Helios.ExecSQL(lSQL); lSQL:= 'IF OBJECT_ID(N''tempdb..#TabObjTiskR'') IS NOT NULL DROP TABLE #TabObjTiskR' + CRLF + 'CREATE TABLE #TabObjTiskR (ID INT IDENTITY(1,1) NOT NULL'; lSQL:= lSQL + ', SkupZbo NVARCHAR(3), RegCis NVARCHAR(30), Nazev1 NVARCHAR(100), Rano NUMERIC(15,3) DEFAULT 0.0, Poledne NUMERIC(15,3) DEFAULT 0.0)' + CRLF; Helios.ExecSQL(lSQL); vTab.DisableControls; vTab.First; while not(vTab.Eof) do begin lSQL:= 'INSERT #TabObjTiskR (SkupZbo, RegCis, Nazev1, Rano, Poledne) SELECT N' + vTab.FieldByName('SkupZbo').AsString.QuotedString + ', N'; lSQL:= lSQL + vTab.FieldByName('RegCis').AsString.QuotedString + ', N' + vTab.FieldByName('Nazev').AsString.QuotedString + ', '; lSQL:= lSQL + vTab.FieldByName('Rano').AsString.Replace(',', '.') + ', ' + vTab.FieldByName('Poledne').AsString.Replace(',', '.'); Helios.ExecSQL(lSQL); vTab.Next; end; // Helios.PrintForm(12); vTab.EnableControls; } btnOKClick(Sender); end; procedure TformOrder21366.btnVynulovatClick(Sender: TObject); var i: integer; begin if (vTab.RecordCount>0) then if (Helios.YesNo('!! POZOR !! Toto je ' + #1 + 'nevratná akce' + #1 + ' !!', false)) then if (Helios.YesNo('?? Opravdu vynulovat ' + #1 + 'všechna' + #1 + ' nabízená množství ??', false)) then begin i:= vTab.RecNo; vTab.DisableControls; vTab.First; while not(vTab.Eof) do begin vTab.Edit; vTab.FieldByName('Rano').AsInteger:= 0; vTab.FieldByName('Poledne').AsInteger:= 0; vTab.Post; vTab.Next; end; vTab.EnableControls; vTab.RecNo:= i; end; end; procedure TformOrder21366.btnZavritClick(Sender: TObject); begin if (Helios.YesNo('Ukončit bez uložení objednávky ?', false)) then Close; end; procedure TformOrder21366.NactiKarty; var lSQL, sort, k1, k2, cZbo, flt: string; idSort, idx: integer; poradiSort, poradiSort2: Single; mnR, mnP: Single; extOrdInfo: boolean; begin if (cbxSortiment.ItemIndex>-1) and (cbxDodavatel.ItemIndex>-1) and (dtZavoz.DateTime>Now) then begin idx:= cbxSortiment.ItemIndex; k1:= sortim[idx].k1; poradiSort:= 1; lSQL:= 'SELECT s.ID, s.Nazev, s.K1, ISNULL(s.K2,N'''') AS K2, 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)) AS Poradi FROM ' + tblSortim + ' s LEFT JOIN ' + tblSortimE + ' se ON (se.ID=s.ID) WHERE se._Objednavky_Zobrazit=1'; lSQL:= lSQL + ' AND s.K1=N' + k1.QuotedString; // + ' AND s.K2 IS NOT NULL'; lSQL:= lSQL + ' ORDER BY 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)), K1, ISNULL(s.K2, N'''')'; with Helios.OpenSQL(lSQL) do if (RecordCount>0) then begin if not(vTab.Active) then vTab.Open; tabExtOrdInfo:= ''; lSQL:= 'SET NOCOUNT ON' + CRLF +'DECLARE @dt DATETIME, @tabName NVARCHAR(30)=N''''' + CRLF + ' SET @dt=CONVERT(datetime, N'; lSQL:= lSQL + FormatDateTime('d.m.yyyy', dtZavoz.DateTime).QuotedString + ', 104)' + CRLF; lSQL:= lSQL + 'IF OBJECT_ID(N''dbo.ep_HDC_App_Objednavka_GenerujTabulkyProObjednavku'', N''P'') IS NOT NULL' + CRLF; lSQL:= lSQL + ' EXEC dbo.ep_HDC_App_Objednavka_GenerujTabulkyProObjednavku @Dodavatel=' + cOrgDod.ToString; lSQL:= lSQL + ', @DatumDodani=@dt, @RadaDokladu1=N' + ('7' + branchID.ToString + '0').QuotedString + ', @RadaDokladu2=N'; lSQL:= lSQL + ('7' + branchID.ToString + '1').QuotedString + ', @Sklad=N' + Helios.Sklad.QuotedString + ', @TypSortimentu='; lSQL:= lSQL + sortim[cbxSortiment.ItemIndex].typSort.ToString + ', @BranchID=' + branchID.ToString + ', @SortimentK1=N' +k1.QuotedString; lSQL:= lSQL + ', @TabName=@tabName OUT' + CRLF + 'SELECT @tabName'; with Helios.OpenSQL(lSQL) do tabExtOrdInfo:= VarToStr(FieldValues(0)); flt:= 'K1=''' + k1 + ''''; vTab.Filter:= flt; vTab.Filtered:= true; extOrdInfo:= false; lSQL:= 'SELECT CASE WHEN OBJECT_ID(N'+ tabExtOrdInfo.QuotedString + ', N''U'') IS NOT NULL THEN 1 ELSE 0 END'; with Helios.OpenSQL(lSQL) do if (VarToStr(FieldValues(0))='1') then extOrdInfo:= true; First; while not(EOF) do begin idSort:= VarToStr(FieldByNameValues('ID')).ToInteger; sort:= VarToStr(FieldByNameValues('Nazev')); // k1:= VarToStr(FieldByNameValues('K1')); k2:= VarToStr(FieldByNameValues('K2')); poradiSort2:= VarToStr(FieldByNameValues('Poradi')).ToSingle; lSQL:= 'SELECT ISNULL(s.ID,0) AS idSS, k.ID AS idKZ, k.SkupZbo, k.RegCis, k.Nazev1, ISNULL(s.Mnozstvi,0) AS MnSkladem, k.CisloZbozi'; lSQL:= lSQL + ', ISNULL(ke._priorita,0) AS Priorita, ISNULL(k.Aktualni_Dodavatel,-1) AS AktDod, ISNULL(ke._zavoz,0) AS Zavoz, '; lSQL:= lSQL + 'k.Minimum_Dodavatel, ISNULL(ke._delitelnost,0) AS Delitelnost, '; if (extOrdInfo) then lSQL:= lSQL + 'ISNULL(eo.Navrh,0)' else lSQL:= lSQL + '0'; lSQL:= lSQL + ' AS Doporuceno, ISNULL(ke.'; // case branchID of // 1: lSQL:= lSQL + '_PoradiSortiment_Klas1'; // 2: lSQL:= lSQL + '_PoradiSortiment_MozVod'; // 3: lSQL:= lSQL + '_PoradiSortiment_MozPi'; // else lSQL:= lSQL + '_poradivsortimentu'; // end; lSQL:= lSQL + ', ISNULL(ke._poradivsortimentu, 999)) AS PoradiVSort FROM ' + tblKZ + ' k LEFT JOIN ' + tblSS + ' s ON (s.IDKmenZbozi=k.ID AND s.IDSklad=N'; lSQL:= lSQL + Helios.Sklad.QuotedString + ') INNER JOIN ' + tblKZe + ' ke ON (ke.ID=k.ID)'; if (extOrdInfo) then lSQL:= lSQL + ' LEFT JOIN ' + tabExtOrdInfo + ' eo ON (eo.SkupZbo=k.SkupZbo AND eo.RegCis=k.RegCis)'; lSQL:= lSQL + ' WHERE k.IDSortiment=' + idSort.ToString + ' ORDER BY ISNULL(ke.'; // case branchID of // 1: lSQL:= lSQL + '_PoradiSortiment_Klas1'; // 2: lSQL:= lSQL + '_PoradiSortiment_MozVod'; // 3: lSQL:= lSQL + '_PoradiSortiment_MozPi'; // else lSQL:= lSQL + '_poradivsortimentu'; // end; lSQL:= lSQL + ', ISNULL(ke._poradivsortimentu, 999))'; with Helios.OpenSQL(lSQL) do if (RecordCount>0) then begin First; while not(EOF) do begin cZbo:= VarToStr(FieldByNameValues('CisloZbozi')); if not(vTab.Locate('CisloZbozi', cZbo, [])) then begin vTab.Append; vTab.FieldByName('Sortiment').AsString:= sort; vTab.FieldByName('PoradiSort').AsSingle:= poradiSort; 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(',', '.') + ' ' + sort; vTab.FieldByName('IDZboSklad').AsInteger:= VarToStr(FieldByNameValues('idSS')).ToInteger; vTab.FieldByName('IDKZ').AsInteger:= VarToStr(FieldByNameValues('idKZ')).ToInteger; vTab.FieldByName('SkupZbo').AsString:= VarToStr(FieldByNameValues('SkupZbo')); vTab.FieldByName('RegCis').AsString:= VarToStr(FieldByNameValues('RegCis')); vTab.FieldByName('Nazev').AsString:= VarToStr(FieldByNameValues('Nazev1')); vTab.FieldByName('CisloZbozi').AsString:= cZbo; vTab.FieldByName('Priorita').AsInteger:= VarToStr(FieldByNameValues('Priorita')).ToInteger; vTab.FieldByName('Poradi').AsSingle:= VarToStr(FieldByNameValues('PoradiVSort')).ToSingle; vTab.FieldByName('StavSkladu').AsFloat:= VarToStr(FieldByNameValues('MnSkladem')).ToExtended; vTab.FieldByName('Doporuceno').AsFloat:= VarToStr(FieldByNameValues('Doporuceno')).ToExtended; vTab.FieldByName('Rano').AsFloat:= VarToStr(FieldByNameValues('Doporuceno')).ToExtended; vTab.FieldByName('Poledne').AsFloat:= 0; vTab.FieldByName('Dodavatel').AsInteger:= VarToStr(FieldByNameValues('AktDod')).ToInteger; vTab.FieldByName('JenRano').AsInteger:= VarToStr(FieldByNameValues('Zavoz')).ToInteger; vTab.FieldByName('Minimum').AsFloat:= VarToStr(FieldByNameValues('Minimum_Dodavatel')).ToExtended; vTab.FieldByName('Delitelnost').AsFloat:= VarToStr(FieldByNameValues('Delitelnost')).ToExtended; vTab.Post; end; Next; end; end; Next; end; flt:= 'K1=''' + k1 + ''''; if (cOrgDod>-1) then flt:= flt + ' AND Dodavatel=' + cOrgDod.ToString; vTab.Filter:= flt; vTab.Filtered:= true; end; vTab.SortByFields('PoradiSortNazev,Poradi,SkupZbo,RegCis'); 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]; if (k1='001') then vTab.Locate('K1;K2', VarArrayOf(['001','']), []); end; end; procedure TformOrder21366.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 TformOrder21366.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 TformOrder21366.vTabAfterDelete(DataSet: TDataSet); begin btnVynulovat.Enabled:= (DataSet.RecordCount>0); end; procedure TformOrder21366.vTabAfterPost(DataSet: TDataSet); var maxPoz: integer; begin btnVynulovat.Enabled:= (DataSet.RecordCount>0); SetLength(arrIdSS, Length(arrIdSS)+1); maxPoz:= Length(arrIdSS)-1; arrIdSS[maxPoz]:= DataSet.FieldByName('IDZboSklad').AsInteger; end; procedure TformOrder21366.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; if (cbxDodavatel.Items.Count=1) then helUtils.waitStart(nil, 'Načítám historická data...', 0, 0); 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]; } cbxDodavatelChange(Sender); end; procedure TformOrder21366.dtZavozChange(Sender: TObject); var lSQL, podm: string; begin idObd:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT ID FROM ' + tblObd + ' WHERE DatumOd_Y=' + dtZavoz.DateTime.GetYear.ToString); podm:= 'DruhPohybuZbo=6 AND IDSklad=N' + Helios.Sklad.QuotedString + ' AND RadaDokladu=N' + rDokl.QuotedString + ' AND Obdobi=' + idObd.ToString; lSQL:= 'SELECT def.PosledniPC FROM ' + tblDDZ + ' d INNER JOIN ' + tblDDZdef + ' def ON (def.IDDruhDZ=d.ID) WHERE d.DruhPohybuZbo=6 AND def.IDObdobi=' + idObd.ToString; lSQL:= lSQL + ' AND d.RadaDokladu=N' + rDokl.QuotedString; lSQL:= 'DECLARE @ppc INT, @d INT, @i INT' + CRLF + 'SET @ppc=ISNULL( (' + lSQL + '), 1)' + CRLF + 'SET @d=(DATEPART(year, GETDATE())-2000) * 10000' + CRLF; lSQL:= lSQL + 'IF (@ppc=@d) SET @ppc=@ppc+1' + CRLF; lSQL:= lSQL + 'EXEC @i=dbo.hp_NajdiPrvniVolny @Tabulka=N''TabDokladyZbozi'', @Atribut=N''PoradoveCislo'', @Odkud=@ppc, @Kam=999999, @Where=N' + podm.QuotedString + ', @Returnem=1'; lSQL:= lSQL + CRLF + 'SELECT @i'; cisloDokl:= helUtils.getHeliosStrVal(Helios, '0', lSQL); edtCisloObj.ValueInt:= cisloDokl.ToInteger; end; procedure TformOrder21366.cbxDodavatelChange(Sender: TObject); var lSQL: string; begin if (cbxDodavatel.ItemIndex>0) then helUtils.waitStart(nil, 'Načítám historická data...', 0, 0); lblDodAdresa.Caption:= ''; lblDodMisto.Caption:= ''; lblDodICO.Caption:= ''; lblDodDIC.Caption:= ''; gbDodavatel.Caption:= ' Dodavatel '; if (cbxDodavatel.ItemIndex=-1) then cOrgDod:= -1 else cOrgDod:= cOrgs[cbxDodavatel.ItemIndex]; lSQL:= 'SELECT Nazev, UliceSCisly, Misto, PSC, ICO, DIC FROM ' + tblCOrg + ' WHERE CisloOrg=' + cOrgDod.ToString; with Helios.OpenSQL(lSQL) do if (RecordCount>0) then begin lblDodAdresa.Caption:= VarToStr(FieldValues(1)); lblDodMisto.Caption:= VarToStr(FieldValues(3)) + ' ' + VarToStr(FieldValues(2)); lblDodICO.Caption:= 'IČ ' + VarToStr(FieldValues(4)); lblDodDIC.Caption:= 'DIČ ' + VarToStr(FieldValues(5)); gbDodavatel.Caption:= ' Dodavatel: č.org. ' + cOrgDod.ToString + ' '; NactiKarty; end else begin vTab.Filter:= 'K1=''999'''; vTab.Filtered:= true; end; polGrd.Enabled:= (cOrgDod>-1); if (polGrd.Enabled) then polGrd.DataSource.DataSet.First; end; procedure TformOrder21366.edtNumEditorClick(Sender: TObject); begin edtNumEditor.Visible:= true; end; procedure TformOrder21366.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 TformOrder21366.FormResize(Sender: TObject); var i, ii, w: integer; begin for i:=0 to polGrd.Columns.Count-1 do begin for ii:=0 to Length(visCols)-1 do if (visCols[ii].index=i) and (polGrd.Columns.Items[i].Visible) then polGrd.Columns[i].Width:= Trunc(visCols[ii].koeficient * polGrd.Width); end; end; procedure TformOrder21366.FormShow(Sender: TObject); var rHeight, i, ii: integer; lSQL, podm: string; m: TMonitor; begin UseLatestCommonDialogs:= true; { self.Top:= 0; self.Left:= 0; self.Height:= Screen.WorkAreaHeight-25; self.Width:= Screen.WorkAreaWidth; } edtNumEditor.Height:= polGrd.RowHeight+2; rDokl:= helUtils.getHeliosStrVal(Helios, '', 'SELECT TOP(1) RadaDokladu FROM ' + tblDDZ + ' WHERE DruhPohybuZbo=6 AND StredNaklad=N' + Helios.Sklad.QuotedString); if (rDokl='') then begin Helios.Error(#1'Chyba zjišťování řady dokladu VydObj'#1 + CRLF + '(nelze dohledat podle nákl.střediska)'); Close; end; idObd:= Helios.Obdobi; dtZavoz.DateTime:= IncDay(Now, 1); dtZavozChange(Sender); lblInfo.Caption:= 'w: ' + Screen.WorkAreaWidth.ToString + ' / h: ' + Screen.WorkAreaHeight.ToString; smtpProfil:= false; idMailProfile:= 0; with Helios.OpenSQL('SELECT ID FROM ' + tblUziv + ' WHERE EMailIDProfilu IS NOT NULL AND LoginName=SUSER_SNAME()') do if (RecordCount=1) then idMailProfile:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT EMailIDProfilu FROM ' + tblUziv + ' WHERE EMailIDProfilu IS NOT NULL AND LoginName=SUSER_SNAME()'); if (idMailProfile>0) then with Helios.OpenSQL('SELECT ID FROM ' + tblMailProfil + ' WHERE ID=' + idMailProfile.ToString + ' AND TypRozhrani=2') do if (RecordCount=1) then smtpProfil:= true; idBidVydObjHDC:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT 100000+Cislo FROM ' + tblObecPrehled + ' WHERE NazevSys=N''hvw_DokladyZbozi'''); idTiskFormVydObjHDC:= helUtils.getHeliosIntVal(Helios, 0, 'SELECT ID FROM ' + tblFormDef + ' WHERE Nazev=N''Objednávka pekárna'' AND Aktivni=1 AND Skupina=' + idBidVydObjHDC.ToString); ii:= 0; SetLength(visCols, polGrd.VisibleColumns.Count); for i:=0 to polGrd.Columns.Count-1 do if (polGrd.Columns.Items[i].Visible) then begin visCols[ii].index:= i; visCols[ii].koeficient:= RoundToEx(polGrd.Columns.Items[i].Width / polGrd.Width, -5); Inc(ii); end; { podm:= 'DruhPohybuZbo=6 AND IDSklad=N' + Helios.Sklad.QuotedString + ' AND RadaDokladu=N' + rDokl.QuotedString + ' AND Obdobi=' + idObd.ToString; lSQL:= 'SELECT def.PosledniPC FROM ' + tblDDZ + ' d INNER JOIN ' + tblDDZdef + ' def ON (def.IDDruhDZ=d.ID) WHERE d.DruhPohybuZbo=6 AND def.IDObdobi=' + idObd.ToString; lSQL:= lSQL + ' AND d.RadaDokladu=N' + rDokl.QuotedString; lSQL:= 'DECLARE @ppc INT, @i INT' + CRLF + 'SET @ppc=ISNULL( (' + lSQL + '), 1)' + CRLF; lSQL:= lSQL + 'EXEC @i=dbo.hp_NajdiPrvniVolny @Tabulka=N''TabDokladyZbozi'', @Atribut=N''PoradoveCislo'', @Odkud=@ppc, @Kam=999999, @Where=N' + podm.QuotedString + ', @Returnem=1; SELECT @i'; cisloDokl:= helUtils.getHeliosStrVal(Helios, '0', lSQL); edtCisloObj.ValueInt:= cisloDokl.ToInteger; } { rDokl:= helUtils.getHeliosStrVal(Helios, '', 'SELECT TOP(1) RadaDokladu FROM ' + tblDDZ + ' WHERE DruhPohybuZbo=6 AND StredNaklad=N' + Helios.Sklad.QuotedString); if (rDokl='') then begin Helios.Error(#1'Chyba zjišťování řady dokladu VydObj'#1 + CRLF + '(nelze dohledat podle nákl.střediska)'); Close; end; lSQL:= 'DruhPohybuZbo=6 AND IDSklad=N' + Helios.Sklad.QuotedString + ' AND RadaDokladu=N' + rDokl.QuotedString + ' AND Obdobi=' + Helios.Obdobi.ToString; lSQL:= 'DECLARE @i INT; EXEC @i=dbo.hp_NajdiPrvniVolny @Tabulka=N''TabDokladyZbozi'', @Atribut=N''PoradoveCislo'', @Odkud=0, @Kam=999999, @Where=N' + lSQL.QuotedString + ', @Returnem=1; SELECT @i'; poradCislo:= helUtils.getHeliosIntVal(Helios, 0, lSQL); } { 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), ISNULL(e.'; 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(e._priorita, 999)) AS PoradiSort FROM ' + tblSortim + ' s INNER JOIN ' + tblSortimE + ' e ON (e.ID=s.ID) WHERE e._Objednavky_Zobrazit=1'; lSQL:= lSQL + ' AND ISNULL(e.'; 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 + ', 0)>0 GROUP BY s.K1, ISNULL(e.'; 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(e._priorita, 999))'; lSQL:= 'SELECT DISTINCT(s.K1) FROM ' + tblSortim + ' s INNER JOIN ' + tblSortimE + ' e ON (e.ID=s.ID) WHERE e._Objednavky_Zobrazit=1'; lSQL:= lSQL + ' 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].poradiSort:= VarToStr(FieldValues(1)).ToSingle; 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; cbxSortimentChange(Sender); end; end; end.