unit frmUnit9; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, RzEdit, Vcl.Mask, RzBtnEdt, ddPlugin_TLB, Vcl.ComCtrls, RzDTP, FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Comp.DataSet, Vcl.Grids, Vcl.DBGrids, JvExDBGrids, JvDBGrid, Data.DB, FireDAC.Comp.Client; const tblEvidNadvyroby = '[dbo].[_TabEvidNadvyroby]'; tblEvidNadvyrVPr = '[dbo].[_TabEvidNadvyrPrikaz]'; druhPrevVydejDP = '450'; druhPrevPrijDP = '250'; sklVyroba = '200'; sklFin = '210'; sklDP = '20000105'; errPlg = #13#10 + '(plgLOVATO.unit9)'; type TfrmVydejDPrace = class(TForm) GroupBox1: TGroupBox; selCisZam: TRzButtonEdit; selRegCis: TRzButtonEdit; edtMnoz: TRzNumericEdit; dsPolos: TDataSource; dsMat: TDataSource; vtPolos: TFDMemTable; vtMat: TFDMemTable; Label1: TLabel; lblZamest: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; lblPopis: TLabel; lblSZ: TLabel; btnAdd: TButton; OK: TButton; btnCancel: TButton; Label5: TLabel; dtDatum: TRzDateTimePicker; vtPolosSkupZbo: TStringField; vtPolosRegCis: TStringField; vtPolosPopis: TStringField; vtPolosMnoz: TFloatField; vtPolosidKZ: TIntegerField; vtMatSkupZbo: TStringField; vtMatRegCis: TStringField; vtMatPopis: TStringField; vtMatMnoz: TFloatField; vtMatidKZ: TIntegerField; vtMatMnozSkl: TFloatField; gPolos2: TJvDBGrid; gMat2: TJvDBGrid; procedure FormShow (Sender: TObject); procedure btnAddClick (Sender: TObject); procedure selRegCisButtonClick (Sender: TObject); procedure vtPolosAfterPost (DataSet: TDataSet); procedure selCisZamButtonClick (Sender: TObject); procedure OKClick (Sender: TObject); procedure FormClose (Sender: TObject; var Action: TCloseAction); procedure edtMnozKeyUp (Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormActivate (Sender: TObject); procedure selCisZamExit (Sender: TObject); procedure selRegCisExit (Sender: TObject); procedure gPolos2DblClick (Sender: TObject); procedure gMat2DrawDataCell (Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState); private procedure VytvorTabulkyAGridy; procedure NastavFonty; function VratKZSZ(id: integer): ShortString; function VratKZNazev1(id: integer): ShortString; function VratKZRegCis(id: integer): ShortString; public Helios: IHelios; end; var frmVydejDPrace: TfrmVydejDPrace; idKZ, cZam, idZam: integer; mnoz: Extended; vOle1,vOle2: OleVariant; implementation uses Vcl.Clipbrd, helUtils; {$R *.dfm} procedure TfrmVydejDPrace.VytvorTabulkyAGridy; begin if not vtPolos.Active then vtPolos.Open; vtPolos.EmptyDataset; if not vtMat.Active then vtMat.Open; vtMat.EmptyDataset; end; function TfrmVydejDPrace.VratKZRegCis(id: Integer): ShortString; begin result:= ''; if (id>0) then with Helios.OpenSQL('SELECT RegCis FROM ' + tblKZ + ' WHERE id=' + IntToStR(id)) do if (RecordCount=1) then result:= VarToStr(FieldValues(0)); end; function TfrmVydejDPrace.VratKZSZ (id: Integer): ShortString; begin result:= ''; if (id>0) then with Helios.OpenSQL('SELECT SkupZbo FROM ' + tblKZ + ' WHERE id=' + IntToStR(id)) do if (RecordCount=1) then result:= VarToStr(FieldValues(0)); end; function TfrmVydejDPrace.VratKZNazev1 (id: Integer): ShortString; begin result:= ''; if (id>0) then with Helios.OpenSQL('SELECT Nazev1 FROM ' + tblKZ + ' WHERE id=' + IntToStR(id)) do if (RecordCount=1) then result:= VarToStr(FieldValues(0)); end; procedure TfrmVydejDPrace.btnAddClick (Sender: TObject); var lSQL: WideString; mn: Extended; begin if (vtPolos.RecordCount>0) then begin Helios.Error(#1'Na doklad lze uložit jen 1 položku.'#1); Exit; end; if (edtMnoz.Value>0) then begin if (idKZ>0) then begin mn:= 0; lSQL:= 'SELECT ISNULL(SUM(kusy_zive),0) FROM ' + tblPrikaz + ' WHERE StavPrikazu IN (30,40,50) AND IDTabKmen=' + IntToStr(idKZ); with Helios.OpenSQL(lSQL) do if not(VarIsNull(FieldValues(0))) then mn:= StrToFloat(VarToStr(FieldValues(0))) else mn:= 0; if (mn0) then btnAddClick (Sender); end; procedure TfrmVydejDPrace.FormActivate (Sender: TObject); begin selCisZam.SetFocus; end; procedure TfrmVydejDPrace.FormClose (Sender: TObject; var Action: TCloseAction); begin if vtMat.Active then vtMat.Close; if vtPolos.Active then vtPolos.Close; Action:= caFree; end; procedure TfrmVydejDPrace.FormShow (Sender: TObject); begin Application.Handle := Helios.MainApplicationHandle; Application.Icon.Handle := Helios.MainApplicationIconHandle; // cxSetResourceString(@scxGridNoDataInfoText,''); VytvorTabulkyAGridy; NastavFonty; idKZ:= 0; cZam:= 0; idZam:= 0; dtDatum.Date:= Now; end; procedure TfrmVydejDPrace.OKClick (Sender: TObject); var locSQL, podm, mn, sklVyd: string; idNadvyr, idDZshift1, idDZ1, idObd, idSS1, idPZ1, idKJ: integer; idDZshift2, idDZ2, idSS2, idPZ2: integer; idx, i: integer; qry: IHeQuery; realVyd, realPrij: boolean; matOK: boolean; oVar: OleVariant; begin dtDatum.Time:= Now; if (cZam=0) or (selCisZam.Text='') then Helios.Error(#1'Není vybrán zaměstnanec kterému bude materiál vydán.'#1) else begin if (vtMat.RecordCount>0) then begin matOK:= true; i:= vtMat.RecNo; // vMat.DataController.FocusedRecordIndex; gMat2.BeginUpdate; for idx:= 1 to vtMat.RecordCount do begin vtMat.RecNo:= idx; locSQL:= 'SELECT Mnozstvi FROM ' + tblSS + ' WHERE IDSklad=N' + QuotedStr(sklFin); locSQL:= locSQL + ' AND IdKmenZbozi=' + vtMat.FieldByName('idKZ').AsString; with Helios.OpenSQL(locSQL) do begin if (RecordCount=1) then begin mn:= VarToStr(FieldValues(0)); mn:= StringReplace(mn,',','.',[rfReplaceAll]); if (StrToFloat(mn)0) AND (vtMat.RecordCount>0) then begin // zaloz prevodku/vydejku na 200 { idDZshift1:= 0; // posunuti cisla brane z nastaveni TabDruhDokZboDef locSQL:= 'SELECT dzd.PosledniPC FROM ' + tblDDZdef + ' dzd INNER JOIN ' + tblDDZ + ' dz'; locSQL:= locSQL + ' ON (dz.ID=dzd.idDruhDZ) WHERE dzd.IdObdobi=' + IntToStr(idObd); locSQL:= locSQL + ' AND dz.DruhPohybuZbo=4 AND dz.RadaDokladu=N' + QuotedStr(druhPrevVydejDP); qry:= Helios.OpenSQL(locSQL); if qry.RecordCount>0 then idDZshift1:= StrToInt(VarToStr(qry.FieldValues(0))); podm:= 'DruhPohybuZbo=4 AND RadaDokladu=N' + QuotedStr(druhPrevVydejDP) + ' AND IDSklad=N' + QuotedStr(sklVyroba); podm:= podm + ' AND Obdobi=' + IntToStr(idObd); locSQL:= 'EXEC dbo.hp_NajdiPrvniVolny N' + QuotedStr(tblDZ) + ',N' + QuotedStr('PoradoveCislo'); locSQL:= locSQL + ',' + IntToStr(idDZshift1) + ',99999999,N' + QuotedStr(podm) + ',0,1'; idDZ1:= 0; qry:= Helios.OpenSQL(locSQL); if qry.RecordCount>0 then idDZ1:= StrToInt(VarToStr(qry.FieldValues(0))); if (idDZ1=0) or (idDZ1=idDZshift1) then idDZ1:= idDZshift1 + 1; } sklVyd:= Trim('210 '); { locSQL:= 'TabStrom.Cislo LIKE ''2%'' AND TabStrom.ID NOT IN (SELECT IDStrom FROM dbo.TabStromDef WHERE (Blokovano=1 OR Zakazano=1) AND IdObdobi=' + IntToStr(Helios.Obdobi) + ')'; if Helios.Prenos(4, 'Cislo', oVar, locSQL, 'Materiál vydat ze skladu', true) then sklVyd:= VarToStr(oVar); } locSQL:= 'DECLARE @dt DATETIME,@IDcko INT' + CRLF + 'SET @dt=CONVERT(datetime,N' + QuotedStr(DateTimeToStr(dtDatum.DateTime)) + ',104)'; locSQL:= locSQL + CRLF + 'EXEC dbo.hp_InsertHlavickyOZ @IDcko OUT,@RadaDokladu=N' + QuotedStr(druhPrevVydejDP); locSQL:= locSQL + ',@DruhPohybu=4,@CisloOrg=2,@Insert=1,@Sklad=N' + QuotedStr(sklVyd) + ',@PC=null'; locSQL:= locSQL + ',@DatumPorizeni=@dt' + CRLF + 'SELECT @IDcko'; idDZ1:= 0; with Helios.OpenSQL(locSQL) do if RecordCount>0 then idDZ1:= StrToInt(VarToStr(FieldValues(0))); if (idDZ1>0) then begin Helios.ExecSQL('UPDATE ' + tblDZ + ' SET BlokovaniEditoru=' + IntToStr(Helios.UserId) + ' WHERE id=' + IntToStr(idDZ1)); // polozky prevodky/vydejky vtMat.First; while not(vtMat.Eof) do begin idSS1:= 0; with Helios.OpenSQL('SELECT id FROM ' + tblSS + ' WHERE IdSklad=N' + QuotedStr(sklVyd) + ' AND IdKmenZbozi=' + vtMat.FieldByName('idKZ').AsString) do if RecordCount>0 then idSS1:= StrToInt(VarToStr(FieldValues(0))); if (idSS1=0) then begin locSQL:= 'DELCARE @idSS INT' + CRLF + 'INSERT ' + tblSS + ' (IDSklad,IDKmenZbozi) VALUES (N' + QuotedStr(sklVyd); locSQL:= locSQL + ',' + vtMat.FieldByName('idKZ').AsString + ')' + CRLF + 'SELECT SCOPE_IDENTITY()'; with Helios.OpenSQL(locSQL) do idSS1:= StrToInt(VarToStr(FieldValues(0))); end; locSQL:= 'DECLARE @IDcko INT' + CRLF + 'EXEC dbo.hp_InsertPolozkyOZ @IDcko OUT,'; locSQL:= locSQL + '@IDDoklad=' + IntToStr(idDZ1) + ',@DruhPohybu=4,@CisloOrg=2,@IDZboSklad=' + IntToStr(idSS1); locSQL:= locSQL + ',@PovolitDuplicitu=1,@Mnozstvi=' + StringReplace(vtMat.FieldByName('Mnoz').AsString,'','.',[rfReplaceAll]); locSQL:= locSQL + ',@Selectem=0,@Mena=N' + QuotedStr('CZK') + ',@Kurz=1,@JednotkaMeny=1,@KurzEuro=1,@SazbaSD=0,@SazbaDPH=0'; locSQL:= locSQL + ',@ZakazanoDPH=0,@VstupniCena=0' + CRLF + 'SELECT @IDcko'; idPZ1:= 0; with Helios.OpenSQL(locSQL) do idPZ1:= StrToInt(VarToStr(FieldValues(0))); vtMat.Next; end; if (idDZ1>0) then begin Helios.ExecSQL('UPDATE ' + tblEvidNadvyroby + ' SET IdVydejkaMat=' + IntToStR(idDZ1) + ' WHERE id=' + IntToStr(idNadvyr)); try Helios.ExecSQL('EXEC dbo.ep_DoplnKooperacniCenyVydejky ' + IntToStr(idDZ1)); locSQL:= 'UPDATE ' + tblDZ + ' SET TypPrevodky=N' + QuotedStr(druhPrevPrijDP) + ',IdSkladPrevodu=N' + QuotedStr(sklDP); locSQL:= locSQL + ',CisloZam=' + IntToStr(cZam) + ',DruhPohybuPrevod=0,BlokovaniEditoru=null WHERE id=' + IntToStr(idDZ1); Helios.ExecSQL(locSQL); Helios.ExecSQL('EXEC dbo.hp_VypCenOZPolozek_IDDokladu @IDDoklad=' + IntToStr(idDZ1) + ',@AktualizaceSlev=0'); Helios.ExecSQL('UPDATE ' + tblDZ + ' SET BlokovaniEditoru=NULL WHERE id=' + IntToStr(idDZ1)); except on E:Exception do begin Helios.Error(#1'Chyba při nápočtu cen dokladu převodky/výdejky.'#1 + CRLF + E.Message + CRLF + locSQL + errPlg); idKJ:= helUtils.ZapisDoKJ(Helios,'HEO','','POR','','Plugin plgLOVATO','Chyba při nápočtu cen dokladu převodky/výdejky Nadvýroby'); if idKJ>0 then Helios.ExecSQL('INSERT ' + tblKJPozn + ' (IDKontJednani,Nazev,Poznamka) VALUES (' + IntToStr(idKJ) + ',N' + QuotedStr('Podrobnosti.unit9') + ',N' + QuotedStr(E.Message + CRLF + locSQL) + ')'); idKJ:= 0; Exit; end; end; podm:= 'DruhPohybuZbo=0 AND RadaDokladu=N' + QuotedStr(druhPrevPrijDP) + ' AND IDSklad=N' + QuotedStr(sklDP); podm:= podm + ' AND Obdobi=' + IntToStr(idObd); idDZ2:= helUtils.NajdiPrvniVolny(Helios,tblDZ,'PoradoveCislo','0',druhPrevPrijDP,IntToStr(idObd),podm); { idDZshift2:= 0; // posunuti cisla brane z nastaveni TabDruhDokZboDef locSQL:= 'SELECT dzd.PosledniPC FROM ' + tblDDZdef + ' dzd INNER JOIN ' + tblDDZ + ' dz'; locSQL:= locSQL + ' ON (dz.ID=dzd.idDruhDZ) WHERE dzd.IdObdobi=' + IntToStr(idObd); locSQL:= locSQL + ' AND dz.DruhPohybuZbo=0 AND dz.RadaDokladu=N' + QuotedStr(druhPrevPrijDP); qry:= Helios.OpenSQL(locSQL); if qry.RecordCount>0 then idDZshift2:= StrToInt(VarToStr(qry.FieldValues(0))); podm:= 'DruhPohybuZbo=0 AND RadaDokladu=N' + QuotedStr(druhPrevPrijDP) + ' AND IDSklad=N' + QuotedStr(sklDP); podm:= podm + ' AND Obdobi=' + IntToStr(idObd); locSQL:= 'EXEC dbo.hp_NajdiPrvniVolny N' + QuotedStr(tblDZ) + ',N' + QuotedStr('PoradoveCislo'); locSQL:= locSQL + ',' + IntToStr(idDZshift2) + ',99999999,N' + QuotedStr(podm) + ',0,1'; idDZ2:= 0; qry:= Helios.OpenSQL(locSQL); if qry.RecordCount>0 then idDZ2:= StrToInt(VarToStr(qry.FieldValues(0))); if (idDZ2=0) or (idDZ2=idDZshift2) then idDZ2:= idDZshift2 + 1; } { beg: vypnuti tvorby nasledne prijemky locSQL:= 'DECLARE @dt DATETIME,@IDcko INT' + CRLF + 'SET @dt=CONVERT(datetime,N' + QuotedStr(DateTimeToStr(dtDatum.DateTime)) + ',104)'; locSQL:= locSQL + CRLF + 'EXEC dbo.hp_InsertHlavickyOZ @IDcko OUT,@RadaDokladu=N' + QuotedStr(druhPrevPrijDP); locSQL:= locSQL + ',@DruhPohybu=0,@CisloOrg=0,@Insert=1,@Sklad=N' + QuotedStr(sklDP) + ',@PC=' + IntToStr(idDZ2); locSQL:= locSQL + ',@DatumPorizeni=@dt' + CRLF + 'SELECT @IDcko'; idDZ2:= 0; with Helios.OpenSQL(locSQL) do if (RecordCount>0) then idDZ2:= StrToInt(VarToStr(FieldValues(0))); end: vypnuti tvorby nasledne prijemky } if (1=0) then { vypnuti tvorby nasledne prijemky (idDZ2>0) } begin try locSQL:= 'IF OBJECT_ID(N' + QuotedStr('tempdb..#TabTempUziv') + ') IS NULL CREATE TABLE #TabTempUziv(Tabulka'; locSQL:= locSQL + ' NVARCHAR(255) NOT NULL, SCOPE_IDENTITY INT NULL, Datum DATETIME NULL)' + CRLF; locSQL:= locSQL + 'EXEC dbo.hp_generuj_navazny_doklad @IDDokladDst=' + IntToStr(idDZ2) + ',@IDDokladSrc=' + IntToStr(idDZ1); locSQL:= locSQL + ',@CisloOrgCil=0,@MUcil=null,@KurzCil=1,@JednotkaMenyCil=1,@MenaCil=N' + QuotedStr('CZK'); locSQL:= locSQL + ',@Returnem=1,@KurzEuroCil=0,@CisloZakCil=null,@NOkruhCil=null,@StredNakladCil=null,@StredVynosCil=null'; locSQL:= locSQL + ',@FormaDopravyCil=null,@VozidloCil=null,@ObjednavkaCil=null,@PopisDodavkyCil=N' + QuotedStr('Převod materiálu'); locSQL:= locSQL + ',@NavaznyDobropisCil=null,@ZamestnanecCil=null,@DodFakCil=null,@Nasobek=1,@SlevaCil=0'; Helios.ExecSQL(locSQL); except on E:Exception do begin try locSQL:= 'FROM ' + tblPZ + ' WHERE IdDoklad=' + IntToStr(idDZ2); Helios.ExecSQL('DELETE FROM dbo.TabPohybyZboziSD WHERE id IN (SELECT id ' + locSQL + ')'); Helios.ExecSQL('DELETE ' + locSQL); Helios.ExecSQL('DELETE FROM dbo.TabDokZboDodatek WHERE IDHlavicky=' + IntToStr(idDZ2)); Helios.ExecSQL('UPDATE ' + tblDZ + ' SET NavaznyDoklad=null WHERE id='+ IntToStr(idDZ1)); Helios.ExecSQL('DELETE FROM ' + tblDZ + ' WHERE Id=' + IntToStr(idDZ2)); Helios.Error(#1'Chyba při generování návazného dokladu.'#1 + CRLF + E.Message + errPlg); idKJ:= ZapisDoKJ(Helios,'HEO','','POR','','Plugin plgLOVATO','Nelze generovat následný doklad Výdejky Nadvýroby'); if (idKJ>0) then Helios.ExecSQL('INSERT ' + tblKJPozn + ' (IDKontJednani,Nazev,Poznamka) VALUES (' + IntToStr(idKJ) + ',N' + QuotedStr('Podrobnosti.unit9') + ',N' + QuotedStr(E.Message + CRLF + locSQL) + ')'); idKJ:= 0; except on E:Exception do begin Helios.Error(#1 + E.Message + #1); Exit; end; end; Exit; end; end; Helios.ExecSQL('EXEC dbo.ep_DoplnKooperacniCenyVydejky ' + IntToStr(idDZ2)); Helios.ExecSQL('EXEC dbo.hp_VypCenOZPolozek_IDDokladu @IDDoklad=' + IntToStr(idDZ2) + ',@AktualizaceSlev=0'); Helios.ExecSQL('UPDATE ' + tblDZ + ' SET BlokovaniEditoru=NULL WHERE id=' + IntToStr(idDZ2)); realVyd:= false; // if idDZ2>0 then // begin try locSQL:= 'DECLARE @chyba BIT,@dt DATETIME' + CRLF + 'SET @dt=CONVERT(datetime,N' + QuotedStr(DateTimeToStr(dtDatum.DateTime)) + ',104)' + CRLF; locSQL:= locSQL + 'EXEC dbo.hp_Realizuj_Vydej @ID=' + IntToStr(idDZ1) + ',@DatumRealizace=@dt,@Uzivatel=' + IntToStr(Helios.UserId) + ',@Hlidat=0,@BylaChyba=@chyba OUT'; locSQL:= locSQL + CRLF + 'SELECT @chyba'; with Helios.OpenSQL(locSQL) do if not VarIsNull(FieldValues(0)) then if (LowerCase(VarToStr(FieldValues(0)))='false') then realVyd:= true; except on E:Exception do begin // Clipboard.AsText:= locSQL; try Helios.Error(#1'Nelze realizovat Převodku/výdejku'#1 + CRLF + E.Message + errPlg); { idKJ:= helUtils.ZapisDoKJ(Helios,'HEO','','POR','','Plugin plgLOVATO','Nelze realizovat Převodku/výdejku Nadvýroby.'); if idKJ>0 then Helios.ExecSQL('INSERT INTO ' + tblKJPozn + ' (IDKontJednani,Nazev,Poznamka) VALUES (' + IntToStr(idKJ) + ',N' + QuotedStr('Podrobnosti.unit9') + ',N' + QuotedStr(E.Message + CRLF + locSQL) + ')'); } idKJ:= 0; except on E:Exception do begin Helios.Error(#1 + E.Message + #1); Exit; end; end; Exit; end; end; // end; idDZ2:= 0; realPrij:= false; if realVyd then begin try locSQL:= 'DECLARE @chyba BIT,@dt DATETIME' + CRLF + 'SET @dt=CONVERT(datetime,N' + QuotedStr(DateTimeToStr(dtDatum.DateTime)) + ',104)' + CRLF; locSQL:= locSQL + 'EXEC dbo.hp_Realizuj_Prijem @ID=' + IntToStr(idDZ2) + ',@DatumRealizace=@dt,@Uzivatel=' + IntToStr(Helios.UserId) + ',@BylaChyba=@chyba OUT'; locSQL:= locSQL + CRLF + 'SELECT @chyba'; with Helios.OpenSQL(locSQL) do if not VarIsNull(FieldValues(0)) then if (LowerCase(VarToStr(FieldValues(0)))='false') then realPrij:= true; except on E:Exception do begin // ClipBoard.AsText:= locSQL; Helios.Error(#1'Chyba při realizaci Převodky/příjemky pro Nadvýrobu.'#1 + CRLF + E.Message + CRLF + errPlg); idKJ:= helUtils.ZapisDoKJ(Helios,'HEO','','POR','','Plugin plgLOVATO','Nelze realizovat příjemku Převodku/příjemku Nadvýroby'); if (idKJ>0) then Helios.ExecSQL('INSERT ' + tblKJPozn + ' (IDKontJednani,Nazev,Poznamka) VALUES (' + IntToStr(idKJ) + ',N' + QuotedStr('Podrobnosti.unit9') + ',N' + QuotedStr(E.Message + CRLF + locSQL) + ')'); idKJ:= 0; end; end; end; end; end; end; Helios.Refresh(true); Close; end; end; end; procedure TfrmVydejDPrace.NastavFonty; var idx: integer; HelPars: THeliosParams; begin NactiParametryHeliosu(Helios,HelPars); idx:= 0; { while idx'' then begin with Helios.OpenSQL('SELECT id,PrijmeniJmeno,Cislo FROM ' + tblCZam + ' WHERE Cislo=' + selCisZam.Text) do if RecordCount>0 then begin begin idZam:= StrToInt(VarToStr(FieldValues(0))); lblZamest.Caption:= VarToStr(FieldValues(1)); cZam:= StrToInt(VarToStr(FieldValues(2))); end; selCisZam.Text:= StringOfChar('0',6-Length(IntToStr(cZam))) + IntToStr(cZam); end; end; end; procedure TfrmVydejDPrace.selRegCisButtonClick (Sender: TObject); var podm: WideString; begin // podm:= 'TabKmenZbozi.SkupZbo IN (SELECT sz.id FROM TabSkupinyZbozi sz INNER JOIN TabSkupinyZbozi_EXT sze ON (sz.id=sze.id)'; // podm:= podm + ' WHERE sze._JeVyroba=1) AND'; { podm:= podm + ' TabKmenZbozi.id IN ('; podm:= podm + 'SELECT kz.id FROM TabPolKoopObj pko INNER JOIN TabPrikaz p ON (pko.IDPrikaz=p.id)'; podm:= podm + ' INNER JOIN TabKmenZbozi kz ON (p.IDTabKmen=kz.id) WHERE pko.id IN (SELECT po.id FROM TabPolKoopObj po'; podm:= podm + ' WHERE po.IDObjednavky IN (SELECT o.id FROM TabKoopObj o WHERE o.IDOrganizace=(SELECT id FrOM TabCisOrg WHERE CisloOrg=2)'; podm:= podm + ' AND o.Splneno=0 AND o.realizovano=1)) GROUP BY kz.id)'; } podm:= ''; if Helios.Prenos(100089,'IdTabKmen',vOle1,podm,'Vyberte dílec/polosestavu',true) then begin idKZ:= StrToInt(VarToStr(vOle1)); lblSZ.Caption:= VratKZSZ(idKZ); selRegCis.Text:= VratKZRegCis(idKZ); lblPopis.Caption:= VratKZNazev1(idKZ); edtMnoz.SetFocus; end else Helios.Error(#1'Nebyla vybrána žádná karta.'#1); end; procedure TfrmVydejDPrace.selRegCisExit (Sender: TObject); var podm: ShortString; begin selRegCis.Text:= Trim(selRegCis.Text); if (selRegCis.Text='') then Exit; with Helios.OpenSQL('SELECT id FROM ' + tblKZ + ' WHERE Dilec=1 AND RegCis LIKE N''%' + selRegCis.Text + '%''') do begin if (RecordCount=1) then idKZ:= StrToInt(VarToStr(FieldValues(0))); if (RecordCount>1) then begin podm:= 'TabKmenZbozi.RegCis LIKE N''%' + selRegCis.Text + '%'' AND TabKmenZbozi.Dilec=1'; if Helios.Prenos(bidKZ,'id',vOle1,podm,'Zboží a služby',True) then idKZ:= StrToInt(VarToStr(FieldValues(0))); end; lblSZ.Caption:= VratKZSZ(idKZ); lblPopis.Caption:= VratKZNazev1(idKZ); selRegCis.Text:= VratKZRegCis(idKZ); end; end; procedure TfrmVydejDPrace.gMat2DrawDataCell (Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState); var m,s: Extended; begin if not(TryStrToFloat(gMat2.DataSource.Dataset.FieldByName('Mnoz').AsString, m)) then m:= 0; if not(TryStrToFloat(gMat2.DataSource.DataSet.FieldByName('MnozSkl').AsString, s)) then s:= 0; if (s<=m) then gMat2.Canvas.Brush.Color:= $005D5DFC else gMat2.Canvas.Brush.Color:= $0; end; procedure TfrmVydejDPrace.gPolos2DblClick (Sender: TObject); var mn,jc: Extended; begin mn:= vtPolos.FieldByName('Mnoz').AsExtended; jc:= 0; if FormMnozstviCena('Změna množství',mn,jc,true,false) then if (mn<>0) then begin vtPolos.Edit; vtPolos.FieldByName('Mnoz').AsExtended:= mn; vtPolos.Post; end; end; procedure TfrmVydejDPrace.vtPolosAfterPost (DataSet: TDataSet); var idMat: integer; mnoz,mnozNiz: Extended; idKZNiz: integer; sz,regcis,pop: ShortString; iRowPolos: integer; lp: integer; locSQL: WideString; rozp: IHeQuery; begin iRowPolos:= vtPolos.RecNo; locSQL:= 'IF OBJECT_ID(' + QuotedStr('tempdb..#MatPozadavky') + ') IS NOT NULL DROP TABLE #MatPozadavky' + CRLF; locSQL:= locSQL + 'CREATE TABLE #MatPozadavky(ID INT IDENTITY NOT NULL, IdKZMat INT NOT NULL,'; locSQL:= locSQL + 'MnozNizsi NUMERIC(19,6) NOT NULL DEFAULT 0, MnozVyssi NUMERIC(19,6) NOT NULL DEFAULT 0)'; Helios.ExecSQL(locSQL); { locSQL:= 'IF OBJECT_ID(' + QuotedStr('tempdb..#TabPrKVazbyGen') + ') IS NOT NULL DROP TABLE #TabPrKVazbyGen' + CRLF; locSQL:= locSQL + 'CREATE TABLE #TabPrKVazbyGen(ID INT IDENTITY NOT NULL, Generuj BIT NOT NULL DEFAULT 1,'; locSQL:= locSQL + 'PoKorekciDat BIT NOT NULL DEFAULT 0, IDPrKV INT NOT NULL, Doklad INT NOT NULL, IDPrikaz INT NOT NULL,'; locSQL:= locSQL + 'Prednastaveno BIT NOT NULL DEFAULT 1, Sklad NVARCHAR(30) COLLATE database_default NULL,'; locSQL:= locSQL + 'VyrStredisko NVARCHAR(30) COLLATE database_default NULL, IDPracoviste INT NULL,'; locSQL:= locSQL + 'mnoz_zad NUMERIC(19, 6) NOT NULL DEFAULT 0, Mnoz_nepotrebne NUMERIC(19, 6) NOT NULL DEFAULT 0,'; locSQL:= locSQL + 'Mnoz_skut_realizovane NUMERIC(19, 6) NOT NULL DEFAULT 0, Cena_real NUMERIC(19, 6) NOT NULL DEFAULT 0,'; locSQL:= locSQL + 'Mnoz_odv NUMERIC(19, 6) NOT NULL DEFAULT 0, Cena_odv NUMERIC(19, 6) NOT NULL DEFAULT 0,'; locSQL:= locSQL + 'MnozstviMax NUMERIC(19, 6) NULL, MnozstviPoz NUMERIC(19, 6) NOT NULL, PomMnozPoz NUMERIC(19, 6) NOT NULL DEFAULT 0,'; locSQL:= locSQL + 'IDPohZbo INT NULL, priorita INT NOT NULL DEFAULT 0, vyssi INT NOT NULL, nizsi INT NOT NULL,'; locSQL:= locSQL + 'DavkaTPV NUMERIC(19, 6) NOT NULL DEFAULT 1, pozice NVARCHAR(100) COLLATE database_default NULL DEFAULT '''','; locSQL:= locSQL + 'Operace NCHAR(4) COLLATE database_default NULL DEFAULT '''', FixniMnozstvi NUMERIC(19, 6) NOT NULL DEFAULT 0,'; locSQL:= locSQL + 'mnozstvi NUMERIC(19, 6) NOT NULL DEFAULT 1, ProcZtrat NUMERIC(5, 2) NOT NULL DEFAULT 0,'; locSQL:= locSQL + 'mnozstviSeZtratou NUMERIC(19, 6) NOT NULL DEFAULT 0, Prirez NUMERIC(19, 6) NOT NULL DEFAULT 1,'; locSQL:= locSQL + 'Poznamka NTEXT COLLATE database_default NULL, pom_pomer_A NUMERIC(19, 6) NULL,'; locSQL:= locSQL + 'pom_pomer_B NUMERIC(19, 6) NULL, Dodavatel INT NULL)'; Helios.ExecSQL(locSQL); } vtPolos.First; while not(vtPolos.Eof) do begin idKZ:= vtPolos.FieldByName('idKZ').asInteger; mnoz:= vtPolos.FieldByName('Mnoz').AsFloat; rozp:= Helios.OpenSQL('SELECT nizsi,Mnozstvi FROM ' + tblKVaz + ' WHERE vyssi=' + IntToStr(idKZ)); if rozp.RecordCount>0 then begin rozp.First; while not(rozp.EOF) do begin locSQL:= 'INSERT #MatPozadavky VALUES (' + VarToStr(rozp.FieldValues(0)) + ','; mnozNiz:= StrToFloat(VarToStr(rozp.FieldValues(1))); locSQL:= locSQL + StringReplace(FloatToStr(mnozNiz),',','.',[rfReplaceAll]) + ','; locSQL:= locSQL + StringReplace(FloatToStr(mnoz),',','.',[rfReplaceAll]) + ')'; Helios.ExecSQL(locSQL); rozp.Next; end; end; vtPolos.Next; end; rozp:= Helios.OpenSQL('SELECT * FROM #MatPozadavky'); if rozp.RecordCount>0 then begin idMat:= rozp.RecordCount; if (vtPolos.RecordCount>0) then vtMat.EmptyDataset; rozp.First; vtMat.Open; while not(rozp.EOF) do begin idKZNiz:= StrToInt(VarToStr(rozp.FieldValues(1))); mnozNiz:= StrToFloat(VarToStr(rozp.FieldValues(2))) * StrToFloat(VarToStr(rozp.FieldValues(3))); if vtMat.Locate('idKZ',VarArrayOf([idKZNiz]),[loCaseInsensitive]) then begin vtMat.Edit; mnozNiz:= mnozNiz + vtMat.FieldByName('Mnoz').AsExtended; end else begin vtMat.Insert; vtMat.FieldByName('idKZ').AsInteger:= idKZNiz; with Helios.OpenSQL('SELECT SkupZbo,RegCis,Nazev1 FROM ' + tblKZ + ' WHERE id=' + IntToStr(idKZNiz)) do begin vtMat.FieldByName('SkupZbo').AsString:= VarToStr(FieldValues(0)); vtMat.FieldByName('RegCis').AsString:= VarToStr(FieldValues(1)); vtMat.FieldByName('Popis').AsString:= VarToStr(FieldValues(2)); end; end; vtMat.FieldByName('Mnoz').AsExtended:= mnozNiz; with Helios.OpenSQL('SELECT Mnozstvi FROM ' + tblSS + ' WHERE IdKmenZbozi=' + IntToStr(idKZNiz) + ' AND IDSklad=N' + QuotedStr(sklFin)) do if (RecordCount=1) then vtMat.FieldByName('MnozSkl').AsExtended:= StrToFloat(VarToStr(FieldValues(0))) else vtMat.FieldByName('MnozSkl').AsExtended:= 0; vtMat.Post; rozp.Next; end; end; Helios.ExecSQL('IF OBJECT_ID(' + QuotedStr('tempdb..#TabPrKVazbyGen') + ') IS NOT NULL DROP TABLE #TabPrKVazbyGen'); vtPolos.RecNo:= iRowPolos; end; end.