unit frmUnit15; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, Vcl.ExtCtrls, RzEdit, Vcl.Mask, RzBtnEdt, ddPlugin_TLB; const sklVyr = '200'; radaOdved = '220'; type TarrPrikazy = record id: Integer; ks: Single; ksZive: Single; idKZ: integer; end; TformOdvodRele = class(TForm) btnVyrobek: TButton; btnPrikaz: TButton; Panel1: TPanel; pgControl: TPageControl; tbVyrobek: TTabSheet; tbPrikaz: TTabSheet; selZamest: TRzButtonEdit; lblDilecPrikaz: TLabel; selDilecPrikaz: TRzButtonEdit; lblZamest: TLabel; lblKusy: TLabel; edtKusy: TRzNumericEdit; btnOK: TButton; btnZrus: TButton; procedure FormShow(Sender: TObject); procedure btnVyrobekClick(Sender: TObject); procedure btnPrikazClick(Sender: TObject); procedure btnZrusClick(Sender: TObject); procedure selZamestExit(Sender: TObject); procedure selDilecPrikazExit(Sender: TObject); procedure selZamestKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure selDilecPrikazKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure edtKusyKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); private procedure OdvodPrikazu; safecall; public Helios: IHelios; end; var formOdvodRele: TformOdvodRele; lSQL: string; idZam, idKZ: integer; idPrikazy: TArray; odvVyr: boolean; implementation {$R *.dfm} uses Vcl.Clipbrd, helUtils; procedure TformOdvodRele.OdvodPrikazu; var ksZbyt, ksZive: Single; idx, idx2, idPrikaz, idDZ, idDZv, idDZp, idKJ: integer; realVyd, realPrij, cont: boolean; begin if (edtKusy.Value=0) then Helios.Error(#1'Není zadáno odváděné množství.'#1) else if (Length(idPrikazy)>0) then begin ksZbyt:= edtKusy.Value; idx:= 0; while (idx<=High(idPrikazy)) and (ksZbyt>0) do begin ksZive:= idPrikazy[idx].ksZive; if (ksZive>=ksZbyt) then begin ksZive:= ksZbyt; ksZbyt:= 0; end; if (ksZive>0) then begin idPrikazy[idx].ks:= ksZive; ksZbyt:= ksZbyt-ksZive; end; idx:= idx+1; end; lSQL:= 'IF OBJECT_ID(N' + QuotedStr('tempdb..#TabOdved') + ') IS NOT NULL DROP TABLE #TabOdved' + CRLF; lSQL:= lSQL + 'CREATE TABLE #TabOdved (id int identity, IDPrikaz int NOT NULL, IDDilec int NOT NULL, IDZakazka int, maxMnozstvi NUMERIC(19,6),'; lSQL:= lSQL + 'mnozstvi NUMERIC(19,6) NOT NULL, EvidJednotka INT NOT NULL, Sklad NVARCHAR(30), KodUmisteni NVARCHAR(15) )'; Helios.ExecSQL(lSQL); lSQL:= 'IF OBJECT_ID(N' + QuotedStr('tempdb..#TabGenRezVyd') + ') IS NOT NULL DROP TABLE #TabGenRezVyd' + CRLF; lSQL:= lSQL + 'CREATE TABLE #TabGenRezVyd(ID INT NOT NULL)'; Helios.ExecSQL(lSQL); lSQL:= 'IF OBJECT_ID(N' + QuotedStr('tempdb..#TabPrKVazbyGen') + ') IS NOT NULL DROP TABLE #TabPrKVazbyGen' + CRLF; lSQL:= lSQL + 'CREATE TABLE #TabPrKVazbyGen(ID INT IDENTITY NOT NULL, Generuj BIT NOT NULL DEFAULT 1,'; lSQL:= lSQL + 'PoKorekciDat BIT NOT NULL DEFAULT 0, IDPrKV INT NOT NULL, Doklad INT NOT NULL, IDPrikaz INT NOT NULL,'; lSQL:= lSQL + 'Prednastaveno BIT NOT NULL DEFAULT 1, Sklad NVARCHAR(30) COLLATE database_default NULL,'; lSQL:= lSQL + 'VyrStredisko NVARCHAR(30) COLLATE database_default NULL, IDPracoviste INT NULL,'; lSQL:= lSQL + 'mnoz_zad NUMERIC(19, 6) NOT NULL DEFAULT 0, Mnoz_nepotrebne NUMERIC(19, 6) NOT NULL DEFAULT 0,'; lSQL:= lSQL + 'Mnoz_skut_realizovane NUMERIC(19, 6) NOT NULL DEFAULT 0, Cena_real NUMERIC(19, 6) NOT NULL DEFAULT 0,'; lSQL:= lSQL + 'Mnoz_odv NUMERIC(19, 6) NOT NULL DEFAULT 0, Cena_odv NUMERIC(19, 6) NOT NULL DEFAULT 0,'; lSQL:= lSQL + 'MnozstviMax NUMERIC(19, 6) NULL, MnozstviPoz NUMERIC(19, 6) NOT NULL, PomMnozPoz NUMERIC(19, 6) NOT NULL DEFAULT 0,'; lSQL:= lSQL + 'IDPohZbo INT NULL, priorita INT NOT NULL DEFAULT 0, vyssi INT NOT NULL, nizsi INT NOT NULL,'; lSQL:= lSQL + 'DavkaTPV NUMERIC(19, 6) NOT NULL DEFAULT 1, pozice NVARCHAR(100) COLLATE database_default NULL DEFAULT '''','; lSQL:= lSQL + 'Operace NCHAR(4) COLLATE database_default NULL DEFAULT N'''', FixniMnozstvi NUMERIC(19, 6) NOT NULL DEFAULT 0,'; lSQL:= lSQL + 'mnozstvi NUMERIC(19, 6) NOT NULL DEFAULT 1, ProcZtrat NUMERIC(5, 2) NOT NULL DEFAULT 0,'; lSQL:= lSQL + 'mnozstviSeZtratou NUMERIC(19, 6) NOT NULL DEFAULT 0, Prirez NUMERIC(19, 6) NOT NULL DEFAULT 1,'; lSQL:= lSQL + 'Poznamka NTEXT COLLATE database_default NULL, pom_pomer_A NUMERIC(19, 6) NULL,'; lSQL:= lSQL + 'pom_pomer_B NUMERIC(19, 6) NULL, Dodavatel INT NULL)'; Helios.ExecSQL(lSQL); for idx:=Low(idPrikazy) to High(idPrikazy) do begin if (idPrikazy[idx].ks<=0) then Continue; lSQL:= 'INSERT #TabOdved (IDPrikaz,IDDilec,Mnozstvi,EvidJednotka,Sklad) VALUES ('; lSQL:= lSQL + IntToStr(idPrikazy[idx].id) + ',' + IntToStr(idPrikazy[idx].idKZ) + ','; lSQL:= lSQL + StringReplace( FloatToStr(idPrikazy[idx].ks) ,',','.',[rfReplaceAll]); lSQL:= lSQL + ',1,N' + QuotedStr(sklVyr) + ')'; Helios.ExecSQL(lSQL); end; lSQL:= 'DECLARE @RespekExistDoklady bit' + CRLF + 'SET @RespekExistDoklady=1' + CRLF; lSQL:= lSQL + 'INSERT #TabPrKVazbyGen (IDPrKV, MnozstviPoz, pom_pomer_A, pom_pomer_B, Doklad, IDPrikaz,'; lSQL:= lSQL + 'Prednastaveno, Sklad, VyrStredisko, IDPracoviste, mnoz_zad, Mnoz_nepotrebne, Mnoz_skut_realizovane,'; lSQL:= lSQL + 'Cena_real, Mnoz_odv, Cena_odv, priorita, vyssi, nizsi, DavkaTPV, pozice, Operace, FixniMnozstvi,'; lSQL:= lSQL + 'mnozstvi, ProcZtrat, mnozstviSeZtratou, Prirez, Poznamka) SELECT PrKV.ID, PrKV.mnoz_zad*O.mnozstvi/P.kusy_zad'; lSQL:= lSQL + '-CASE WHEN @RespekExistDoklady=1 THEN PrKV.VydanoRefMnoz + (SELECT ISNULL(SUM(PZ2.prepmnozstvi*(PZ2.mnozstvi'; lSQL:= lSQL + '-PZ2.MnOdebrane) * PrKV2.RefMnoz / PrKV2.mnoz_zad), 0.0) FROM TabPohybyZbozi PZ2 INNER JOIN TabStavSkladu SS2 ON (SS2.ID=PZ2.IDZboSklad)'; lSQL:= lSQL + ' INNER JOIN TabPrKVazby PrKV2 ON (PrKV2.IDPrikaz=PZ2.IDPrikaz AND PrKV2.Doklad=PZ2.DokladPrikazu AND '; lSQL:= lSQL + 'PrKV2.nizsi=SS2.IDKmenZbozi AND PrKV2.IDOdchylkyDo IS NULL) WHERE PZ2.TypVyrobnihoDokladu=1 AND '; lSQL:= lSQL + 'PZ2.IDPrikaz=PrKV.IDPrikaz AND PZ2.DokladPrikazu=PrKV.Doklad AND PZ2.druhPohybuZbo IN (2,4,9,10) AND '; lSQL:= lSQL + 'PZ2.SkutecneDatReal IS NULL) ELSE 0.0 END, CASE WHEN @RespekExistDoklady=0 THEN O.mnozstvi END,'; lSQL:= lSQL + 'CASE WHEN @RespekExistDoklady=0 THEN P.kusy_zad END,PrKV.Doklad, PrKV.IDPrikaz, PrKV.Prednastaveno,'; lSQL:= lSQL + 'PrKV.Sklad, PrKV.VyrStredisko, PrKV.IDPracoviste, PrKV.mnoz_zad, PrKV.Mnoz_nepotrebne, PrKV.Mnoz_skut_realizovane,'; lSQL:= lSQL + 'PrKV.Cena_real, PrKV.Mnoz_odv, PrKV.Cena_odv, PrKV.priorita, PrKV.vyssi, PrKV.nizsi, PrKV.DavkaTPV,'; lSQL:= lSQL + 'PrKV.pozice, PrKV.Operace, PrKV.FixniMnozstvi, PrKV.mnozstvi, PrKV.ProcZtrat, PrKV.mnozstviSeZtratou,'; lSQL:= lSQL + 'PrKV.Prirez, PrKV.Poznamka FROM (SELECT IDPrikaz=O1.IDPrikaz, Mnozstvi=SUM(O1.mnozstvi)'; lSQL:= lSQL + ' + CASE WHEN @RespekExistDoklady=1 THEN MAX(P1.kusy_odved+P1.kusy_ztrac+P1.kusy_zmet)'; lSQL:= lSQL + ' + (SELECT ISNULL(SUM(PZ1.prepmnozstvi*PZ1.mnozstvi), 0.0) FROM TabPohybyZbozi PZ1 WHERE PZ1.TypVyrobnihoDokladu=0'; lSQL:= lSQL + ' AND PZ1.IDPrikaz=O1.IDPrikaz AND PZ1.druhPohybuZbo=0 AND PZ1.SkutecneDatReal IS NULL) ELSE 0.0 END'; lSQL:= lSQL + ' FROM #TabOdved O1 INNER JOIN TabPrikaz P1 ON (P1.ID=O1.IDPrikaz) GROUP BY O1.IDPrikaz) O'; lSQL:= lSQL + ' INNER JOIN TabPrikaz P ON (P.ID=O.IDPrikaz AND P.StavPrikazu IN (30,50)) INNER JOIN TabRadyPrikazu RP ON (RP.rada=P.rada)'; lSQL:= lSQL + ' INNER JOIN TabPrKVazby PrKV ON (PrKV.IDPrikaz=O.IDPrikaz AND PrKV.predzpracovano=0 AND PrKV.prednastaveno=1'; lSQL:= lSQL + ' AND PrKV.uzavreno=0 AND PrKV.RezijniMat=0 AND PrKV.IDOdchylkyDo IS NULL) INNER JOIN TabKmenZbozi KZ ON'; lSQL:= lSQL + ' (KZ.ID=PrKV.nizsi AND KZ.sluzba=0) WHERE (P.kusy_zive>0.0 OR RP.KontrolovatRozpracPriUzav=0)'; Helios.ExecSQL(lSQL); lSQL:= 'UPDATE G SET MnozstviMax=CASE WHEN RP.NekontrolovatMnozMatPol=1 THEN NULL ELSE (CASE WHEN PrKV.splneno=1'; lSQL:= lSQL + ' THEN 0.0 ELSE PrKV.mnoz_zad-PrKV.VydanoRefMnoz*PrKV.mnoz_zad/PrKV.RefMnoz END) END FROM #TabPrKVazbyGen G'; lSQL:= lSQL + ' INNER JOIN TabPrKVazby PrKV ON (PrKV.ID=G.IDPrKV) INNER JOIN TabPrikaz P ON (P.ID=PrKV.IDPrikaz)'; lSQL:= lSQL + ' INNER JOIN TabRadyPrikazu RP ON (RP.rada=P.rada)' + CRLF; lSQL:= lSQL + 'UPDATE #TabPrKVazbyGen SET mnozstviPoz=CEILING(mnozstviPoz) FROM #TabPrKVazbyGen G INNER JOIN'; lSQL:= lSQL + ' TabPrKVazby PrKV ON (PrKV.ID=G.IDPrKV) INNER JOIN TabKmenZbozi KZ ON (KZ.ID=PrKV.nizsi)'; lSQL:= lSQL + ' INNER JOIN TabMJ MJ ON (MJ.kod=KZ.MJEvidence AND MJ.nedelitelna=1) WHERE G.PoKorekciDat=0' + CRLF; lSQL:= lSQL + 'UPDATE #TabPrKVazbyGen SET mnozstviPoz=MnozstviMax WHERE MnozstviMax IS NOT NULL AND mnozstviPoz>MnozstviMax'; lSQL:= lSQL + CRLF + 'DELETE #TabPrKVazbyGen WHERE MnozstviPoz<=0.0 AND PoKorekciDat=0' + CRLF; lSQL:= lSQL + 'UPDATE G SET Dodavatel=CO.ID FROM #TabPrKVazbyGen G INNER JOIN TabPrKVazby PrKV ON (PrKV.ID=G.IDPrKV)'; lSQL:= lSQL + ' INNER JOIN TabKmenZbozi KZ ON (KZ.ID=PrKV.nizsi) INNER JOIN TabCisOrg CO ON (CO.CisloOrg=KZ.Aktualni_Dodavatel)'; lSQL:= lSQL + ' WHERE G.PoKorekciDat=0 AND G.Dodavatel IS NULL' + CRLF + 'UPDATE #TabPrKVazbyGen SET PoKorekciDat=1 WHERE PoKorekciDat=0'; lSQL:= lSQL + CRLF + 'UPDATE #TabPrKVazbyGen SET Generuj=1'; Helios.ExecSQL(lSQL); for idx:=Low(idPrikazy) to High(idPrikazy) do begin if (idPrikazy[idx].id=0) then Continue; lSQL:= 'IF OBJECT_ID(N' + QuotedStr('tempdb..#TabSouhKusov') + ') IS NOT NULL DROP TABLE #TabSouhKusov' + CRLF; lSQL:= lSQL + 'CREATE TABLE #TabSouhKusov (IDKZ INT, mnozstvi NUMERIC(19,6) DEFAULT 0.0)' + CRLF; Helios.ExecSQL(lSQL); lSQL:= 'DECLARE @dt DATETIME' + CRLF + 'SET @dt=GETDATE()' + CRLF + 'EXEC dbo.ep_GetKusovnikProOZ'; lSQL:= lSQL + ' @ID=' + IntToStr(idPrikazy[idx].idKZ) + ',@mnozstvi=' + StringReplace(FloatToStr(idPrikazy[idx].ks),',','.',[rfReplaceAll]); lSQL:= lSQL + ',@datum=@dt' + CRLF + 'MERGE #TabPrKVazbyGen AS T USING #TabSouhKusov AS S ON (T.nizsi=S.IDKZ AND'; lSQL:= lSQL + ' T.IDPrikaz=' + IntToStr(idPrikazy[idx].id) + ') WHEN MATCHED THEN UPDATE SET T.MnozstviPoz=S.mnozstvi;'; Helios.ExecSQL(lSQL); end; lSQL:= 'SELECT DISTINCT(v.nizsi),X.Soucet,ss.Mnozstvi,kz.SkupZbo,kz.RegCis,kz.Nazev1 FROM #TabPrKVazbyGen v'; lSQL:= lSQL + ' INNER JOIN (SELECT DISTINCT(g.nizsi),SUM(g.MnozstviPoz) AS [Soucet] FROM #TabPrKVazbyGen g GROUP BY g.nizsi) AS X'; lSQL:= lSQL + ' ON (v.nizsi=X.nizsi) INNER JOIN ' + tblSS + ' ss ON (v.nizsi=ss.IDKmenZbozi AND v.Sklad=ss.IDSklad)'; lSQL:= lSQL + ' INNER JOIN ' + tblKZ + ' kz ON (v.nizsi=kz.id) WHERE ss.Mnozstvi0) then begin First; lSQL:= ''; while not(EOF) do begin lSQL:= lSQL + CRLF + VarToStr(FieldValues(3)) + ' : ' + VarToStr(FieldValues(4)) + ' ' + VarToStr(FieldValues(5)); lSQL:= lSQL + ' - ' + VarToStr(FieldValues(1)) + ' ks (skladem je ' + VarToStr(FieldValues(2)) + ' ks)'; Next; end; Clipboard.AsText:= lSQL; Helios.Error(#1'Nelze vygenerovat výdejku, chybí některý materiál.'#1 + CRLF + 'Zpracování evidence nebude provedeno.' + CRLF + lSQL); Exit; end; lSQL:= 'SELECT SUM(vazGen.mnozstviPoz),kz.RegCis,ss.Mnozstvi,kz.Nazev1'; lSQL:= lSQL + ' FROM #TabPrKVazbyGen vazGen'; lSQL:= lSQL + ' INNER JOIN ' + tblSS + ' ss ON (ss.IDSklad=vazGen.Sklad AND ss.IDKmenZbozi=vazGen.nizsi)'; lSQL:= lSQL + ' INNER JOIN ' + tblKZ + ' kz ON (vazGen.nizsi=kz.id) WHERE ss.Mnozstvi0) then begin First; lSQL:= ''; while not(EOF) do begin lSQL:= lSQL + CRLF + VarToStr(FieldValues(1)) + ' : ' + VarToStr(FieldValues(3)) + ' - ' + VarToStr(FieldValues(0)); lSQL:= lSQL + ' ks (skladem je ' + VarToStr(FieldValues(2)) + ' ks)'; Next; end; // Clipboard.AsText:= lSQL; Helios.Error(#1'Nelze vygenerovat výdejku, chybí některý materiál.'#1 + CRLF + 'Zpracování evidence nebude provedeno.' + CRLF + lSQL); Exit; end else begin lSQL:= 'DECLARE @obd INT,@dt DATETIME' + CRLF + 'SELECT @dt=GETDATE()'; lSQL:= lSQL + CRLF + 'EXEC @obd=dbo.hp_GetObdobiDleDatumu @dt,0,null,null,0,0' + CRLF; lSQL:= lSQL + 'EXEC dbo.hp_generujRezVyd @RadaDokladu=N' + QuotedStr('400') + ',@DruhPohybuZbo=4,@IDObdobi=@obd,@DatPorizeni=@dt'; lSQL:= lSQL + ',@SekejZakazky=0'; try Helios.ExecSQL(lSQL); with Helios.OpenSQL('SELECT id FROM #TabGenRezVyd') do if (RecordCount>0) then begin idDZ:= StrToInt(VarToStr(FieldValues(0))); idDZv:= idDZ; Helios.ExecSQL('UPDATE ' + tblDZ + ' SET StredNaklad=N' + QuotedStr('200') + ',CisloZam=' + Trim(selZamest.Text) + ' WHERE id=' + IntToStr(idDZ)); Helios.ExecSQL('EXEC dbo.hp_VypCenOZPolozek_IDDokladu @IDDoklad=' + IntToStr(idDZ) + ',@AktualizaceSlev=0'); if Length(idPrikazy)=1 then Helios.ExecSQL('UPDATE ' + tblDZ + ' SET IDPrikaz=' + IntToStr(idPrikazy[0].id) + ' WHERE id=' + IntToStr(idDZ)); Helios.ExecSQL('UPDATE ' + tblDZ + ' SET BlokovaniEditoru=null WHERE id=' + IntToStr(idDZ)); try lSQL:= 'DECLARE @chyba BIT' + CRLF + 'EXEC dbo.hp_Realizuj_Vydej ' + IntToStr(idDZ) + ',NULL,' + IntToStr(Helios.UserId); lSQL:= lSQL + ',0,@chyba OUT' + CRLF + 'SELECT @chyba'; with Helios.OpenSQL(lSQL) do if not VarIsNull(FieldValues(0)) then if LowerCase(VarToStr(FieldValues(0)))='false' then realVyd:= true; except on E:Exception do begin Helios.ExecSQL('DELETE FROM ' + tblDZDod + ' WHERE IDHlavicky=' + IntToStr(idDZ)); Helios.ExecSQL('DELETE FROM ' + tblPZ + ' WHERE iddoklad=' + IntToStr(idDZ)); Helios.ExecSQL('DELETE FROM ' + tblDZ + ' WHERE id=' + IntToStR(idDZ)); Helios.Error(#1'Nelze realizovat výdejku.'#1 + CRLF + E.Message); { idKJ:= ZapisDoKJ(Helios,'HEO','','POR','','Plugin plgLOVATO','Nelze realizovat výdejku.'); if idKJ>0 then Helios.ExecSQL('INSERT INTO ' + tblKJPozn + ' (IDKontJednani,Nazev,Poznamka) VALUES (' + IntToStr(idKJ) + ',N' + QuotedStr('Podrobnosti.unit10') + ',N' + QuotedStr(E.Message + CRLF + lSQL) + ')'); } idKJ:= 0; Exit; end; end; end; except on E:Exception do begin Helios.Error(#1'Nelze vygenerovat výdejku materiálu.'#1 + CRLF + E.Message); Exit; end; end; end; // odvedeni prikazu, tj. vytvoreni prijemky s cenou podle vydeje za material a ceny za praci // sBar.SimpleText:= 'Odvádím příkazy...'; lSQL:= 'IF OBJECT_ID(' + QuotedStr('tempdb..#TabGenPrijem') + ') IS NOT NULL DROP TABLE #TabGenPrijem' + CRLF; lSQL:= lSQL + 'CREATE TABLE #TabGenPrijem (ID int)'; Helios.ExecSQL(lSQL); idDZ:= 0; lSQL:= 'DECLARE @dt DATETIME' + CRLF + 'SELECT @dt=GETDATE()'; lSQL:= lSQL + CRLF + 'EXEC dbo.hp_OdvedeniPrikazu N' + QuotedStr(radaOdved) + ',' + IntToStr(Helios.Obdobi) + ',0,@dt,0,0'; try Helios.ExecSQL(lSQL); cont:= true; except on E:Exception do begin Helios.Error(#1'Příprava na odvedení na sklad nebyla úspěšná.'#1 + CRLF + E.Message + CRLF + lSQL); idKJ:= ZapisDoKJ(Helios,'HEO','','POR','','Plugin plgLOVATO','Nelze připravit Odvedení na sklad.'); if (idKJ>0) then Helios.ExecSQL('INSERT ' + tblKJPozn + ' (IDKontJednani,Nazev,Poznamka) VALUES (' + IntToStr(idKJ) + ',N' + QuotedStr('Podrobnosti.unit10') + ',N' + QuotedStr(E.Message + CRLF + lSQL) + ')'); idKJ:= 0; cont:= false; end; end; with Helios.OpenSQL('SELECT * FROM #TabGenPrijem') do begin if (RecordCount=1) then idDZ:= StrToInt(VarToStr(FieldValues(0))); if (RecordCount>1) then Helios.Info(#1'Pozor, vzniká více příjemek.'#1); end; if (idDZ>0) and cont then begin idDZp:= idDZ; try Helios.ExecSQL('UPDATE ' + tblDZ + ' SET CisloZam=' + Trim(selZamest.Text) + ' WHERE id=' + IntToStr(idDZp)); // Helios.ExecSQL('EXEC dbo.ep_DoplnKooperacniCenyPrijemka @idDZ=' + IntToStr(idDZp)); Helios.ExecSQL('EXEC dbo.hp_VypCenOZPolozek_IDDokladu @IDDoklad=' + IntToStr(idDZp) + ',@AktualizaceSlev=0'); Helios.ExecSQL('UPDATE ' + tblDZ + ' SET StredNaklad=N' + QuotedStr('200') + ',BlokovaniEditoru=null WHERE id=' + IntToStr(idDZp)); except on E:Exception do Helios.Error(#1'Nelze napočítat ceny příjemky z výroby.'#1 + CRLF + E.Message + CRLF + '(plgLOVATO,unit10)'); end; if (realVyd) then begin realPrij:= false; // lSQL:= 'IF EXISTS(SELECT id FROM ' + tblPravaSklad + ' WHERE Realizace=1 AND Cislo=N' + QuotedStr(sklVyr) + ' AND'; // lSQL:= lSQL + ' (LoginName=SUSER_SNAME() OR IDRole=(SELECT IdRole FROM ' + tblUziv + ' WHERE LoginName=SUSER_SNAME())))' + CRLF + ' BEGIN' + CRLF; // sBar.SimpleText:= 'Realizace příjemky...'; lSQL:= 'DECLARE @chyba BIT,@dt DATETIME' + CRLF + 'SELECT @dt=GETDATE()' + CRLF; lSQL:= lSQL + 'EXEC dbo.hp_Realizuj_Prijem ' + IntToStr(idDZp) + ',@dt,' + IntToStr(Helios.UserId) + ',@chyba OUT'; lSQL:= lSQL + CRLF + 'SELECT @chyba'; try 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 begin idKJ:= ZapisDoKJ(Helios,'HEO','','POR','','Plugin plgLOVATO','Nelze realizovat Odvod na sklad.'); if (idKJ>0) then Helios.ExecSQL('INSERT ' + tblKJPozn + ' (IDKontJednani,Nazev,Poznamka) VALUES (' + IntToStr(idKJ) + ',N' + QuotedStr('Podrobnosti.unit10') + ',N' + QuotedStr(E.Message + CRLF + lSQL) + ')'); idKJ:= 0; end; end; end; end; // prijemka if realPrij then begin // sBar.SimpleText:= 'Uzavírání příkazů...'; for idx2:=Low(idPrikazy) to High(idPrikazy) do begin idPrikaz:= idPrikazy[idx2].id; if (idPrikaz<=0) then Continue; with Helios.OpenSQL('SELECT id FROM ' + tblPrikaz + ' WHERE StavPrikazu<50 AND id=' + IntToStr(idPrikaz)) do if (RecordCount>0) then try Helios.ExecSQL('UPDATE ' + tblPrikaz + ' SET ukonceni=GETDATE(),StavPrikazu=50 WHERE id=' + IntToStr(idPrikaz)); except on E:Exception do Helios.Error(#1'Chyba: ' + E.Message + #1); end; end; end; Helios.Refresh(true); end; Helios.ExecSQL('IF OBJECT_ID(' + QuotedStr('tempdb..#TabPrKVazbyGen') + ') IS NOT NULL DROP TABLE #TabPrKVazbyGen'); Helios.ExecSQL('IF OBJECT_ID(' + QuotedStr('tempdb..#TabOdved') + ') IS NOT NULL DROP TABLE #TabOdved'); Helios.ExecSQL('IF OBJECT_ID(' + QuotedStr('tempdb..#TabGenPrijem') + ') IS NOT NULL DROP TABLE #TabGenPrijem'); Helios.ExecSQL('IF OBJECT_ID(' + QuotedStr('tempdb..#TabGenRezVyd') + ') IS NOT NULL DROP TABLE #TabGenRezVyd'); end; procedure TformOdvodRele.FormShow(Sender: TObject); begin Panel1.SendToBack; lblDilecPrikaz.BringToFront; lblKusy.BringToFront; lblZamest.BringToFront; SetLength(idPrikazy,0); odvVyr:= true; // odvod vyrobku end; procedure TformOdvodRele.selDilecPrikazExit(Sender: TObject); var idx: integer; begin selDilecPrikaz.Text:= Trim(selDilecPrikaz.Text); if (selDilecPrikaz.Text<>'') then begin if (odvVyr) then begin idKZ:= 0; lSQL:= 'SELECT kz.id FROM ' + tblKZ + ' kz INNER JOIN ' + tblSZ + ' sz ON (sz.SkupZbo=kz.SkupZbo) INNER JOIN '; lSQL:= lSQL + tblSZe + ' sze ON (sz.id=sze.id) WHERE sze._JeVyroba=1 AND kz.RegCis=N' + QuotedStr(selDilecPrikaz.Text); with Helios.OpenSQL(lSQL) do if (RecordCount=1) then begin idKZ:= StrToInt(VarToStr(FieldValues(0))); lSQL:= 'SELECT id,kusy_zive FROM ' + tblPrikaz + ' WHERE StavPrikazu<=40 AND kusy_zive>0 AND IdTabKmen=' + IntToStr(idKZ); lSQL:= lSQL + 'ORDER BY DatPorizeni DESC'; with Helios.OpenSQL(lSQL) do if (RecordCount>0) then begin SetLength(idPrikazy, RecordCount); for idx:=0 to RecordCount-1 do begin idPrikazy[idx].id:= StrToInt(VarToStr(FieldValues(0))); idPrikazy[idx].ksZive:= StrToFloat(VarToStr(FieldValues(1))); idPrikazy[idx].ks:= 0; idPrikazy[idx].idKZ:= idKZ; end; end else Helios.Error(#1'Nenalezeny žádné příkazy k odvedení tohoto výrobku.'#1); end else Helios.Error(#1'Nejednoznačná identifikace výrobku.'#1); end else begin lSQL:= 'SELECT id,kusy_zive,IdTabKmen FROM ' + tblPrikaz + ' WHERE StavPrikazu<=40 AND kusy_zive>0 AND RadaPrikaz=N' + QuotedStr(selDilecPrikaz.Text); with Helios.OpenSQL(lSQL) do if (RecordCount>0) then begin SetLength(idPrikazy, 1); idPrikazy[0].id:= StrToInt(VarToStr(FieldValues(0))); idPrikazy[0].ksZive:= StrToFloat(VarToStr(FieldValues(1))); idKZ:= StrToInt(VarToStr(FieldValues(2))); end else Helios.Error(#1'Zadaný výrobní příkaz nebyl nalezen nebo je uzavřený.'#1); end; OdvodPrikazu; end else Helios.Error(#1'Není zadáno číslo výrobku nebo příkazu.'#1); end; procedure TformOdvodRele.selDilecPrikazKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key=VK_RETURN) then edtKusy.SetFocus; end; procedure TformOdvodRele.selZamestExit(Sender: TObject); begin selZamest.Text:= Trim(selZamest.Text); if (selZamest.Text<>'') then begin if (selZamest.Text<>'0') then begin idZam:= 0; lSQL:= 'SELECT id FROM ' + tblCZam + ' WHERE Cislo=' + selZamest.Text; with Helios.OpenSQL(lSQL) do if (RecordCount>0) then idZam:= StrToInt(VarToStr(FieldValues(0))); end; end else Helios.Error(#1'Není zadáno osobní číslo zaměstnance.'#1); end; procedure TformOdvodRele.selZamestKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key=VK_RETURN) then selDilecPrikaz.SetFocus; end; procedure TformOdvodRele.btnVyrobekClick(Sender: TObject); begin odvVyr:= true; Self.Height:= 315; btnPrikaz.Enabled:= false; selZamest.SetFocus; end; procedure TformOdvodRele.btnPrikazClick(Sender: TObject); begin odvVyr:= false; Self.Height:= 315; btnVyrobek.Enabled:= false; selZamest.SetFocus; end; procedure TformOdvodRele.btnZrusClick(Sender: TObject); begin selZamest.Text:= '0'; selDilecPrikaz.Text:= ''; edtKusy.Value:= 0; Self.Height:= 90; btnVyrobek.Enabled:= true; btnPrikaz.Enabled:= true; end; procedure TformOdvodRele.edtKusyKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key=VK_RETURN) then btnOK.SetFocus; end; end.