514 lines
24 KiB
ObjectPascal
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.
|