Files
LOVATO-plugin/frmUnit15.pas
2026-04-07 18:23:56 +02:00

514 lines
24 KiB
ObjectPascal

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<TarrPrikazy>;
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.Mnozstvi<X.Soucet';
with Helios.OpenSQL(lSQL) do
if (RecordCount>0) 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.Mnozstvi<vazGen.MnozstviPoz';
lSQL:= lSQL + ' GROUP BY kz.RegCis,ss.Mnozstvi,kz.Nazev1';
with Helios.OpenSQL(lSQL) do
if (RecordCount>0) 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.